えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

YOLO v3の学習時に面倒なパス通しをShellで自動化!

 初めてYOLOv3の学習を行う人向けにShellで自動化するプログラムを作成しました。コンピュータを固定して学習を行う分にはいいのですが、別のコンピュータで学習させたり、別のデータや学習時の読み込み画像の大きさを変更するなどの対応をするたびに設定ファイルを書き換えなければいけないので面倒だったりします。

 そもそも初心者からすれば手軽に深層学習使えない…(それも経験だと考えればいいのかもしれませんが)

 そこで、アノテーション済のファイルとラベリングリストと初期ファイル(darknet53.conv.74)とfilter項目の編集済yolov3.cfgさえ用意すれば自動的に設定ファイルを構成するShellを作りました。残念ながら、ShellなのでWindows環境のYOLOでは使えません。^^;

 作成するファイルは以下の通りです。なお、ファイルの分類リストの作成にはdemura氏のプログラムを作成しています。感謝申し上げます。自動でgit clone して.divide_filesにフォルダ名が変更されるので、フォルダの見た目はきれいになりますが、隠しファイルが残るのが嫌な人は、Shellの末尾にcd $PROJECT_FOLDER && rm -rf .divide_filesを追記するといいと思います。

github.com

準備が必要なファイルは以下の通りです。 - 対象のデータセットのパス(読み書き権限が与えられているフォルダに属す必要がある。外付けSSDなどの場合は注意)

  • 保存先のフォルダ。(テキストデータとbackupディレクトリの5種類が格納されます)

  • ラベリング用のファイル。(保存先のフォルダにコピーされます。)

  • cfgファイル(コマンドには直接関係しませんが、Training時に必要になります。filtersの編集必須)

  • darknet53.conv.74ファイル(コマンドには直接関係しませんが、Training時に必要になります。backupファイルでもOK)

生成されるファイルは以下の通りです。

  • train.list(for train)
  • test.list (for valid)
  • train_cfg.data(for train command)

f:id:Ray_ar:20210113233305p:plain

生成後は次のコマンドを打ちます。この場合、格納されているフォルダ名は<target_directory>/と表記します。

./darknet detector train <target_directory>/train_cfg.data <target_directory>/yolov3.cfg <target_directory>/darknet53.conv.74

コードはgithubリポジトリに上げています。

github.com