我想在自定义数据集上训练 Mobilenet SSD 模型。
我研究了重新训练模型的工作流程,并注意到配置文件中的 image_resizer{} 块:
此处的纵横比是否必须为 1:1,例如 300x300,或者我可以指定自定义比例吗?
我所有的数据集图像都是 960x256 - 所以我可以输入这个尺寸作为高度和宽度吗?还是我需要调整所有图像的大小以使宽高比为 1:1?
我想在自定义数据集上训练 Mobilenet SSD 模型。
我研究了重新训练模型的工作流程,并注意到配置文件中的 image_resizer{} 块:
此处的纵横比是否必须为 1:1,例如 300x300,或者我可以指定自定义比例吗?
我所有的数据集图像都是 960x256 - 所以我可以输入这个尺寸作为高度和宽度吗?还是我需要调整所有图像的大小以使宽高比为 1:1?
在模型文件中选择高度和宽度(根据您的链接),作为您希望模型训练和操作的输入图像的形状。如果必须,模型会将输入图像的大小调整为指定的大小。
所以这可能是您输入图像的大小(如果您的硬件可以训练和操作该大小的模型):
image_resizer {
fixed_shape_resizer {
height: 256
width: 960
}
}
选择将取决于训练图像的大小以及训练(和使用)该模型大小所需的资源。
我通常使用 512x288,因为这种尺寸的模型在 Raspberry Pi 上运行良好。我准备了各种规模的训练图像,正好是这个大小。所以图像缩放器在训练期间不起作用。
为了进行推理,我输入了 1920x1080 的图像,因此图像缩放器在它们进入 Mobilenet 之前将它们缩放到 512x288,保持纵横比。
然而,纵横比在我的领域并不重要,因为这种扭曲是自然发生的。
所以是的,只需使用您的训练图像尺寸。
如果您保持原样,无论图像的实际大小如何,网络都会将您的输入图像大小调整为 300x300。您可以尝试的另一件事是将 image_resizer 块替换为以下更改:
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension: 600
max_dimension: 1024
}
}
,它将在 [min_dim, max_dim] 范围内为网络提供未成形的输入图像。我不知道这是否可行,因为我相信 ssd 检测器需要将输入图像调整为正方形,这意味着具有相同的高度和宽度,例如 224x224 或 128x128。您不必对硬图像进行任何手动更改。