快捷键

基准测试和模型库

镜像站点

从 MMDetection V2.0 开始,我们仅使用阿里云维护模型库。V1.x 的模型库已弃用。

通用设置

  • 所有模型都在 coco_2017_train 上训练,并在 coco_2017_val 上测试。

  • 我们使用分布式训练。

  • 所有在 ImageNet 上预训练的 pytorch 风格的 backbone 模型都来自 PyTorch 模型库,caffe 风格的预训练 backbone 模型则从 detectron2 中最新发布的模型转换而来。

  • 为了与其他代码库进行公平比较,我们将 GPU 内存报告为所有 8 个 GPU 的 torch.cuda.max_memory_allocated() 的最大值。请注意,此值通常小于 nvidia-smi 显示的值。

  • 我们将推理时间报告为网络前向传播和后处理的总时间,不包括数据加载时间。结果使用脚本 benchmark.py 获得,该脚本计算 2000 张图像的平均时间。

ImageNet 预训练模型

通常从在 ImageNet 分类任务上预训练的 backbone 模型初始化。所有预训练模型链接可以在 open_mmlab 中找到。根据 img_norm_cfg 和权重来源,我们可以将所有 ImageNet 预训练模型权重划分为几种情况

  • TorchVision: 对应于 torchvision 权重,包括 ResNet50、ResNet101。 img_norm_cfgdict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)

  • Pycls: 对应于 pycls 权重,包括 RegNetX。 img_norm_cfgdict(   mean=[103.530, 116.280, 123.675], std=[57.375, 57.12, 58.395], to_rgb=False)

  • MSRA 风格: 对应于 MSRA 权重,包括 ResNet50_Caffe 和 ResNet101_Caffe。 img_norm_cfgdict(   mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False)

  • Caffe2 风格: 目前仅包含 ResNext101_32x8d。 img_norm_cfgdict(mean=[103.530, 116.280, 123.675], std=[57.375, 57.120, 58.395], to_rgb=False)

  • 其他风格: 例如 SSD,其 img_norm_cfgdict(mean=[123.675, 116.28, 103.53], std=[1, 1, 1], to_rgb=True),YOLOv3,其 img_norm_cfgdict(mean=[0, 0, 0], std=[255., 255., 255.], to_rgb=True)

下面列出了 MMDetection 中常用的 backbone 模型的详细表格

模型 来源 链接 描述
ResNet50 TorchVision torchvision 的 ResNet-50 来自 torchvision 的 ResNet-50.
ResNet101 TorchVision torchvision 的 ResNet-101 来自 torchvision 的 ResNet-101.
RegNetX Pycls RegNetX_3.2gf, RegNetX_800mf. 等。 来自 pycls.
ResNet50_Caffe MSRA MSRA 的 ResNet-50 转换后的 Detectron2 的 R-50.pkl 模型的副本。原始权重来自 MSRA 的原始 ResNet-50.
ResNet101_Caffe MSRA MSRA 的 ResNet-101 转换后的 Detectron2 的 R-101.pkl 模型的副本。原始权重来自 MSRA 的原始 ResNet-101.
ResNext101_32x8d Caffe2 Caffe2 ResNext101_32x8d 转换后的 Detectron2 的 X-101-32x8d.pkl 模型的副本。ResNeXt-101-32x8d 模型在 FB 使用 Caffe2 训练。

基线

RPN

请参考 RPN 了解详情。

Faster R-CNN

请参考 Faster R-CNN 了解详情。

Mask R-CNN

请参考 Mask R-CNN 了解详情。

Fast R-CNN(使用预计算的 proposal)

请参考 Fast R-CNN 了解详情。

RetinaNet

请参考 RetinaNet 了解详情。

Cascade R-CNN 和 Cascade Mask R-CNN

请参考 Cascade R-CNN 了解详情。

混合任务级联 (HTC)

请参考 HTC 了解详情。

SSD

请参考 SSD 了解详情。

分组归一化 (GN)

请参考 分组归一化 了解详情。

权重标准化

请参考 权重标准化 了解详情。

可变形卷积 v2

请参考 可变形卷积网络 了解详情。

CARAFE: 内容感知特征重组

请参考 CARAFE 了解详情。

Instaboost

请参考 Instaboost 了解详情。

Libra R-CNN

请参考 Libra R-CNN 了解详情。

引导锚定

有关详细信息,请参阅 Guided Anchoring

FCOS

有关详细信息,请参阅 FCOS

FoveaBox

有关详细信息,请参阅 FoveaBox

RepPoints

有关详细信息,请参阅 RepPoints

FreeAnchor

有关详细信息,请参阅 FreeAnchor

Grid R-CNN (plus)

有关详细信息,请参阅 Grid R-CNN

GHM

有关详细信息,请参阅 GHM

GCNet

有关详细信息,请参阅 GCNet

HRNet

有关详细信息,请参阅 HRNet

Mask Scoring R-CNN

有关详细信息,请参阅 Mask Scoring R-CNN

从头开始训练

有关详细信息,请参阅 重新思考 ImageNet 预训练

NAS-FPN

有关详细信息,请参阅 NAS-FPN

ATSS

有关详细信息,请参阅 ATSS

FSAF

有关详细信息,请参阅 FSAF

RegNetX

有关详细信息,请参阅 RegNet

