参考这里
具体公式不在赘述
以在大雁和飞机的图片中识别飞机为例:
参考这里
YOLO-V3可视化训练过程中的参数
./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 2>1 | tee yolo-voc.txt
darknet.exe detector valid data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights -out -gpu 0 -thresh .5
darknet.exe detector valid data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights -thresh .5
python reval_voc_py3.py --year 2007 --classes data/voc.names --image_set test --voc_dir data/mkw/VOCdevkit/ results
darknet.exe detector recall data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights
darknet.exe detector map data/voc.data cfg/yolov2-tiny-voc.cfg backup/yolov2-tiny-voc_11400.weights
在执行训练命令的时候加一下管道,tee一下log
./darknet detector train cfg/voc.data cfg/yolo-voc.cfg | tee training.log
将下面的python代码保存为drawcurve.py,并执行
python drawcurve.py training.log 0
python的代码为
import argparse
import sys
import matplotlib.pyplot as plt
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument("log_file", help = "path to log file" )
parser.add_argument( "option", help = "0 -> loss vs iter" )
args = parser.parse_args()
f = open(args.log_file)
lines = [line.rstrip("\n") for line in f.readlines()]
# skip the first 3 lines
lines = lines[3:]
numbers = {'1','2','3','4','5','6','7','8','9','0'}
iters = []
loss = []
for line in lines:
if line[0] in numbers:
args = line.split(" ")
if len(args) >3:
iters.append(int(args[0][:-1]))
loss.append(float(args[2]))
plt.plot(iters,loss)
plt.xlabel('iters')
plt.ylabel('loss')
plt.grid()
plt.show()
if __name__ == "__main__":
main(sys.argv)
参考这里
命令格式: ./darknet detector valid
-out “”
例如:
./darknet detector valid ./cfg/voc.data cfg/yolov2-tiny-voc.cfg results/yolov2-tiny-voc_10000.weights -out ""
验证集在voc.data文件中已定义
classes= 1
train = /home/chris/darknet/scripts/2007_train.txt
valid = /home/chris/darknet/scripts/2007_val.txt # 此条命令用到该路径
names = data/voc.names
backup = /home/chris/darknet/results/
运行后在…/darknet/results/下生成一个 sea cucumber.txt 文件
其中txt中数据格式为: 文件名 置信度 x y w h
将文件名修改为 comp4_det_val_sea cucumber.txt
命令格式:python reval_voc.py --voc_dir
--year <年份> --image_set <验证集文件名> --classes <类名文件路径> <输出文件夹名>
例如:
python reval_voc.py --voc_dir /home/chris/darknet/scripts/VOCdevkit --year 2007 --image_set val --classes /home/chris/darknet/data/voc.names testSeacucumber
# 此处的坑是 --image_set 后是 val,要与 voc.data 名称一致
这里用到两个文件 reval_voc.py 和 voc_eval.py ,将它们放在 darknet 一级目录下运行以上命令即可得到map值,并在testSeacucumber文件夹内得到 sea cucumber_pr.pkl 文件
在testSeacucumber文件夹内新建一个PR_draw.py文件,内容如下:
# -*- coding: utf-8 -*
#import _pickle as cPickle
import cPickle
import matplotlib.pyplot as plt
fr = open('sea cucumber_pr.pkl','rb')
inf = cPickle.load(fr)
fr.close()
x=inf['rec']
y=inf['prec']
plt.figure()
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR_cruve')
plt.plot(x,y)
plt.show()
print('AP:',inf['ap'])
运行命令
python PR_draw.py