Caffe 预测相同 class 而不管图像
Caffe predicts same class regardless of image
我modified the MNIST example and when I train it with my 3 image classes it returns an accuracy of 91%. However, when I modify the C++ example with a deploy prototxt file and labels file,并尝试在一些图像上测试它returns第二个class(1个圆圈)的预测,无论我是什么图像,概率都是1.0给它——即使它是训练集中使用的图像。我已经尝试了十几张图片,它始终只预测一张 class.
为了澄清,在我修改的 C++ 示例中,我确实缩放了要预测的图像,就像在训练阶段缩放图像一样:
img.convertTo(img, CV_32FC1);
img = img * 0.00390625;
如果那是正确的做法,那么我想知道我是否对 deploy_arch.prototxt 文件中计算概率的输出层做错了什么。
我认为您忘记了在分类时缩放输入图像,如 train_test.prototxt 文件第 11 行所示。您可能应该在 C++ 代码中的某处乘以该因子,或者使用 Caffe 层来缩放输入(为此查看 ELTWISE 或 POWER 层)。
编辑:
经过评论中的讨论,结果发现图像均值在 classification.cpp 文件中被错误地减去,而在原始 training/testing 管道中没有被减去。
你的火车class平衡了吗?
您可能会根据一个主要 class 的预测得到一个堆叠网络。
为了找到问题,我建议在训练期间输出火车预测,并与来自不同 class.
的相同火车图像的前向示例的预测进行比较。
我modified the MNIST example and when I train it with my 3 image classes it returns an accuracy of 91%. However, when I modify the C++ example with a deploy prototxt file and labels file,并尝试在一些图像上测试它returns第二个class(1个圆圈)的预测,无论我是什么图像,概率都是1.0给它——即使它是训练集中使用的图像。我已经尝试了十几张图片,它始终只预测一张 class.
为了澄清,在我修改的 C++ 示例中,我确实缩放了要预测的图像,就像在训练阶段缩放图像一样:
img.convertTo(img, CV_32FC1);
img = img * 0.00390625;
如果那是正确的做法,那么我想知道我是否对 deploy_arch.prototxt 文件中计算概率的输出层做错了什么。
我认为您忘记了在分类时缩放输入图像,如 train_test.prototxt 文件第 11 行所示。您可能应该在 C++ 代码中的某处乘以该因子,或者使用 Caffe 层来缩放输入(为此查看 ELTWISE 或 POWER 层)。
编辑:
经过评论中的讨论,结果发现图像均值在 classification.cpp 文件中被错误地减去,而在原始 training/testing 管道中没有被减去。
你的火车class平衡了吗? 您可能会根据一个主要 class 的预测得到一个堆叠网络。 为了找到问题,我建议在训练期间输出火车预测,并与来自不同 class.
的相同火车图像的前向示例的预测进行比较。