Windows10環境でdarknet使って学習、データ作成編

#darknetを使って学習を行う
[ビルド編](https://qiita.com/seisantaro/items/ee2ce5712b5a1db8f423)ではdarknetのビルドについて書いたので
ここではデータ作成について書くよ！
##学習データの作成
データ作成が一番面倒。頑張ろう。
VoTTってツールを使う方法を説明するよ。
###STEP1 学習用の動画像収集
学習用に沢山のデータを集めないといけない。
個人的には**動画**を使うのが**おすすめ**だったりする。画像よりも量を集めやすい。
学習させるモノにもよるけど、個人で撮影したものとか動画サイトから拾ってきたものとかを使うといいんじゃないでしょうか。

**・画像を使う場合**
集め方については割愛。スクレイピングとかは個人で調べてください。
画像を集めたら全ての画像をひっくるめて同じフォルダにぶち込む。クラスごとにフォルダ作ったりとかは必要ない。
「Learning」的なフォルダを作ってその中に画像をおく。ファイル名は連番にしておくと後で便利かも。
一応参考用画像も貼っとく。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/b10edfe6-e206-d508-08f2-e64f917b711c.jpeg" width=50%>

**・動画を使う場合**
動画を全て**連結させて一つの動画**にしておく。動画結合はブラウザサービス使ったりフリーソフト使ったりプログラム書いたりいろいろな方法があるけど
windows10標準搭載の**フォト**を使うのが早い。まじで。
詳しくはこのサイトが書いてくれてる。
https://jp.videoproc.com/edit-convert/video-merge-by-win10-photos-app.htm

###STEP2 アノテーションツール「VoTT」ダウンロード
アノテーション（≒タグ付け、ラベル付け）のためのツールはいくつかあるけども、YOLOを扱う際はVoTTがおすすめ。
YOLOの学習に合わせたファイルを自動で作成してくれる。
提供元はMicrosoft。ここからどうぞ
https://github.com/microsoft/VoTT/releases/tag/v1.7.2
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/49acc767-1327-e076-2b6f-e222c6852be7.png" width=50%>
因みにVoTTはバージョン1と2がありまして、僕はバージョン1を使ってます。
理由はバージョン1がシンプルで使いやすいってのとバージョン2はちょっと初期設定が面倒だから。
でもバージョン1の開発はもう止まってるという、、
###STEP3 レッツ　アノテーション
いよいよ地味な作業に入ります。お気に入りのミュージックプレイリスト必須。
まずはVoTTを起動します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/4774bec7-9c58-14bb-0f07-5b54dbadb8b2.png" width=50%>
画像を使う人は左のアイコンを、動画を使う人は右のアイコンを選ぶ。
詳しい使い方はここに
https://www.softbanktech.co.jp/special/blog/cloud_blog/2018/0043/

**・画像の場合**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/32aac440-4432-68a7-9fed-320540cbcc25.png" width=50%>
[Region Type]
領域を囲む図形の種類を選択。基本はRectangle。
[Labels]
学習させるクラス。カンマ区切りで入力。

**・動画の場合**
使用する動画はmp4推奨。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/a36797fc-f39a-4dbc-3148-c0bd88085708.png" width=50%>
[Frame Extraction Rate]
ビデオ1秒あたりのフレーム数。(入力値)フレーム/秒。
入力値が大きいと同じようなシーンが多くなって過学習気味になる。
[Suggested Region Method]
この機能を使ってないので僕はデフォルトにしてる。

記入が終わったらいざContinueボタンクリック。
**レッツアノテーション！**
マウスで囲う作業をひたすら続ける。
因みに**学習対象が映ってない画像はノータッチのまま**で良い。
ラベルの無い画像は最後にExportするとき無視してくれる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/66ec29d0-ee4e-c8b6-5f1d-44e16af2395c.png" width=50%>
あとラベルを**ロック**する**機能**は絶対使った方が楽。
アノテーションでラベルを選択した後、右下のピンアイコンをクリックするとラベルを固定できる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/fe155062-efbb-028e-f708-ca21c2f6d1b6.png" width=50%>
全部終わったらメニューバーの
[Object Detection] → [Exports Tags]を選択。
[Export Format]を**YOLO**に変更。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533911/f48332dc-8cd2-1f2c-224d-82e46f5a7a00.png" width=50%>
保存先を確認したらExport！
保存先に`Learning_output`的なフォルダが出来る。`data/obj`に画像ファイルとテキストファイルがあればOK。

##学習を行うにあたって
YOLOv3の学習に使うのはさっきできたdataフォルダ内の
**・objフォルダ
・obj.data
・obj.names
・test.txt
・train.txt**
つまりcfgファイル以外全部です。
VoTTで出力されるcfgファイルはYOLOに合わせてあるのでYOLOv3にはマッチしない。
なので学習時には`darknet-master`の`×64`フォルダ内にあるyolov3.cfgファイルをコピペしてこれから行う学習用に**中身を変えたものを用意する**必要がある。
どこをどうするかはここに書いてある。英語きつい人は翻訳で頑張る。
https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
　
とりえずここまででデータ作成は終わり。
張り切って学習させましょー！

##おわりに
データ作成の参考になったでしょーか。
darknetでの学習コマンドについてはこっちの記事に書いてるのでよかったら見てね。
リンク：[Windows環境でdarknet使ってYOLOv3の学習、kerasでの実行。](https://qiita.com/seisantaro/items/8ab715ebfe240ba0146b)