tensorflow - 使用 Keras 迁移学习的边界框回归给出 0% 的准确率。Sigmoid 激活的输出层只输出 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
提前致谢。我在这里真的需要帮助。
解决方案
如果您正在执行对象本地化任务,那么您不应该将'accuracy'
其用作指标,因为compile() 的文档说:
当您传递字符串 'accuracy' 或 'acc' 时,我们会根据使用的损失函数和模型输出形状
您应该改用tf.keras.metrics.MeanAbsoluteError、IoU (联合交集)或mAP(平均平均精度)
推荐阅读
- swift - 从超类访问子类函数
- c++ - #include 上的 Code::Blocks (MinGW) 编译错误
- android - 为什么 React native 给出错误“adb”不被识别为内部或外部命令?
- json - 我可以在 SQL Server 中修改多对象 JSON 数组中的所有值吗?
- wso2esb - Datamapper 中的外部值使用 - WSO2 ESB
- jquery - 如何通过jquery将单选按钮的值与类合并
- vue.js - Vue.js - 使用图像字段搜索排序表
- c# - 转换列表
到 C# 中的 DataTable 列 - scala - 异常泄漏问题
- ios - 当 Ionic 3 应用程序在大于 9.3 的 ios 上运行时,Xcode 给出异常