Res2Net

有关详细信息,请参阅 Res2Net

GRoIE

有关详细信息,请参阅 GRoIE

动态 R-CNN

有关详细信息,请参阅 动态 R-CNN

PointRend

有关详细信息,请参阅 PointRend

DetectoRS

有关详细信息,请参阅 DetectoRS

广义焦点损失

有关详细信息,请参阅 广义焦点损失

CornerNet

有关详细信息,请参阅 CornerNet

YOLOv3

有关详细信息,请参阅 YOLOv3

PAA

有关详细信息,请参阅 PAA

SABL

有关详细信息,请参阅 SABL

CentripetalNet

有关详细信息,请参阅 CentripetalNet

ResNeSt

有关详细信息,请参阅 ResNeSt

DETR

有关详细信息,请参阅 DETR

可变形 DETR

有关详细信息,请参阅 可变形 DETR

AutoAssign

有关详细信息,请参阅 AutoAssign

YOLOF

有关详细信息,请参阅 YOLOF

跷跷板损失

有关详细信息,请参阅 跷跷板损失

CenterNet

有关详细信息,请参阅 CenterNet

YOLOX

有关详细信息,请参阅 YOLOX

PVT

有关详细信息,请参阅 PVT

SOLO

有关详细信息,请参阅 SOLO

QueryInst

有关详细信息,请参阅 QueryInst

PanopticFPN

有关详细信息,请参阅 PanopticFPN

MaskFormer

有关详细信息,请参阅 MaskFormer

DyHead

有关详细信息,请参阅 DyHead

Mask2Former

有关详细信息,请参阅 Mask2Former

Efficientnet

有关详细信息,请参阅 Efficientnet

其他数据集

我们还在 PASCAL VOCCityscapesOpenImagesWIDER FACE 上对一些方法进行了基准测试。

预训练模型

我们还使用 ResNet-50 和 RegNetX-3.2G 以及多尺度训练和更长的调度时间训练了 Faster R-CNNMask R-CNN。这些模型用作下游任务的强大预训练模型,以方便使用。

速度基准测试

训练速度基准测试

我们提供 analyze_logs.py 来获取训练中迭代的平均时间。您可以在 日志分析 中找到示例。

我们比较了 Mask R-CNN 与其他一些流行框架的训练速度(数据来自 detectron2)。对于 mmdetection,我们使用 mask-rcnn_r50-caffe_fpn_poly-1x_coco_v1.py 进行基准测试,该设置应与 detectron2 的 mask_rcnn_R_50_FPN_noaug_1x.yaml 相同。我们还提供了 检查点训练日志 供参考。吞吐量计算为迭代 100-500 中的平均吞吐量,以跳过 GPU 预热时间。

实现 吞吐量(img/s)
Detectron2 62
MMDetection 61
maskrcnn-benchmark 53
tensorpack 50
simpledet 39
Detectron 19
matterport/Mask_RCNN 14

推理速度基准测试

我们提供 benchmark.py 来对推理延迟进行基准测试。该脚本使用 2000 张图像对模型进行基准测试,并计算忽略前 5 次的平均时间。您可以通过设置 LOG-INTERVAL 来更改输出日志间隔(默认值:50)。

python tools/benchmark.py ${CONFIG} ${CHECKPOINT} [--log-interval $[LOG-INTERVAL]] [--fuse-conv-bn]

我们模型库中所有模型的延迟都已进行基准测试,但没有设置 fuse-conv-bn,通过设置它可以获得更低的延迟。

与 Detectron2 的比较

我们在速度和性能方面比较了 mmdetection 和 Detectron2。我们使用 detectron 的提交 ID 185c27e(2020 年 4 月 30 日)。为了公平比较,我们在同一台机器上安装并运行这两个框架。

硬件

  • 8 个 NVIDIA Tesla V100(32G)GPU

  • Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz

软件环境

  • Python 3.7

  • PyTorch 1.4

  • CUDA 10.1

  • CUDNN 7.6.03

  • NCCL 2.4.08

性能

类型 Lr schd Detectron2 mmdetection 下载
Faster R-CNN 1x 37.9 38.0 模型 | 日志
Mask R-CNN 1x 38.6 & 35.2 38.8 & 35.4 模型 | 日志
Retinanet 1x 36.5 37.0 模型 | 日志

训练速度

训练速度以 s/iter 衡量。越低越好。

类型 Detectron2 mmdetection
Faster R-CNN 0.210 0.216
Mask R-CNN 0.261 0.265
Retinanet 0.200 0.205

推理速度

推理速度以 fps (img/s) 在单个 GPU 上衡量,越高越好。为了与 Detectron2 保持一致,我们报告纯推理速度(不包括数据加载时间)。对于 Mask R-CNN,我们排除了后处理中 RLE 编码的时间。我们还包含官方报告的运行速度(括号中),由于硬件差异,这略高于在我们服务器上测试的结果。

类型 Detectron2 mmdetection
Faster R-CNN 25.6 (26.3) 22.2
Mask R-CNN 22.5 (23.3) 19.6
Retinanet 17.8 (18.2) 20.6

训练内存

类型 Detectron2 mmdetection
Faster R-CNN 3.0 3.8
Mask R-CNN 3.4 3.9
Retinanet 3.9 3.4