
ãã®èšäºã®å·çæç¹ã§ãã»ãšãã©ã®å€§èŠæš¡ãªãã¯ãããžãŒäŒæ¥ïŒIBMãGoogleãMicrosoftãAmazonãªã©ïŒã¯ã䜿ããããèŠèŠèªèAPIãæäŸããŠããŸãã åæ§ã®ããŒã«ã¯ãã¯ã©ãªãã¡ã€ãªã©ã®å°èŠæš¡äŒæ¥ã«ãã£ãŠæäŸãããŠããŸãã ãã ãããããããªããžã§ã¯ããæ€åºããæ©èœãæäŸããŸããïŒãªããžã§ã¯ãæ€åºïŒã

äž¡æ¹ã®ç»åã¯ãæšæºã®
Watson Visual Recognitionåé¡åšã䜿çšããã¿ã°ä»ãã®äŸã瀺ããŠããŸãã æåã®ç»åã®ã¿ãæåã«ãªããžã§ã¯ãæ€åºã¢ãã«ãééããŸããã

ãªããžã§ã¯ãæ€åºã¯ããåçŽãªãèŠèŠèªèã倧å¹
ã«äžåãããšãã§ããŸãã ãã ãããªããžã§ã¯ãæ€åºãå®è£
ããå Žåã¯ãäžçæžåœåãå¿
èŠããããŸãã
ç¶æ³ã«ãã£ãŠã¯ãã«ã¹ã¿ã ãªããžã§ã¯ãæ€åºã¢ãã«ãäžèŠãªå ŽåããããŸãã 察å¿ãã
TensorFlow APIã¯ã
COCOããŒã¿ã»ããã«åºã¥ããŠããã©ãŒãã³ã¹ãšç²ŸåºŠãç°ãªãè€æ°ã®ã¢ãã«ãæäŸããŸãã
䟿å®äžãCOCOã¢ãã«ãæ€åºã§ãããªããžã§ã¯ãã®å®å
šãªãªã¹ãããŸãšããŸããã

