ベンチマークとモデル動物園¶
ミラーサイト¶
MMDetection V2.0 以降、モデル動物園のメンテナンスには aliyun のみを使用しています。V1.x のモデル動物園は非推奨になりました。
共通の設定¶
すべてのモデルは
coco_2017_train
で訓練され、coco_2017_val
でテストされました。分散訓練を使用しています。
ImageNet 上で事前訓練されたすべての PyTorch スタイルのバックボーンは PyTorch モデル動物園から取得し、Caffe スタイルの事前訓練されたバックボーンは、新しくリリースされた detectron2 のモデルから変換されました。
他のコードベースとの公平な比較のために、8 つの GPU 全ての
torch.cuda.max_memory_allocated()
の最大値として GPU メモリを報告します。この値は通常、nvidia-smi
が表示する値よりも小さくなります。推論時間は、データ読み込み時間を除く、ネットワークフォワーディングと後処理の合計時間として報告します。結果は、2000 枚の画像で平均時間を計算するスクリプト benchmark.py を使用して取得されました。
ImageNet 事前学習済みモデル¶
ImageNet 分類タスクで事前学習されたバックボーンモデルから初期化するのが一般的です。すべての事前学習済みモデルのリンクは、open_mmlab で確認できます。img_norm_cfg
と重みのソースに応じて、すべての ImageNet 事前学習済みモデルの重みをいくつかのケースに分類できます。
TorchVision: ResNet50、ResNet101 など、torchvision の重みに対応しています。
img_norm_cfg
はdict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
です。Pycls: RegNetX など、pycls の重みに対応しています。
img_norm_cfg
はdict( mean=[103.530, 116.280, 123.675], std=[57.375, 57.12, 58.395], to_rgb=False)
です。MSRA スタイル: ResNet50_Caffe、ResNet101_Caffe など、MSRA の重みに対応しています。
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)
です。その他のスタイル: 例えば、
img_norm_cfg
がdict(mean=[123.675, 116.28, 103.53], std=[1, 1, 1], to_rgb=True)
である SSD や、img_norm_cfg
がdict(mean=[0, 0, 0], std=[255., 255., 255.], to_rgb=True)
である YOLOv3 など。
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 モデルの変換コピー。FB で Caffe2 を使用して訓練された ResNeXt-101-32x8d モデル。 |
ベースライン¶
Faster R-CNN¶
詳細は Faster R-CNN を参照してください。
Mask R-CNN¶
詳細は Mask R-CNN を参照してください。
Fast R-CNN(事前計算された提案付き)¶
詳細は Fast R-CNN を参照してください。
Cascade R-CNN および Cascade Mask R-CNN¶
詳細はCascade R-CNN を参照してください。
Group Normalization (GN)¶
詳細はGroup Normalization を参照してください。
Weight Standardization¶
詳細はWeight Standardization を参照してください。
Deformable Convolution v2¶
詳細はDeformable Convolutional Networks を参照してください。
Instaboost¶
詳細はInstaboost を参照してください。
Libra R-CNN¶
詳細はLibra R-CNN を参照してください。
Guided Anchoring¶
詳細はGuided Anchoring を参照してください。
FreeAnchor¶
詳細はFreeAnchor を参照してください。
Grid R-CNN (plus)¶
詳細はGrid R-CNN を参照してください。
Mask Scoring R-CNN¶
詳細はMask Scoring R-CNN を参照してください。
スクラッチからの学習¶
詳細はImageNet事前学習の再考 を参照してください。
Dynamic R-CNN¶
詳細はDynamic R-CNN を参照してください。
Generalized Focal Loss¶
詳細はGeneralized Focal Loss を参照してください。
CentripetalNet¶
詳細はCentripetalNet を参照してください。
Deformable DETR¶
詳細はDeformable DETR を参照してください。
AutoAssign¶
詳細はAutoAssign を参照してください。
Seesaw Loss¶
詳細はSeesaw Loss を参照してください。
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と同じ設定になっているはずです。参考として、チェックポイントとトレーニングログも提供します。スループットは、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
を設定することで、出力ログ間隔(デフォルト: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日)を使用します。公平な比較を行うため、両方のフレームワークを同じマシンにインストールして実行します。
ハードウェア¶
NVIDIA Tesla V100 (32G) GPU x 8
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 | モデル | ログ |
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 |
推論速度¶
推論速度は、単一GPUでのfps(img/s)で測定します。値が高いほど優れています。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 |