darknetによるyolov3の学習 - takgto/utokyo-chipathon2023 GitHub Wiki
授業では学習済みのモデルを使います。自分でyolov3の学習を行う場合は以下の手順を参考にしてください。 この手順を行うにはdarknetフォルダが必要です。配布のPCには含まれていないためTAに問い合わせて受け取ってください。
受け取ったdarknetフォルダをマイドライブへアップしましょう。 ※ 40分ほど時間が掛かります。
Googleアカウントにログインした状態で以下のサイトにアクセスします。
https://colab.research.google.com/notebooks/intro.ipynb
(別タブで開きたい場合はCtrlを押しながらクリックしてください)
『ファイル』から『ノートブックを新規作成』をクリックします。
![]() |
---|
以下のような画面が開きます。
![]() |
---|
コードセルはPythonでソースコードを記述して実行する場所です。テキストセルはメモ等を記入する場所です。
コードセルにソースコードのコメントを記入することもできます。
をクリックすると該当セルのコードを実行します。
作成したノートブックは「My Drive」の「Colab Notebooks」から確認できます。
※ 今回のNotebookは以下のgithubを参考にしました。
Yolo v4, v3 and v2 for Windows and Linux
https://github.com/AlexeyAB/darknet
Google Colaboratoryのセルでは右クリックができません。コピー&ペーストを実行する時、貼り付けをするには右クリックメニューではなくショートカットキーのペースト(ctrlとVを同時押し)で貼り付けてください。
ノートブックのコードセルに以下のコードを記載し実行します。
import os
from google.colab import drive
drive.mount('/content/drive')
%cd '/content/drive/MyDrive/darknet'
os.getcwd()
ノートブックのコードセルに以下のコードを記載し実行します。
!make
!chmod +x ./darknet
!./darknet detector train work/obj.data work/yolov3-608.cfg darknet53.conv.74 -dont_show
全ての学習を行うためには3時間ほどかかる。
/darknet/cahrt.png に学習結果がグラフ化されているので確認すること。
入力が416×416より大きいサイズ(32の倍数)の場合、colabではmAPの計算は別途行う必要があります。
!./darknet detector map work/obj.data work/yolov3-608.cfg work/backup/yolov3-608_1000.weights -dont_show -ext_output < work/val.txt
出力の最後の方にmAPが表示されます。
calculation mAP (mean average precision)...
detections_count = 107068, unique_truth_count = 8698
class_id = 0, name = person, ap = 10.20% (TP = 151, FP = 199)
class_id = 1, name = bicycle, ap = 2.85% (TP = 0, FP = 0)
class_id = 2, name = car, ap = 16.41% (TP = 246, FP = 179)
for conf_thresh = 0.25, precision = 0.51, recall = 0.05, F1-score = 0.08
for conf_thresh = 0.25, TP = 397, FP = 378, FN = 8301, average IoU = 32.82 %
IoU threshold = 50 %, used Area-Under-Curve for each unique Recall
mean average precision ([email protected]) = 0.098192, or 9.82 %
Total Detection Time: 266 Seconds
- serverに繋ぐため専用のUSBを挿す。
- PCのネットワーク設定でWifi → Wifi2 → 利用できるネットワークからeng.utを選んで接続。パスワードを聞かれるのでTAを呼ぶ。
- 自分のPCでwork/XXX.cfgを用意しておく。
- ssh [email protected] でserverに入る。ログインパスワードはTAに聞く。
- cd darknetでt_gotoのファルダを自分の名前でコピーして自分用のフォルダを作る。例えば、
cp -r t_goto <自分の名前>
- <自分の名前>/workに自分のXXX.cfgファイルをコピーする。
- docker psを実行して次の状態だったら、
docker attach <ID, この場合a9602fa5cb02>
そうでなれけば
docker run -v $PWD:/workspace/ -v /data2:/data2 -w /workspace -it compose-ubuntu /bin/bash
を実行してDockerを立ち上げる。
- <自分の名前>のディレクトリで以下の学習のコマンドを実行する。学習結果(*.weightsファイル)は<自分の名前>/work/backupにできる
### 学習(yolov3 tinyの場合)
/workspace/darknet/darknet detector train work/obj.data work/yolov3-tiny.cfg yolov3-tiny.conv.15 -dont_show -gpus 0,1,2,3 -clear
-clear: 最初から学習し直す時
-gpus <空いているGPUボードの番号、nvidia-smi コマンドで調べられる>
/workspace/darknet/darknet detector map work/obj.data work/yolov3-tiny.cfg work/backup/yolov3-tiny_last.weights -dont_show -ext_output -gpus 0,1,2,3 < work/val.txt > results.txt
- 結果のlocal(自分の) PCへの転送
scp -r [email protected]:/home/studnet/darknet/<自分の名前>/work/backup/XXXX_final (もしくは_last).weights <local directory>
scp -r [email protected]:/home/studnet/darknet/<自分の名前>/*.png <local directory>
scp -r [email protected]:/home/studnet/darknet/<自分の名前>/results.txt <local directory>