从 MMDetection V2.0 起,我们只通过阿里云维护模型库。V1.x 版本的模型已经弃用。
coco_2017_train
上训练,在 coco_2017_val
上测试。torch.cuda.max_memory_allocated()
的最大值,此值通常小于 nvidia-smi 显示的值。通过 ImageNet 分类任务预训练的主干网络进行初始化是很常见的操作。所有预训练模型的链接都可以在 open_mmlab 中找到。根据 img_norm_cfg
和原始权重,我们可以将所有 ImageNet 预训练模型分为以下几种情况:
img_norm_cfg
为 dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
。img_norm_cfg
为 dict( mean=[103.530, 116.280, 123.675], std=[57.375, 57.12, 58.395], to_rgb=False)
。img_norm_cfg
为 dict( mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False)
。img_norm_cfg
为 dict(mean=[103.530, 116.280, 123.675], std=[57.375, 57.120, 58.395], to_rgb=False)
。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 训练。 |
请参考 RPN。
请参考 Faster R-CNN。
请参考 Mask R-CNN。
请参考 Fast R-CNN。
请参考 RetinaNet。
请参考 Cascade R-CNN。
请参考 HTC。
请参考 SSD。
请参考 Group Normalization。
请参考 Deformable Convolutional Networks。
请参考 CARAFE。
请参考 Instaboost。
请参考 Libra R-CNN。
请参考 Guided Anchoring。
请参考 FCOS。
请参考 FoveaBox。
请参考 RepPoints。
请参考 FreeAnchor。
请参考 Grid R-CNN。
请参考 GHM。
请参考 GCNet。
请参考 HRNet。
请参考 Mask Scoring R-CNN。
请参考 Rethinking ImageNet Pre-training。
请参考 NAS-FPN。
请参考 ATSS。
请参考 FSAF。
请参考 RegNet。
请参考 Res2Net。
请参考 GRoIE。
请参考 Dynamic R-CNN。
请参考 PointRend。
请参考 DetectoRS。
请参考 CornerNet。
请参考 YOLOv3。
请参考 PAA。
请参考 SABL。
请参考 CentripetalNet。
请参考 ResNeSt。
请参考 DETR。
请参考 Deformable DETR。
请参考 AutoAssign。
请参考 YOLOF。
请参考 Seesaw Loss。
请参考 CenterNet。
请参考 YOLOX。
请参考 PVT。
请参考 SOLO。
请参考 QueryInst。
我们还在 PASCAL VOC,Cityscapes 和 WIDER FACE 上对一些方法进行了基准测试。
我们还通过多尺度训练和更长的训练策略来训练用 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
, 此设置可以使推理时间更短。
我们在速度和精度方面对 mmdetection 和 Detectron2 进行对比。对比所使用的 detectron2 的 commit id 为 185c27e(30/4/2020)。
为了公平对比,我们所有的实验都在同一机器下进行。
模型 | 训练策略 | 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 |