YoloV4独自のサンプル制作とトレーニング

1 はじめに

以前の記事「Windows で VS2015 で YOLOv4 をコンパイルする 2 つの方法と、__func__ の未定義の問題の解決策」では、 Windows での YoloV4 のコンパイルに関する問題を記録しています。
YOLO の作成者には、テストと認識に直接使用できる一般的な日常オブジェクトを含む、ダウンロード用のいくつかの重量ファイルが付属していますが、指定したオブジェクトを認識したい場合は、サンプルを作成して自分でトレーニングする必要があります. この記事の記録自分自身 サンプルを作成し、サンプルにラベルを付け、サンプルをトレーニングするプロセス。

2 ダウンロード

ラベリングとトレーニングの前に、いくつかのファイルをダウンロードする必要があります:
サンプル ラベリング ソフトウェア: yolo_mark。ソース コードをダウンロードした後、VS でコンパイルします。
トレーニング前の重みファイル: yolov4.conv.137

3 用意するディレクトリとファイル

3.1 目次

YOLO の作成者は ...build\darknet\x64 の下に配置することを提案しましたが、この darknet\x64 ディレクトリにはファイルが多すぎるため、任意のディレクトリに配置できます。すべての作業文書を入れてください。
次に、このディレクトリの下に次のディレクトリを作成します:
d:\YoloV4\My\data ディレクトリ。トレーニング データ ファイルの保存に使用されます。
d:\YoloV4\My\data\obj ディレクトリ。トレーニング サンプル画像の保存に使用されます。
d:\YoloV4\My\Backup ディレクトリ。トレーニング中に一時的な重みファイルを保存するために使用されます。

3.2 CFG ファイル


機能: ネットワーク構成ファイル。トレーニングおよび認識中にソース コードに添付されている yolov4-custom.cfg を使用し、コピーを d:\YoloV4\My ディレクトリにコピーしてから、独自のファイル名に名前を変更する必要があります。 yolov4として-私の
次の変更を行う前に、認識したいオブジェクト タイプの数を最初に決定する必要があります。これには、次のパラメータが関連しているため、クラス = 4 クラスと想定しています。テキストエディターで yolov4-my.cfg を開き、次の
ように変更します
=classes*2000 ですが、この値はトレーニング画像の数よりも小さくすることも、6000ステップよりも小さくすることもできません=6400,7200、これら 2 つの値は max_batches の 80% と 90% です。width=416 height=416、ネットワーク サイズ、これら 2 つの値は 32 の倍数でなければなりません。classes=4、ファイル内に変更が必要な場所が 3 か所あり、classes を検索してから変更できます。filters =27、式 filters=(classes + 5)x3、対応する場所に 3 か所あります。クラス. クラスが検索された後、それは直接の隣人でなければならないことに注意してください. 前の [畳み込み] セクションのフィルタは、このように変更する必要があります.





3.3 obj.names ファイル

機能: オブジェクト名ファイルは、トレーニングと認識中に使用する必要があります.
d:\YoloV4\My\data の下で、新しいテキスト ファイルを作成し、名前を obj.names に変更します (拡張子を含めて、好きな名前を次のように使用できます)。すべてのファイルは自分で名前を付けることができます。以下も同じです)、決定されたクラスの数に従って、行ごとにオブジェクト名を記述します。

plane
car
bus
pizza
...

ネットワークがオブジェクトを認識すると、結果はオブジェクトのシリアル番号であり、このドキュメントのシリアル番号に対応する行のテキストは、認識されたオブジェクトの名前です。

3.4 obj.data ファイル

機能: トレーニング中に使用されるトレーニング データ ファイル
d:\YoloV4\My\data の下に新しいテキスト ファイルを作成し、名前を obj.data に変更すると、その内容は次のようになります。

classes = 4
train  = data/train.txt
valid  = data/test.txt
names = data/obj.names
backup = backup/

ファイル内の各行の機能は次のとおりです。
classes: トレーニングおよび認識されるオブジェクト タイプの数を指定します
train: トレーニング サンプル記述ファイルのパスとファイル名を指定します。以下を参照してください
valid: validation_dataset ファイル パスとファイル名ではなく、この例では、ここで使用されています。これは、オーバーフィッティングの発生を減らすために提案されていることを知っておいてください。
names: オブジェクト名のパスとファイル名を指定します file
backup: トレーニング中に一時的な重みファイルを保存するために使用されるディレクトリ

4 サンプル調製とラベリング

4.1 サンプル調製

