基准测试和模型库¶
镜像站点¶
从 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_cfg
为dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
。Pycls: 对应于 pycls 权重,包括 RegNetX。
img_norm_cfg
为dict( 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_cfg
为dict( mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False)
。Caffe2 风格: 目前仅包含 ResNext101_32x8d。
img_norm_cfg
为dict(mean=[103.530, 116.280, 123.675], std=[57.375, 57.120, 58.395], to_rgb=False)
。其他风格: 例如 SSD,其
img_norm_cfg
为dict(mean=[123.675, 116.28, 103.53], std=[1, 1, 1], to_rgb=True)
,YOLOv3,其img_norm_cfg
为dict(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 训练。 |
基线¶
Faster R-CNN¶
请参考 Faster R-CNN 了解详情。
Mask R-CNN¶
请参考 Mask R-CNN 了解详情。
Fast R-CNN(使用预计算的 proposal)¶
请参考 Fast R-CNN 了解详情。
Cascade R-CNN 和 Cascade Mask R-CNN¶
请参考 Cascade R-CNN 了解详情。
Instaboost¶
请参考 Instaboost 了解详情。
Libra R-CNN¶
请参考 Libra R-CNN 了解详情。
引导锚定¶
有关详细信息,请参阅 Guided Anchoring。
FreeAnchor¶
有关详细信息,请参阅 FreeAnchor。
Grid R-CNN (plus)¶
有关详细信息,请参阅 Grid R-CNN。
Mask Scoring R-CNN¶
有关详细信息,请参阅 Mask Scoring R-CNN。
从头开始训练¶
有关详细信息,请参阅 重新思考 ImageNet 预训练。
CentripetalNet¶
有关详细信息,请参阅 CentripetalNet。
AutoAssign¶
有关详细信息,请参阅 AutoAssign。
PanopticFPN¶
有关详细信息,请参阅 PanopticFPN。
MaskFormer¶
有关详细信息,请参阅 MaskFormer。
Mask2Former¶
有关详细信息,请参阅 Mask2Former。
Efficientnet¶
有关详细信息,请参阅 Efficientnet。
其他数据集¶
我们还在 PASCAL VOC、Cityscapes、OpenImages 和 WIDER FACE 上对一些方法进行了基准测试。
预训练模型¶
我们还使用 ResNet-50 和 RegNetX-3.2G 以及多尺度训练和更长的调度时间训练了 Faster R-CNN 和 Mask 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 |