Detectron2 与其他库的兼容性 | 十三
本文是全系列中第4 / 15篇:Detectron2
- Detectron2 使用自定义数据集 | 四
- Detectron2 基准测试 | 十二
- Detectron2 使用自定义数据加载器 | 五
- Detectron2 与其他库的兼容性 | 十三
- Detectron2 使用模型 | 六
- Detectron2 API 之 checkpoint | 十四
- Detectron2 编写模型 | 七
- Detectron2 API 之 config | 十五
- Detectron2 开始训练 | 八
- Detectron2 安装 | 一
- Detectron2 进行评估 | 九
- Detectron2 入门 | 二
- Detectron2 配置 | 十
- Detectron2 扩展默认值 | 三
- Detectron2 部署 | 十一
作者|facebookresearch
编译|Flin
来源|Github
与其他库的兼容性
与Detectron的兼容性(和maskrcnn-benchmark)
Detectron2解决了Detectron中遗留的一些遗留问题。结果,它们的模型不兼容:在两个代码库中以相同的模型权重运行推理将产生不同的结果。
关于推断的主要区别是:
- 现在, 当 width = x2-x1 和 height = y2-y1 时,更自然地计算带有角(x1,y1)和(x2,y2)的box的高度和宽度。在Detectron中,高度和宽度都添加了”+1″。
- 请注意,Caffe2中的相关操作已采用了这种约定的更改 (https://github.com/pytorch/pytorch/pull/20550) , 并带有额外的选项。因此,仍然有可能在Caffe2中使用Detectron2训练的模型进行推理。
-
高度/宽度计算的变化最明显的变化是:
- 边界框回归中的编码/解码。
- 非最大抑制。但是,这里的影响可以忽略不计。
- RPN现在使用具有较少量化伪像的更简单的锚点。
在Detectron中,锚点已量化并且 没有准确的面积(https://github.com/facebookresearch/Detectron/issues/227)。在Detectron2中,锚点在中心对齐以与特征网格点对齐,并且未量化。 -
分类层具有不同的分类标签顺序。
这涉及形状为(…,num_categories + 1,…)的任何可训练参数。在Detectron2中,整数标签[0,K-1]对应于K = num_categories个对象类别,标签”K”对应于特殊的”背景”类别。在Detectron中,标签”0″表示背景,标签[1,K]对应于K个类别。 -
ROIAlign的实现方式有所不同。新的实现在Caffe2中可用。
Caffe2:(https://github.com/pytorch/pytorch/pull/23706).- 与Detectron相比,所有ROI都移动了半个像素,以创建更好的图像特征图对齐方式。有关详细信息,请参见
layers/roi_align.py
。要启用旧的行为,请使用ROIAlign(aligned=False)
或POOLER_TYPE=ROIAlign
代替ROIAlignV2
(默认值)。 -
OI的最小大小不需要为1。这将导致输出的微小差异,但应忽略不计。
- 与Detectron相比,所有ROI都移动了半个像素,以创建更好的图像特征图对齐方式。有关详细信息,请参见
-
掩码推断功能不同。
在Detectron2中,”paste_mask”函数是不同的,应该比Detectron中的准确性更高。此更改可以使COCO上的遮罩AP绝对值提高约0.5%。
训练上也有一些其他差异,但它们不会影响模型级别的兼容性。主要的是:
- 我们通过
RPN.POST_NMS_TOPK_TRAIN
按图像而不是按批处理修复了Detectron中的错误。该修复程序可能会导致某些型号的精度下降(例如,关键点检测),并且需要进行一些参数调整才能匹配Detectron结果。
bug:(https://github.com/facebookresearch/Detectron/issues/459) -
简单起见,我们将边界框回归中的默认损失更改为L1损失,而不是平滑的L1损失。我们已经观察到,这往往会略微降低box AP50,同时针对较高的重叠阈值提高box AP(并导致box AP的总体改善)。
- 我们将COCO边界框和分段注释中的坐标解释为
[0, width]
或[0, height]
中的坐标。COCO关键点注释中的坐标被解释为范围为[0, width - 1]
或[0, width - 1]
的像素索引。请注意,这会影响翻转增强的实现方式。
稍后,我们将在上述有关像素,坐标和”+1″的问题背后分享更多细节和原理。
与Caffe2的兼容性
如上所述,尽管与Detectron不兼容,但相关操作已在Caffe2中实现。因此,可以在Caffe2中转换使用detectron2训练的模型。请参阅本教程的部署。
– 部署:(https://detectron2.readthedocs.io/tutorials/deployment.html)
与TensorFlow的兼容性
TensorFlow中提供了大多数操作,尽管需要解决在调整大小/ ROIAlign /填充方面的一些微小差异。tensorpack FasterRCNN提供了一个有效的转换脚本, 以在TensorFlow中运行标准的detectron2模型。
– tensorpack FasterRCNN:(https://github.com/tensorpack/tensorpack/tree/master/examples/FasterRCNN/convert_d2)
原文链接:https://detectron2.readthedocs.io/notes/compatibility.html
原创文章,作者:磐石,如若转载,请注明出处:https://panchuang.net/2020/06/25/detectron2-%e4%b8%8e%e5%85%b6%e4%bb%96%e5%ba%93%e7%9a%84%e5%85%bc%e5%ae%b9%e6%80%a7-%e5%8d%81%e4%b8%89/