darknetでYoLoV3マルチクラス学習

Yolov3を多クラス学習したときのメモ。
といっても、サイトに手順書いてあるし、前回のyolov2とほぼ同じ。

Darknetサイト

YOLO: Real-Time Object Detection
 

注意

2018年4月30日現在、OpenCV 3.4.1以上はmakeできない
 

まず最新のdarknetを取得

$ git clone https://github.com/pjreddie/darknet
$ cd darknet

makefileを開き、自分の環境に合わせる
例:
 GPU=1
 CUDNN=1
 OPENCV=1
 OPENMP=0
 DEBUG=0

$ make

 

学習済みモデルのダウンロード

Darknetのサイト、”Download Pretrained Convolutional Weights”の項目からhere (76 MB).をクリックして
darknet53.conv.74をダウンロードする。
 

学習の準備

前回の学習ブログと同様で学習させたいデータ(画像・ラベル)を準備する。
同じやり方で大丈夫。もうある人は画像フォルダや設定ファイルをもってくれば使えます。
しかし、“・darknetで学習“の項目から編集が必要です。
・darknet/cfgの”obj.data”は以前と同様
・cfg/yolo-obj.cfgは編集する必要あり


 1.yolov3-voc.cfgをコピーしてyolo-obj.cfgに名前を変更
 2. 3行目 batch=1 を64に変更。4行目 subdivisions=1 を8に変更
 3..cfg内の[yolo]の項目を検索して、その一つ上の[convolutional]の項目内、filtersを filters=(classes + 5)x3 に変更する(3つある)
 4.各[yolo]内のclassesを自分のクラス数に書き換え
 
[確認]
・学習データ、ラベルをdataフォルダ内のobjフォルダに格納
・data/obj.names、data/objにtrain.txt,test.txtがあるか
・ darknet53.conv.74をdarknet/に保存したか
・darknet/cfgに独自のobj.data,yolo-obj.cfgを用意したか
・darknetフォルダにbackupフォルダがあるか
 

学習開始

./darknet detector train cfg/obj.data  cfg/yolo-obj.cfg darknet53.conv.74

*学習過程で "-nan" が出てくるが学習における82,94,108のどれかで数字が出ていれば学習が進んでいる
 参考→Training IOU, Cass, OBj, etc. = nan ? · Issue #600 · AlexeyAB/darknet · GitHub 
*うまくいかない場合はyolo-obj.cfgの3行目 batch=1 を32に変更。4行目 subdivisions=1 を16に変更(メモリが足らずに落ちる場合も同様)
 それでもうまくいかない場合は、batch=1、 subdivisions=1に戻して学習の挙動を見てみる
 

参考

てかこっちの方が親切でありがたい
github.com