[Fix]Dcff Deploy Revision (#383)

* dcff deploy revision

* tempsave

* update fix_subnet

* update mutator load

* export/load_fix_subnet revision for mutator

* update fix_subnet with dev-1.x

* update comments

* update docs

* update registry
pull/402/head
zengyi 2022-12-16 20:53:30 +08:00 committed by GitHub
parent 42e8de73af
commit 82e9549dff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 1057 additions and 2118 deletions

View File

@ -1,5 +1,13 @@
_base_ = ['dcff_resnet_8xb32_in1k.py']
# model settings
model = _base_.model
model['is_deployed'] = True
model_cfg = dict(
_scope_='mmrazor',
type='sub_model',
cfg=dict(
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
fix_subnet='configs/pruning/mmcls/dcff/fix_subnet.json',
mode='mutator',
init_cfg=dict(
type='Pretrained',
checkpoint='configs/pruning/mmcls/dcff/fix_subnet_weight.pth'))

View File

@ -76,7 +76,10 @@ model = dict(
type='ChannelAnalyzer',
demo_input=(1, 3, 224, 224),
tracer_type='BackwardTracer')),
fix_subnet=None,
data_preprocessor=None,
target_pruning_ratio=target_pruning_ratio,
step_freq=1,
linear_schedule=False,
is_deployed=False)
linear_schedule=False)
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')

View File

@ -0,0 +1,141 @@
{
"type":"DCFFChannelMutator",
"channel_unit_cfg":{
"type":"DCFFChannelUnit",
"default_args":{
"choice_mode":"ratio"
},
"units":{
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":1.0
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59375
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59765625
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
}
}
},
"parse_cfg":{
"type":"ChannelAnalyzer",
"demo_input":[
1,
3,
224,
224
],
"tracer_type":"BackwardTracer"
}
}

View File

@ -1,509 +0,0 @@
{
"backbone.conv1_(0, 3)_3":{
"init_args":{
"num_channels":3,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
3
],
"choice_mode":"number"
},
"choice":3
},
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
64
],
"choice_mode":"number"
},
"choice":64
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.0.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.0.conv3_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
230
],
"choice_mode":"number"
},
"choice":230
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.1.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.2.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.2.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.0.conv3_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
460
],
"choice_mode":"number"
},
"choice":460
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.1.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.2.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.2.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.3.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.3.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.0.conv3_(0, 1024)_1024":{
"init_args":{
"num_channels":1024,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
921
],
"choice_mode":"number"
},
"choice":921
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.1.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.2.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.2.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.3.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.3.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.1.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"head.fc_(0, 1000)_1000":{
"init_args":{
"num_channels":1000,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1000
],
"choice_mode":"number"
},
"choice":1000
}
}

View File

@ -1,5 +1,12 @@
_base_ = ['dcff_faster_rcnn_resnet50_8xb4_coco.py']
# model settings
model = _base_.model
model['is_deployed'] = True
model_cfg = dict(
_scope_='mmrazor',
type='sub_model',
cfg=_base_.architecture,
fix_subnet='configs/pruning/mmdet/dcff/fix_subnet.json',
mode='mutator',
init_cfg=dict(
type='Pretrained',
checkpoint='configs/pruning/mmdet/dcff/fix_subnet_weight.pth'))

View File

@ -65,10 +65,6 @@ param_scheduler = dict(
_delete_=True)
train_cfg = dict(max_epochs=120, val_interval=1)
# !dataset config
# ==========================================================================
# data preprocessor
model = dict(
_scope_='mmrazor',
type='DCFF',
@ -76,18 +72,16 @@ model = dict(
mutator_cfg=dict(
type='DCFFChannelMutator',
channel_unit_cfg=dict(
type='DCFFChannelUnit',
units='configs/pruning/mmdet/dcff/resnet_det.json'),
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
parse_cfg=dict(
type='ChannelAnalyzer',
demo_input=(1, 3, 224, 224),
tracer_type='BackwardTracer')),
target_pruning_ratio=target_pruning_ratio,
step_freq=1,
linear_schedule=False,
is_deployed=False)
linear_schedule=False)
model_wrapper = dict(
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
val_cfg = dict(_delete_=True)
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')

View File

@ -0,0 +1,141 @@
{
"type":"DCFFChannelMutator",
"channel_unit_cfg":{
"type":"DCFFChannelUnit",
"default_args":{
"choice_mode":"ratio"
},
"units":{
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":1.0
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59375
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59765625
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484374
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
}
}
},
"parse_cfg":{
"type":"ChannelAnalyzer",
"demo_input":[
1,
3,
224,
224
],
"tracer_type":"BackwardTracer"
}
}

View File

@ -1,522 +0,0 @@
{
"backbone.conv1_(0, 3)_3":{
"init_args":{
"num_channels":3,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
3
],
"choice_mode":"number"
},
"choice":3
},
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
64
],
"choice_mode":"number"
},
"choice":64
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.0.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.0.conv3_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
230
],
"choice_mode":"number"
},
"choice":230
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.1.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.2.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.2.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.0.conv3_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
460
],
"choice_mode":"number"
},
"choice":460
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.1.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.2.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.2.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.3.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.3.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.0.conv3_(0, 1024)_1024":{
"init_args":{
"num_channels":1024,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
921
],
"choice_mode":"number"
},
"choice":921
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.1.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.2.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.2.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.3.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.3.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.1.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
},
"head.fc_(0, 1000)_1000":{
"init_args":{
"num_channels":1000,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1000
],
"choice_mode":"number"
},
"choice":1000
}
}

View File

@ -1,5 +1,12 @@
_base_ = ['dcff_topdown_heatmap_resnet50_coco.py']
# model settings
model = _base_.model
model['is_deployed'] = True
model_cfg = dict(
_scope_='mmrazor',
type='sub_model',
cfg=_base_.architecture,
fix_subnet='configs/pruning/mmpose/dcff/fix_subnet.json',
mode='mutator',
init_cfg=dict(
type='Pretrained',
checkpoint='configs/pruning/mmpose/dcff/fix_subnet_weight.pth'))

View File

@ -108,25 +108,22 @@ target_pruning_ratio = {
model = dict(
_scope_='mmrazor',
type='DCFF',
architecture=dict(
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
architecture=architecture,
mutator_cfg=dict(
type='DCFFChannelMutator',
channel_unit_cfg=dict(
type='DCFFChannelUnit',
units='configs/pruning/mmpose/dcff/resnet_pose.json'),
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
parse_cfg=dict(
type='ChannelAnalyzer',
demo_input=(1, 3, 224, 224),
tracer_type='BackwardTracer')),
target_pruning_ratio=target_pruning_ratio,
step_freq=1,
linear_schedule=False,
is_deployed=False)
linear_schedule=False)
dataset_type = 'CocoDataset'
data_mode = 'topdown'
data_root = 'data/coco'
data_root = 'data/coco/'
file_client_args = dict(backend='disk')
@ -187,3 +184,5 @@ val_evaluator = dict(
type='mmpose.CocoMetric',
ann_file=data_root + 'annotations/person_keypoints_val2017.json')
test_evaluator = val_evaluator
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')

View File

@ -0,0 +1,141 @@
{
"type":"DCFFChannelMutator",
"channel_unit_cfg":{
"type":"DCFFChannelUnit",
"default_args":{
"choice_mode":"ratio"
},
"units":{
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":1.0
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59374
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59765625
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
}
}
},
"parse_cfg":{
"type":"ChannelAnalyzer",
"demo_input":[
1,
3,
224,
224
],
"tracer_type":"BackwardTracer"
}
}

View File

@ -1,509 +0,0 @@
{
"backbone.conv1_(0, 3)_3":{
"init_args":{
"num_channels":3,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
3
],
"choice_mode":"number"
},
"choice":3
},
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
64
],
"choice_mode":"number"
},
"choice":64
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer1.0.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer1.0.conv3_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
230
],
"choice_mode":"number"
},
"choice":230
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer1.1.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer1.2.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer1.2.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
51
],
"choice_mode":"number"
},
"choice":51
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.0.conv3_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
460
],
"choice_mode":"number"
},
"choice":460
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.1.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.2.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.2.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.3.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer2.3.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
102
],
"choice_mode":"number"
},
"choice":102
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.0.conv3_(0, 1024)_1024":{
"init_args":{
"num_channels":1024,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
921
],
"choice_mode":"number"
},
"choice":921
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.1.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.2.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.2.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
204
],
"choice_mode":"number"
},
"choice":204
},
"backbone.layer3.3.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer3.3.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer3.4.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer3.4.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer3.5.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer3.5.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
217
],
"choice_mode":"number"
},
"choice":217
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.0.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.1.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.2.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.2.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
435
],
"choice_mode":"number"
},
"choice":435
},
"backbone.layer4.2.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
}
}

