使用 AutoML 训练小物体检测模型

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何训练物体检测模型,以使用 Azure 机器学习中的自动化 ML 检测高分辨率图像中的小物体。

通常,用于物体检测的计算机视觉模型适用于包含相对较大物体的数据集。 但是,由于内存和计算限制,这些模型在检测高分辨率图像中的小物体时往往表现不佳。 由于高分辨率图像通常很大,在输入到模型之前需要调整其大小,这就限制了模型检测较小物体(相对于初始图像大小而言)的能力。

为了帮助解决此问题,自动化 ML 支持计算机视觉功能所包括的平铺功能。 自动化 ML 中的平铺功能基于用于小物体检测的平铺功能的效力中的概念。

平铺时,每个图像将分割成图块网格。 相邻的图块在宽度和高度的维度上彼此重叠。 图块是从原件中裁剪出来的,如下图所示。

图中显示图像被分割为重叠图块网格。

先决条件

支持的模型

适用于物体检测任务的图像自动化 ML 支持的所有模型都支持使用平铺功能的小物体检测。

在训练期间启用平铺

若要启用平铺,可以将 tile_grid_size 参数设置为类似“3x2”的值;其中 3 是沿宽度维度的图块数量,2 是沿高度维度的图块数量。 当此参数设置为“3x2”时,每个图像将拆分为 3 x 2 的图块网格。 每个图块与相邻的图块重叠,因此落在图块边界上的任何物体将完全包含在一个图块中。 通过 tile_overlap_ratio 参数(默认值为 25%)控制这种重叠。

启用平铺后,整个图像以及从其生成的图块将通过模型传递。 将这些图像和图块馈送到模型之前,会根据 min_sizemax_size 参数调整其大小。 由于需要处理这些额外的数据,计算时间将成比例增加。

例如,当 tile_grid_size 参数为“3x2”时,计算时间大约是不启用平铺时的七倍。

可以在训练参数中将 tile_grid_size 的值指定为字符串。

适用于:Azure CLI ml 扩展 v2(当前版本)

training_parameters:
  tile_grid_size: '3x2'

tile_grid_size 参数的值取决于图像维度以及图像中物体的大小。 例如,当图像中包含较小物体时,增大图块数量会有帮助。

若要为数据集选择此参数的最佳值,可以使用超参数搜索。 为此,可以在超参数空间中为此参数指定所选值。

适用于:Azure CLI ml 扩展 v2(当前版本)

search_space:
  - model_name:
      type: choice
      values: ['fasterrcnn_resnet50_fpn']
    tile_grid_size:
      type: choice
      values: ['2x1', '3x2', '5x3']

在推理期间平铺

部署在启用平铺的情况下训练的模型时,在推理期间也会发生平铺。 自动化 ML 使用训练中的 tile_grid_size 值在推理期间生成图块。 整个图像和相应的图块将通过模型传递,其中的物体建议将会合并,以输出最终预测结果,如下图所示。

图中显示正在合并图像和图块中的对象建议以形成最终预测。

注意

有可能会从多个图块中检测到同一个物体,可执行重复项检测来消除这种重复。

重复项检测是通过对图块和图像的建议运行 NMS 来执行的。 当多个建议重叠时,将选取分数最高的一个,其他建议将作为重复项被丢弃。如果两个建议之间的交并比 (iou) 大于 tile_predictions_nms_thresh 参数,则认为两者是重叠的。

还可以选择仅在推理期间启用平铺,而不在训练中启用。 为此,请仅在推理期间设置 tile_grid_size 参数,而在训练时则不设置它。

这样可以针对某些数据集来提高性能,并且可以避免在训练时由于使用平铺而产生额外成本。

平铺超参数

下面是可用于控制平铺功能的参数。

参数名称 说明 默认
tile_grid_size 用于平铺每个图像的网格大小。 在训练、验证和推理期间可用。

应以 '3x2' 格式作为字符串传递。

注意:设置此参数会成比例增加计算时间,因为模型将会处理所有图块和图像。
无默认值
tile_overlap_ratio 控制每个维度中相邻图块之间的重叠率。 如果落在图块边界上的物体太大,因而无法完全放入其中一个图块,请增大此参数的值,使物体至少完全放入其中一个图块。

必须是 [0, 1) 范围内的浮点数。
0.25
tile_predictions_nms_thresh 在合并图块和图像的预测时,用于执行非最大抑制 (nms) 的交并比阈值。 在验证和推理期间可用。 如果在最终预测中检测到了每个物体有多个框,请更改此参数。

必须是 [0, 1] 范围内的浮点数。
0.25

示例笔记本

有关设置和训练物体检测模型的详细代码示例,请参阅物体检测示例笔记本

注意

本文中的所有图像是根据 MIT 许可协议的“准许使用”部分提供的。 版权所有 © 2020 Roboflow, Inc.

后续步骤