体の部位のキーポイントを検出するモデルを構築しています。そのために、COCO データセット ( http://cocodataset.org/#download ) を使用しています。オーバーフィッティングの問題が発生する理由を理解しようとしています (トレーニングの損失は収束しますが、損失をテストするために非常に早い段階で上限に達します)。モデルでは、ドロップアウトのレイヤーを追加しようとしました (徐々に確率の高いレイヤーを追加しますが、トレーニングの損失が減少しなくなる点にすぐに到達しますが、これは同様に悪いことです。私の理論では、私が使用するモデルはそうではありません十分に複雑ですが、それが理由である可能性が高いのか、それとも別の理由である可能性があるのか を知りたい. オンラインで見つけたモデルはすべて非常に深い (30 + レイヤー).
データ
それぞれに 1 人の人物が写っている 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))