我正在建立一个模型来检测身体部位的关键点。为此,我使用了 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))