无法使用TensorFlow对象检测API训练具有更大输入分辨率的SSD接收V2

2024-04-28 07:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用TensorFlow对象检测API在分辨率大于300x300的自定义数据集上从头开始训练SSD Inception-V2

我将其作为示例配置文件引用:https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_inception_v2_coco.config

通过设置以下各项,我成功培训了一个性能良好的4级定制模型: num_classes: 4并将训练数据路径指向我的自定义数据集

但是,输入分辨率设置为300x300,带有:

image_resizer {
  fixed_shape_resizer {
    height: 300
    width: 300
  }
}

我的数据集有非常小的对象,我想在训练期间提高输入分辨率

但是,如果我只是将此设置更改为:

image_resizer {
  fixed_shape_resizer {
    height: 640
    width: 640
  }
}

模型根本没有训练,损失也停滞不前。我看到一些其他的线程讨论了更改锚定框和定制SSD网络以与新的分辨率兼容

我尝试过锚箱的几种配置和模型定制,但我永远无法获得模型培训。(看起来像是训练,但损失没有减少,推断是垃圾输出)

是否有人对SSD Inception-V2进行过分辨率为300x300以外的TensorFlow对象检测API培训,并能提供更多具体步骤来执行培训


Tags: 数据对象模型imageapitensorflow分辨率v2
2条回答

因为您的数据中有小对象,所以我建议您尝试以这种方式对640x640图片进行二次采样

enter image description here

…其中“黑色640x640”是您的原始图像。当您了解这些技巧时,您可以通过随机位置采样300x300图像(上面的蓝色、绿色和红色矩形图)轻松获得,从而从该图像中可靠地呈现您的原始图像,直接与SSD Inception V2兼容。也许你可以用这种方法进行可靠的物体识别?训练和推理

另一种利用“众所周知的主干SSD Inception V2的全面深入智能,但仅适用于300x300输入图像”的方法是以以下方式并行分割图像enter image description here

…这意味着您将为SSD Inceptions-V2的并行拷贝配置300x300大小的输入映像的静态位置。并且,应用简单的“计数逻辑”,例如,计算原始640x640图像中小对象的总数

我希望这些想法能帮助你解决最初的问题

2016年推出的原始SSD paper设计了两种特定的输入图像大小300x300512x512。然而,这方面的主干是Mobilenet(考虑到速度是主要因素)。您可以尝试将图像大小调整为512x512,然后进行训练。然而,考虑到回购协议将300x300作为默认值,可能意味着当输入为该大小而不是任何其他大小时,模型工作得最好

然而,还有许多其他模型允许输入大小为640x640

在Tensorflow models zoo-version 1中,您有ssd_resnet50_v1{a2},在version 2中,您有许多其他SSD和EfficientSet变体,它们支持640x640(但是有不同的主干)

通过使用上述模型进行培训,您可能会获得更好的结果

相关问题 更多 >