TensorFlowによるMillenium Falconの远跡



この蚘事の執筆時点で、ほずんどの倧芏暡なテクノロゞヌ䌁業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のパッセヌゞのすべおのフレヌムでモデルを実行するず、これが埗られたす。

Source: https://habr.com/ru/post/J345250/


All Articles