Tensorflow对象检测API和图像大小

时间:2019-10-25 08:54:41

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

我通常使用计算机视觉进行练习,尤其是使用TensorFlow对象检测API进行练习,有些事情我还不太了解。

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

我对小物体的检测有些不尽人意,这在使用SSD模型时应该是正常的。在stackoverflow上,我看到有人建议将图像裁剪成较小的帧,但是我在理解一些内容时遇到了困难:

  1. 根据.config文件和SSD纸,图像被调整为300x300像素的固定尺寸(我假设在训练模型和将其用于推理时,图像都可以容纳)。因此,我想这意味着培训和测试/评估图像的原始大小无关紧要,因为无论如何它们始终会调整为300x300?然后,我不明白为什么很多人建议使用与模型经过训练的图像大小相同的图像……这有关系吗?

  2. 对我来说,“小物件”最初的含义还不清楚。
    它是指对象与整个图像之间的尺寸比吗?那么,一个很小的物体可以覆盖……比如说,不到整个图像的5%?
    还是是指构成对象的像素数吗?
    在第一种情况下,在对象周围裁剪图像会很有意义。在第二种情况下,它不起作用,因为识别对象的有用像素数量保持不变。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

  1. 我不明白为什么在保持 SSD 模型训练的图像大小方面会获得更好的结果。 SSD 检测器是完全卷积的,卷积与图像大小无关。
  2. “小对象”是指包含有关对象信息的像素数。以下是裁剪图像以提高小对象性能的方法:Tensorflow 对象检测 API 在调整图像大小之前执行数据增强,(检查 inputs.transform_input_data 文档字符串)因此裁剪然后调整裁剪后的图像大小将保留比调整大小更多的信息完整图像,因为裁剪图像的缩小因子小于完整图像。