#闇の使者ダークネット
かっこいいよね
##はじめに
darknetのビルドは済んでる前提
ビルドについての記事はこちら:Windows環境でdarknet使って学習、ビルド編
学習データのアノテーション作業も済んでる前提
データ作成についての記事はこちら:Windows環境でdarknet使って学習、データ作成編
AlexeyABさんのGitHubを読みたい人はここからどうぞ
https://github.com/AlexeyAB/darknet
##環境
・Windows10
・GeForce GTX1080
・Python3.6.9
##学習用
※tiny-yolo使うときも大体同じ。使う重みファイルが変わるくらい。
まずはエクスプローラを開いて darknet-master\build\darknet\x64
へ移動
用意するファイル
・objフォルダ (×64\data
フォルダ内に配置)
・hogehoge.data (×64\data
フォルダ内に配置、ファイル名は自分が分かりやすいものに。.namesファイルなどの参照先ファイルも同じ階層に置くこと)
・yolov3-hogehoge.cfg (コンフィグファイル。darknet.exeと同じ階層に配置)
・darknet53.conv.74 (初期の重みファイル。darknet.exeと同じ階層に配置。AlexyABのgitからダウンロードする。直リンクはここ:https://pjreddie.com/media/files/darknet53.conv.74)
dataファイルとかcfgファイルについてはいろんな人が記事にしてるのと、AlexyABさんがgithubで説明してくれてるので割愛
https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
全部英語だけどchromeで開いて翻訳かければ大丈夫!
プロンプトでdarknet.exeのあるディレクトリに行く
C:\Users>cd C:\Users\darknet-master\build\darknet\x64
移動先でプロンプトにこれをコピペして実行
darknet.exe detector train data/hogehoge.data yolov3-hogehoge.cfg darknet53.conv.74
あとは、待つ。
エラーが出たら学習用データとかcfgファイルとかにミスがあるので確認しましょう。
ちなみにyoloフルモデルだとGPU環境でも5種類くらいの学習で24時間かかっちゃいました。
学習が終わると/64/backupフォルダに重みファイルが保存されます(.weightsファイル)
~~_final.weightsってやつが最終的な重みファイルなんで基本的にそれ使ってます。
##実行用(Keras用)
cv2と組み合わせるやり方が良くわからなかったり色々な理由から推論はKerasで実行してるのでその際のメモ。
YOLOv3のkeras用のあれこれはqqwweeeさん(人?)が提供してくれているのでここからクローンorダウンロードします。
https://github.com/qqwweee/keras-yolo3
おっしゃ早速チェンジディレクトリや!
というのは嘘です。
用意するものがあります
・yolov3-hogehoge.cfg (学習に使ったコンフィグファイル。keras-yolo3フォルダ内に配置)
・yolov3-hogehoge_final.weights (学習済みの重みファイル。keras-yolo3フォルダ内に配置)
準備ができたらkeras-yolo3フォルダに飛びます
cd C:\Users\keras-yolo3
darknet用の重みファイルをkeras用に変換するためのpyファイルがあるので、次のコマンドをコピペして実行します
python convert.py yolov3-hogehoge.cfg yolov3-hogehoge_final.weights model_data/hogehoge.h5
コマンド最後のhogehoge.h5はkerasでyolo使うときの重みファイルの名前になるので分かりやすい名前にしておくといいと思います。
これで終わり。
ではない。
kerasでの実行にはclass名を羅列したテキストファイルを自分で用意する必要があります。
keras-yolo3/model_dataのフォルダ内にcoco_classesとかvoc_classesってファイルがあるのでそれを参考に学習させたラベル名を羅列したものを作ります。
5種類の果物(りんご、バナナ、いちご、パイナップル、ぶどう)を学習させたならこんな感じ↓
apple
banana
raspberry
pineapple
grape
ここまできたらあとは実行するのみ!
と言いたいがまだダメだ
keras-yolo3フォルダ内のyolo.pyを編集します
以下は変更場所だけコピペしたもの
class YOLO(object):
_defaults = {
"model_path": 'model_data/hogehoge.h5', #ここを自前のやつに
"anchors_path": 'model_data/yolo_anchors.txt',
"classes_path": 'model_data/hogehoge_classes.txt', #ここも自前のやつに
"score" : 0.3,
"iou" : 0.45,
"model_image_size" : (416, 416),
"gpu_num" : 1,
}
あとはkeras-yolo3フォルダ内にテスト用の写真ファイルを用意します。(hogehoge.jpg)
同フォルダに飛んでyolo-video.pyを実行します
cd keras-yolo3
python yolo_video.py --image
ズラーッといろんなログが出たあとに
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Input image filename:
って画面が出ればオーケー
プロンプトにhogehoge.jpgを打ち込んでやりましょう!
学習データ作成とかcv2組み込みとかはまた別の記事に書きます。