「TensorFlowで趣味の画像収集サーバーを作る9月特大号」 TensorFlowによる認識処理の高速化と新データセットでの訓練・評価検証
C-LIS CO., LTD.
View Slide
5FOTPS'MPXͰझຯͷը૾ऩूαʔόʔΛ࡞Δ݄̕ಛେ߸
C-LIS CO., LTD.༗ࢁܓೋʢ,FJKJ"3*:"."ʣC-LIS CO., LTD.AndroidΞϓϦ։ൃऀػցֶशॳ৺ऀͬͯ·ͤΜ1IPUP,PKJ.03*(6$)* "6/$3&"5*7&'*3.
લճ·Ͱͷ͓
IUUQTUFDICPPLGFTUPSH"
C-LIS CO., LTD.IUUQBN[OUPC,3N
C-LIS CO., LTD..FHBOF /PU
Έͷ؟ڸ່ͬը૾ΛࣗಈͰऩू͍ͨ͠
C-LIS CO., LTD.Ϟσϧ7((/FUΛࢀߟʹΈࠐΈͷ࿈ଓΛ༻͍ͨ$//ʢ$POWPMVUJPOBM/FVSBM/FUXPSLʣϞσϧDPOYYDPOYY GDQPPMYDPOYYDPOYYQPPMY GDGD PVUQVU
C-LIS CO., LTD.%BUB"VHNFOUBUJPOը૾Λ ʜ·ͰɺͦΕͧΕճసͨ͠ը૾Λ࡞ಡΈࠐΈ࣌ͷॲཧ 3BOEPN$SPQʢQYதɺQYྖҬΛ͘Γൈ͘ʣ 3BOEPN'MJQʢԣ࣠ํʹసʣ 3BOEPN6Q%PXOʢॎ࣠ํʹసʣ 3BOEPN#SJHIUOFTT 3BOEPN$POUSBTU
C-LIS CO., LTD.܇࿅ֶशΞϧΰϦζϜ"EBNֶशϛχόον
C-LIS CO., LTD.ݕূσʔληοτ͔ΒΛςετ༻ͱͯ͠ਖ਼ʙ
Πϥετإݕग़ثʢ'BDF%FUFDUPSʣ
C-LIS CO., LTD.Πϥετإσʔληοτ؟ڸ່ͬͱͦ͏Ͱͳ͍ͷɻ߹Θͤͯ ຕΛ ਖ਼ྫʢʹإʣͱ͢Δʢ͏ͪςετσʔλຕʣෛྫɺطଘͷը૾ΛࡉΕʹͯ͠ɺإ͕ͳ͍෦ ຕΛෛྫͱ͢Δʢ͏ͪςετσʔλຕʣ
C-LIS CO., LTD.Πϥετσʔληοτਖ਼ྫ ෛྫ ߹ܭ܇࿅σʔλ 1,600 3,200 4,800ςετσʔλ 400 800 1,200߹ܭ 2,000 4,005 6,000
C-LIS CO., LTD.Ϟσϧ$*'"3νϡʔτϦΞϧͷϞσϧΛࢀߟʹ υϩοϓΞτʢˋʣΛՃͨ͠$//ʢ$POWPMVUJPOBM/FVSBM/FUXPSLʣDPOYY GDQPPMYDPOYYGDPVUQVUMSO MSOQPPMY
C-LIS CO., LTD.%BUB"VHNFOUBUJPOը૾Yʹॖখը૾Λ ʜɺͦΕͧΕճసͨ͠ը૾Λ࡞ಡΈࠐΈ࣌ͷॲཧ 3BOEPN$SPQʢQYதɺQYྖҬͰ͘Γൈ͘ʣ 3BOEPN'MJQʢԣ࣠ํʹసʣ 3BOEPN6Q%PXOʢॎ࣠ํʹసʣ 3BOEPN#SJHIUOFTT 3BOEPN$POUSBTU
C-LIS CO., LTD.܇࿅ϛχόονɺສεςοϓͷ܇࿅Ͱ ϩε͕·ͰԼςετσʔλͰͷਖ਼ղ
إݕग़
C-LIS CO., LTD.إͲ͜ʹ͋Δʁ
C-LIS CO., LTD.4FMFDUJWF4FBSDI35$PSQPSBUJPOͷʮ༲͛ϩϘοτʯ5FOTPS'MPXษڧձʢ̐ʣ݄ͰൃදIUUQXXXTMJEFTIBSFOFU:VLJ/BLBHBXBUFOTPSqPXSFW
C-LIS CO., LTD.4FMFDUJWF4FBSDI"MQBDBࣾʹΑΔ࣮ IUUQCMPHKQBMQBDBBJFOUSZEMJCͷ࣮ IUUQTHJUIVCDPNEBWJTLJOHEMJCCMPCNBTUFS[email protected]@[email protected]@MPDBUJPOTQZ
C-LIS CO., LTD.લճͷ՝ݕग़࣌ؒͷॖೝࣝਫ਼ͷ্
ݕग़࣌ؒͷॖ
C-LIS CO., LTD.إݕग़ͷखॱީิྖҬͷΓग़͠SelectiveSearch
C-LIS CO., LTD.إݕग़ͷखॱإೝࣝTensorFlowީิྖҬͷΓग़͠SelectiveSearchOݸͷީิྖҬ
C-LIS CO., LTD.άϥϑͱηογϣϯΛҙࣝ͢ΔީิྖҬͷΓग़͠SelectiveSearchإೝࣝTensorFlowάϥϑͷ࡞ηογϣϯͷ։࢝tf.Session()άϥϑͷ࣮ߦrunOݸͷީิྖҬը૾σʔλʴը૾σʔλ
C-LIS CO., LTD.إೝࣝTensorFlowάϥϑͱηογϣϯΛҙࣝ͢Δάϥϑͷ࡞ηογϣϯͷ։࢝tf.Session()άϥϑͷ࣮ߦrunάϥϑ ϦηοτOݸͷྖҬΛͯ͢ධՁOݸͷީิྖҬը૾σʔλʴ
C-LIS CO., LTD.࠷దͳྖҬΛ୳ࡧʢ3FHSFTTJPOʣ
C-LIS CO., LTD.إೝࣝTensorFlowຖճάϥϑΛ࡞ɾηογϣϯΛ։࢝άϥϑͷ࡞ ηογϣϯͷ։࢝άϥϑͷ࣮ߦrunάϥϑ ϦηοτOݸͷྖҬΛͯ͢ධՁOݸͷީิྖҬը૾σʔλʴ
class FaceDetector(object): image_path = None original_image = None graph = None sess = None queue = None top_k_indices = None top_k_values = None region_batch = None coord = None configuration = None def __init__(self, image_path, batch_size, train_dir): self.image_path = image_path self.original_image = Image.open(image_path) self.original_image = self.original_image.convert('RGB') checkpoint = tf.train.get_checkpoint_state(train_dir) if not (checkpoint and checkpoint.model_checkpoint_path): print('νΣοΫϙΠϯτϑΝΠϧ͕ݟ͔ͭΓ·ͤΜ') return self.graph, self.queue, self.top_k_indices, self.top_k_values, self.region_batch = \ self._init_graph(self.original_image, batch_size) with self.graph.as_default() as g: self.sess = tf.Session() saver = tf.train.Saver() saver.restore(self.sess, checkpoint.model_checkpoint_path) self.coord = tf.train.Coordinator()
def _init_graph(self, image, batch_size): reshaped_image = np.array(image.getdata()).reshape(image.height, image.width, 3).astype( np.float32) graph = tf.Graph() with graph.as_default() as g: queue = tf.FIFOQueue(3000, tf.int32, shapes=[4]) region = queue.dequeue() whitten_image = self._load_image(reshaped_image, region) image_batch, region_batch = tf.train.batch( [whitten_image, region], batch_size=batch_size, capacity=10000) logits = tf.nn.softmax(model.inference(image_batch, tf.constant(1.0), batch_size)) top_k_values, top_k_indices = tf.nn.top_k(logits, 2, sorted=True) return graph, queue, top_k_indices, top_k_values, region_batch
def _eval(self, region_list, batch_size): result = [] with graph.as_default() as g: threads = tf.train.start_queue_runners(sess=sess, coord=coord) step = 0 try: # όοναΠζʹ߹ΘͤͯΛௐ while len(region_list) < batch_size or len(region_list) % batch_size != 0: add = region_list[0:(batch_size - (len(region_list) % batch_size))] region_list = region_list + add region_list = np.array(region_list) enqueue = queue.enqueue_many(region_list) sess.run(enqueue) num_iter = int(math.ceil(len(region_list) / batch_size)) while step < num_iter and not coord.should_stop(): # ҎԼུ
C-LIS CO., LTD.إೝࣝTensorFlowީิྖҬͷΈ༩͑Δάϥϑͷ࡞ ηογϣϯͷ։࢝άϥϑͷ࣮ߦrunάϥϑ ϦηοτOݸͷྖҬΛͯ͢ධՁը૾σʔλOݸͷީิྖҬ
ೝࣝਫ਼ͷ্σʔληοτͷ֦ॆ
C-LIS CO., LTD.5XJUUFS"1*ಛఆͷϢʔβʔͷλΠϜϥΠϯʹߘ͞ΕͨϝσΟΞʢը૾ʣΛμϯϩʔυϋογϡΛܭࢉͯ͠ॏෳը૾ΛϑΟϧλϦϯά ʢαΠζҧ͍ͳͲͷྨࣅը૾ফ͖͠Εͳ͍ʣ
C-LIS CO., LTD.Πϥετإσʔλऩूʹ ࠷దͳΞΧϯτ[email protected][email protected]
C-LIS CO., LTD.࿐ࠎʹੑతͳը૾ɺ΄΅ଘࡏ͠ͳ͍πΠʔτʹඞͣը૾͕ఴ͞Ε͍ͯΔը૾ʹਓҎ্ͷঁͷࢠͷإؚ͕·Ε͍ͯΔ
5XJUUFS͔Βऔಘͨ͠ϑΝΠϧ ݕग़ͨ͠إྖҬͷɹɹɹɹɹɹɹɹ
C-LIS CO., LTD.{"detected_faces": {"mode": "selective_search","regions": [{"label": 1,"rect": {"left": 212.0,"bottom": 654.0,"top": 94.0,"right": 483.0},"probability": 0.9994481205940247}]},"created_at": "2016-09-28T03:37:16.223942","file_name": "kage_maturi-CAARxE8UwAEzAjJ.jpg","generator": "Megane Co"}݁ՌΛ+40/Ͱॻ͖ग़͠
C-LIS CO., LTD.3FHJPO$SPQQFS+BWB'9,PUMJO[email protected]
%FNP
C-LIS CO., LTD.3FHJPO$SPQQFS/FXGFBUVSFɾબதͷྖҬΛϑΥʔΧεɾ6OEPɾTFUUJOHTKTPOʹΑΔઃఆ ɹϥϕϧ͝ͱͷઢ৭ ɹฤूɺআͷՄ൱[email protected]
C-LIS CO., LTD.ݕग़ͨ͠إྖҬͷʢॏෳΛআʣɹɹɹɹɹɹɹɹ إʢਖ਼ྫʣ ޡݕग़ʢෛྫʣ
C-LIS CO., LTD.৽σʔληοτਖ਼ྫ ෛྫ ߹ܭ܇࿅σʔλ 10,453 10,792 21,245ςετσʔλ 2,619 2,703 5,322߹ܭ 13,072 13,495 26,567
C-LIS CO., LTD.৽σʔληοτʹΑΔ܇࿅ϛχόονɺສεςοϓͷ܇࿅Ͱ ϩε͕·ͰԼςετσʔλʹΑΔݕূͰͷਖ਼ղ
C-LIS CO., LTD.چσʔληοτਖ਼ྫ ෛྫ ߹ܭ܇࿅σʔλ 1,600 3,200 4,800ςετσʔλ 400 800 1,200߹ܭ 2,000 4,005 6,000
C-LIS CO., LTD.چσʔληοτͷ܇࿅ϛχόονɺສεςοϓͷ܇࿅Ͱ ϩε͕·ͰԼςετσʔλͰͷݕূͰͷਖ਼ղ
C-LIS CO., LTD.৽Ϟσϧੑೳ͕ѱ͍ʁچςετσʔλ چϞσϧ ৽ςετσʔλ ৽Ϟσϧ
C-LIS CO., LTD.৽چͷςετσʔλΛަچϞσϧ৽ςετσʔλچςετσʔλ৽Ϟσϧ
C-LIS CO., LTD.৽چͷςετσʔλΛݕূچϞσϧ৽ςετσʔλچςετσʔλ৽Ϟσϧ چςετσʔλ چϞσϧ ৽ςετσʔλ ৽Ϟσϧ
C-LIS CO., LTD.إೝࣝʹࣦഊͨ͠σʔλΛݕূ ʢچςετσʔλʣ [email protected] GBDF
C-LIS CO., LTD.إೝࣝʹࣦഊͨ͠σʔλΛݕূ ʢ৽ςετσʔλʣ OPU[email protected] GBDF
࣍ճ༧ࠂ
C-LIS CO., LTD.σʔλͷΫϨϯδϯάʹΑΔೝࣝਫ਼ͷมԽΛݟΔݕग़Λ͞Βʹվળ͢Δ࣍ճ༧ࠂIUUQTXXXTBLVSBBEKQLPVLBSZPLV
C-LIS CO., LTD.C-LIS CO., LTD.ຊࢿྉɺ༗ݶձࣾγʔϦεͷஶ࡞Ͱ͢ɻܝࡌ͞Ε͍ͯΔΠϥετʹݸผʹஶ࡞ݖ͕͋Γ·͢ɻຊࢿྉͷશ෦ɺ·ͨҰ෦ʹ͍ͭͯɺஶ࡞ऀ͔ΒจॻʹΑΔڐΛಘͣʹෳ͢Δ͜ͱې͡ΒΕ͍ͯ·͢ɻ໊֤ɾϒϥϯυ໊ɺձ໊ࣾͳͲɺҰൠʹ֤ࣾͷඪ·ͨొඪͰ͢ɻຊࢿྉதͰɺɺɺäΛׂѪ͍ͯ͠·͢ɻ