Caffe中的图像分类总是返回相同的类

2024-10-01 15:33:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我对咖啡馆的图像分类有问题。我使用imagenet模型(来自caffe教程)对我创建的数据进行分类,但是我总是得到相同的分类结果(相同的类,即class 3)。 我这样做:

我使用caffeforwindows和Python作为接口

(1)我收集数据。我的示例图像(训练和测试)是大小为5x5x3(RGB)uint8的图像,因此其像素值介于0-255之间。
(2)我将它们调整为imagenet所需的大小:256x256x3。因此,我使用matlab(最近邻插值)中的resize函数。
(3)我创建了LevelDB和image的平均值。
(4)训练我的网络(3000次迭代)。在imagenet定义中,我唯一更改的参数是指向平均图像的路径和级别数据库我得到的结果是:

I0428 12:38:04.350100  3236 solver.cpp:245]     Train net output #0: loss = 1.91102 (* 1 = 1.91102 loss)
I0428 12:38:04.350100  3236 sgd_solver.cpp:106] Iteration 2900, lr = 0.0001
I0428 12:38:30.353361  3236 solver.cpp:229] Iteration 2920, loss = 2.18008
I0428 12:38:30.353361  3236 solver.cpp:245]     Train net output #0: loss = 2.18008 (* 1 = 2.18008 loss)
I0428 12:38:30.353361  3236 sgd_solver.cpp:106] Iteration 2920, lr = 0.0001
I0428 12:38:56.351630  3236 solver.cpp:229] Iteration 2940, loss = 1.90925
I0428 12:38:56.351630  3236 solver.cpp:245]     Train net output #0: loss = 1.90925 (* 1 = 1.90925 loss)
I0428 12:38:56.351630  3236 sgd_solver.cpp:106] Iteration 2940, lr = 0.0001
I0428 12:39:22.341891  3236 solver.cpp:229] Iteration 2960, loss = 1.98917
I0428 12:39:22.341891  3236 solver.cpp:245]     Train net output #0: loss = 1.98917 (* 1 = 1.98917 loss)
I0428 12:39:22.341891  3236 sgd_solver.cpp:106] Iteration 2960, lr = 0.0001
I0428 12:39:48.334151  3236 solver.cpp:229] Iteration 2980, loss = 2.45919
I0428 12:39:48.334151  3236 solver.cpp:245]     Train net output #0: loss = 2.45919 (* 1 = 2.45919 loss)
I0428 12:39:48.334151  3236 sgd_solver.cpp:106] Iteration 2980, lr = 0.0001
I0428 12:40:13.040398  3236 solver.cpp:456] Snapshotting to binary proto file Z:/DeepLearning/S1S2/Stockholm/models_iter_3000.caffemodel
I0428 12:40:15.080418  3236 sgd_solver.cpp:273] Snapshotting solver state to binary proto file Z:/DeepLearning/S1S2/Stockholm/models_iter_3000.solverstate
I0428 12:40:15.820426  3236 solver.cpp:318] Iteration 3000, loss = 2.08741
I0428 12:40:15.820426  3236 solver.cpp:338] Iteration 3000, Testing net (#0)
I0428 12:41:50.398375  3236 solver.cpp:406]     Test net output #0: accuracy = 0.11914
I0428 12:41:50.398375  3236 solver.cpp:406]     Test net output #1: loss = 2.71476 (* 1 = 2.71476 loss)
I0428 12:41:50.398375  3236 solver.cpp:323] Optimization Done.
I0428 12:41:50.398375  3236 caffe.cpp:222] Optimization Done.

(5)我在Python中运行以下代码对单个图像进行分类:

^{pr2}$

不管我使用哪个输入图像,我总是得到类“3”作为分类结果。下面是我训练/分类的一个示例图像:
enter image description here
如果有人知道出了什么问题,我会很高兴的?提前谢谢!在


Tags: 数据图像outputnet分类traincppcaffe
1条回答
网友
1楼 · 发布于 2024-10-01 15:33:49

如果你总是在同一个班,这意味着神经网络没有得到适当的训练。在

  • 确保训练集是平衡的。当一个分类器总是预测同一个类时,这通常是因为一个类被其他类过度表示了。例如,假设您有两个类,第一个由95个实例表示,第二个由5个实例表示。如果分类器将所有的东西都归类为第一类,那么他已经正确地达到了95%。在
  • 一件很明显的事情是你应该规范化输入image / 255.0 - 0.5,它将使输入居中并减小标准差。在
  • 之后,确保训练集中的数据量至少是神经网络中权重的4倍。在
  • 最后但并非最不重要的是,确保训练集被正确地洗牌。在

相关问题 更多 >

    热门问题