SSD 用于检测小物体

问题描述 投票:0回答:2

我将使用 Google Detection API 的 SSD 模型来检测小物体(如图片中的排球)。

我想更改配置文件中的以下参数(宽高比、比例、..):

anchor_generator {
  ssd_anchor_generator {
    num_layers: 6
    min_scale: 0.2
    max_scale: 0.95
    aspect_ratios: 1.0
    aspect_ratios: 2.0
    aspect_ratios: 0.5
    aspect_ratios: 3.0
    aspect_ratios: 0.3333

我有三个问题:

  • 为了修改这些参数(比例,纵横比,...),我需要重新训练模型吗?或者在这些修改之后我仍然可以使用预训练模型并对我的数据进行微调?

  • 由于我想要检测的对象与图像大小相比都很小,增加或减少 mobilenet 中的 conv 层数是否会提高(速度或准确性)检测?如果是,我可以在哪个文件中应用这些更改?

  • 有没有什么具体的方法可以修改SSD mobilenet detector,让它更好地检测小物体?例如,我知道 4X4 特征图(网格)对于我的对象的大小来说太大了,有什么方法可以删除课程网格并只保留精细网格(如 8X8)?

谢谢。

tensorflow detection
2个回答
1
投票

Q:为了修改这些参数(比例,纵横比,...),我需要 重新训练模型?或者在这些修改之后我仍然可以使用 预训练模型并针对我的数据进行微调?

是的,您需要重新训练您的模型,因为网络经过训练可以找到特定纵横比的排球,但是您可以重新训练现有网络而不是使用新网络。

Q: 因为我要检测的物体比较小 根据图像大小,增加或减少转换层的数量 在 mobilenet 中提高(速度或准确性)检测?如果是,其中 我可以应用这些更改吗?

通常你想要接近最小尺寸的网络仍然产生合理的精度,但是我不确定 tensorflow 是否允许设置图像重采样限制,因为在图像的那个尺寸下你可能会完全从图像中重新采样排球。训练是任何神经网络中最慢的部分,运行检测查询对性能来说并不是什么大问题。

Q:有没有具体的修改SSD mobilenet detector的方法 让它更好地检测小物体?例如我知道一个 4X4 特征图(网格)对于我的对象来说太大了,有没有 删除课程网格并仅保留精细网格(如 8X8)的方法?

如前所述,设置重采样很重要,但是我不确定是否可行。也许这可能是尺度参数。


0
投票

我建议您首先使用以下教程来提高该网络系列的性能:https://github.com/tensorflow/models/blob/master/research/object_detection/colab_tutorials/generate_ssd_anchor_box_aspect_ratios_using_k_means_clustering.ipynb.

如果你在TF1需要它告诉我我可以发给你。

问题是,您必须修改网络本身并知道该怎么做。在 ssd_mobilenet_v2_feature_extractor.py 行 110-114 可能很有趣,在这里你可以说什么时候(哪一层)开始检测。 与自定义 ssd-anchors 相关的另一个有用的东西是 multiple_grid_anchor_generator.py 第 328-329 行,因为通常配置文件说 ssd 是 6 层,我链接的教程将生成 6 个自定义 ssd-anchors(阅读教程详细解释),但 python 脚本将其限制为 3...

© www.soinside.com 2019 - 2024. All rights reserved.