Caffe GoogleNet classification.cpp提供随机输出

时间:2016-07-11 16:53:13

标签: c++ computer-vision neural-network deep-learning caffe

我使用Caffe GoogleNet模型来训练我自己的数据(10k图像,2个类)。我在第400000次迭代时停止它,精度为~80%。

如果我运行以下命令:

./build/examples/cpp_classification/classification.bin
  models/bvlc_googlenet/deploy.prototxt  
  models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 
  data/ilsvrc12/imagenet_mean.binaryproto
  data/ilsvrc12/synset_words.txt
  1.png

它每次给我一个不同的 - 显然是随机的 - 结果(即如果我运行n次,那么我得到n个不同的结果)。为什么?我的训练失败了吗?它是否仍然使用参考模型中的旧数据?

2 个答案:

答案 0 :(得分:1)

我不认为这是培训的问题。即使训练数据不是,它也应该每次都给出相同(可能是错误的)输出。如果您得到随机结果,则表示权重未正确加载。

当您针对.prototxt加载.caffemodel时,caffe将加载原型中所有图层的权重,其名称与caffemodel中的名称相匹配。对于其他层,它将根据原型文档中的规范进行随机初始化(高斯xavier等)。

因此,现在最好的办法是检查模型是否使用您现在使用的相同原型进行训练。

我发现您使用的是GoogleNet原型和reference_caffenet caffemodel。这是故意的吗?

答案 1 :(得分:1)

如果要部署微调模型,则应检查两个主要内容:

  1. 输入:

    • 输入图片使用BGR频道代替RGB(例如opencv)
    • 平均文件:训练时与平均文件相同?
  2. Prototxt

    • 在设置模型时,您将更改原始原型中的某些图层名称,您应该检查是否使用了相同的图层名称?
  3. 还有一些 Fine-tune tricksCS231n_transfer_learning对微调非常有用。