@yolov4绘制PR曲线
1.使用官方文件生成results文件
./darknet detector valid cfg/my_data.data cfg/my_yolov4-1.cfg my_yolov4-1_best.weights
.data
.cfg
为训练文件
生成结果为:
文件内容:
2008_005191 0.191751 2.473677 31.203362 17.352085 62.292465
2008_005191 0.002859 1.000000 39.158432 13.162245 58.505882
2008_005191 0.001998 255.024567 170.681717 386.210968 375.000000
2008_005191 0.001937 6.476545 34.096401 23.312424 59.345867
2008_005191 0.001746 1.000000 35.280834 5.867074 62.669323
2008_005191 0.001653 1.000000 27.332476 25.858921 66.537560
2011_003183 0.001371 169.078018 208.129974 246.324936 330.365021
2008_003290 0.001018 134.131500 162.789154 292.654816 500.000000
2008_005150 0.001702 86.854378 228.454712 207.167877 375.000000
其中txt中数据格式为: 文件名 置信度 x y w h。
2 计算map并生成pkl文件
运行reval_voc_py3.py
文件
运行命令:
python3 reval_voc_py3.py --voc_dir /media/hkd/f22a2591-f8d6-4a4e-b02c-1ed94ed27262/dell/wuyahui/yolov4/darknet-master/build/darknet/x64/myData --image_set test --classes /media/hkd/f22a2591-f8d6-4a4e-b02c-1ed94ed27262/dell/wuyahui/yolov4/darknet-master/build/darknet/x64/myData/myData.names test
其中:
- –voc_dir为数据集路径
- 年份为数据集文件夹时间 VOC2012
- 验证集文件名test.txt \VOC2017\ImageSets\Main
- 类名文件 my_Data.names
- 输出文件夹名 test
3 生成结果
1.将results文件放入reval_voc_py3.py
同级文件夹下
2.在同级文件夹下建立test文件
3.运行上述命令,生成结果如图所示
4 绘制PR曲线
import _pickle as cPickle
import matplotlib.pyplot as plt
fr1= open('/media/hkd/f22a2591-f8d6-4a4e-b02c-1ed94ed27262/dell/wuyahui/yolov4/darknet-master/build/darknet/x64/test/bottle_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf1 = cPickle.load(fr1)
fr1.close()
x1= inf1['rec']
y1= inf1['prec']
fr2= open('/media/hkd/f22a2591-f8d6-4a4e-b02c-1ed94ed27262/dell/wuyahui/yolov4/darknet-master/build/darknet/x64/test/chair_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf2 = cPickle.load(fr2)
fr2.close()
x2= inf2['rec']
y2= inf2['prec']
fr3= open('/media/hkd/f22a2591-f8d6-4a4e-b02c-1ed94ed27262/dell/wuyahui/yolov4/darknet-master/build/darknet/x64/test/person_pr.pkl', 'rb') # 这里open中第一个参数需要修改成自己生产的pkl文件
inf3 = cPickle.load(fr3)
fr3.close()
x3= inf3['rec']
y3= inf3['prec']
plt.figure()
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR cruve')
plt.plot(x1, y1, color="purple")
plt.plot(x2, y2, color="blue")
plt.plot(x3, y3, color="green")
plt.savefig("pr.png")
plt.show()
注意:绘制的为不同类别的pr曲线