目次
ダークネット環境の構成が 完了したら、 ダークネットフレームワークの下でターゲット検出データのトレーニングを実行できます。この記事では、紹介する例として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.py
VOCタグをYOLOタグに変換しvoc_label.py
、VOCdevkit/
ファイルをフォルダにコピーして、次のコマンドを実行します。
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.data
、cfg/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よりもはるかに高くなっています。
下の図は、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%