View File

@ -1,5 +1,12 @@
_base_ = ['dcff_pointrend_resnet50_8xb2_cityscapes.py']
# model settings
model = _base_.model
model['is_deployed'] = True
model_cfg = dict(
_scope_='mmrazor',
type='sub_model',
cfg=_base_.architecture,
fix_subnet='configs/pruning/mmseg/dcff/fix_subnet.json',
mode='mutator',
init_cfg=dict(
type='Pretrained',
checkpoint='configs/pruning/mmseg/dcff/fix_subnet_weight.pth'))

View File

@ -80,21 +80,20 @@ target_pruning_ratio = {
model = dict(
_scope_='mmrazor',
type='DCFF',
architecture=dict(
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
architecture=_base_.architecture,
mutator_cfg=dict(
type='DCFFChannelMutator',
channel_unit_cfg=dict(
type='DCFFChannelUnit',
units='configs/pruning/mmseg/dcff/resnet_seg.json'),
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
parse_cfg=dict(
type='ChannelAnalyzer',
demo_input=(1, 3, 224, 224),
tracer_type='BackwardTracer')),
target_pruning_ratio=target_pruning_ratio,
step_freq=200,
linear_schedule=False,
is_deployed=False)
linear_schedule=False)
model_wrapper = dict(
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')

View File

@ -0,0 +1,141 @@
{
"type":"DCFFChannelMutator",
"channel_unit_cfg":{
"type":"DCFFChannelUnit",
"default_args":{
"choice_mode":"ratio"
},
"units":{
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":1.0
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59375
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59765625
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921874
}
}
},
"parse_cfg":{
"type":"ChannelAnalyzer",
"demo_input":[
1,
3,
224,
224
],
"tracer_type":"BackwardTracer"
}
}

View File

@ -1,496 +0,0 @@
{
"backbone.conv1_(0, 3)_3":{
"init_args":{
"num_channels":3,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
3
],
"choice_mode":"number"
},
"choice":3
},
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
64
],
"choice_mode":"number"
},
"choice":64
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.0.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.0.conv3_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
230
],
"choice_mode":"number"
},
"choice":230
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.1.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer1.2.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
41
],
"choice_mode":"number"
},
"choice":41
},
"backbone.layer1.2.conv2_(0, 64)_64":{
"init_args":{
"num_channels":64,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
38
],
"choice_mode":"number"
},
"choice":38
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.0.conv3_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
460
],
"choice_mode":"number"
},
"choice":460
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.1.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.2.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.2.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer2.3.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
83
],
"choice_mode":"number"
},
"choice":83
},
"backbone.layer2.3.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
76
],
"choice_mode":"number"
},
"choice":76
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.0.conv3_(0, 1024)_1024":{
"init_args":{
"num_channels":1024,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
921
],
"choice_mode":"number"
},
"choice":921
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.1.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.2.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
166
],
"choice_mode":"number"
},
"choice":166
},
"backbone.layer3.2.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
153
],
"choice_mode":"number"
},
"choice":153
},
"backbone.layer3.3.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.3.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.4.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer3.5.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
179
],
"choice_mode":"number"
},
"choice":179
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.0.conv3_(0, 2048)_2048":{
"init_args":{
"num_channels":2048,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
1843
],
"choice_mode":"number"
},
"choice":1843
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.1.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
},
"backbone.layer4.2.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"divisor":1,
"min_value":1,
"min_ratio":0.9,
"candidate_choices":[
358
],
"choice_mode":"number"
},
"choice":358
}
}

View File

@ -2,6 +2,7 @@
from .darts_loop import DartsEpochBasedTrainLoop, DartsIterBasedTrainLoop
from .distill_val_loop import SelfDistillValLoop, SingleTeacherDistillValLoop
from .evolution_search_loop import EvolutionSearchLoop
from .iteprune_val_loop import ItePruneValLoop
from .slimmable_val_loop import SlimmableValLoop
from .subnet_sampler_loop import GreedySamplerTrainLoop
from .subnet_val_loop import SubnetValLoop
@ -9,5 +10,6 @@ from .subnet_val_loop import SubnetValLoop
__all__ = [
'SingleTeacherDistillValLoop', 'DartsEpochBasedTrainLoop',
'DartsIterBasedTrainLoop', 'SlimmableValLoop', 'EvolutionSearchLoop',
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop'
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop',
'ItePruneValLoop'
]

