我希望使用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培训,并能提供更多具体步骤来执行培训
因为您的数据中有小对象,所以我建议您尝试以这种方式对640x640图片进行二次采样
…其中“黑色640x640”是您的原始图像。当您了解这些技巧时,您可以通过随机位置采样300x300图像(上面的蓝色、绿色和红色矩形图)轻松获得,从而从该图像中可靠地呈现您的原始图像,直接与SSD Inception V2兼容。也许你可以用这种方法进行可靠的物体识别?训练和推理
另一种利用“众所周知的主干SSD Inception V2的全面深入智能,但仅适用于300x300输入图像”的方法是以以下方式并行分割图像
…这意味着您将为SSD Inceptions-V2的并行拷贝配置300x300大小的输入映像的静态位置。并且,应用简单的“计数逻辑”,例如,计算原始640x640图像中小对象的总数
我希望这些想法能帮助你解决最初的问题
2016年推出的原始SSD paper设计了两种特定的输入图像大小
300x300
和512x512
。然而,这方面的主干是Mobilenet(考虑到速度是主要因素)。您可以尝试将图像大小调整为512x512
,然后进行训练。然而,考虑到回购协议将300x300
作为默认值,可能意味着当输入为该大小而不是任何其他大小时,模型工作得最好然而,还有许多其他模型允许输入大小为
640x640
在Tensorflow models zoo-version 1中,您有
ssd_resnet50_v1
{a2},在version 2中,您有许多其他SSD和EfficientSet变体,它们支持640x640
(但是有不同的主干)通过使用上述模型进行培训,您可能会获得更好的结果
相关问题 更多 >
编程相关推荐