【问题标题】:How to modify ssd mobilenet config to detect small objects using tensorflow object detection API?如何修改 ssd mobilenet 配置以使用 tensorflow 对象检测 API 检测小对象?
【发布时间】:2020-06-17 15:18:47
【问题描述】:

我正在尝试使用 ssd mobilenetv2 从 ipcam 视频流中检测小物体。该模型是在这些小物体的高分辨率图像上训练的,这些物体非常靠近相机。图像是从互联网下载的。 我发现更改锚框比例和修改特征提取器.py 是解决这个问题的建议解决方案。 谁能指导我如何做到这一点?

【问题讨论】:

  • 我希望有人可以帮助我。

标签: tensorflow object detection mobilenet


【解决方案1】:

mobilenet-ssd - 非常适合大型对象,但它对小型对象的性能很差。 使用调整到对象纵横比和您期望的大小的锚进行训练总是更好。 要考虑的另一件事是,第一个分支是检测最小对象的分支-该分支的分辨率是输入的 1/16-您应该考虑在 1/8 特征图上添加另一个分支-这将帮助处理小物件。

如何更改锚点大小和纵横比: 让我们以用于训练配置的 pipeline.config 文件为例 - https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_mobilenet_v2_coco.config。 你会发现有以下论点:

 90     anchor_generator {
 91       ssd_anchor_generator {
 92         num_layers: 6
 93         min_scale: 0.20000000298
 94         max_scale: 0.949999988079
 95         aspect_ratios: 1.0
 96         aspect_ratios: 2.0
 97         aspect_ratios: 0.5
 98         aspect_ratios: 3.0
 99         aspect_ratios: 0.333299994469
100       }
101     }

如何提前启动分支

这也需要在代码中进行更改。每个预定义模型都有自己的模型文件 - 即 ssd_mobilenet_v2: https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py

第 111:117 行

feature_map_layout = {
    'from_layer': ['layer_15/expansion_output', 'layer_19', '', '', '', ''
                  ][:self._num_layers],
    'layer_depth': [-1, -1, 512, 256, 256, 128][:self._num_layers],
    'use_depthwise': self._use_depthwise,
    'use_explicit_padding': self._use_explicit_padding,
}

您可以通过名称选择从哪些图层开始。

现在我的 2 美分,我没有尝试 mobilenet-v2-ssd,主要使用 mobilenet-v1-ssd,但根据我的经验,对于小物体来说不是一个好的模型。我想可以通过编辑锚点对其进行一些优化,但不确定它是否足以满足您的需求。对于类似网络的一个阶段 ssd,请考虑使用 ssd_mobilenet_v1_fpn_coco - 它适用于 640x640 输入大小,其第一个分支从 1/8 输入大小开始。 (缺点 - 模型更大,推理时间更长)

【讨论】:

  • 非常感谢您解释清楚的答案。我在 stackoverflow 上暂时没有活动。我曾尝试更改锚点大小并在遵循其他类似帖子的答案后删除图层,但它没有对我来说没有帮助。无论如何,我通过添加更多带有小对象和数据增强方法的图像在很大程度上解决了这个问题。再次感谢您的回复。
  • 嘿 Tamir,你能解释一下如何编写 feature_map_layout,有没有简单的方法可以知道图层的名称,我尝试过 tensorboard,但通过它来理解名称和顺序并不容易。
  • 嘿@prateekkhandelwal,你将不得不从主干网络中找出张量名称,因为这些特征图名称对应于主干网络。
猜你喜欢
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多