View File

@ -0,0 +1,55 @@
# Copyright (c) OpenMMLab. All rights reserved.
import json
import os.path as osp
import torch
from mmengine.runner import ValLoop
from mmrazor.registry import LOOPS
from mmrazor.structures import export_fix_subnet
@LOOPS.register_module()
class ItePruneValLoop(ValLoop):
"""Pruning loop for validation. Export fixed subnet configs.
Args:
runner (Runner): A reference of runner.
dataloader (Dataloader or dict): A dataloader object or a dict to
build a dataloader.
evaluator (Evaluator or dict or list): Used for computing metrics.
fp16 (bool): Whether to enable fp16 validation. Defaults to
False.
"""
def run(self):
"""Launch validation."""
self.runner.call_hook('before_val')
self.runner.call_hook('before_val_epoch')
self.runner.model.eval()
for idx, data_batch in enumerate(self.dataloader):
self.run_iter(idx, data_batch)
# compute metrics
metrics = self.evaluator.evaluate(len(self.dataloader.dataset))
self._save_fix_subnet()
self.runner.call_hook('after_val_epoch', metrics=metrics)
self.runner.call_hook('after_val')
return metrics
def _save_fix_subnet(self):
"""Save model subnet config."""
# TO DO: Modify export_fix_subnet's output. Might contain weight return
fix_subnet, static_model = export_fix_subnet(
self.model, export_subnet_mode='mutator', slice_weight=True)
fix_subnet = json.dumps(fix_subnet, indent=4, separators=(',', ':'))
subnet_name = 'fix_subnet.json'
weight_name = 'fix_subnet_weight.pth'
with open(osp.join(self.runner.work_dir, subnet_name), 'w') as file:
file.write(fix_subnet)
torch.save({'state_dict': static_model.state_dict()},
osp.join(self.runner.work_dir, weight_name))
self.runner.logger.info(
'export finished and '
f'{subnet_name}, '
f'{weight_name} saved in {self.runner.work_dir}.')

View File

