我正试图使用ssd mobilenetv2从ipcam视频流中检测小物体。该模型是在这些小物体的高分辨率图像上训练的,这些物体非常接近相机。图像是从互联网上下载的。我发现改变锚框的大小和修改特性extractor.py是解决这个问题的建议。有人能指导我如何做到这一点吗?
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 }
min_scale + (max_scale - min_scale)/(num_layers - 1) * (#branch)
这也需要在代码内部进行更改。每个预定义的模型都有其自己的模型文件-即ssd_mobilenet_v2:https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py
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输入大小处开始。(缺点-更大的模型和更长的推理时间)
idfiyjo82#
迟到的派对,为子孙后代张贴。我使用ssd_mobilenet_v2_fpnlite处理小对象时运气更好...变体阅读fpn在这里https://towardsdatascience.com/review-fpn-feature-pyramid-network-object-detection-262fc7482610
2条答案
按热度按时间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。你会发现下面的论点:
min_scale + (max_scale - min_scale)/(num_layers - 1) * (#branch)
(与SSD:单发多盒探测器-https://arxiv.org/pdf/1512.02325.pdf)这也需要在代码内部进行更改。每个预定义的模型都有其自己的模型文件-即ssd_mobilenet_v2:https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py
您可以根据图层的名称选择要从哪个图层开始。
现在我的2美分,我没有尝试mobilenet-v2-ssd,主要使用mobilenet-v1-ssd,但从我的经验是不是一个很好的模型为小对象。我猜它可以通过编辑锚点来优化一点,但不确定它是否足以满足您的需求。对于一级SSD,如网络,考虑使用ssd_mobilenet_v1_fpn_coco-它在640x640输入大小上工作,并且它的第一分支在1/8输入大小处开始。(缺点-更大的模型和更长的推理时间)
idfiyjo82#
迟到的派对,为子孙后代张贴。我使用ssd_mobilenet_v2_fpnlite处理小对象时运气更好...变体
阅读fpn在这里https://towardsdatascience.com/review-fpn-feature-pyramid-network-object-detection-262fc7482610