【问题标题】:Tensorflow object detection API and images sizeTensorFlow 对象检测 API 和图像大小
【发布时间】:2019-10-25 08:54:41
【问题描述】:

我正在练习一般的计算机视觉,特别是使用 TensorFlow 对象检测 API,我还没有真正理解一些事情。

我正在尝试重新训练 SSD 模型以检测一类自定义对象(吉他)。
我一直在使用 ssd_mobilenet_v1_cocossd_mobilenet_v2_coco 模型,其中包含从 OpenImage 数据集下载的 1000K 预标记图像的数据集。我用的是标准配置文件,只修改了必要的部分。

我对小物体的检测结果有些不满意,这在使用 SSD 模型时应该是正常的。在 stackoverflow 上,我看到有人建议将图像裁剪为较小的帧,但我无法理解一些事情:

  1. 根据 .config 文件和 SSD 论文,图像被调整为 300x300 像素的固定尺寸(我假设它在训练模型和使用它进行推理时都成立)。所以,我想这意味着训练和测试/评估图像的原始大小无关紧要,因为它们总是被调整为 300x300?然后,我不明白为什么很多人建议使用与模型训练过的相同大小的图像......这有关系吗?

  2. 首先我并不太清楚“小物体”是什么意思。
    是指物体与整个图像之间的尺寸比吗?那么,一个小物体是指一个覆盖......比如说,不到总图像的 5% 的物体?
    或者它是指构成该物体的像素数强>?
    在第一种情况下,裁剪对象周围的图像是有意义的。在第二种情况下,它应该不起作用,因为识别对象的有用像素的数量保持不变。

谢谢!

【问题讨论】:

    标签: python tensorflow object-detection object-detection-api


    【解决方案1】:

    我不确定我在下面给出的答案,但它对我有用,因为你正确地说图像在 ssd_mobilenet-v2 的配置文件中被调整为 300x 300,这个调整大小的作用是将图像压缩到 300x 300 因此失去了重要的功能。这会对尺寸小的物体产生不利影响,因为它们有很多松动的地方。根据您拥有的 GPU 能力,您可以在配置文件中进行一些更改: 1st-将以下行更改为 image_resizer { fixed_shape_resizer { 身高:600 宽度:600 } } 因此现在提供双倍数据(在配置文件中)。 第二 - 上述更改会导致 GPU 内存不足,因此您需要将批量大小从 24 减少到 12 或 8,这可能导致过度拟合,因此也要检查正则化参数。

    第三种可选方法是注释掉以下内容 enter image description here

    这很有帮助,并且可以将训练时间减少近一半。权衡是,如果图像未与您的训练数据对齐,模型的置信度将会下降,并且可能完全无法识别倒猫。

    【讨论】:

    • 可以添加图片说明吗?
    • 我的数据集从 600 x 900 到 1300 x 1000 不等,所以一般说它具有一致的图像大小,但我仍然得到了很好的结果,22 fps。
    【解决方案2】:
    1. 我不明白为什么在训练 SSD 模型时保持图像大小会获得更好的结果。 SSD 检测器是完全卷积的,协卷积与图像大小无关。
    2. “小对象”是指包含对象信息的像素数。以下是裁剪图像以提高小对象性能的意义:Tensorflow 对象检测 API 在调整图像大小之前执行数据增强(检查inputs.transform_input_data doc 字符串),因此裁剪然后调整裁剪图像的大小将比调整完整大小保留更多信息图像,因为裁剪后的图像比完整图像的缩小因子更小。

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多