2015-04-03 107 views
2

我对caffe有点新鲜,而且我收到了一些奇怪的行为。我试图在bvlc_reference_caffenet上使用微调来完成OCR任务。Caffe网络损失非常低,但测试的准确性很差

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

我使用运行net的代码是:

[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:我也相当肯定我不是过度配合。我一直在用快照测试它,它们都表现出同样糟糕的结果。

回答

5

您测试您发布的型号代码似乎错过了一些组件:

  1. 好像你没有减去图像的平均值。
  2. 您没有将通道从RGB切换到BGR。
  3. 您没有将输入缩放到[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)) 

这是关键有测试相同的输入转化为培训。

相关问题