Deep Learning関係

Yoloについて

物体認識器Yoloは Darknet の一機能 Darknetの公式ページ GitHub

他にも、RNN画風変換囲碁などのサンプルあり

論文 "YOLO9000: Better, Faster, Stronger"

準備

『実装 ディープラーニング』に沿って進める

ここから

$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/darknet_test.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/darknet_train.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/extraction.conv.weights
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/projects.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/yolo.weights

$ tar xvzf projects.tar.gz
$ tar xvzf darknet_test.tar.gz -C projects/5-1/
$ tar xvzf darknet_train.tar.gz -C projects/5-1/

その他データファイルなど

$ wget https://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
$ wget https://d2j0dndfm35trm.cloudfront.net/resnet-152.t7

vgg16_weights.h5 は真面目にブラウザからダウンロード

OpenCVがまだインストールされていないならインストール

$ sudo apt-get install libopencv-dev

お試し

$ cd projects/5-1/darknet_test

Makefile を編集

OPENCV=1

cuDNN の V5 が入っているなら

CUDNN=1

今回は V4 なので、CUDNN=0 のまま

$ make
$ ln -s ../../../yolo.weights .
$ ./darknet yolo test cfg/yolo.cfg yolo.weights yolo_test_sample.jpg -thresh 0.1

犬と自転車が指摘されればOK

学習

その前にデータを準備

$ cd ../../..
$ mkdir data
$ tar xzf 101_ObjectCategories.tar.gz -C data/
$ cd projects/4-2
$ python migration_data_caltech101.py
$ cd ../5-1/darknet_train
$ cp -p ../../../data/Caltech-101/train/0/0/* ./scripts/images/airplanes/
$ cp -p ../../../data/Caltech-101/valid/0/0/* ./scripts/images/airplanes/
$ cp -p ../../../data/Caltech-101/train/0/1/* ./scripts/images/motorbikes/
$ cp -p ../../../data/Caltech-101/valid/0/1/* ./scripts/images/motorbikes/

本来はここで bboxデータを作成するが、projects/5-1/darknet_train/scripts/{airplanes,motorbikes}に既に用意されているのでスキップできる。

スキップしない場合は、BBox-Label-Tool を使うと便利 (github)

$ cd ../..
$ mkdir appendix
$ cd appendix
$ git clone https://github.com/puzzledqs/BBox-Label-Tool.git
$ cd BBox-Label-Tool
$ rm -rf Examples/001 Images/001 Labels/001
$ mkdir Examples/001 Examples/002 Labels/001 Labels/002 Images/001 Images/002

$ sudo pip install pillow
$ sudo apt-get install python-imaging-tk

main.py を修正

143:   self.imageList = glob.glob(os.path.join(self.imageDir, '*.jpg'))

152:   filelist = glob.glob(os.path.join(self.egDir, '*.jpg'))
$ python main.py

Image Dir欄に"001"を入力し、loadボタンを押す。被写体の左上と右下をクリック。 という作業の繰り返し。"001"が終わったら"002"についても実行。

それが終わったら

$ cp -p Images/001/* ../../5-1/darknet_train/scripts/images/airplanes/
$ cp -p Images/002/* ../../5-1/darknet_train/scripts/images/motorbikes/
$ cp -p Labels/001/* ../../5-1/darknet_train/scripts/labels/airplanes_in/
$ cp -p Labels/002/* ../../5-1/darknet_train/scripts/labels/motorbikes_in/

$ cd ../../5-1/darknet_train/scripts/
$ python convert.py
$ cat *_list.txt > train.txt
$ cd ..

ところで、BBox-Label-Tool が作成した label データ(Labels/001/*.txt)のフォーマットは

1
<xmin> <ymin> <xmax> <ymax>

convert.py 実行後の projects/5-1/darknet_train/script/labels/{airplanes,motorbikes}/*.txt のフォーマットは

0 <bbox中心のx座標> <bbox中心のy座標> <bboxの幅> <bboxの高さ>

後ろの4つのデータは、0から1の範囲に正規化

尚、*.txt は元画像ファイル*.jpgと拡張子を除いて同じ。また、画像ファイル名に特に制限はなさそう。拡張子には注意。

やっと学習

$ cd darknet_train/scripts
$ python convert.py
$ cat *_list.txt > train.txt
$ cd ..

Makefile を修正

OPENCV=1
$ make clean
$ make
$ ln -s ../../../extraction.conv.weights .
$ ./darknet yolo train cfg/yolo.train.cfg extraction.conv.weights

2時間45分で終了。結果は scripts/backup/yolo_final.weights

これは、extraction.conv.weights を初期値に用いた fine-tuning

推測

$ ./darknet yolo test cfg/yolo.train.cfg scripts/backup/yolo_final.weights airplane_sample.jpg -thresh 0.1
$ ./darknet yolo test cfg/yolo.train.cfg scripts/backup/yolo_final.weights motorbike_sample.jpg -thresh 0.1
$ ./darknet yolo test cfg/yolo.train.cfg scripts/backup/yolo_final.weights cat_sample.jpg -thresh 0.1

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-02-23 (木) 17:38:49 (92d)