繁体   English   中英

无法使用 TensorFlow Object 检测 API 以更大的输入分辨率训练 SSD Inception-V2

[英]Can't Train SSD Inception-V2 with Larger Input Resolution with TensorFlow Object Detection API

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

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

我通过设置: num_classes: 4并将训练数据路径指向我的自定义数据集,成功地训练了一个性能良好的 4 类自定义 model。

但是,输入分辨率设置为 300x300,其中:

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

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

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

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

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

我已经尝试了锚框和 model 自定义的几种配置,但我永远无法获得 model 培训。 (看起来像它的训练,但损失没有 go 下降,推断是垃圾输出)

有没有人使用 TensorFlow object 检测 API 以 300x300 以外的分辨率训练 SSD Inception-V2,并且可以提供更具体的步骤来执行训练?

2016 年问世的原始SSD 论文设计了 2 种特定的输入图像尺寸, 300x300512x512 然而,它的主干是 Mobilenet(考虑到速度是主要因素)。 您可以尝试将图像大小调整为512x512 ,然后进行训练。 但是,考虑到 repo 将300x300作为默认值,这可能意味着 model 在输入为该大小而不是其他大小时效果最佳。

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

在 Tensorflow 模型 zoo - 版本 1 中,您有ssd_resnet50_v1 配置文件,在版本 2中,您有许多其他支持640x640的 SSD 和 EfficientDet 变体(但是具有不同的主干)。

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

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

在此处输入图像描述

...其中“黑色 640x640”是您的原始图像。 当您知道技巧后,您可以轻松地通过随机位置采样 300x300 图像(上面用蓝色、绿色、红色矩形表示)来可靠地展示您的原始图像,直接兼容 SSD-Inception V2。 也许您可以通过这种方式进行可靠的 object 识别? 训练和推理。

另一种利用“众所周知的主干 SSD-Inception V2 的全面智能但仅适用于 300x300 输入图像”的方法是按以下方式并行分割图像; 在此处输入图像描述

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

我希望这些想法可以帮助您解决最初的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM