为什么我的Keras模型会学会识别背景?


9

我正在尝试使用预训练的模型(也在该数据集上进行训练)在Pascal VOC2012上训练Deeplabv3 +的Keras实现

我得到了奇怪的结果,其准确度迅速收敛到1.0:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

测试模型还可以提供100%的准确性。

我决定在训练前后对同一组随机图像进行预测,并发现该模型被鼓励说一切都只是背景(这是Pascal VOC2012中的第一类)。

在此处输入图片说明

在此处输入图片说明

我是深度学习的新手,需要帮助弄清楚这可能来自哪里。

我认为可能是我的损失函数,我将其定义为:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

我对张量的形状是否正确还不确定。我正在使用TF的数据集API加载.tfrecord文件,并且我的注释张量是shape (batch_size, height, width)。会(batch_size, height, width, 21)被我们所需要的?当我尝试将注释图像分离为包含21个图像的张量(每个类一个)时,还会出现模型内部的其他错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

感谢您的帮助!


5
这里有很多要考虑的项目,我几乎不知道从哪里开始(1)您是否使用5的样本量进行培训???(2)您要对图像进行哪些预处理?我觉得答案就在于此(3)您必须提供有关模型的更多信息。您有多少个带标签的样品?有多少种类别?您是否有一套平衡的培训课程?(4)您的准确度为1.0基本上没有任何意义,因为您的损失超高并且还在不断增加。随着准确性的提高,损失应减少
I_Play_With_Data

(1)我正在使用大小为12的批次,但是我认为这无关紧要。我在这里只显示了5个步骤的3个小时期,因为那只是收敛的速度。(2)我的预处理包括对每个图像及其关联的注释进行一些扩充和缩放(可能是裁切)为512x512。(3)在Pascal VOC 2012中,大约有11,500张带标签的图像。考虑到大多数论文在此数据集上达到了85%+ mIOU,我认为它是平衡的。有20个不同的类别的数据集加上一个背景或«暧昧»,共计21
马特

我是古玩 您找到模型结果的原因了吗?
Mark.F

3
如果您共享代码,则可能会发现错误。
Dmytro Prylipko,

1
预训练模型使用与最初使用的相同的数据找到一种方法可以在3个纪元内获得100%的准确性的事实,这使我认为错误在于您的训练标签有误,也许所有标签都设置为对应的标签背景。无论如何,请查看此问题线程,人们在此讨论他们的问题和解决方案以微调模型。该模型不一定是坏的,并且可以解决Tensorflow中的batchnorm错误。
n1k31t4

Answers:


1

您的模型过拟合。每个时期只有5张图片。该模型正在“存储”每个图像的答案。

为了最大程度地减少过度拟合的机会,请增加图像数量。每个对象类别应有数千个示例图像。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.