Skip to content

Commit d2a3cbb

Browse files
authored
[Fix] Fix mmdet flops error (open-mmlab#9589)
1 parent 9fe538c commit d2a3cbb

19 files changed

+282
-31
lines changed

configs/cascade_rcnn/cascade-mask-rcnn_x101-32x8d_fpn_ms-3x_coco.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
type='DetDataPreprocessor',
88
mean=[103.530, 116.280, 123.675],
99
std=[57.375, 57.120, 58.395],
10-
to_rgb=False,
10+
bgr_to_rgb=False,
1111
pad_size_divisor=32),
1212
backbone=dict(
1313
type='ResNeXt',

configs/cascade_rcnn/cascade-rcnn_r50-caffe_fpn_1x_coco.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
type='DetDataPreprocessor',
77
mean=[103.530, 116.280, 123.675],
88
std=[1.0, 1.0, 1.0],
9-
to_rgb=False,
9+
bgr_to_rgb=False,
1010
pad_size_divisor=32),
1111
backbone=dict(
1212
norm_cfg=dict(requires_grad=False),

configs/dcnv2/metafile.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Collections:
1919
Models:
2020
- Name: faster-rcnn_r50_fpn_mdconv_c3-c5_1x_coco
2121
In Collection: Deformable Convolutional Networks v2
22-
Config: configs/dcn/faster-rcnn_r50-mdconv-c3-c5_fpn_1x_coco.py
22+
Config: configs/dcnv2/faster-rcnn_r50-mdconv-c3-c5_fpn_1x_coco.py
2323
Metadata:
2424
Training Memory (GB): 4.1
2525
inference time (ms/im):
@@ -39,7 +39,7 @@ Models:
3939

4040
- Name: faster-rcnn_r50_fpn_mdconv_c3-c5_group4_1x_coco
4141
In Collection: Deformable Convolutional Networks v2
42-
Config: configs/dcn/faster-rcnn_r50-mdconv-group4-c3-c5_fpn_1x_coco.py
42+
Config: configs/dcnv2/faster-rcnn_r50-mdconv-group4-c3-c5_fpn_1x_coco.py
4343
Metadata:
4444
Training Memory (GB): 4.2
4545
inference time (ms/im):
@@ -59,7 +59,7 @@ Models:
5959

6060
- Name: faster-rcnn_r50_fpn_mdpool_1x_coco
6161
In Collection: Deformable Convolutional Networks v2
62-
Config: configs/dcn/faster-rcnn_r50_fpn_mdpool_1x_coco.py
62+
Config: configs/dcnv2/faster-rcnn_r50_fpn_mdpool_1x_coco.py
6363
Metadata:
6464
Training Memory (GB): 5.8
6565
inference time (ms/im):
@@ -79,7 +79,7 @@ Models:
7979

8080
- Name: mask-rcnn_r50_fpn_mdconv_c3-c5_1x_coco
8181
In Collection: Deformable Convolutional Networks v2
82-
Config: configs/dcn/mask-rcnn_r50-mdconv-c3-c5_fpn_1x_coco.py
82+
Config: configs/dcnv2/mask-rcnn_r50-mdconv-c3-c5_fpn_1x_coco.py
8383
Metadata:
8484
Training Memory (GB): 4.5
8585
inference time (ms/im):
@@ -103,7 +103,7 @@ Models:
103103

104104
- Name: mask-rcnn_r50_fpn_fp16_mdconv_c3-c5_1x_coco
105105
In Collection: Deformable Convolutional Networks v2
106-
Config: configs/dcn/mask-rcnn_r50-mdconv-c3-c5_fpn_amp-1x_coco.py
106+
Config: configs/dcnv2/mask-rcnn_r50-mdconv-c3-c5_fpn_amp-1x_coco.py
107107
Metadata:
108108
Training Memory (GB): 3.1
109109
Training Techniques:

configs/mask2former/mask2former_r50_8xb2-lsj-50e_coco.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
_base_ = ['./mask2former_r50_8xb2-lsj-50e_coco-panoptic.py']
2-
32
num_things_classes = 80
43
num_stuff_classes = 0
54
num_classes = num_things_classes + num_stuff_classes
@@ -56,6 +55,17 @@
5655
dict(type='PackDetInputs')
5756
]
5857

58+
test_pipeline = [
59+
dict(type='LoadImageFromFile', file_client_args=_base_.file_client_args),
60+
dict(type='Resize', scale=(1333, 800), keep_ratio=True),
61+
# If you don't have a gt annotation, delete the pipeline
62+
dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
63+
dict(
64+
type='PackDetInputs',
65+
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
66+
'scale_factor'))
67+
]
68+
5969
dataset_type = 'CocoDataset'
6070
data_root = 'data/coco/'
6171

@@ -70,7 +80,8 @@
7080
dataset=dict(
7181
type=dataset_type,
7282
ann_file='annotations/instances_val2017.json',
73-
data_prefix=dict(img='val2017/')))
83+
data_prefix=dict(img='val2017/'),
84+
pipeline=test_pipeline))
7485
test_dataloader = val_dataloader
7586

7687
val_evaluator = dict(

configs/openimages/faster-rcnn_r50_fpn_32xb2-1x_openimages-challenge.py

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
dataset=dict(
1818
type=dataset_type,
1919
ann_file='challenge2019/challenge-2019-validation-detection-bbox.txt',
20+
data_prefix=dict(img='OpenImages/'),
2021
label_file='challenge2019/cls-label-description.csv',
2122
hierarchy_file='challenge2019/class_label_tree.np',
2223
meta_file='challenge2019/challenge-2019-validation-metas.pkl',
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
_base_ = './retinanet_r50-caffe_fpn_ms-3x_coco.py'
22
# learning policy
33
model = dict(
4-
pretrained='open-mmlab://detectron2/resnet101_caffe',
5-
backbone=dict(depth=101))
4+
backbone=dict(
5+
depth=101,
6+
init_cfg=dict(
7+
type='Pretrained',
8+
checkpoint='open-mmlab://detectron2/resnet101_caffe')))
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
_base_ = ['../_base_/models/retinanet_r50_fpn.py', '../common/ms_3x_coco.py']
22
# optimizer
3-
model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101))
3+
model = dict(
4+
backbone=dict(
5+
depth=101,
6+
init_cfg=dict(type='Pretrained',
7+
checkpoint='torchvision://resnet101')))
48
optim_wrapper = dict(
59
optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001))
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
_base_ = ['../_base_/models/retinanet_r50_fpn.py', '../common/ms_3x_coco.py']
22
# optimizer
33
model = dict(
4-
pretrained='open-mmlab://resnext101_64x4d',
5-
backbone=dict(type='ResNeXt', depth=101, groups=64, base_width=4))
4+
backbone=dict(
5+
type='ResNeXt',
6+
depth=101,
7+
groups=64,
8+
base_width=4,
9+
init_cfg=dict(
10+
type='Pretrained', checkpoint='open-mmlab://resnext101_64x4d')))
611
optim_wrapper = dict(optimizer=dict(type='SGD', lr=0.01))

configs/seesaw_loss/metafile.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Collections:
2323
Models:
2424
- Name: mask-rcnn_r50_fpn_random_seesaw_loss_mstrain_2x_lvis_v1
2525
In Collection: Seesaw Loss
26-
Config: seesaw_loss/mask-rcnn_r50_fpn_seesaw-loss_random-ms-2x_lvis-v1.py
26+
Config: configs/seesaw_loss/mask-rcnn_r50_fpn_seesaw-loss_random-ms-2x_lvis-v1.py
2727
Metadata:
2828
Epochs: 24
2929
Results:
@@ -38,7 +38,7 @@ Models:
3838
Weights: https://download.openmmlab.com/mmdetection/v2.0/seesaw_loss/mask_rcnn_r50_fpn_random_seesaw_loss_mstrain_2x_lvis_v1-a698dd3d.pth
3939
- Name: mask-rcnn_r50_fpn_random_seesaw_loss_normed_mask_mstrain_2x_lvis_v1
4040
In Collection: Seesaw Loss
41-
Config: seesaw_loss/mask-rcnn_r50_fpn_seesaw-loss-normed-mask_random-ms-2x_lvis-v1.py
41+
Config: configs/seesaw_loss/mask-rcnn_r50_fpn_seesaw-loss-normed-mask_random-ms-2x_lvis-v1.py
4242
Metadata:
4343
Epochs: 24
4444
Results:
@@ -53,7 +53,7 @@ Models:
5353
Weights: https://download.openmmlab.com/mmdetection/v2.0/seesaw_loss/mask_rcnn_r50_fpn_random_seesaw_loss_normed_mask_mstrain_2x_lvis_v1-a1c11314.pth
5454
- Name: mask-rcnn_r101_fpn_seesaw-loss_random-ms-2x_lvis-v1
5555
In Collection: Seesaw Loss
56-
Config: seesaw_loss/mask-rcnn_r101_fpn_seesaw-loss_random-ms-2x_lvis-v1.py
56+
Config: configs/seesaw_loss/mask-rcnn_r101_fpn_seesaw-loss_random-ms-2x_lvis-v1.py
5757
Metadata:
5858
Epochs: 24
5959
Results:
@@ -68,7 +68,7 @@ Models:
6868
Weights: https://download.openmmlab.com/mmdetection/v2.0/seesaw_loss/mask_rcnn_r101_fpn_random_seesaw_loss_mstrain_2x_lvis_v1-8e6e6dd5.pth
6969
- Name: mask-rcnn_r101_fpn_seesaw-loss-normed-mask_random-ms-2x_lvis-v1
7070
In Collection: Seesaw Loss
71-
Config: seesaw_loss/mask-rcnn_r101_fpn_seesaw-loss-normed-mask_random-ms-2x_lvis-v1.py
71+
Config: configs/seesaw_loss/mask-rcnn_r101_fpn_seesaw-loss-normed-mask_random-ms-2x_lvis-v1.py
7272
Metadata:
7373
Epochs: 24
7474
Results:

mmdet/models/dense_heads/deformable_detr_head.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,7 @@ def forward(self, x: Tuple[Tensor],
181181
enc_outputs_class, \
182182
enc_outputs_coord.sigmoid()
183183
else:
184-
return outputs_classes, outputs_coords, \
185-
None, None
184+
return outputs_classes, outputs_coords
186185

187186
def loss_by_feat(
188187
self,

mmdet/models/detectors/detr.py

+26
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Copyright (c) OpenMMLab. All rights reserved.
2+
from typing import List, Tuple
3+
4+
from torch import Tensor
5+
26
from mmdet.registry import MODELS
7+
from mmdet.structures import SampleList
38
from mmdet.utils import ConfigType, OptConfigType, OptMultiConfig
49
from .single_stage import SingleStageDetector
510

@@ -24,3 +29,24 @@ def __init__(self,
2429
test_cfg=test_cfg,
2530
data_preprocessor=data_preprocessor,
2631
init_cfg=init_cfg)
32+
33+
def _forward(self, batch_inputs: Tensor,
34+
batch_data_samples: SampleList) -> Tuple[List[Tensor]]:
35+
"""Network forward process. Usually includes backbone, neck and head
36+
forward without any post-processing.
37+
38+
Args:
39+
batch_inputs (Tensor): Inputs with shape (N, C, H, W).
40+
batch_data_samples (list[:obj:`DetDataSample`]): The batch
41+
data samples. It usually includes information such
42+
as `gt_instance` or `gt_panoptic_seg` or `gt_sem_seg`.
43+
44+
Returns:
45+
tuple[list]: A tuple of features from ``bbox_head`` forward.
46+
"""
47+
x = self.extract_feat(batch_inputs)
48+
batch_img_metas = [
49+
data_samples.metainfo for data_samples in batch_data_samples
50+
]
51+
results = self.bbox_head.forward(x, batch_img_metas)
52+
return results

mmdet/models/detectors/single_stage.py

+3
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ def _forward(
122122
123123
Args:
124124
batch_inputs (Tensor): Inputs with shape (N, C, H, W).
125+
batch_data_samples (list[:obj:`DetDataSample`]): Each item contains
126+
the meta information of each image and corresponding
127+
annotations.
125128
126129
Returns:
127130
tuple[list]: A tuple of features from ``bbox_head`` forward.

mmdet/models/detectors/two_stage.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ def _forward(self, batch_inputs: Tensor,
119119
120120
Args:
121121
batch_inputs (Tensor): Inputs with shape (N, C, H, W).
122+
batch_data_samples (list[:obj:`DetDataSample`]): Each item contains
123+
the meta information of each image and corresponding
124+
annotations.
122125
123126
Returns:
124127
tuple: A tuple of features from ``rpn_head`` and ``roi_head``
@@ -135,8 +138,8 @@ def _forward(self, batch_inputs: Tensor,
135138
rpn_results_list = [
136139
data_sample.proposals for data_sample in batch_data_samples
137140
]
138-
139-
roi_outs = self.roi_head.forward(x, rpn_results_list)
141+
roi_outs = self.roi_head.forward(x, rpn_results_list,
142+
batch_data_samples)
140143
results = results + (roi_outs, )
141144
return results
142145

mmdet/models/roi_heads/cascade_roi_head.py

+48
Original file line numberDiff line numberDiff line change
@@ -518,3 +518,51 @@ def _refine_roi(self, x: Tuple[Tensor], rois: Tensor,
518518
for i in range(len(batch_img_metas))
519519
]
520520
return rois, cls_scores, bbox_preds
521+
522+
def forward(self, x: Tuple[Tensor], rpn_results_list: InstanceList,
523+
batch_data_samples: SampleList) -> tuple:
524+
"""Network forward process. Usually includes backbone, neck and head
525+
forward without any post-processing.
526+
527+
Args:
528+
x (List[Tensor]): Multi-level features that may have different
529+
resolutions.
530+
rpn_results_list (list[:obj:`InstanceData`]): List of region
531+
proposals.
532+
batch_data_samples (list[:obj:`DetDataSample`]): Each item contains
533+
the meta information of each image and corresponding
534+
annotations.
535+
536+
Returns
537+
tuple: A tuple of features from ``bbox_head`` and ``mask_head``
538+
forward.
539+
"""
540+
results = ()
541+
batch_img_metas = [
542+
data_samples.metainfo for data_samples in batch_data_samples
543+
]
544+
proposals = [rpn_results.bboxes for rpn_results in rpn_results_list]
545+
num_proposals_per_img = tuple(len(p) for p in proposals)
546+
rois = bbox2roi(proposals)
547+
# bbox head
548+
if self.with_bbox:
549+
rois, cls_scores, bbox_preds = self._refine_roi(
550+
x, rois, batch_img_metas, num_proposals_per_img)
551+
results = results + (cls_scores, bbox_preds)
552+
# mask head
553+
if self.with_mask:
554+
aug_masks = []
555+
rois = torch.cat(rois)
556+
for stage in range(self.num_stages):
557+
mask_results = self._mask_forward(stage, x, rois)
558+
mask_preds = mask_results['mask_preds']
559+
mask_preds = mask_preds.split(num_proposals_per_img, 0)
560+
aug_masks.append([m.sigmoid().detach() for m in mask_preds])
561+
562+
merged_masks = []
563+
for i in range(len(batch_img_metas)):
564+
aug_mask = [mask[i] for mask in aug_masks]
565+
merged_mask = merge_aug_masks(aug_mask, batch_img_metas[i])
566+
merged_masks.append(merged_mask)
567+
results = results + (merged_masks, )
568+
return results

mmdet/models/roi_heads/grid_roi_head.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ def _random_jitter(self,
7575
return sampling_results
7676

7777
# TODO: Forward is incorrect and need to refactor.
78-
def forward(self, x: Tuple[Tensor],
79-
rpn_results_list: InstanceList) -> tuple:
78+
def forward(self,
79+
x: Tuple[Tensor],
80+
rpn_results_list: InstanceList,
81+
batch_data_samples: SampleList = None) -> tuple:
8082
"""Network forward process. Usually includes backbone, neck and head
8183
forward without any post-processing.
8284
@@ -85,6 +87,9 @@ def forward(self, x: Tuple[Tensor],
8587
resolutions.
8688
rpn_results_list (list[:obj:`InstanceData`]): List of region
8789
proposals.
90+
batch_data_samples (list[:obj:`DetDataSample`]): Each item contains
91+
the meta information of each image and corresponding
92+
annotations.
8893
8994
Returns
9095
tuple: A tuple of features from ``bbox_head`` and ``mask_head``
@@ -96,8 +101,9 @@ def forward(self, x: Tuple[Tensor],
96101
# bbox head
97102
if self.with_bbox:
98103
bbox_results = self._bbox_forward(x, rois)
99-
results = results + (bbox_results['cls_score'],
100-
bbox_results['bbox_pred'])
104+
results = results + (bbox_results['cls_score'], )
105+
if self.bbox_head.with_reg:
106+
results = results + (bbox_results['bbox_pred'], )
101107

102108
# grid head
103109
grid_rois = rois[:100]

0 commit comments

Comments
 (0)