Mobilenet SSD输入图像大小

时间:2018-02-22 14:11:03

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

我想在自定义数据集上训练Mobilenet SSD模型。

我已经研究了重新训练模型的工作流程,并注意到配置文件中的image_resizer {}块:

https://github.com/tensorflow/models/blob/d6d0868209833e014074d6cb4f32558e7acf2a6d/research/object_detection/samples/configs/ssd_mobilenet_v1_pets.config#L43

此处的宽高比是否必须为1:1,如300x300,还是可以指定自定义比率?

我的所有数据集图像都是960x256 - 所以我可以输入这个尺寸的高度和宽度吗?或者我是否需要调整所有图像的大小以使宽高比为1:1?

2 个答案:

答案 0 :(得分:1)

在模型文件中(根据您的链接)选择高度和宽度,以使其为模型在其上进行训练和操作的输入图像的形状。如果需要,模型会将输入图像的大小调整为指定的大小。

因此,这可能是输入图像的大小(如果您的硬件可以训练和操作该大小的模型):

image_resizer {
    fixed_shape_resizer {
        height: 256
        width: 960
    }
}

选择将取决于训练图像的大小以及训练(和使用)该模型大小所需的资源。

我通常使用512x288,因为这种尺寸的模型可以在Raspberry Pi上愉快地运行。我以这种大小准备了各种比例的训练图像。因此,图像调整器在训练期间不起作用。

为了进行推断,我以1920x1080的分辨率输入图像,因此图像调整器在将其传递到Mobilenet之前将其缩放为512x288,并保持宽高比。

但是,长宽比在我的领域中并不重要,因为这种变形是自然发生的。

是的,只需使用您的训练图像尺寸即可。

答案 1 :(得分:0)

如果保持原样,无论图像的实际尺寸如何,网络都会将输入图像的大小调整为300x300。您可以尝试的另一件事是使用以下更改替换image_resizer块:

image_resizer 
{
  keep_aspect_ratio_resizer 
  {
    min_dimension: 600
    max_dimension: 1024
  }
}

,它将为您的输入图像提供未整形的网络,范围为[min_dim,max_dim]。我不知道,如果这将起作用,因为我相信ssd探测器要求输入图像调整为正方形,意味着具有相同的高度和宽度,例如224x224或128x128。您无需对硬图像进行任何手动更改。