Caffe网络的损耗非常低,但测试精度却很差 - python

我对咖啡有点陌生,并且出现了一些奇怪的行为。我正在尝试对bvlc_reference_caffenet使用微调来完成OCR任务。

我已经接受了他们的预训练网,将最后一个FC层更改为我拥有的输出类的数量,然后进行了再训练。经过几千次迭代,我得到的损失率为〜.001,而网络测试时的准确率超过90%。就是说,当我尝试自己对数据运行网络时,我得到的结果很糟糕,不超过7%或8%。

我用来运行网络的代码是:

[imports]

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt', 'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel',  
                       image_dims=(227, 227, 1))

input_image = caffe.io.load_image('/Training_Processed/6/0.png')    
prediction = net.predict([input_image])  # predict takes any number of images, and formats them for the Caffe net automatically    
cls = prediction[0].argmax()

关于为什么这种表现可能如此差的任何想法?

谢谢!

PS:一些其他信息可能会有用,也可能不会有用。如下所示进行分类时,分类器似乎确实偏爱某些类。即使我有101个班级的问题,它似乎最多只能分配15个不同的班级

PPS:我也很确定我没有过拟合。我一直在使用快照进行测试,它们都表现出同样差的结果。

python大神给出的解决方案

用于测试发布的模型的代码似乎缺少一些组件:

似乎您没有减去图像的均值。
您没有将通道从RGB交换到BGR。
您没有将输入缩放到[0..255]范围。

查看caffe.Classifier的类似实例,您可能会看到类似以下内容的内容:

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt',
                       'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel', 
                       mean = NP.load( 'ilsvrc_2012_mean.npy' ),
                       input_scale=1.0, raw_scale=255,
                       channel_swap=(2,1,0),
                       image_dims=(227, 227, 1))

在测试中进行与培训中相同的输入转换至关重要。