【背景】 在使用linux caffe训练的时候通常也就顺带使用sh脚本进行caffe测试了,但是有的时候pycaffe测试多个模型的时候更加方便,构建一个pycaffe测试脚本还可以进行不同数据测试。此外yo使用pycaffe也可以用来获取每个模型中每个blob的信息,方便进行一些后续的研究和操作。
【问题】使用pycaffe 和 c++ caffe 进行图像测试的时候测试结果可能出现不一致的情况
【不一致排查经验总结】
1、要有信心,不一致总能排查到一致的,致排查了一周的自己
(1)pycaffe 使用opencv和caffe中使用的opencv读图在在小数点后几位会有差异,但是这种差异带来的误差很小。如果是检测的话基本不会超过一个两个检测框。识别和分类误差肯定小于1%。
(2)确保图像的输入一致,主要包括:
2.1 图像的值域,是0~255 还是归一化的 0 ~1 (踩过坑),推荐python中用caffe的io 来读图
2.2 图像操作的顺序,一般测试的是就是resize 、减去均值和scale三个操作,确保执行的顺序是一致的。
一般均值和scale可以用caffe 的transform layer 。
2.3 0-1 图像resize 后再放大到0-255 和直接在0-255 上resize 结果有差异
2.4 可能还有一些其他操作,总之确保送入到cnn 网络时的数据是一致的
(3) 送入到cnn 网络的数据是一致的,这个时候一般就是后处理层有差异,这个时候只能通过将可能有问题的blob层输出来查看。一般图像只用输出行和或者列和,然后使用compare 工具一对比即可。
总结:
一致性排查工作比较细碎,根本就是确保输入输出一致,耐心加时间就可以完成!