stu*_*ujo 2 object detection tensorflow mobilenet
我正在尝试使用 ssd mobilenetv2 从 ipcam 视频流中检测小物体。该模型是在这些小物体的高分辨率图像上训练的,其中物体非常靠近相机。图像是从互联网上下载的。我发现改变锚箱比例和修改特征提取器.py 是解决这个问题的建议解决方案。谁能指导我如何做到这一点?
小智 11
mobilenet-ssd - 非常适合大对象,但它对小对象的性能却很差。使用根据您期望的对象纵横比和大小调整的锚进行训练总是更好。还要考虑的另一件事是,第一个分支是检测最小对象的分支 - 该分支的分辨率是输入的 1/16 - 您应该考虑在 1/8 特征图上添加另一个分支 - 这将帮助处理小物件。
如何更改锚点大小和纵横比: 让我们以用于训练配置的 pipeline.config 文件为例 - https://github.com/tensorflow/models/blob/master/research/object_detection/samples/配置/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 }
Run Code Online (Sandbox Code Playgroud)
min_scale + (max_scale - min_scale)/(num_layers - 1) * (#branch)与SSD 中的定义相同:Single Shot MultiBox Detector - 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
第 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,
}
Run Code Online (Sandbox Code Playgroud)
您可以通过名称选择要从哪些图层开始。
现在为了我的 2 美分,我没有尝试 mobilenet-v2-ssd,主要使用 mobilenet-v1-ssd,但从我的经验来看,对于小物体来说并不是一个好的模型。我想可以通过编辑锚点来优化它,但不确定它是否足以满足您的需求。对于类似 ssd 的一级网络,请考虑使用ssd_mobilenet_v1_fpn_coco - 它适用于 640x640 输入大小,其第一个分支从 1/8 输入大小开始。(缺点 - 模型更大,推理时间更长)
| 归档时间: |
|
| 查看次数: |
4070 次 |
| 最近记录: |