Linux环境下同时绘制Caffe的多个pr曲线
pr曲线是衡量目标检测网络模型的重要指标,有时候在做算法对比实验的时候,需要将多个pr曲线绘制在同一张图上进行对比分析。python提供了很好的绘图函数。在caffe深度学习框架下,pr存放在./output/faster_rcnn_end2end/voc_2007_test/zf_faster_rcnn_iter_50000的ship_pr.pkl文件(本人是用faster_rcnn的end2end模型下迭代50000次训练出的结果)。通过修改本人程序的.pkl文件路径就可以将多个pr曲线绘制在一张图上
#!/usr/bin/env python
#-*-coding:utf-8-*-
import cPickle as pickle
import numpy as np
import matplotlib.pyplot as plt
import pylab
import mpl_toolkits.axisartist as AA
from pylab import figure, show, legend
from mpl_toolkits.axes_grid1 import host_subplot
np.set_printoptions(threshold=np.NaN)
fr = open('/home/wei/program/pr_10.pkl') # open 的参数是 pkl 文件的路径
inf = pickle.load(fr) # 读取 pkl 文件的内容, 即反序列化
precision = inf["prec"] # precision数据
recall = inf["rec"] # recall数据
ap = inf["ap"] # ap数据
fr.close() # 关闭文件
fr2 = open('/home/wei/program/pr_17.pkl') # open 的参数是 pkl 文件的路径
inf2 = pickle.load(fr2) # 读取 pkl 文件的内容, 即反序列化
precision2 = inf2["prec"] # precision数据
recall2 = inf2["rec"] # recall数据
ap2 = inf2["ap"] # ap数据
fr2.close() # 关闭文件
host = host_subplot(111, axes_class=AA.Axes) #确定图标形状
plt.subplots_adjust(right=0.75) #确定图标边距
part2 = host.twinx() #定义第二条曲线
host.set_xlim([0,1.1]) #设置x轴的坐标范围
host.set_ylim([0,1.1]) #设置y轴的坐标范围
host.set_xlabel("Recall") #设置x轴的标签
host.set_ylabel("Precision") #设置y轴的标签
p1, = host.plot(recall, precision, label='ship (pr1 = {:.4f})'.format(ap)) #确定第1条曲线的数据参数
p2, = part2.plot(recall2, precision2, label='ship (pr2 = {:.4f})'.format(ap2)) #确定第2条曲线的数据参数
part2.set_ylim([0,1.1]) #确定第二条曲线的坐标范围
host.legend(loc=1)
pylab.title("Precision-Recall") # 确定标题
plt.draw() #画图
plt.show()
``