@ -8,10 +8,9 @@ from mmengine import MMLogger
from mmengine.model import BaseModel
from mmengine.structures import BaseDataElement
from mmrazor.models.mutables import BaseMutable
from mmrazor.models.mutators import DCFFChannelMutator
from mmrazor.registry import MODELS
from mmrazor.structures.subnet.fix_subnet import _dynamic_to_static
from mmrazor.utils import ValidFixMutable
from .ite_prune_algorithm import ItePruneAlgorithm, ItePruneConfigManager
LossResults = Dict[str, torch.Tensor]
@ -30,8 +29,8 @@ class DCFF(ItePruneAlgorithm):
Args:
architecture (Union[BaseModel, Dict]): The model to be pruned.
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
of a mutator. Defaults to dict( type='ChannelMutator',
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
of a mutator. Defaults to dict( type='DCFFChannelMutator',
channel_unit_cfg=dict( type='DCFFChannelUnit')).
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
Defaults to None.
target_pruning_ratio (dict, optional): The prune-target. The template
@ -47,8 +46,6 @@ class DCFF(ItePruneAlgorithm):
Defaults to None.
linear_schedule (bool, optional): flag to set linear ratio schedule.
Defaults to False due to dcff fixed pruning rate.
is_deployed (bool, optional): flag to set deployed algorithm.
Defaults to False.
"""
def __init__(self,
@ -56,35 +53,17 @@ class DCFF(ItePruneAlgorithm):
mutator_cfg: Union[Dict, DCFFChannelMutator] = dict(
type=' DCFFChannelMutator',
channel_unit_cfg=dict(type='DCFFChannelUnit')),
fix_subnet: Optional[ValidFixMutable] = None,
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
target_pruning_ratio: Optional[Dict[str, float]] = None,
step_freq=1,
prune_times=0,
init_cfg: Optional[Dict] = None,
linear_schedule=False,
is_deployed=False) -> None:
linear_schedule=False) -> None:
# invalid param prune_times, reset after message_hub get [max_epoch]
super().__init__(architecture, mutator_cfg, data_preprocessor,
target_pruning_ratio, step_freq, prune_times,
init_cfg, linear_schedule)
self.is_deployed = is_deployed
if (self.is_deployed):
# To static ops for loaded pruned network.
self._deploy()
def _fix_archtecture(self):
for module in self.architecture.modules():
if isinstance(module, BaseMutable):
if not module.is_fixed:
module.fix_chosen(None)
def _deploy(self):
config = self.prune_config_manager.prune_at(self._iter)
self.mutator.set_choices(config)
self.mutator.fix_channel_mutables()
self._fix_archtecture()
_dynamic_to_static(self.architecture)
self.is_deployed = True
super().__init__(architecture, mutator_cfg, fix_subnet,
data_preprocessor, target_pruning_ratio, step_freq,
prune_times, init_cfg, linear_schedule)
def _calc_temperature(self, cur_num: int, max_num: int):
"""Calculate temperature param."""

View File

@ -10,6 +10,7 @@ from mmengine.structures import BaseDataElement
from mmrazor.models.mutables import MutableChannelUnit
from mmrazor.models.mutators import ChannelMutator
from mmrazor.registry import MODELS
from mmrazor.utils import ValidFixMutable
from ..base import BaseAlgorithm
LossResults = Dict[str, torch.Tensor]
@ -97,6 +98,8 @@ class ItePruneAlgorithm(BaseAlgorithm):
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
of a mutator. Defaults to dict( type='ChannelMutator',
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
fix_subnet (str | dict | :obj:`FixSubnet`): The path of yaml file or
loaded dict or built :obj:`FixSubnet`. Defaults to None.
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
Defaults to None.
target_pruning_ratio (dict, optional): The prune-target. The template
@ -118,10 +121,11 @@ class ItePruneAlgorithm(BaseAlgorithm):
type='ChannelMutator',
channel_unit_cfg=dict(
type='SequentialMutableChannelUnit')),
fix_subnet: Optional[ValidFixMutable] = None,
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
target_pruning_ratio: Optional[Dict[str, float]] = None,
step_freq=-1,
prune_times=-1,
step_freq=1,
prune_times=1,
init_cfg: Optional[Dict] = None,
linear_schedule=True) -> None:
@ -133,7 +137,6 @@ class ItePruneAlgorithm(BaseAlgorithm):
self.prune_times = prune_times
self.linear_schedule = linear_schedule
# mutator
self.mutator: ChannelMutator = MODELS.build(mutator_cfg)
self.mutator.prepare_from_supernet(self.architecture)

View File

@ -50,7 +50,7 @@ class SearchableShuffleNetV2(BaseBackbone):
6 initializers, including ``Constant``, ``Xavier``, ``Normal``,
``Uniform``, ``Kaiming``, and ``Pretrained``.
Excamples:
Examples:
>>> mutable_cfg = dict(
... type='OneShotMutableOP',
... candidates=dict(

View File

@ -41,6 +41,16 @@ class MutableChannelUnit(ChannelUnit):
super().__init__(num_channels)
@classmethod
def init_from_cfg(cls, model: nn.Module, config: Dict):
"""init a Channel using a config which can be generated by
self.config_template(), include init choice."""
unit = super().init_from_cfg(model, config)
# TO DO: add illegal judgement here?
if 'choice' in config:
unit.current_choice = config['choice']
return unit
@classmethod
def init_from_mutable_channel(cls, mutable_channel: BaseMutableChannel):
unit = cls(mutable_channel.num_channels)

View File

@ -5,7 +5,7 @@ Each node is a child of the root registry in MMEngine.
More details can be found at
https://mmengine.readthedocs.io/en/latest/tutorials/registry.html.
"""
from typing import Any, Optional, Union
from typing import Any, Dict, Optional, Union
from mmengine.config import Config, ConfigDict
from mmengine.registry import DATA_SAMPLERS as MMENGINE_DATA_SAMPLERS
@ -107,10 +107,32 @@ VISBACKENDS = Registry('vis_backend', parent=MMENGINE_VISBACKENDS)
# manage sub models for downstream repos
@MODELS.register_module()
def sub_model(cfg, fix_subnet, prefix='', extra_prefix=''):
def sub_model(cfg,
fix_subnet,
mode: str = 'mutable',
prefix: str = '',
extra_prefix: str = '',
init_weight_from_supernet: bool = False,
init_cfg: Optional[Dict] = None):
model = MODELS.build(cfg)
# Save path type cfg process, set init_cfg directly.
if init_cfg:
# update init_cfg when init_cfg is valid.
model.init_cfg = init_cfg
if init_weight_from_supernet:
# Supernet is modified after load_fix_subnet(), init weight here.
model.init_weights()
from mmrazor.structures import load_fix_subnet
load_fix_subnet(
model, fix_subnet, prefix=prefix, extra_prefix=extra_prefix)
model,
fix_subnet,
load_subnet_mode=mode,
prefix=prefix,
extra_prefix=extra_prefix)
if init_weight_from_supernet:
# Supernet is modified after load_fix_subnet().
model.init_cfg = None
return model

