【YOLOv3】オリジナルの学習済みモデルを作成する

OverView

画像から手の位置を認識をさせたかったんじゃぁ. お.いい高速な画像認識アルゴリズムがある.つかってみるか…
ということで,YOLOv3で自分で作成したデータを学習させる方法 つまりオリジナルの学習済みモデルの作り方を書き残します. https://pjreddie.com/darknet/ darknet 公式ページ 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する makeをする前にMakefileを編集することでdarknetでGPUを使うか否かなどの設定ができる.

2. 学習用データセットを作る

この記事を執筆しているとき,自分は人の手を認識させたかったので,データセットの中の名前がhandなんとかになったりしていますが,適宜ファイル名を分かりやすいものに変えても問題はない.

backupフォルダ

学習済みモデルが完成したときに格納されるディレクトリ

datasets

学習用画像と学習用画像のどこに何が写っているかを記述したtxtファイルが入っている. 画像とtxtの名前は揃っていないといけない.

hand-obj.names

今回は手しか認識させないので1行目にhandとだけ記述. 複数のものを学習させたいときには2行目3行目と認識させたいものの名前を記述していく.

hand-test.txt

学習用画像のある場所を列挙する.こちらはテスト用の画像リスト.

hand-train.txt

こちらも学習用画像のある場所を列挙する.こちらは訓練用の画像リスト.

hand.data

hand.dataにはここまでに作成したtxtファイルなどの場所などを記述. 最後の行のbackupは学習済みモデルを保存するディレクトリ指定だが,権限的にちゃんと保存できる場所にしておかないと,時間かけて学習したデータが保存されない.何時間も時間を掛けて学習させエラーが最後の最後に起きたら悲しぃ(経験済み)

yolov3-hand.cfg

darknet/cfg/yolov3-voc.cfgをコピーして名前を変更した. このファイルには学習時のハイパーパラメータが記述されている. 細かいことをしないのであれば,とりあえず以下の行数の「filters」と「classes」の値だけ変更すればいい. この値にはルールがあり,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. 学習開始

コマンドを叩いて学習スタート.

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/ https://pjreddie.com/darknet/yolo/ https://pjreddie.com/darknet/yolo/

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です