使用 Keras 迁移学习的边界框回归给出 0% 的准确率。 Sigmoid 激活的输出层仅输出 0 或 1

问题描述 投票:0回答:1

我正在尝试创建一个对象定位模型来检测汽车图像中的车牌。我使用 VGG16 模型并排除顶层以添加我自己的密集层,最后一层有 4 个节点和 sigmoid 激活以获得 (xmin, ymin, xmax, ymax)。

我使用keras提供的函数来读取图像,并将其大小调整为(224,244,3),并使用preprocess_input()函数来处理输入。我还尝试通过填充调整大小以保持比例来手动处理图像,并通过除以 255 来标准化输入。

我训练时似乎什么都不起作用。我的训练和测试准确率是 0%。以下是我针对该模型的代码。

def get_custom(output_size, optimizer, loss):

    vgg = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=IMG_DIMS))

    vgg.trainable = False

    flatten = vgg.output
    flatten = Flatten()(flatten)

    bboxHead = Dense(128, activation="relu")(flatten)
    bboxHead = Dense(32, activation="relu")(bboxHead)

    bboxHead = Dense(output_size, activation="sigmoid")(bboxHead)

    model = Model(inputs=vgg.input, outputs=bboxHead)
    model.compile(loss=loss, optimizer=optimizer, metrics=['accuracy'])

    return model

X 和 y 的形状分别为 (616, 224, 224, 3) 和 (616, 4)。我将坐标除以各自边的长度,因此 y 中的每个值都在 (0,1) 范围内。

我将在下面链接 github 上的 python 笔记本,以便您可以看到完整的代码。我正在使用 google colab 来训练模型。 https://github.com/gauthamramesh3110/image_processing_scripts/blob/main/License_Plate_Detection.ipynb

tensorflow machine-learning keras deep-learning object-detection
1个回答
0
投票

如果你正在做对象本地化任务,那么你不应该使用

'accuracy'
作为你的指标,因为 compile() 的文档说:

当您传递字符串“accuracy”或“acc”时,我们将其转换为一 tf.keras.metrics.BinaryAccuracy, tf.keras.metrics.CategoricalAccuracy, 基于损失函数的tf.keras.metrics.SparseCategoricalAccuracy 使用和模型输出形状

您应该使用 tf.keras.metrics.MeanAbsoluteErrorIoU(Intersection Over Union)或 mAP(Mean Average Precision)来代替

© www.soinside.com 2019 - 2024. All rights reserved.