Ubuntu18.04は、YOLOv4ターゲット検出を実現するようにダークネット環境を構成します(2)-YOLOv4に基づいて独自のデータをトレーニングします


ダークネット環境の構成が   完了したら、 ダークネットフレームワークの下でターゲット検出データのトレーニングを実行できます。この記事では、紹介する例としてVOCデータを取り上げます。

1.データの準備

1.1VOCデータのダウンロード

VOCデータをダウンロード  するには、https://pjreddie.com/darknet/yolo/Webサイトの概要を参照してください

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

1.2データラベルを生成する

  VOCデータセットのxmlファイルの注釈をダークネットが解析できるtxtファイルに変換します。各ファイルの形式は次のとおりです。

<object-class> <x> <y> <width> <height>

  各行は、ターゲットカテゴリ、グラウンドトゥルースボックスの横座標の中心座標、縦座標の中心座標、グラウンドトゥルースボックスの幅、およびグラウンドトゥルースボックスの高さに対応します。フォルダ内

  のscripts/ファイルを使用してvoc_label.pyVOCタグをYOLOタグ変換しvoc_label.pyVOCdevkit/ファイルをフォルダにコピーして、次のコマンドを実行します。

python voc_label.py

  操作が完了したら、と入力lsします。ターミナルに次のように表示されます。

2007_test.txt   VOCdevkit
2007_train.txt  voc_label.py
2007_val.txt    VOCtest_06-Nov-2007.tar
2012_train.txt  VOCtrainval_06-Nov-2007.tar
2012_val.txt    VOCtrainval_11-May-2012.tar

  VOCトレーニングでは、トレーニングセットを形成し、検証セットとして2007_testを使用するために、4つのデータセット2007_train、2007_val、2012_train、および2012_valが必要です。次のコマンドを入力して、対応するデータセットをマージします。

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

  最後にcfg.dataファイルを変更し、VOCデータパスを構成します。クラスの数は正しくなければなりません。

classes= 20
train  = <path-to-voc>/train.txt
valid  = <path-to-voc>2007_test.txt
names = data/voc.names
backup = backup

1.3事前トレーニング済みモデルをダウンロードする

1.ImageNet事前
  トレーニングモデルに基づいてトレーニングを開始します。事前トレーニングモデルのダウンロード場所はhttps://drive.google.com/open?id=1JKF-bdIklxOOVy-2Cr5qdvjgGpmGfcbpです。事前トレーニングモデルをダウンロードした後、yolov4.conv.137指定された場所にファイルを配置します。

2. COCO事前トレーニングモデルに
  基づいてトレーニング開始します。作成者のオープンソースCOCO事前トレーニングモデルyolov4.weights基づいてトレーニング開始する場合は、ファイルに表示されているものを変更する必要があります。変更後、事前トレーニングモデル。変更されたコードは次のとおりです。

import numpy as np

# Read weights file
with open('weights/yolov4.weights', 'rb') as f:
    version = np.fromfile(f, dtype=np.int32, count=3)  # (int32) version info: major, minor, revision
    seen = np.fromfile(f, dtype=np.int64, count=1)  # (int64) number of images seen during training
    weights = np.fromfile(f, dtype=np.float32)  # the rest are weights
    seen = np.array([0])

# Write weights file
with open('darknet_yolov4.weights', 'wb') as f:
    version.tofile(f)  # (int32) version info: major, minor, revision
    seen.tofile(f)
    weights.tofile(f)

2.トレーニングデータ

2.1cfgファイルを準備する

  cfgフォルダー内のyolov4-custom.cfgファイル名前yolov4-voc.cfg変更して、トレーニングの反復ステップの数変更します。

max_batches = 50500
policy=steps
steps=40000,45000
scales=.1,.1

  3つのyoloレイヤーのクラスを20に変更します。これは、yoloレイヤーの前の畳み込みレイヤーのフィルターの数が75、(クラス+ 5)×3(クラス+ 5)\ times3です。c l a s s e s+5 ××3

[convolutional]
size=1
stride=1
pad=1
filters=75
activation=linear


[yolo]
mask = 6,7,8
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=20
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

2.2トレーニングスクリプトファイルshを準備する

  ターミナルに入力touch train.shて、gedit train.shトレーニングスクリプトファイルを編集し、を入力./darknet detector train data/voc.data cfg/yolov4-voc.cfg backup/yolov4.conv.137 -mapして実行./train.shトレーニングを開始します。./darknetコンパイルされた実行可能ファイルとして、detectorターゲット検出タスクtrainの実装、トレーニングミッションの実装data/voc.datacfg/yolov4-voc.cfgおよびbackup/yolov4.conv.137ファイルパスの場所が正しくなければならないこと-mapは、同時にトレーニング、検出精度の評価、4エポックごとの評価を表します。

2.3損失とmAP曲線

  トレーニングを完了すると、darknetフォルダーに次の画像が表示されます。これらの画像は、トレーニングが過剰適合していることを示しています。反復が10,000ステップを超えると、VOCデータセットのmAPが最大になります。その後、損失は​​減少していますが、mAPはそれ以上改善されていませんが、減少しています。VOCデータセットのトレーニングには、さらにパラメーターを調整する必要があります。voc_all_map.pyを評価した、VOCデータセット0.5のYOLOv4を達成できます:0.95mAP52.98,0.5mAPを達成できます84.27,0.75mAP58.64を達成できます。この結果は、この記事で紹介したhttps://blog.csdn.net/linghu8812/article/details/105708001faster_rcnn_R_50_FPNのmAPよりもはるかに高くなっています

chart_yolov4-voc.png
  下の図は、YOLOv3を使用してVOCデータセットをトレーニングした結果です。VOCデータセットに対するYOLOv4の検出効果は、YOLOv3よりもはるかに優れていることがわかります。

ここに画像の説明を挿入します

3.テスト画像

  ターミナルで次のコマンドを入力して./darknet detector test cfg/voc.data cfg/yolov4-voc.cfg backup/yolov4-voc.weights -thresh 0.25 data/dog.jpg、1つの画像をテストし、トレーニング効果を表示します。cfgファイルとweightsファイルはここからダウンロードできます。抽出コードはia4xです。推論結果は次のとおりです。

ここに画像の説明を挿入します
  端末で出力は次のとおりです。

data/dog.jpg: Predicted in 14.562000 milli-seconds.
bicycle: 97%
dog: 94%
car: 99%

おすすめ

転載: blog.csdn.net/linghu8812/article/details/105785589
おすすめ