LoginSignup
6
3

More than 3 years have passed since last update.

Windows環境でdarknet使ってYOLOv3の学習、kerasでの実行。コマンドメモ。

Last updated at Posted at 2019-11-15

闇の使者ダークネット

かっこいいよね

はじめに

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種類の果物(りんご、バナナ、いちご、パイナップル、ぶどう)を学習させたならこんな感じ↓

hogehoge_classes.txt
apple
banana
raspberry
pineapple
grape

ここまできたらあとは実行するのみ!
と言いたいがまだダメだ
keras-yolo3フォルダ内のyolo.pyを編集します
以下は変更場所だけコピペしたもの

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組み込みとかはまた別の記事に書きます。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3