ラベル付けとトレーニング用の画像を JPG 形式で準備し、d:\YoloV4\My\data\obj ディレクトリに配置します。

4.2 train.txt ファイル

機能:
ラベル付けとトレーニング中に d:\YoloV4\My\data で使用されるトレーニング サンプル記述ファイルは、新しいテキスト ファイルを作成し、名前を train.txt に変更し、上記で用意したサンプルに従って、このファイルに 1 行に 1 つずつ書き込みます。およびイメージ ファイルの名前。次のようになります。

data/obj/img1.jpg
data/obj/imga.jpg
data/obj/img2.jpg
...

4.3 サンプルのラベリング

上記のサンプルとファイルの準備ができたら、先ほどダウンロードした yolo_mark サンプル ラベリング ソフトウェアを使用する必要があります.便宜上、yolo_mark.exe を d:\YoloV4\My にコピーし、コマンド ライン (または最も便利な方法) を実行します。 : このディレクトリに mark.cmd ファイルを作成し、次のテキストをコピーしてから、このコマンドをダブルクリックして実行します):

yolo_mark.exe data/obj data/train.txt data/obj.names

次に、下の図に示すように、フレームごとにオブジェクトの名前を指定し、マウスで選択することができるので、ここでは詳しく説明しません.
ここに画像の説明を挿入

アノテーションが完了すると、サンプル画像が保存されているディレクトリに、サンプル アノテーションの結果を記録した各画像の同じ名前の txt ファイルが表示されます。次のとおりです。

3 0.849609 0.839583 0.111719 0.120833
3 0.130859 0.591667 0.177344 0.058333
0 0.692578 0.313889 0.042969 0.016667
1 0.685547 0.568056 0.035156 0.036111

各行はラベル ボックスに対応します。つまり、
< object-class> < x_center> <y_center> < width> < height>
object-class: 0 から始まるオブジェクト カテゴリのシリアル番号
<x_center><y_center>:ラベル ボックスの中心 X と Y 座標、それぞれ画像の幅と高さの比率
<幅><高さ>: 注釈ボックスの幅と高さ、それぞれ画像の幅と高さの比率.
この原則を知っていると、必要に応じて、サンプルの注釈結果を生成する独自のプログラムを作成できます。

5 トレーニング

上記のすべての準備が整ったら、トレーニングを開始できます。
この時点で、以前にダウンロードした yolov4.conv.137 を使用する必要があります。トレーニング前の重みファイルを d:\YoloV4\My にコピーし、このパスで次のコマンドを実行します (このディレクトリは darknet の場所ではないため)。 .exeはディレクトリにあるので、フルパス名を書いてください)(最も便利な方法は、cmdファイルを作成し、ダブルクリックして実行することです)

D:\YoloV4\darknet-master\build\darknet\x64\darknet.exe detector train data/obj.data yolov4-my.cfg yolov4.conv.137

正常な場合は、次のインターフェイスが表示され、トレーニング プロセスが開始されます。
ここに画像の説明を挿入
グラフは損失関数の変化曲線を示しており、横軸は反復回数、縦軸は損失率です。平均ロス率は1,000以上から徐々に減少し、急激に減少していき、下図は1時間以上トレーニングした後の曲線ですが、時間が経つにつれて減少が緩やかになります。
ここに画像の説明を挿入
トレーニング プロセス中に、トレーニング済みの重みファイルが d:\YoloV4\My\Backup ディレクトリに生成されます. トレーニング ソフトウェアは、100 回の反復ごとに重みファイルを自動的に保存し、1000 回の反復ごとに新しい重みファイルが生成されます。トレーニングに便利です。ベストを比較してください。
トレーニング終了の判断:通常、各カテゴリは 2000 回の繰り返しに対応し、平均損失率は概ね 0.xxx であり、基本的に複数回繰り返しても変化がなく、トレーニングを終了する可能性はほぼあります。
トレーニング後、生成されたウェイト ファイル *.weights と、前述の yolov4-my.cfg および obj.names を認識に使用できます。
トレーニング プロセスは長く、通常は 10 時間以上、場合によっては数十時間かかります. テストでは、200 以上のサンプルを使用して 4 つのターゲットをトレーニングしました. トレーニングには約 3 時間かかり、1200 回繰り返しました. 平均損失は約 0.8 まで低下した時点でトレーニングを途中で中止しましたが、テストの結果、認識は非常に良好でした。

おすすめ

転載: blog.csdn.net/hangl_ciom/article/details/119645009