1

我正在建立一个模型来检测身体部位的关键点。为此,我使用了 COCO 数据集(http://cocodataset.org/#download)。我试图理解为什么我会遇到过度拟合问题(训练损失收敛,但我很早就达到了测试损失的上限)。在模型中,我尝试添加 dropout 层(逐渐添加更多具有更高概率的层,但我很快就达到了训练损失停止减少的程度,这同样糟糕。我的理论是我使用的模型不是足够复杂,但我想知道这是可能的原因还是其他原因。我在网上找到的模型都非常深(30+层)。

数据

我正在使用 10,000 个 RGB 图像,每个图像中都有一个人。它们每个都有不同的尺寸,但最大长度和宽度为 640。作为预处理步骤,我通过用 (0,0,0) 或黑色填充任何额外区域(图像的底部和右侧)使每个图像的大小为 640x640。

目标

完整的数据集有很多关键点,但我只对右肩、右肘和右手腕感兴趣。每个身体部位都有 2 个关键点(X 坐标和 Y 坐标),所以我的目标是长度为 6 的列表。

模型

activation_function = 'relu'
batch_size = 16  # ##
epoch_count = 40  # ##
loss_function = 'mean_squared_error'
opt = 'adam'

model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(3, 3), input_shape=inp_shape))
# model.add(Conv2D(filters=16, kernel_size=(3, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=32, kernel_size=(3, 3)))
# model.add(Conv2D(filters=32, kernel_size=(3, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(300, activation=activation_function))
model.add(Dropout(rate=0.1))
model.add(Dense(300, activation=activation_function))
model.add(Dense(num_targets))
model.summary()
model.compile(loss=loss_function, optimizer=opt)
hist = model.fit(x_train, y_train, batch_size=batch_size, epochs=epoch_count,
                 verbose=verbose_level,
                 validation_data=(x_valid, y_valid))
4

2 回答 2

0

除了在答案中已经说过:

  • 您可以有多个Dropout具有不同概率的层,例如在池化层之后。早期层通常具有更高的保留概率,因为它们使用较少的过滤器。
  • 图像数据增强是另一种实现泛化的方法,根据我的经验,它总是会改善结果,至少会略微改善(当然,前提是输入转换不严重)。
  • 批量归一化(及其后继权重归一化层归一化)是一种现代正则化方法,可降低所需的 dropout 强度,有时甚至完全降低,即您可以摆脱 dropout 层。此外,batchnorm 改进了激活统计,这通常使网络学习得更快。除了 dropout 之外,我还使用了它,并且效果很好。
  • 最近发布了一种称为比例指数线性单位 (SELU) 的技术,据说它具有隐式的自归一化特性。它甚至已经在 keras 中实现了。
  • 旧的 L2 或 L1 正则化器仍在使用中。如果没有其他帮助,请考虑添加它。但我很确定,batchnorm、selu 和几个 dropout 层就足够了。
于 2017-10-08T14:18:10.630 回答
0

你的理论

我使用的模型不够复杂

这是一个很好的理论,该模型非常简单,并且鉴于我们不确切知道您遭受了多少过度拟合,过度拟合似乎是由于模型的复杂性造成的。

在模型中,我尝试添加 dropout 层

可能是使模型更复杂一点的简单但有效的方法,但此外,我会增加辍学率。似乎您的 dropout 为0.1,例如尝试0.5并比较过度拟合是否减少。

无论如何,我认为你可以尝试的最好的方法是增加模型的复杂性,但在卷积部分,不仅仅是在Flatten之后添加Dense层。如果你觉得很难,我建议为图像识别的卷积神经网络找到一些预先构建的通用架构,或者为与你的类似问题找到更具体的构建。

告诉我们进展如何!

于 2017-10-07T21:07:55.170 回答