darknet——YOLOv 3テスト

3749 ワード

一、訓練が終わったらmAPを計算する


単一テストコマンド:./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
テスト結果の画像が表示され、保存されます.

ステップ1:txtテスト結果ファイルの生成


コマンド:valid
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolo-voc_final.Weights-out[クラス名]-gpu 0-thresh.5
分析:自分の対応するデータの配置のファイルの経路に変えて、yolov 3のcfgの配置のファイル、テストする重みのファイルの経路、GPUとしきい値を指定します
デフォルトではresultsでの各種txt検出結果ファイルが得られます
各行は、パスと接尾辞を持たないピクチャ名、信頼度スコア、4つの絶対座標値の予測ボックスを表します.
ここの-outの後ろは直接「」でいいです.あなたが何を書いてもvoc_に基づいているからです.namesで構成されたクラス名は、対応するtxtを生成し、いくつかのクラスがいくつかのtxtを生成し、クラス名がtxtファイル名に自動的に書き込まれます.
最初は生成メカニズムがわからなければ生成後にtxtファイル名を手動で変更し,後でゆっくりと模索することができる.

ステップ2:faster R-CNNのvoc_を使用eval計算


コードアドレス:voc_eval.py
新規compute_mAP.py(単一カテゴリ計算AP、すなわち単一カテゴリのmAP)は、以下の内容を書き込む
from voc_eval import voc_eval
print voc_eval('/xxx/darknet/results/{}.txt', '/xxx/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml', '/xxx/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'person', '.')

print()の5つのパラメータは、それぞれ第1ステップで生成されたtxtファイルパス、xmlタグファイルのパス、パスと接尾辞名を含まないテストセットtxtファイルパス、カテゴリ名、dpklファイル保証の保存のパスである.(実行が完了すると、実際には現在のパスの下にannots.pklが生成されます.このファイルは重要です.データセットを変更して新しいカテゴリに対してmAPを計算する場合は、以前に生成したannots.pklを削除して正常に計算する必要があります.)
xmlが必要なのは、最初のステップで生成されたtxtの予測ボックス座標が絶対座標値であり、クラス検出結果がtxtであるため、訓練時に使用されるlabelsのtxtのうち正規化された相対座標であり、図1のtxtであり、比較計算ができないため、xmlファイルの絶対値座標を使用する必要がある.
補足:mapを計算する方法は2つあります.
第1に、本明細書で使用する方法は、1つのクラス(すべてのピクチャ検出結果を含む)が1つのtxtに格納され、計算される.
第2に、第2の態様を参照して、各ピクチャの検出結果(各種クラスの検出結果を含む)を1つのtxtに配置し、比較計算を行う.
いずれにしても、真のボックスと予測ボックスのフォーマットを統一し、比較計算を行う必要があります.
注意:全nanと0が発生することを防止するために、4番目のパラメータクラス別名=第1ステップで生成するtxtファイル名のクラス別名=data/voc.namesのクラス別名=xmlファイルにマークアップされたクラス別名=scripts/voc_label.pyのclasses名.誤りを防ぐために、各所のカテゴリ名を統一したほうがいいということです.
このときコマンドラインインタフェースは3つの部分を出力し,最初の2つはそれぞれreと,precのarray,3番目はap,単一カテゴリapはmAPである.(しきい値0.005、nmsしきい値での結果)
0.3より大きい出力結果のmAPのみを計算したい場合はvoc_eval.pyファイルで次のコードでsorted_を変更します.ind = np.argsort(-confidence) sorted_ind1 = np.where(confidence[sorted_ind] >= .3)[0]#np.argsort(-confidence<=-.3) sorted_ind = sorted_ind[sorted_ind1]

マルチカテゴリ演算mAP


ファイル作成mAP.py
from voc_eval import voc_eval

import os

current_path = os.getcwd()
results_path = current_path+"/results"
sub_files = os.listdir(results_path)

mAP = []
for i in range(len(sub_files)):
    class_name = sub_files[i].split(".txt")[0]
    rec, prec, ap = voc_eval('/home/cxx/Amusi/Object_Detection/YOLO/darknet/results/{}.txt', '/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/Annotations/{}.xml', '/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/ImageSets/Main/test.txt', class_name, '.')
    print("{} :\t {} ".format(class_name, ap))
    mAP.append(ap)

mAP = tuple(mAP)

print("***************************")
print("mAP :\t {}".format( float( sum(mAP)/len(mAP)) )) 

二、訓練後にリコール率を計算する


コマンド:./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights -out .txt -gpu 0 -thresh .5
エラー:Couldn't open file:data/coco_val_5k.list
解決方法:
detectorを変更します.c下のvalidate_detector_recall関数
リスト*plist=get_を置換paths("data/coco_val_5k.list");リスト*plist=get_paths("train.txt");自分のトレーニングセットテキスト
./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolo-voc_final.weights
参照リンク:
voc_eval.py解析
YOLO-V 3計算単類ap、mAP、recall
YOLOv 3 mAPコンピューティングチュートリアル
YOLOv 3量産テスト画像をカスタムフォルダに保存