Caffe GoogleNet 分类.cpp给出随机输出



我使用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个不同的结果)。 为什么?我的训练会失败吗?它是否仍使用参考模型中的旧数据?

我不

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

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

因此,您现在要做的最好的事情是检查模型是否使用您现在使用的相同 prototxt 进行训练。

我看到你正在使用GoogleNet prototxt和reference_caffenet caffemodel。这是故意的吗?

当您想要部署微调的模型时,您应该检查两个主要事项:

  1. 输入:
  • 输入图像使用 BGR 通道而不是 RGB(例如 opencv)
  • 平均文件
  • :训练时与平均文件相同吗?
  1. Prototxt:
  • 微调模型时,您将更改原始 prototxt 中的某些层名称,并且您应该检查是否使用了相同的层名称?

还有一些微调技巧和CS231n_transfer_learning,这对于微调非常有用。

最新更新