模型库⚓︎
镜像地址⚓︎
从 MMDetection V2.0 起,我们只通过阿里云维护模型库。V1.x 版本的模型已经弃用。
共同设置⚓︎
- 所有模型都是在
coco_2017_train
上训练,在coco_2017_val
上测试。 - 我们使用分布式训练。
- 所有 pytorch-style 的 ImageNet 预训练主干网络来自 PyTorch 的模型库,caffe-style 的预训练主干网络来自 detectron2 最新开源的模型。
- 为了与其他代码库公平比较,文档中所写的 GPU 内存是8个 GPU 的
torch.cuda.max_memory_allocated()
的最大值,此值通常小于 nvidia-smi 显示的值。 - 我们以网络 forward 和后处理的时间加和作为推理时间,不包含数据加载时间。所有结果通过 benchmark.py 脚本计算所得。该脚本会计算推理 2000 张图像的平均时间。
ImageNet 预训练模型⚓︎
通过 ImageNet 分类任务预训练的主干网络进行初始化是很常见的操作。所有预训练模型的链接都可以在 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 styles: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 styles:现阶段只包含 ResNext101_32x8d。
img_norm_cfg
为dict(mean=[103.530, 116.280, 123.675], std=[57.375, 57.120, 58.395], to_rgb=False)
。 - Other styles: 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 常用到的主干网络细节如下表所示:
模型 | 来源 | 链接 | 描述 |
---|---|---|---|
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 训练。 |
Baselines⚓︎
RPN⚓︎
请参考 RPN。
Faster R-CNN⚓︎
请参考 Faster R-CNN。
Mask R-CNN⚓︎
请参考 Mask R-CNN。
Fast R-CNN (使用提前计算的 proposals)⚓︎
请参考 Fast R-CNN。
RetinaNet⚓︎
请参考 RetinaNet。
Cascade R-CNN and Cascade Mask R-CNN⚓︎
请参考 Cascade R-CNN。
Hybrid Task Cascade (HTC)⚓︎
请参考 HTC。
SSD⚓︎
请参考 SSD。
Group Normalization (GN)⚓︎
请参考 Group Normalization。
Weight Standardization⚓︎
Deformable Convolution v2⚓︎
请参考 Deformable Convolutional Networks。
CARAFE: Content-Aware ReAssembly of FEatures⚓︎
请参考 CARAFE。
Instaboost⚓︎
请参考 Instaboost。
Libra R-CNN⚓︎
请参考 Libra R-CNN。
Guided Anchoring⚓︎
请参考 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。
Train from Scratch⚓︎
请参考 Rethinking ImageNet Pre-training。
NAS-FPN⚓︎
请参考 NAS-FPN。
ATSS⚓︎
请参考 ATSS。
FSAF⚓︎
请参考 FSAF。
RegNetX⚓︎
请参考 RegNet。
Res2Net⚓︎
请参考 Res2Net。
GRoIE⚓︎
请参考 GRoIE。
Dynamic R-CNN⚓︎
请参考 Dynamic R-CNN。
PointRend⚓︎
请参考 PointRend。
DetectoRS⚓︎
请参考 DetectoRS。
Generalized Focal Loss⚓︎
CornerNet⚓︎
请参考 CornerNet。
YOLOv3⚓︎
请参考 YOLOv3。
PAA⚓︎
请参考 PAA。
SABL⚓︎
请参考 SABL。
CentripetalNet⚓︎
请参考 CentripetalNet。
ResNeSt⚓︎
请参考 ResNeSt。
DETR⚓︎
请参考 DETR。
Deformable DETR⚓︎
请参考 Deformable DETR。
AutoAssign⚓︎
请参考 AutoAssign。
YOLOF⚓︎
请参考 YOLOF。
Seesaw Loss⚓︎
请参考 Seesaw Loss。
CenterNet⚓︎
请参考 CenterNet。
YOLOX⚓︎
请参考 YOLOX。
PVT⚓︎
请参考 PVT。
SOLO⚓︎
请参考 SOLO。
QueryInst⚓︎
请参考 QueryInst。
Other datasets⚓︎
我们还在 PASCAL VOC,Cityscapes 和 WIDER FACE 上对一些方法进行了基准测试。
Pre-trained Models⚓︎
我们还通过多尺度训练和更长的训练策略来训练用 ResNet-50 和 RegNetX-3.2G 作为主干网络的 Faster R-CNN 和 Mask R-CNN。这些模型可以作为下游任务的预训练模型。
速度基准⚓︎
训练速度基准⚓︎
我们提供 analyze_logs.py 来得到训练中每一次迭代的平均时间。示例请参考 Log Analysis。
我们与其他流行框架的 Mask R-CNN 训练速度进行比较(数据是从 detectron2 复制而来)。在 mmdetection 中,我们使用 mask-rcnn_r50-caffe_fpn_poly-1x_coco_v1.py 进行基准测试。它与 detectron2 的 mask_rcnn_R_50_FPN_noaug_1x.yaml 设置完全一样。同时,我们还提供了模型权重和训练 log 作为参考。为了跳过 GPU 预热时间,吞吐量按照100-500次迭代之间的平均吞吐量来计算。
框架 | 吞吐量 (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
来改变 log 输出间隔(默认为 50)。
python tools/benchmark.py ${CONFIG} ${CHECKPOINT} [--log-interval $[LOG-INTERVAL]] [--fuse-conv-bn]
模型库中,所有模型在基准测量推理时间时都没设置 fuse-conv-bn
, 此设置可以使推理时间更短。
与 Detectron2 对比⚓︎
我们在速度和精度方面对 mmdetection 和 Detectron2 进行对比。对比所使用的 detectron2 的 commit id 为 185c27e(30/4/2020)。 为了公平对比,我们所有的实验都在同一机器下进行。
硬件⚓︎
- 8 NVIDIA Tesla V100 (32G) GPUs
- 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
精度⚓︎
模型 | 训练策略 | Detectron2 | mmdetection | 下载 |
---|---|---|---|---|
Faster R-CNN | 1x | 37.9 | 38.0 | model | log |
Mask R-CNN | 1x | 38.6 & 35.2 | 38.8 & 35.4 | model | log |
Retinanet | 1x | 36.5 | 37.0 | model | log |
训练速度⚓︎
训练速度使用 s/iter 来度量。结果越低越好。
模型 | Detectron2 | mmdetection |
---|---|---|
Faster R-CNN | 0.210 | 0.216 |
Mask R-CNN | 0.261 | 0.265 |
Retinanet | 0.200 | 0.205 |
推理速度⚓︎
推理速度通过单张 GPU 下的 fps(img/s) 来度量,越高越好。 为了与 Detectron2 保持一致,我们所写的推理时间除去了数据加载时间。 对于 Mask RCNN,我们去除了后处理中 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 |
创建日期: November 27, 2023