Caffe网络损失非常低但测试准确性非常差

时间:2015-04-03 15:02:33

标签: python neural-network computer-vision deep-learning caffe

我对caffe有点新鲜,而且我有一些奇怪的行为。我试图在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:我也相当肯定我不会过度拟合。我一直在使用快照对此进行测试,但它们都表现出相同的不良结果。

1 个答案:

答案 0 :(得分:5)

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

  1. 好像你没有减去图像的意思。
  2. 您没有将频道从RGB换成BGR。
  3. 您没有将输入缩放到[0..255]范围。
  4. 查看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))
    

    至关重要在测试中具有与训练相同的输入转换。