【YOLOv3】オリジナルの学習済みモデルを作成する
OverView
画像から手の位置を認識をさせたかったんじゃぁ.
お.いい高速な画像認識アルゴリズムがある.つかってみるか...
ということで,YOLOv3で自分で作成したデータを学習させる方法
つまりオリジナルの学習済みモデルの作り方を書き残します.
YOLOはYou Only Look Onceの略,物体検出アルゴリズム.
darknetはC/CUDAで開発されたOSSニューラルネットフレームワーク
Environment
macOS Mojave version.10.14.3
Python 3.7.2
Method
1. darknetをmake & Install
https://github.com/pjreddie/darknet からdarknetをcloneする
git clone https://github.com/pjreddie/darknet cd darknet make
makeをする前にMakefileを編集することでdarknetでGPUを使うか否かなどの設定ができる.
# Compiling with CUDA GPU=1 # Compiling with OpenCV OPENCV=1
2. 学習用データセットを作る
この記事を執筆しているとき,自分は人の手を認識させたかったので,データセットの中の名前がhandなんとかになったりしていますが,適宜ファイル名を分かりやすいものに変えても問題はない.
backupフォルダ
学習済みモデルが完成したときに格納されるディレクトリ
datasets
学習用画像と学習用画像のどこに何が写っているかを記述したtxtファイルが入っている.
画像とtxtの名前は揃っていないといけない.
hand-obj.names
hand
今回は手しか認識させないので1行目にhandとだけ記述.
複数のものを学習させたいときには2行目3行目と認識させたいものの名前を記述していく.
hand-test.txt
datasets/img_0-0.jpg datasets/img_0-1.jpg datasets/img_0-2.jpg
学習用画像のある場所を列挙する.こちらはテスト用の画像リスト.
hand-train.txt
datasets/img_0-0.jpg datasets/img_0-1.jpg datasets/img_0-2.jpg
こちらも学習用画像のある場所を列挙する.こちらは訓練用の画像リスト.
hand.data
classes= 1 train = hand-train.txt valid = hand-test.txt names = hand-obj.names backup = ~/Documents/GitHub/darknet/cfg/task/backup
hand.dataにはここまでに作成したtxtファイルなどの場所などを記述.
最後の行のbackupは学習済みモデルを保存するディレクトリ指定だが,権限的にちゃんと保存できる場所にしておかないと,時間かけて学習したデータが保存されない.何時間も時間を掛けて学習させエラーが最後の最後に起きたら悲しぃ(経験済み)
yolov3-hand.cfg
darknet/cfg/yolov3-voc.cfgをコピーして名前を変更した.
このファイルには学習時のハイパーパラメータが記述されている.
細かいことをしないのであれば,とりあえず以下の行数の「filters」と「classes」の値だけ変更すればいい.
605: filters=18 611: classes=1 689: filters=18 695: classes=1 773: filters=18 779: classes=1
この値にはルールがあり,classesは認識させたいオブジェクトの数.今回は手(hand)だけなので1.
filtersは「(classes + 5) * 3」の値となる.今回は(1+5) * 3 = 18とした.
ex. 学習用データセットを自作するのに今回使ったツール「labelImg」
https://github.com/tzutalin/labelImg
とりあえず,labelImgを使わせてもらった.
Install方法は以下のReadme
https://github.com/tzutalin/labelImg/blob/master/README.rst
直感的に動かすことができるが,画像の範囲を選択したあとにxmlで出力するのではなく,txtで出力するように設定を変更する.たしかYOLO用に書き出し.みたいな設定があった.
3. YOLOv3用の学習モデル初期値ファイルをDL
https://pjreddie.com/media/files/darknet53.conv.74
からDLできる.適当なディレクトリに保存しておく.155MB.
今回は darknet/models/に保存した.
4. 学習開始
コマンドを叩いて学習スタート.
./darknet detector train hand.data yolov3-hand.cfg models/darknet53.conv.74
5. 学習したモデルを使ってみる
Ref.
https://timebutt.github.io/static/how-to-train-yolov2-to-detect-custom-objects/
https://www.slideshare.net/BusHato/ss-100355414
https://orizuru.io/blog/machine-learning/yolov3/