在上一篇博客caffe–python版利用训练好模型进行测试 中小鱼利用以训练的模型得到测试结果,但只得到测试的accuracy,没有得到想要的precision和recall。然而faster rcnn的测试结果是输出AP值的,所以小鱼认为一定是什么地方存储了precision和recall,可以被调用。如果对precision和recall等指标有不懂,可以参考faster r-cnn中评价检测算法中的指标 接下来小鱼将和大家分享怎么在python版的faster rcnn中调用matlab绘制RP曲线。
如果你是现在装的matlab,那第一件事是改matlab的快捷键为Windows型,不然都不会用matlab,改的方法为:
找到Home ,再 选择preferences ,找到keyboard ,选择 shortcuts ,最后选择Windows default set。
如果你和小鱼一样已经到了要绘制测试集的RP曲线,那你肯定进行过py-faster-rnn的训练,这里就直接介绍怎么获取R,P等指标的获取。
1、首先需要将matlab评价的端口设置为True
**./lib/datasets/pascal_voc.py文件中**
self.config = {'cleanup' : True,
'use_salt' : True,
'use_diff' : False,
'matlab_eval' : False,
'rpn_file' : None,
'min_size' : 2}
**改为**
self.config = {'cleanup' : True,
'use_salt' : True,
'use_diff' : False,
'matlab_eval' : True, #只要改这里
'rpn_file' : None,
'min_size' : 2}
2、端口虽然改好了,但是还需要开启matlab的图形化显示,并设置图形化界面为自己关闭,不然程序运行完之后,我们还没有看到图形化结果图matlab就自己直接关闭了。
**./lib/datasets/pascal_voc.py文件中**
cmd += '{:s} -nodisplay -nodesktop '.format(cfg.MATLAB)
cmd += '-r "dbstop if error; '
cmd += 'voc_eval(\'{:s}\',\'{:s}\',\'{:s}\',\'{:s}\'); quit;"' \
.format(self._devkit_path, self._get_comp_id(),
self._image_set, output_dir)
**改为:**
cmd += '{:s}'.format(cfg.MATLAB)
cmd += '-r "dbstop if error; '
cmd += 'voc_eval(\'{:s}\',\'{:s}\',\'{:s}\',\'{:s}\');"' \
.format(self._devkit_path, self._get_comp_id(),
self._image_set, output_dir)
3、现在关于matlab的设置已经改完了,接下来根据输出的结果报的错来修改代码。
我们测试的网络是调用/tools/test_net.py函数,改函数中有一些参数要自己终端调用的时候设置,测试运行的代码为:
cd py-faster-rcnn
./tools/test_net.py --gpu 0 --def /models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt --net /output/faster_end2end/voc_2007_trainval/vgg16_faster_rcnn_final.caffemodel --cfg/experiments/cfgs/faster_rcnn_end2end.yml
其中output下为自己训练之后生成的模型名字,不一样要修改为自己模型的名字。其他的一般都一样。
终端运行上述命令,可能会报错,matlab下报错为找不到某个xxx_def_val_xxx.txt,这个错误是因为python的test_net.py函数生成一个文件名为xxx_def_test_xxx.txt,所以需要将matlab下调用的文件名格式进行修改。
**./lib/datasets/VOCdevkit-matlab-wrapper/voc_eval.m 文件下**
do_eval = (str2num(year) <= 2007) | ~strcmp(test_set, 'val');
**改为:**
do_eval = (str2num(year) <= 2007) | ~strcmp(test_set, 'test');
同时因为RP曲线是对自己类别的一个指标绘制图,所以需要将
./data/VOCdeckit/voccode/VOCinit.m 文件中
VOC2007数据下的类别进行修改,改成自己的类别
这样应该就没什么问题了,你就可以在matlab界面看到完美的RP曲线。
如果你觉得只有图,没有数字,不踏实,想看数字结果,那小鱼告诉你文件中已经保存结果在一个.mat文件中了,只要用matlab打开即可,结果保存在:
./output/faster_rcnn_end2end/voc_2007_test/vgg16_faster_rcnn_final/
文件中包含四个结果文件,有用的有生成的RP曲线图,和将AP值,precision值、recall值都保存的.mat文件。
最后,matlab的输出结果内容格式定义在voc_eval.m的第11-16行和第46行。
![](/qrcode.jpg)
这就是今天分享的内容,如果你想加一些指标,比如F-measure值,你只要在
./data/VOCdevkit/VOCcode/voc_eval.m
./data/VOCdevkit/VOCcode/vocevaldet.m
两个文件中加入指标计算代码,和对输出内容进行修改即可
如果有什么问题可以在评论区进行评论留言,小鱼会及时回答,一起进步
喜欢记得留个赞再走哦,一起加油!