如何修改ssd mobilenet配置以使用tensorflow对象检测API检测小对象?

1rhkuytd  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(126)

我正试图使用ssd mobilenetv2从ipcam视频流中检测小物体。该模型是在这些小物体的高分辨率图像上训练的,这些物体非常接近相机。图像是从互联网上下载的。我发现改变锚框的大小和修改特性extractor.py是解决这个问题的建议。有人能指导我如何做到这一点吗?

mwyxok5s

mwyxok5s1#

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输入大小处开始。(缺点-更大的模型和更长的推理时间)

idfiyjo8

idfiyjo82#

迟到的派对,为子孙后代张贴。我使用ssd_mobilenet_v2_fpnlite处理小对象时运气更好...变体
阅读fpn在这里https://towardsdatascience.com/review-fpn-feature-pyramid-network-object-detection-262fc7482610

相关问题