ãªã¹ãã«ãªãããŽãªã©ãæ€åºããå Žåã¯ãç¬èªã®ã«ã¹ã¿ã æ€åºåšãäœæããå¿
èŠããããŸãã ç§ã¯ããã·ã³ããã³ã»ãœãã®ãã¬ãã¢ã ã»ãã¡ã«ã³ã³è¹ãšã¿ã€ãã¡ã€ã¿ãŒã®åžåœæŠéæ©ãæ€åºããããšãæãã§ããŸããã æããã«ãããã¯éåžžã«éèŠãªã¿ã¹ã¯ã§ãã人çã§ãã€åœ¹ã«ç«ã€ãããããªãããã§ã...
ç»åã«æ³šéãä»ãã
ã¢ãã«ã®ãã¬ãŒãã³ã°ã¯æéã®ãããã¿ã¹ã¯ã§ãã ããªãã¯ããããèããŸããïŒããããç§ã¯ããã«éªšã眮ããããªãïŒã ãããããªããå®æããã¢ãã«ã®äœ¿çšã«é¢ãã
ç§ã®èšäºãèªãããšãã§ããŸãã ãã®æ¹æ³ã¯ã¯ããã«ç°¡åã§ãã
å€ãã®ç»åãåéããŠæ³šéãä»ããå¿
èŠããããŸãã ãããã«ã¯ããªããžã§ã¯ãã®åº§æšã®æ±ºå®ãšå¯Ÿå¿ããæå®ãå«ãŸããŸãã Tie Fighterã¢ãããŒã·ã§ã³ã2ã€ããç»åã®å Žåã次ã®ããã«ãªããŸãã
<annotation> <folder>images</folder> <filename>image1.jpg</filename> <size> <width>1000</width> <height>563</height> </size> <segmented>0</segmented> <object> <name>Tie Fighter</name> <bndbox> <xmin>112</xmin> <ymin>281</ymin> <xmax>122</xmax> <ymax>291</ymax> </bndbox> </object> <object> <name>Tie Fighter</name> <bndbox> <xmin>87</xmin> <ymin>260</ymin> <xmax>95</xmax> <ymax>268</ymax> </bndbox> </object> </annotation>
ã¹ã¿ãŒãŠã©ãŒãºã§åäœããã¢ãã«ã®å Žåã308åã®ç»åãåéããŸãããåç»åã«ã¯2ã3åã®ãªããžã§ã¯ããå«ãŸããŠããŸãã å°ãªããšã200ã300åã®åãªããžã§ã¯ãã®äŸãåéããããšããå§ãããŸãã
æ°çŸã®ç»åãã·ã£ãã«ã§åã£ãŠããã¹ãŠã®äººã®ããã«å€§éã®XMLãäœæããå¿
èŠããããšæããŸãããïŒ
ãã¡ããéããŸãïŒ
labelImgã
RectLabelãªã©ã泚éãä»ããããã®å€ãã®ããŒã«ããããŸãã
RectLabelã䜿çšã
ãŸããã ãmacOSå°çšã§ãã ããŒã«ã¯æ±ããããªããã°ãªããŸããããç§ãä¿¡ããŠãã ããã ããŒã¿ã»ããå
šäœã«æ³šéãä»ããã«ã¯ã3ã4æéã®ç¶ç¶çãªäœæ¥ãå¿
èŠã§ããã
ãéãããã°ã圌ã¯ãã®ããã«èª°ããéãããšãã§ããŸãã ãŸãã¯ã
Mechanical Turkã®ãããªãã®ã䜿çšããŸãã ããªããç§ã®ãããªè²§ããåŠçã§ããããããŠ/ãŸãã¯äœæéãã®å調ãªä»äºã奜ããªããããªãã¯èªåã§æ³šéãä»ããããšãã§ããŸãã
å€æã¹ã¯ãªãããèšè¿°ããããªãå Žåã¯ã泚éãèšè¿°ãããšãã«ãPASCAL VOC圢åŒã§ãšã¯ã¹ããŒããããŠããããšã確èªããŠãã ããã ç§ãå«ããå€ãã®äººãããã䜿çšããŠããã®ã§ãäžèšã®ã¹ã¯ãªãããåããããšãã§ããŸãïŒç§èªèº«ã¯èª°ãããåããŸããïŒã
ã¹ã¯ãªãããå®è¡ããåã«ãTensorFlowãåŠçããããã®ããŒã¿ãæºåããå¿
èŠããããŸãã
ãªããžããªã®ã¯ããŒãã³ã°
æåã«ãªããžããªãè€è£œããŸã ã ãã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
models |-- annotations | |-- label_map.pbtxt | |-- trainval.txt | `-- xmls | |-- 1.xml | |-- 2.xml | |-- 3.xml | `-- ... |-- images | |-- 1.jpg | |-- 2.jpg | |-- 3.jpg | `-- ... |-- object_detection | `-- ... `-- ...
ããã«ãã¬ãŒãã³ã°ããŒã¿ãå«ããã®ã§ãããã«ãã¹ãŠãå®è¡ã§ããŸãã ãã ããããŒã¿ã䜿çšããŠã¢ãã«ãäœæããå Žåã¯ããã¬ãŒãã³ã°ç»åãç»åã«è¿œå ããXML泚éã泚é/ xmlã«è¿œå ããå¿
èŠããããtrainval.txtãšlabel_map.pbtxtãæŽæ°ããå¿
èŠããããŸãã
trainval.txtã¯ãJPGãã¡ã€ã«ãšXMLãã¡ã€ã«ãæ€çŽ¢ããŠé¢é£ä»ããããšãã§ãããã¡ã€ã«ã®ãªã¹ãã§ãã 以äžã¯trainval.txtãªã¹ãã®å
容ã§ãabc.jpgãabc.xmlã123.jpgã123.xmlãxyz.jpgãxyz.xmlãæ€çŽ¢ã§ããŸãã
abc 123 xyz
泚ïŒæ¡åŒµåãé€ããŠã.jpgãã¡ã€ã«ãš.xmlãã¡ã€ã«ã®ååãåãã§ããããšã確èªããŠãã ããã
label_map.pbtxt-æ€åºãããªããžã§ã¯ãã®ãªã¹ãã 次ã®ããã«ãªããŸãã
item { id: 1 name: 'Millennium Falcon' } item { id: 2 name: 'Tie Fighter' }
ã¹ã¯ãªããå®è¡Pythonãšpipãã€ã³ã¹ããŒã«ããŠãããã¹ã¯ãªããèŠä»¶ãã€ã³ã¹ããŒã«ããŸãã
pip install -r requirements.txt
models
ãš
models/slim
ã
PYTHONPATH
è¿œå ã
models
ã
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
éèŠ ïŒãã®ã³ãã³ãã¯ãã¿ãŒããã«ãèµ·åãããã³ã«å®è¡ããå¿
èŠããããŸãã ãŸãã¯ã
~/.bashrc
è¿œå ã
~/.bashrc
ã
ã¹ã¯ãªãããå®è¡ããŸãã
python object_detection/create_tf_record.py
äœæ¥ãçµäºãããšãtrain.recordããã³val.recordãã¡ã€ã«ãäœæãããŸãã ãããã䜿çšããŠã¢ãã«ããã¬ãŒãã³ã°ããŸãã
åºæ¬ã¢ãã«ãããŠã³ããŒããã
è€æ°ã®ãããªã«ãŒãã䜿çšããŠããå Žåã§ãããªããžã§ã¯ãæ€åºåšããŒãããåŠç¿ããã«ã¯æ°æ¥ãããå Žåããã
ãŸã ã ããã»ã¹ãé«éåããããã«ãå¥ã®ããŒã¿ã»ããã§æ¢ã«ãã¬ãŒãã³ã°ãããæ€åºåšã䜿çšãããã®ãã©ã¡ãŒã¿ãŒã®äžéšã䜿çšããŠæ°ããã¢ãã«ãåæåããŸãã
ããããã¢ãã«ãããŠã³ããŒãã§ããŸãã ããã§ã¯ããã¹ãŠã®ã¢ãã«ã®ç²ŸåºŠãšé床ãç°ãªããŸãã
faster_rcnn_resnet101_coco
ã䜿çšã
faster_rcnn_resnet101_coco
ã
ãã¹ãŠã®model.ckptãã¡ã€ã«ãæœåºãããªããžããªã®ã«ãŒããã£ã¬ã¯ããªã«è»¢éããŸãã
faster_rcnn_resnet101.configãã¡ã€ã«ãå¿
èŠã§ãã ãããã¯ã
faster_rcnn_resnet101_coco
ã¢ãã«ãæäœããããã®èšå®ã§ãã å¥ã®ã¢ãã«ã䜿çšããå Žåã¯ã察å¿ããæ§æãã¡ã€ã«ã
ããã§èŠã€ããããšãã§ããŸãã
æãããã
ã¹ã¯ãªãããå®è¡ãããšããã¬ãŒãã³ã°ãéå§ãããŸãïŒ
python object_detection/train.py \ --logtostderr \ --train_dir=train \ --pipeline_config_path=faster_rcnn_resnet101.config
æ³šïŒ pipeline_config_path
ãæ§æãã¡ã€ã«ãžã®ãã¹ã«çœ®ãæããŸãã
global step 1: global step 2: global step 3: global step 4: ...
ãã£ãïŒ ããŸãããïŒ
10ååŸã
global step 41: global step 42: global step 43: global step 44: ...
ã³ã³ãã¥ãŒã¿ãŒã¯å«ç
ãéå§ããŸãã
global step 71: global step 72: global step 73: global step 74: ...
ããã¯ãã€ãŸã§ç¶ããŸããïŒ
ããããŒGIFã§äœ¿çšããã¢ãã«ã¯ãçŽ22,000ãµã€ã¯ã«ã§ããã
ãªã«ïŒ
MacBook Proã䜿çšããŸããã ãã®ã¢ãã«ãåæ§ã®ãã·ã³ã§å®è¡ããå Žåãåãµã€ã¯ã«ã«ã¯çŽ15ç§ããããšæ³å®ããŠããŸãã ãã®ãããªããŒã¹ã§ãé©åãªã¢ãã«ãååŸããã«ã¯ã3ã4æ¥éã®ç¶ç¶çãªäœæ¥ãå¿
èŠã§ãã
ãã«ã ããããªã«æéããªã
PowerAIãå©ãã«ãªããŸãïŒ
ãã¯ãŒã¢ã€
PowerAIã䜿çšãããšãP100 GPUãæèŒããIBM Power Systemsã§ã¢ãã«ããã¬ãŒãã³ã°ã§ããŸãã
1æéãã10,000ãµã€ã¯ã«ããããŸããã ãããŠãããã¯ãã£ã1ã€ã®GPUã§ããã PowerAIã®çã®åã¯ã95ããŒã»ã³ãã®å¹çã§äœçŸãã®GPUã䜿çšããŠåæ£åŠç¿ãæäŸã§ããããšã«ãããŸãã
PowerAIã®ãããã§ãIBMã¯æè¿ã7æéã§33.8ïŒ
ã®ç²ŸåºŠã§ç»åèªèã®ãã¬ãŒãã³ã°ã®æ°èšé²ãæš¹ç«ããŸããã 以åã®èšé²ã¯ãã€ã¯ããœããã®ãã®ã§ãã-10æ¥éã§29.9ïŒ
ã®ç²ŸåºŠã
ãšãŠãéãïŒ
ç§ã¯äœçŸäžãã®ç»åãèšç·ŽããŠããªãã®ã§ããã®ãããªãªãœãŒã¹ã¯çµ¶å¯Ÿã«å¿
èŠãããŸããã 1ã€ã®ããã»ããµã§ååã§ãã
Nimbixã¢ã«ãŠã³ãã®äœæ
Nimbixã¯ãéçºè
ã«PowerAIãã©ãããã©ãŒã ã§ã®10æéã®ç¡æäœæ¥ã®è©Šçšã¢ã«ãŠã³ããæäŸããŸãã
ããã§ç»é²ã§ã
ãŸã ã
泚ïŒç»é²ã¯èªåã§ã¯ãªããããæ¿èªã«ã¯æ倧24æéãããå ŽåããããŸãã
ç»é²ãæ¿èªããããšãã¢ã«ãŠã³ãã®ç¢ºèªãšäœæã®æé ãèšèŒãããã¡ãŒã«ãå±ããŸãã ããã¢ãŒã·ã§ã³ã³ãŒãã®å
¥åãæ±ããããŸããããã£ãŒã«ãã¯ç©ºçœã®ãŸãŸã«ããŸãã
ããã§ãã°ã€ã³ã§ããŸãã
PowerAIããŒãããã¯ã®å±é
PowerAIããŒãããã¯ãæ€çŽ¢ããŸãã

çµæãã¯ãªãã¯ããŠãTensorFlowãéžæããŸãã

ãã·ã³ã¿ã€ã32ã¹ã¬ããPOWER8ã128GB RAMã1 x P100 GPU w / NVLinkïŒnp8g1ïŒãéžæããŸãã

äžã®å³ã®ããã«ãããã«ã衚瀺ãããŸãã ãµãŒããŒã®ã¹ããŒã¿ã¹ãåŠçäžã«ãªããšããµãŒããŒã«ã¢ã¯ã»ã¹ã§ããŸãã
ïŒã¯ãªãã¯ããŠè¡šç€ºïŒãã¯ãªãã¯ããŠãã¹ã¯ãŒããååŸããŸãã
次ã«ããããã¯ãªãã¯ããŠæ¥ç¶ããããŒãããã¯ãèµ·åããŸãã

åånimbixãšåä¿¡ãããã¹ã¯ãŒãã§ãã°ã€ã³ããŸãã

ãã¬ãŒãã³ã°ãéå§
[æ°èŠ]ãããã¢ããã¡ãã¥ãŒãã¯ãªãã¯ãã[ã¿ãŒããã«]ãéžæããŠãæ°ããã¿ãŒããã«ãŠã£ã³ããŠãéããŸãã

ããªãã¿ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«äŒããŸãïŒ
泚ïŒç«¯æ«ã¯Safariã§åäœããªãå ŽåããããŸãã
åŠç¿ããã»ã¹ã¯ãããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒãšåãæ¹æ³ã§éå§ãããŸãã ãã¬ãŒãã³ã°ããŒã¿ã䜿çšããå Žåã¯ã次ã®ã³ãã³ãã䜿çšããŠãªããžããªãè€è£œããŸãã
git clone
github.com/bourdakos1/Custom-Object-Detection.gitãŸãã¯ããªããžããªãè€è£œããŸãã 次ã«ãã«ãŒããã£ã¬ã¯ããªå
ã§cdãå®è¡ããŸãã
cd Custom-Object-Detection
以åã«ããŠã³ããŒãããäºååŠç¿æžã¿ã®faster_rcnn_resnet101_cocoã¢ãã«ãããŠã³ããŒããã以äžã®ã³ãŒããå®è¡ããŸãã
wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz mv faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.*
次ã«ãæ°ããã¿ãŒããã«ãããã®ã§ãPYTHONPATHãå床æŽæ°ããŸãã
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
ããã§ããã¬ãŒãã³ã°èµ·åã³ãã³ããå®è¡ã§ããŸãã
python object_detection/train.py \ --logtostderr \ --train_dir=train \ --pipeline_config_path=faster_rcnn_resnet101.config
ã¢ãã«ãããŠã³ããŒããã
ã¢ãã«ã®æºåã¯ãã€ã§ããïŒ ãã¬ãŒãã³ã°ããŒã¿ã«äŸåããŸãã ããããå€ãã»ã©ãé転ããå¿
èŠã®ãããµã€ã¯ã«ãå€ããªããŸãã ç§ã¯çŽ4500ãµã€ã¯ã«åŸã«ããªãè³¢æãªã¢ãã«ãåŸãŸââããã ãããŠãçŽ20,000ãµã€ã¯ã«ã§ããŒã¯ã«éããŸããã äžè¬ã«ã200,000ãµã€ã¯ã«ãé転ããŸããããã¢ãã«ã¯ãã以äžè¯ããªããŸããã§ããã
5000ãµã€ã¯ã«ããšã«ã¢ãã«ãããŠã³ããŒãããããã©ãŒãã³ã¹ãè©äŸ¡ããŠæ£ããæ¹åã«é²ãã§ãããã©ããã確èªããããšããå§ãããŸãã å·Šäžé
ã®JupyterããŽãã¯ãªãã¯ãããã¡ã€ã«ããªãŒãä»ããŠCustom-Object-Detection / trainã«ç§»åããŸãã
ååãæã倧ãããã¹ãŠã®model.ckptãã¡ã€ã«ãããŠã³ããŒãããŸãã
â¢model.ckpt-STEP_NUMBER.data-00000-of-00001
â¢model.ckpt-STEP_NUMBER.index
â¢model.ckpt-STEP_NUMBER.meta
泚ïŒäžåºŠã«ããŠã³ããŒãã§ãããã¡ã€ã«ã¯1ã€ã ãã§ãã
泚ïŒãã¬ãŒãã³ã°ãå®äºããåŸãèµ€ããã¿ã³ãã¯ãªãã¯ããŠãã ãããããããªããšãæèšãæ°žé ã«ç¶ããŸãã
çµæã°ã©ãã®ãšã¯ã¹ããŒã
ã³ãŒãã§ã¢ãã«ã䜿çšããã«ã¯ããã§ãã¯ãã€ã³ããã¡ã€ã«ïŒmodel.ckpt-STEP_NUMBERã*ïŒãåºå®çµæã°ã©ãïŒ
æšè«ã°ã©ã ïŒã«å€æããå¿
èŠããããŸãã
ããŠã³ããŒããããã§ãã¯ãã€ã³ããã¡ã€ã«ããªããžããªã®ã«ãŒããã©ã«ããŒã«è»¢éããŸãã
次ã«ã次ã®ã³ãã³ããå®è¡ããŸãã
python object_detection/export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path faster_rcnn_resnet101.config \ --trained_checkpoint_prefix model.ckpt-STEP_NUMBER \ --output_directory output_inference_graph
PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
ããšã¯ã¹ããŒããã
PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
å¿ããªãã§ãã ããã
æ°ãããã£ã¬ã¯ããª
output_inference_graph
ããã¡ã€ã«
frozen_inference_graph.pb
ãšãšãã«è¡šç€ºãããŸãã 圌ãå¿
èŠã§ãã
ã¢ãã«ãã¹ã
次ã®ã³ãã³ããå®è¡ããŸãã
python object_detection/object_detection_runner.py
output_inference_graph / frozen_inference_graph.pbã«ãããªããžã§ã¯ãæ€åºã¢ãã«ãtest_imagesãã£ã¬ã¯ããªå
ã®ãã¹ãŠã®ç»åã«é©çšããçµæãoutput / test_imagesãã£ã¬ã¯ããªã«æžã蟌ã¿ãŸãã
çµæ
Star WarsïŒThe Force Awakensã®ããã»ãŒãžã®ãã¹ãŠã®ãã¬ãŒã ã§ã¢ãã«ãå®è¡ãããšããããåŸãããŸãã