View File

@ -3,8 +3,10 @@ import copy
from typing import Dict, Optional, Tuple
from mmengine import fileio
from mmengine.logging import print_log
from torch import nn
from mmrazor.registry import MODELS
from mmrazor.utils import FixMutable, ValidFixMutable
from mmrazor.utils.typing import DumpChosen
@ -29,6 +31,7 @@ def _dynamic_to_static(model: nn.Module) -> None:
def load_fix_subnet(model: nn.Module,
fix_mutable: ValidFixMutable,
load_subnet_mode: str = 'mutable',
prefix: str = '',
extra_prefix: str = '') -> None:
"""Load fix subnet."""
@ -45,6 +48,22 @@ def load_fix_subnet(model: nn.Module,
if isinstance(model, DynamicMixin):
raise RuntimeError('Root model can not be dynamic op.')
if load_subnet_mode == 'mutable':
_load_fix_subnet_by_mutable(model, fix_mutable, prefix, extra_prefix)
elif load_subnet_mode == 'mutator':
_load_fix_subnet_by_mutator(model, fix_mutable)
else:
raise ValueError(f'Invalid load_subnet_mode {load_subnet_mode}, '
'only mutable or mutator is supported.')
# convert dynamic op to static op
_dynamic_to_static(model)
def _load_fix_subnet_by_mutable(model: nn.Module,
fix_mutable: Dict,
prefix: str = '',
extra_prefix: str = '') -> None:
# Avoid circular import
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
from mmrazor.models.mutables.base_mutable import BaseMutable
@ -92,19 +111,62 @@ def load_fix_subnet(model: nn.Module,
else:
load_fix_module(module)
# convert dynamic op to static op
_dynamic_to_static(model)
def _load_fix_subnet_by_mutator(model: nn.Module, mutator_cfg: Dict) -> None:
if 'channel_unit_cfg' not in mutator_cfg:
raise ValueError('mutator_cfg must contain key channel_unit_cfg, '
f'but got mutator_cfg:'
f'{mutator_cfg}')
mutator_cfg['parse_cfg'] = {'type': 'Config'}
mutator = MODELS.build(mutator_cfg)
mutator.prepare_from_supernet(model)
mutator.set_choices(mutator.current_choices)
def export_fix_subnet(
model: nn.Module,
export_subnet_mode: str = 'mutable',
slice_weight: bool = False) -> Tuple[FixMutable, Optional[Dict]]:
"""Export subnet config with (optional) the sliced weight.
"""Export subnet that can be loaded by :func:`load_fix_subnet`. Include
subnet structure and subnet weight.
Args:
slice_weight (bool): Whether to return the sliced subnet.
Defaults to False.
model (nn.Module): The target model to export.
export_subnet_mode (bool): Subnet export method choice.
Export by `mutable.dump_chosen()` when set to 'mutable' (NAS)
Export by `mutator.config_template()` when set to 'mutator' (Prune)
slice_weight (bool): Export subnet weight. Default to False.
Return:
fix_subnet (ValidFixMutable): Exported subnet choice config.
static_model (Optional[Dict]): Exported static model state_dict.
Valid when `slice_weight`=True.
"""
static_model = copy.deepcopy(model)
fix_subnet = dict()
if export_subnet_mode == 'mutable':
fix_subnet = _export_subnet_by_mutable(static_model)
elif export_subnet_mode == 'mutator':
fix_subnet = _export_subnet_by_mutator(static_model)
else:
raise ValueError(f'Invalid export_subnet_mode {export_subnet_mode}, '
'only mutable or mutator is supported.')
if slice_weight:
# export subnet ckpt
print_log('Exporting fixed subnet weight')
_dynamic_to_static(static_model)
if next(static_model.parameters()).is_cuda:
static_model.cuda()
return fix_subnet, static_model
else:
return fix_subnet, None
def _export_subnet_by_mutable(model: nn.Module) -> Dict:
# Avoid circular import
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
from mmrazor.models.mutables.base_mutable import BaseMutable
@ -125,14 +187,14 @@ def export_fix_subnet(
module_dump_chosen(source_mutable, fix_subnet)
else:
module_dump_chosen(module, fix_subnet)
return fix_subnet
if slice_weight:
copied_model = copy.deepcopy(model)
load_fix_subnet(copied_model, fix_subnet)
if next(copied_model.parameters()).is_cuda:
copied_model.cuda()
def _export_subnet_by_mutator(model: nn.Module) -> Dict:
if not hasattr(model, 'mutator'):
raise ValueError('model should contain `mutator` attribute, but got '
f'{type(model)} model')
fix_subnet = model.mutator.config_template(
with_channels=False, with_unit_init_args=True)
return fix_subnet, copied_model
return fix_subnet, None
return fix_subnet

View File

@ -0,0 +1,141 @@
{
"type":"DCFFChannelMutator",
"channel_unit_cfg":{
"type":"DCFFChannelUnit",
"default_args":{
"choice_mode":"ratio"
},
"units":{
"backbone.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":1.0
},
"backbone.layer1.0.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer1.1.conv1_(0, 64)_64":{
"init_args":{
"num_channels":64,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.640625
},
"backbone.layer2.0.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer2.0.conv2_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59375
},
"backbone.layer2.1.conv1_(0, 128)_128":{
"init_args":{
"num_channels":128,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer3.0.conv2_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.59765625
},
"backbone.layer3.1.conv1_(0, 256)_256":{
"init_args":{
"num_channels":256,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.6484375
},
"backbone.layer4.0.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.0.conv2_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
},
"backbone.layer4.1.conv1_(0, 512)_512":{
"init_args":{
"num_channels":512,
"choice_mode":"ratio",
"divisor":1,
"min_value":1,
"min_ratio":0.9
},
"choice":0.69921875
}
}
},
"parse_cfg":{
"type":"ChannelAnalyzer",
"demo_input":[
1,
3,
224,
224
],
"tracer_type":"BackwardTracer"
}
}

View File

@ -1,6 +1,8 @@
# Copyright (c) OpenMMLab. All rights reserved.
import copy
import json
import os
import os.path as osp
import unittest
import torch
@ -12,6 +14,7 @@ from mmrazor.models.algorithms.pruning.dcff import DCFF
from mmrazor.models.algorithms.pruning.ite_prune_algorithm import \
ItePruneConfigManager
from mmrazor.registry import MODELS
from mmrazor.structures import export_fix_subnet
# @TASK_UTILS.register_module()
@ -229,3 +232,94 @@ class TestDCFFAlgorithm(unittest.TestCase):
algorithm.forward(
data['inputs'], data['data_samples'], mode='loss')
self.assertEqual(algorithm.step_freq, epoch_step * iter_per_epoch)
def test_export_subnet(self):
model = MODELS.build(MODEL_CFG)
mutator = MODELS.build(MUTATOR_CONFIG_FLOAT)
mutator.prepare_from_supernet(model)
mutator.set_choices(mutator.sample_choices())
custom_groups = [[
'backbone.layer1.0.conv1_(0, 64)_64',
'backbone.layer1.1.conv1_(0, 64)_64'
]]
mutator_cfg = copy.deepcopy(MUTATOR_CONFIG_FLOAT)
mutator_cfg['custom_groups'] = custom_groups
iter_per_epoch = 10
epoch_step = 2
epoch = 6
data = self.fake_cifar_data()
stage_ratio_1 = 0.65
stage_ratio_2 = 0.6
stage_ratio_3 = 0.9
stage_ratio_4 = 0.7
target_pruning_ratio = {
'backbone.layer1.0.conv1_(0, 64)_64': stage_ratio_1,
'backbone.layer1.0.conv2_(0, 64)_64': stage_ratio_2,
'backbone.layer1.0.conv3_(0, 256)_256': stage_ratio_3,
'backbone.layer1.1.conv1_(0, 64)_64': stage_ratio_1,
'backbone.layer1.1.conv2_(0, 64)_64': stage_ratio_2,
'backbone.layer1.2.conv1_(0, 64)_64': stage_ratio_1,
'backbone.layer1.2.conv2_(0, 64)_64': stage_ratio_2,
# block 1 [0.65, 0.6] downsample=[0.9]
'backbone.layer2.0.conv1_(0, 128)_128': stage_ratio_1,
'backbone.layer2.0.conv2_(0, 128)_128': stage_ratio_2,
'backbone.layer2.0.conv3_(0, 512)_512': stage_ratio_3,
'backbone.layer2.1.conv1_(0, 128)_128': stage_ratio_1,
'backbone.layer2.1.conv2_(0, 128)_128': stage_ratio_2,
'backbone.layer2.2.conv1_(0, 128)_128': stage_ratio_1,
'backbone.layer2.2.conv2_(0, 128)_128': stage_ratio_2,
'backbone.layer2.3.conv1_(0, 128)_128': stage_ratio_1,
'backbone.layer2.3.conv2_(0, 128)_128': stage_ratio_2,
# block 2 [0.65, 0.6] downsample=[0.9]
'backbone.layer3.0.conv1_(0, 256)_256': stage_ratio_1,
'backbone.layer3.0.conv2_(0, 256)_256': stage_ratio_2,
'backbone.layer3.0.conv3_(0, 1024)_1024': stage_ratio_3,
'backbone.layer3.1.conv1_(0, 256)_256': stage_ratio_1,
'backbone.layer3.1.conv2_(0, 256)_256': stage_ratio_2,
'backbone.layer3.2.conv1_(0, 256)_256': stage_ratio_1,
'backbone.layer3.2.conv2_(0, 256)_256': stage_ratio_2,
'backbone.layer3.3.conv1_(0, 256)_256': stage_ratio_4,
'backbone.layer3.3.conv2_(0, 256)_256': stage_ratio_4,
'backbone.layer3.4.conv1_(0, 256)_256': stage_ratio_4,
'backbone.layer3.4.conv2_(0, 256)_256': stage_ratio_4,
'backbone.layer3.5.conv1_(0, 256)_256': stage_ratio_4,
'backbone.layer3.5.conv2_(0, 256)_256': stage_ratio_4,
# block 3 [0.65, 0.6]*2+[0.7, 0.7]*2 downsample=[0.9]
'backbone.layer4.0.conv1_(0, 512)_512': stage_ratio_4,
'backbone.layer4.0.conv2_(0, 512)_512': stage_ratio_4,
'backbone.layer4.0.conv3_(0, 2048)_2048': stage_ratio_3,
'backbone.layer4.1.conv1_(0, 512)_512': stage_ratio_4,
'backbone.layer4.1.conv2_(0, 512)_512': stage_ratio_4,
'backbone.layer4.2.conv1_(0, 512)_512': stage_ratio_4,
'backbone.layer4.2.conv2_(0, 512)_512': stage_ratio_4
# block 4 [0.7, 0.7] downsample=[0.9]
}
algorithm = DCFF(
MODEL_CFG,
target_pruning_ratio=target_pruning_ratio,
mutator_cfg=mutator_cfg,
step_freq=epoch_step).to(DEVICE)
algorithm.init_weights()
self._set_epoch_ite(0, 0, epoch)
algorithm.forward(data['inputs'], data['data_samples'], mode='loss')
self.assertEqual(algorithm.step_freq, epoch_step * iter_per_epoch)
fix_subnet, static_model = export_fix_subnet(
algorithm, export_subnet_mode='mutator', slice_weight=True)
fix_subnet = json.dumps(fix_subnet, indent=4, separators=(',', ':'))
subnet_name = 'subnet.json'
weight_name = 'subnet_weight.pth'
with open(osp.join('tests/data/test_registry/', subnet_name),
'w') as file:
file.write(fix_subnet)
torch.save({
'state_dict': static_model.state_dict(),
'meta': {}
}, osp.join('tests/data/test_registry/', weight_name))

View File

@ -4,6 +4,7 @@ from typing import Dict, Optional, Union
from unittest import TestCase
import torch.nn as nn
from mmengine import fileio
from mmengine.config import Config
from mmengine.model import BaseModel
@ -82,6 +83,24 @@ class TestRegistry(TestCase):
model = MODELS.build(cfg.model)
self.assertTrue(isinstance(model, BaseModel))
def test_build_subnet_prune_from_cfg(self):
mutator_cfg = fileio.load('tests/data/test_registry/subnet.json')
init_cfg = dict(
type='Pretrained',
checkpoint='tests/data/test_registry/subnet_weight.pth')
# test fix subnet
model_cfg = dict(
# use mmrazor's build_func
type='mmrazor.sub_model',
cfg=dict(
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py',
pretrained=False),
fix_subnet=mutator_cfg,
mode='mutator',
init_cfg=init_cfg)
model = MODELS.build(model_cfg)
self.assertTrue(isinstance(model, BaseModel))
if __name__ == '__main__':
unittest.main()