与其他库的兼容性

与 Detectron(和 maskrcnn-benchmark)的兼容性

Detectron2 解决了一些 Detectron 中遗留的问题。因此,它们的模型不兼容:使用相同的模型权重进行推理将在两个代码库中产生不同的结果。

关于推理的主要区别是

  • 现在以更自然的方式计算具有角点 (x1, y1) 和 (x2, y2) 的框的高度和宽度,即宽度 = x2 - x1 和高度 = y2 - y1;在 Detectron 中,高度和宽度都添加了“+ 1”。

    请注意,Caffe2 中的相关操作已采用这种约定更改,并带有一个额外的选项。因此,仍然可以使用 Detectron2 训练的模型在 Caffe2 中进行推理。

    高度/宽度计算的更改最显着地更改了

    • 边界框回归中的编码/解码。

    • 非最大抑制。不过,这里的影响非常微不足道。

  • RPN 现在使用更简单的锚点,减少了量化伪影。

    在 Detectron 中,锚点被量化,并且没有准确的区域。在 Detectron2 中,锚点与特征网格点对齐,并且没有被量化。

  • 分类层具有不同的类别标签顺序。

    这涉及任何形状为 (…, num_categories + 1, …) 的可训练参数。在 Detectron2 中,整数标签 [0, K-1] 对应于 K = num_categories 个对象类别,标签“K”对应于特殊的“背景”类别。在 Detectron 中,标签“0”表示背景,标签 [1, K] 对应于 K 个类别。

  • ROIAlign 的实现方式不同。新的实现在 Caffe2 中可用

    1. 与 Detectron 相比,所有 ROI 都向右移动了半个像素,以创建更好的图像特征图对齐。有关详细信息,请参见layers/roi_align.py。要启用旧的行为,请使用ROIAlign(aligned=False),或POOLER_TYPE=ROIAlign 而不是ROIAlignV2(默认值)。

    2. ROI 不需要具有最小尺寸 1。这会导致输出中微小的差异,但应该可以忽略不计。

  • 掩码推理函数不同。

    在 Detectron2 中,“粘贴掩码”函数不同,并且应该比 Detectron 中更准确。此更改可以将 COCO 上的掩码 AP 提高约 0.5% 的绝对值。

训练中也有一些其他差异,但它们不会影响模型级别的兼容性。主要的是

  • 我们修复了 Detectron 中的错误,通过使RPN.POST_NMS_TOPK_TRAIN 成为每图像的,而不是每批次的。此修复可能会导致少数模型(例如关键点检测)的精度略微下降,并且需要一些参数调整才能与 Detectron 结果相匹配。

  • 为简单起见,我们将边界框回归中的默认损失更改为 L1 损失,而不是平滑 L1 损失。我们已经观察到,这往往会略微降低框 AP50,同时提高更高重叠阈值的框 AP(并导致框 AP 总体略微提高)。

  • 我们将 COCO 边界框和分割注释中的坐标解释为范围在[0, width][0, height] 内的坐标。COCO 关键点注释中的坐标被解释为范围在[0, width - 1][0, height - 1] 内的像素索引。请注意,这会影响翻转增强的方式。

本文 详细解释了上述关于像素、坐标和“+1”的问题。

与 Caffe2 的兼容性

如上所述,尽管与 Detectron 不兼容,但相关操作已在 Caffe2 中实现。因此,使用 detectron2 训练的模型可以转换为 Caffe2。请参阅部署以获取教程。

与 TensorFlow 的兼容性

大多数操作在 TensorFlow 中可用,尽管 resize / ROIAlign / 填充实现中的一些细微差异需要解决。一个工作转换脚本由tensorpack Faster R-CNN 提供,用于在 TensorFlow 中运行标准 detectron2 模型。