2

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

我采用了他们的预训练网络,将最后一个 FC 层更改为我拥有的输出类的数量,然后重新训练。经过几千次迭代后,我的损失率约为 0.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:我也相当肯定我没有过度拟合。我一直在使用快照对此进行测试,它们都表现出同样糟糕的结果。

4

1 回答 1

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))

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

于 2015-04-21T15:06:11.770 回答