yoloV3测试map和画PR曲线

参考1:https://blog.csdn.net/qq_33350808/article/details/83178002

2:https://blog.csdn.net/weixin_43717579/article/details/89380229

3:https://blog.csdn.net/babyzbb636/article/details/100535563

 

训练指令:./darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 | tee train_yolov3.log

ps:For training with mAP (mean average precisions) calculation for each 4 Epochs (set valid=valid.txt or train.txt in obj.data file) and run: darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map

测试:
    第一步:./darknet detector valid data/obj.data yolo-obj.cfg backup/yolo-obj_last.weights
    第二部:python .\reval_voc_py3.py --voc_dir E:\darknet-master\build\darknet\x64\data\VOCdevkit 
             --year 2007 --image_set test --classes E:\darknet-master\build\darknet\x64\data\obj.names testForTower
             1:测试集的ImageSets\Main里面只需要test.txt  这里的test和(命令中--image_set test中的test)
                                                                    和(comp4_det_test_tower.txt中的test)需要一致
             2: 每次都需要删除缓存文件annots.pkl

绘制PR曲线并输出AP值:
    
 

#coding=utf-8
import _pickle as cPickle
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=[u'NSimSun']
plt.rcParams['axes.unicode_minus']=False
fr = open('tower_pr.pkl','rb')#这里open中第一个参数需要修改成自己生产的pkl文件
inf = cPickle.load(fr)
fr.close()

# fbad = open('tower_pr.pkl','rb')#这里open中第一个参数需要修改成自己生产的pkl文件
# inf_bad = cPickle.load(fbad)
# fbad.close()

 
x=inf['rec']
y=inf['prec']
plt.figure()
plt.xlabel('召回率',size=15)
plt.ylabel('精确率',size=15)
plt.xticks(fontproperties = 'Times New Roman', size = 14)
plt.yticks(fontproperties = 'Times New Roman', size = 14)

plt.plot(x,y)

plt.savefig("PR曲线.svg",bbox_inches='tight') #plt保存需要在show之前
plt.show()

print('AP:',inf['ap'])

测试单张图片:darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_100.weights(最后的权重改为自己的权重)。
然后终端会提醒你输入图片路径,然后你输入测试图片的绝对路径即可看到效果

批量测试:https://blog.csdn.net/yuyifan1991/article/details/94614130

按照上述链接配置好后,命令:./darknet detector test data/obj.data yolo-obj.cfg backup/yolo-obj_1800.weights test.txt

画损失值曲线:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=[u'SimHei']
plt.rcParams['axes.unicode_minus']=False

#根据自己的log_loss.txt中的行数修改lines, 修改训练时的迭代起始次数(start_ite)和结束次数(end_ite)。
lines = 1800
start_ite = 0 #log_loss.txt里面的最小迭代次数
end_ite = 1800 #log_loss.txt里面的最大迭代次数
step = 2 #跳行数,决定画图的稠密程度
igore = 190 #当开始的loss较大时,你需要忽略前igore次迭代,注意这里是迭代次数b

data_path =  'train_log_loss.txt' #log_loss的路径。
result_path = './quanju_loss0607' 

names = ['loss', 'avg', 'rate', 'seconds', 'images']
result = pd.read_csv(data_path, skiprows=[x for x in range(lines) 
                                          if (x<lines*1.0/((end_ite - start_ite)*1.0)*igore                                                                                        
                                              or x%step!=0)], error_bad_lines=False, names=names)
for name in names:
    result[name] = result[name].str.split(' ').str.get(1)
    
for name in names:
    result[name] = pd.to_numeric(result[name],errors='ignore')

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
#----------设置横坐标的值。
x_num = len(result['avg'].values)
tmp = (end_ite-start_ite - igore)/(x_num*1.0)
x = []

for i in range(x_num):
    x.append(i*tmp + start_ite + igore)
    
plt.plot(x, result['avg'].values)
plt.xticks(fontproperties = 'Times New Roman', size = 12)
plt.yticks(fontproperties = 'Times New Roman', size = 12)

plt.xlabel('迭代次数',size=15)
plt.ylabel('损失值',size=15)
plt.savefig("损失曲线1.svg",bbox_inches='tight')
plt.show()

 

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值