caffe图像分类时,训练的模型准确率很高,而单张图片测试时准确率很低

做了好长的时间的图像分类,用caffe训练的模型正确率很高,但是用单张图片进行测试识别时,效果特别差,检测的出来的几乎都是同一类,查了一些资料,终于找到了解决办法。

原因1:如果训练用了GPU,那么测试的时候也要注意用GPU

原因2:注意测试图片的读取格式。

我就是错在了这里,参考的博客https://blog.csdn.net/u013841196/article/details/72799680

在图片进行通道转换时,常用的代码如下:

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  # 通道变换,例如从(530,800,3) 变成 (3,530,800)
transformer.set_mean('data', mu) #mu是像素的均值
transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR

(1)当用caffe.io.load_image方式读取图片时:

image = caffe.io.load_image(image_file) #加载图片

使用caffe.io.load_image()读进来的是RGB格式和0~1(float)

所以在进行识别之前要在transformer中设置transformer.set_raw_scale('data',255)(缩放至0~255)

以及transformer.set_channel_swap('data',(2,1,0)(将RGB变换到BGR)需要下面的5行代码

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  # 通道变换,例如从(530,800,3) 变成 (3,530,800)
transformer.set_mean('data', mu) #mu是像素的均值
transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR 

2.使用cv2.imread()来读取图片

cv2.imread()接口读图像,读进来直接是BGR 格式and 0~255

所以不需要再缩放到【0,255】和通道变换【2,1,0】,不需要transformer.set_raw_scale('data',255)和transformer.set_channel_swap('data',(2,1,0))只要下面的三行代码就可以

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  # 通道变换,例如从(530,800,3) 变成 (3,530,800)
transformer.set_mean('data', mu) #mu是像素的均值

我当初用的是cv2.imread()来读取图片,用的却是caffe.io.load_image()的代码段,所以出现了这个错误。

你可能感兴趣的:(caffe,图像处理)