[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 registrypull/402/head
parent
42e8de73af
commit
82e9549dff
|
@ -1,5 +1,13 @@
|
||||||
_base_ = ['dcff_resnet_8xb32_in1k.py']
|
_base_ = ['dcff_resnet_8xb32_in1k.py']
|
||||||
|
|
||||||
# model settings
|
# model settings
|
||||||
model = _base_.model
|
model_cfg = dict(
|
||||||
model['is_deployed'] = True
|
_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'))
|
||||||
|
|
|
@ -76,7 +76,10 @@ model = dict(
|
||||||
type='ChannelAnalyzer',
|
type='ChannelAnalyzer',
|
||||||
demo_input=(1, 3, 224, 224),
|
demo_input=(1, 3, 224, 224),
|
||||||
tracer_type='BackwardTracer')),
|
tracer_type='BackwardTracer')),
|
||||||
|
fix_subnet=None,
|
||||||
|
data_preprocessor=None,
|
||||||
target_pruning_ratio=target_pruning_ratio,
|
target_pruning_ratio=target_pruning_ratio,
|
||||||
step_freq=1,
|
step_freq=1,
|
||||||
linear_schedule=False,
|
linear_schedule=False)
|
||||||
is_deployed=False)
|
|
||||||
|
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,12 @@
|
||||||
_base_ = ['dcff_faster_rcnn_resnet50_8xb4_coco.py']
|
_base_ = ['dcff_faster_rcnn_resnet50_8xb4_coco.py']
|
||||||
|
|
||||||
# model settings
|
# model settings
|
||||||
model = _base_.model
|
model_cfg = dict(
|
||||||
model['is_deployed'] = True
|
_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'))
|
||||||
|
|
|
@ -65,10 +65,6 @@ param_scheduler = dict(
|
||||||
_delete_=True)
|
_delete_=True)
|
||||||
train_cfg = dict(max_epochs=120, val_interval=1)
|
train_cfg = dict(max_epochs=120, val_interval=1)
|
||||||
|
|
||||||
# !dataset config
|
|
||||||
# ==========================================================================
|
|
||||||
# data preprocessor
|
|
||||||
|
|
||||||
model = dict(
|
model = dict(
|
||||||
_scope_='mmrazor',
|
_scope_='mmrazor',
|
||||||
type='DCFF',
|
type='DCFF',
|
||||||
|
@ -76,18 +72,16 @@ model = dict(
|
||||||
mutator_cfg=dict(
|
mutator_cfg=dict(
|
||||||
type='DCFFChannelMutator',
|
type='DCFFChannelMutator',
|
||||||
channel_unit_cfg=dict(
|
channel_unit_cfg=dict(
|
||||||
type='DCFFChannelUnit',
|
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||||
units='configs/pruning/mmdet/dcff/resnet_det.json'),
|
|
||||||
parse_cfg=dict(
|
parse_cfg=dict(
|
||||||
type='ChannelAnalyzer',
|
type='ChannelAnalyzer',
|
||||||
demo_input=(1, 3, 224, 224),
|
demo_input=(1, 3, 224, 224),
|
||||||
tracer_type='BackwardTracer')),
|
tracer_type='BackwardTracer')),
|
||||||
target_pruning_ratio=target_pruning_ratio,
|
target_pruning_ratio=target_pruning_ratio,
|
||||||
step_freq=1,
|
step_freq=1,
|
||||||
linear_schedule=False,
|
linear_schedule=False)
|
||||||
is_deployed=False)
|
|
||||||
|
|
||||||
model_wrapper = dict(
|
model_wrapper = dict(
|
||||||
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
||||||
|
|
||||||
val_cfg = dict(_delete_=True)
|
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,12 @@
|
||||||
_base_ = ['dcff_topdown_heatmap_resnet50_coco.py']
|
_base_ = ['dcff_topdown_heatmap_resnet50_coco.py']
|
||||||
|
|
||||||
# model settings
|
# model settings
|
||||||
model = _base_.model
|
model_cfg = dict(
|
||||||
model['is_deployed'] = True
|
_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'))
|
||||||
|
|
|
@ -108,25 +108,22 @@ target_pruning_ratio = {
|
||||||
model = dict(
|
model = dict(
|
||||||
_scope_='mmrazor',
|
_scope_='mmrazor',
|
||||||
type='DCFF',
|
type='DCFF',
|
||||||
architecture=dict(
|
architecture=architecture,
|
||||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
|
|
||||||
mutator_cfg=dict(
|
mutator_cfg=dict(
|
||||||
type='DCFFChannelMutator',
|
type='DCFFChannelMutator',
|
||||||
channel_unit_cfg=dict(
|
channel_unit_cfg=dict(
|
||||||
type='DCFFChannelUnit',
|
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||||
units='configs/pruning/mmpose/dcff/resnet_pose.json'),
|
|
||||||
parse_cfg=dict(
|
parse_cfg=dict(
|
||||||
type='ChannelAnalyzer',
|
type='ChannelAnalyzer',
|
||||||
demo_input=(1, 3, 224, 224),
|
demo_input=(1, 3, 224, 224),
|
||||||
tracer_type='BackwardTracer')),
|
tracer_type='BackwardTracer')),
|
||||||
target_pruning_ratio=target_pruning_ratio,
|
target_pruning_ratio=target_pruning_ratio,
|
||||||
step_freq=1,
|
step_freq=1,
|
||||||
linear_schedule=False,
|
linear_schedule=False)
|
||||||
is_deployed=False)
|
|
||||||
|
|
||||||
dataset_type = 'CocoDataset'
|
dataset_type = 'CocoDataset'
|
||||||
data_mode = 'topdown'
|
data_mode = 'topdown'
|
||||||
data_root = 'data/coco'
|
data_root = 'data/coco/'
|
||||||
|
|
||||||
file_client_args = dict(backend='disk')
|
file_client_args = dict(backend='disk')
|
||||||
|
|
||||||
|
@ -187,3 +184,5 @@ val_evaluator = dict(
|
||||||
type='mmpose.CocoMetric',
|
type='mmpose.CocoMetric',
|
||||||
ann_file=data_root + 'annotations/person_keypoints_val2017.json')
|
ann_file=data_root + 'annotations/person_keypoints_val2017.json')
|
||||||
test_evaluator = val_evaluator
|
test_evaluator = val_evaluator
|
||||||
|
|
||||||
|
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,12 @@
|
||||||
_base_ = ['dcff_pointrend_resnet50_8xb2_cityscapes.py']
|
_base_ = ['dcff_pointrend_resnet50_8xb2_cityscapes.py']
|
||||||
|
|
||||||
# model settings
|
# model settings
|
||||||
model = _base_.model
|
model_cfg = dict(
|
||||||
model['is_deployed'] = True
|
_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'))
|
||||||
|
|
|
@ -80,21 +80,20 @@ target_pruning_ratio = {
|
||||||
model = dict(
|
model = dict(
|
||||||
_scope_='mmrazor',
|
_scope_='mmrazor',
|
||||||
type='DCFF',
|
type='DCFF',
|
||||||
architecture=dict(
|
architecture=_base_.architecture,
|
||||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
|
|
||||||
mutator_cfg=dict(
|
mutator_cfg=dict(
|
||||||
type='DCFFChannelMutator',
|
type='DCFFChannelMutator',
|
||||||
channel_unit_cfg=dict(
|
channel_unit_cfg=dict(
|
||||||
type='DCFFChannelUnit',
|
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||||
units='configs/pruning/mmseg/dcff/resnet_seg.json'),
|
|
||||||
parse_cfg=dict(
|
parse_cfg=dict(
|
||||||
type='ChannelAnalyzer',
|
type='ChannelAnalyzer',
|
||||||
demo_input=(1, 3, 224, 224),
|
demo_input=(1, 3, 224, 224),
|
||||||
tracer_type='BackwardTracer')),
|
tracer_type='BackwardTracer')),
|
||||||
target_pruning_ratio=target_pruning_ratio,
|
target_pruning_ratio=target_pruning_ratio,
|
||||||
step_freq=200,
|
step_freq=200,
|
||||||
linear_schedule=False,
|
linear_schedule=False)
|
||||||
is_deployed=False)
|
|
||||||
|
|
||||||
model_wrapper = dict(
|
model_wrapper = dict(
|
||||||
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
||||||
|
|
||||||
|
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,6 +2,7 @@
|
||||||
from .darts_loop import DartsEpochBasedTrainLoop, DartsIterBasedTrainLoop
|
from .darts_loop import DartsEpochBasedTrainLoop, DartsIterBasedTrainLoop
|
||||||
from .distill_val_loop import SelfDistillValLoop, SingleTeacherDistillValLoop
|
from .distill_val_loop import SelfDistillValLoop, SingleTeacherDistillValLoop
|
||||||
from .evolution_search_loop import EvolutionSearchLoop
|
from .evolution_search_loop import EvolutionSearchLoop
|
||||||
|
from .iteprune_val_loop import ItePruneValLoop
|
||||||
from .slimmable_val_loop import SlimmableValLoop
|
from .slimmable_val_loop import SlimmableValLoop
|
||||||
from .subnet_sampler_loop import GreedySamplerTrainLoop
|
from .subnet_sampler_loop import GreedySamplerTrainLoop
|
||||||
from .subnet_val_loop import SubnetValLoop
|
from .subnet_val_loop import SubnetValLoop
|
||||||
|
@ -9,5 +10,6 @@ from .subnet_val_loop import SubnetValLoop
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'SingleTeacherDistillValLoop', 'DartsEpochBasedTrainLoop',
|
'SingleTeacherDistillValLoop', 'DartsEpochBasedTrainLoop',
|
||||||
'DartsIterBasedTrainLoop', 'SlimmableValLoop', 'EvolutionSearchLoop',
|
'DartsIterBasedTrainLoop', 'SlimmableValLoop', 'EvolutionSearchLoop',
|
||||||
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop'
|
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop',
|
||||||
|
'ItePruneValLoop'
|
||||||
]
|
]
|
||||||
|
|
|
@ -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}.')
|
|
@ -8,10 +8,9 @@ from mmengine import MMLogger
|
||||||
from mmengine.model import BaseModel
|
from mmengine.model import BaseModel
|
||||||
from mmengine.structures import BaseDataElement
|
from mmengine.structures import BaseDataElement
|
||||||
|
|
||||||
from mmrazor.models.mutables import BaseMutable
|
|
||||||
from mmrazor.models.mutators import DCFFChannelMutator
|
from mmrazor.models.mutators import DCFFChannelMutator
|
||||||
from mmrazor.registry import MODELS
|
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
|
from .ite_prune_algorithm import ItePruneAlgorithm, ItePruneConfigManager
|
||||||
|
|
||||||
LossResults = Dict[str, torch.Tensor]
|
LossResults = Dict[str, torch.Tensor]
|
||||||
|
@ -30,8 +29,8 @@ class DCFF(ItePruneAlgorithm):
|
||||||
Args:
|
Args:
|
||||||
architecture (Union[BaseModel, Dict]): The model to be pruned.
|
architecture (Union[BaseModel, Dict]): The model to be pruned.
|
||||||
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
||||||
of a mutator. Defaults to dict( type='ChannelMutator',
|
of a mutator. Defaults to dict( type='DCFFChannelMutator',
|
||||||
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
|
channel_unit_cfg=dict( type='DCFFChannelUnit')).
|
||||||
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
|
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
|
||||||
Defaults to None.
|
Defaults to None.
|
||||||
target_pruning_ratio (dict, optional): The prune-target. The template
|
target_pruning_ratio (dict, optional): The prune-target. The template
|
||||||
|
@ -47,8 +46,6 @@ class DCFF(ItePruneAlgorithm):
|
||||||
Defaults to None.
|
Defaults to None.
|
||||||
linear_schedule (bool, optional): flag to set linear ratio schedule.
|
linear_schedule (bool, optional): flag to set linear ratio schedule.
|
||||||
Defaults to False due to dcff fixed pruning rate.
|
Defaults to False due to dcff fixed pruning rate.
|
||||||
is_deployed (bool, optional): flag to set deployed algorithm.
|
|
||||||
Defaults to False.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
|
@ -56,35 +53,17 @@ class DCFF(ItePruneAlgorithm):
|
||||||
mutator_cfg: Union[Dict, DCFFChannelMutator] = dict(
|
mutator_cfg: Union[Dict, DCFFChannelMutator] = dict(
|
||||||
type=' DCFFChannelMutator',
|
type=' DCFFChannelMutator',
|
||||||
channel_unit_cfg=dict(type='DCFFChannelUnit')),
|
channel_unit_cfg=dict(type='DCFFChannelUnit')),
|
||||||
|
fix_subnet: Optional[ValidFixMutable] = None,
|
||||||
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
||||||
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
||||||
step_freq=1,
|
step_freq=1,
|
||||||
prune_times=0,
|
prune_times=0,
|
||||||
init_cfg: Optional[Dict] = None,
|
init_cfg: Optional[Dict] = None,
|
||||||
linear_schedule=False,
|
linear_schedule=False) -> None:
|
||||||
is_deployed=False) -> None:
|
|
||||||
# invalid param prune_times, reset after message_hub get [max_epoch]
|
# invalid param prune_times, reset after message_hub get [max_epoch]
|
||||||
super().__init__(architecture, mutator_cfg, data_preprocessor,
|
super().__init__(architecture, mutator_cfg, fix_subnet,
|
||||||
target_pruning_ratio, step_freq, prune_times,
|
data_preprocessor, target_pruning_ratio, step_freq,
|
||||||
init_cfg, linear_schedule)
|
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
|
|
||||||
|
|
||||||
def _calc_temperature(self, cur_num: int, max_num: int):
|
def _calc_temperature(self, cur_num: int, max_num: int):
|
||||||
"""Calculate temperature param."""
|
"""Calculate temperature param."""
|
||||||
|
|
|
@ -10,6 +10,7 @@ from mmengine.structures import BaseDataElement
|
||||||
from mmrazor.models.mutables import MutableChannelUnit
|
from mmrazor.models.mutables import MutableChannelUnit
|
||||||
from mmrazor.models.mutators import ChannelMutator
|
from mmrazor.models.mutators import ChannelMutator
|
||||||
from mmrazor.registry import MODELS
|
from mmrazor.registry import MODELS
|
||||||
|
from mmrazor.utils import ValidFixMutable
|
||||||
from ..base import BaseAlgorithm
|
from ..base import BaseAlgorithm
|
||||||
|
|
||||||
LossResults = Dict[str, torch.Tensor]
|
LossResults = Dict[str, torch.Tensor]
|
||||||
|
@ -97,6 +98,8 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
||||||
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
||||||
of a mutator. Defaults to dict( type='ChannelMutator',
|
of a mutator. Defaults to dict( type='ChannelMutator',
|
||||||
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
|
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):
|
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
|
||||||
Defaults to None.
|
Defaults to None.
|
||||||
target_pruning_ratio (dict, optional): The prune-target. The template
|
target_pruning_ratio (dict, optional): The prune-target. The template
|
||||||
|
@ -118,10 +121,11 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
||||||
type='ChannelMutator',
|
type='ChannelMutator',
|
||||||
channel_unit_cfg=dict(
|
channel_unit_cfg=dict(
|
||||||
type='SequentialMutableChannelUnit')),
|
type='SequentialMutableChannelUnit')),
|
||||||
|
fix_subnet: Optional[ValidFixMutable] = None,
|
||||||
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
||||||
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
||||||
step_freq=-1,
|
step_freq=1,
|
||||||
prune_times=-1,
|
prune_times=1,
|
||||||
init_cfg: Optional[Dict] = None,
|
init_cfg: Optional[Dict] = None,
|
||||||
linear_schedule=True) -> None:
|
linear_schedule=True) -> None:
|
||||||
|
|
||||||
|
@ -133,7 +137,6 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
||||||
self.prune_times = prune_times
|
self.prune_times = prune_times
|
||||||
self.linear_schedule = linear_schedule
|
self.linear_schedule = linear_schedule
|
||||||
|
|
||||||
# mutator
|
|
||||||
self.mutator: ChannelMutator = MODELS.build(mutator_cfg)
|
self.mutator: ChannelMutator = MODELS.build(mutator_cfg)
|
||||||
self.mutator.prepare_from_supernet(self.architecture)
|
self.mutator.prepare_from_supernet(self.architecture)
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ class SearchableShuffleNetV2(BaseBackbone):
|
||||||
6 initializers, including ``Constant``, ``Xavier``, ``Normal``,
|
6 initializers, including ``Constant``, ``Xavier``, ``Normal``,
|
||||||
``Uniform``, ``Kaiming``, and ``Pretrained``.
|
``Uniform``, ``Kaiming``, and ``Pretrained``.
|
||||||
|
|
||||||
Excamples:
|
Examples:
|
||||||
>>> mutable_cfg = dict(
|
>>> mutable_cfg = dict(
|
||||||
... type='OneShotMutableOP',
|
... type='OneShotMutableOP',
|
||||||
... candidates=dict(
|
... candidates=dict(
|
||||||
|
|
|
@ -41,6 +41,16 @@ class MutableChannelUnit(ChannelUnit):
|
||||||
|
|
||||||
super().__init__(num_channels)
|
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
|
@classmethod
|
||||||
def init_from_mutable_channel(cls, mutable_channel: BaseMutableChannel):
|
def init_from_mutable_channel(cls, mutable_channel: BaseMutableChannel):
|
||||||
unit = cls(mutable_channel.num_channels)
|
unit = cls(mutable_channel.num_channels)
|
||||||
|
|
|
@ -5,7 +5,7 @@ Each node is a child of the root registry in MMEngine.
|
||||||
More details can be found at
|
More details can be found at
|
||||||
https://mmengine.readthedocs.io/en/latest/tutorials/registry.html.
|
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.config import Config, ConfigDict
|
||||||
from mmengine.registry import DATA_SAMPLERS as MMENGINE_DATA_SAMPLERS
|
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
|
# manage sub models for downstream repos
|
||||||
@MODELS.register_module()
|
@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)
|
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
|
from mmrazor.structures import load_fix_subnet
|
||||||
|
|
||||||
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
|
return model
|
||||||
|
|
|
@ -3,8 +3,10 @@ import copy
|
||||||
from typing import Dict, Optional, Tuple
|
from typing import Dict, Optional, Tuple
|
||||||
|
|
||||||
from mmengine import fileio
|
from mmengine import fileio
|
||||||
|
from mmengine.logging import print_log
|
||||||
from torch import nn
|
from torch import nn
|
||||||
|
|
||||||
|
from mmrazor.registry import MODELS
|
||||||
from mmrazor.utils import FixMutable, ValidFixMutable
|
from mmrazor.utils import FixMutable, ValidFixMutable
|
||||||
from mmrazor.utils.typing import DumpChosen
|
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,
|
def load_fix_subnet(model: nn.Module,
|
||||||
fix_mutable: ValidFixMutable,
|
fix_mutable: ValidFixMutable,
|
||||||
|
load_subnet_mode: str = 'mutable',
|
||||||
prefix: str = '',
|
prefix: str = '',
|
||||||
extra_prefix: str = '') -> None:
|
extra_prefix: str = '') -> None:
|
||||||
"""Load fix subnet."""
|
"""Load fix subnet."""
|
||||||
|
@ -45,6 +48,22 @@ def load_fix_subnet(model: nn.Module,
|
||||||
if isinstance(model, DynamicMixin):
|
if isinstance(model, DynamicMixin):
|
||||||
raise RuntimeError('Root model can not be dynamic op.')
|
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
|
# Avoid circular import
|
||||||
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
||||||
from mmrazor.models.mutables.base_mutable import BaseMutable
|
from mmrazor.models.mutables.base_mutable import BaseMutable
|
||||||
|
@ -92,19 +111,62 @@ def load_fix_subnet(model: nn.Module,
|
||||||
else:
|
else:
|
||||||
load_fix_module(module)
|
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(
|
def export_fix_subnet(
|
||||||
model: nn.Module,
|
model: nn.Module,
|
||||||
|
export_subnet_mode: str = 'mutable',
|
||||||
slice_weight: bool = False) -> Tuple[FixMutable, Optional[Dict]]:
|
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:
|
Args:
|
||||||
slice_weight (bool): Whether to return the sliced subnet.
|
model (nn.Module): The target model to export.
|
||||||
Defaults to False.
|
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
|
# Avoid circular import
|
||||||
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
||||||
from mmrazor.models.mutables.base_mutable import BaseMutable
|
from mmrazor.models.mutables.base_mutable import BaseMutable
|
||||||
|
@ -125,14 +187,14 @@ def export_fix_subnet(
|
||||||
module_dump_chosen(source_mutable, fix_subnet)
|
module_dump_chosen(source_mutable, fix_subnet)
|
||||||
else:
|
else:
|
||||||
module_dump_chosen(module, fix_subnet)
|
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:
|
def _export_subnet_by_mutator(model: nn.Module) -> Dict:
|
||||||
copied_model.cuda()
|
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
|
||||||
|
|
||||||
return fix_subnet, None
|
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
# Copyright (c) OpenMMLab. All rights reserved.
|
# Copyright (c) OpenMMLab. All rights reserved.
|
||||||
import copy
|
import copy
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
|
import os.path as osp
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
@ -12,6 +14,7 @@ from mmrazor.models.algorithms.pruning.dcff import DCFF
|
||||||
from mmrazor.models.algorithms.pruning.ite_prune_algorithm import \
|
from mmrazor.models.algorithms.pruning.ite_prune_algorithm import \
|
||||||
ItePruneConfigManager
|
ItePruneConfigManager
|
||||||
from mmrazor.registry import MODELS
|
from mmrazor.registry import MODELS
|
||||||
|
from mmrazor.structures import export_fix_subnet
|
||||||
|
|
||||||
|
|
||||||
# @TASK_UTILS.register_module()
|
# @TASK_UTILS.register_module()
|
||||||
|
@ -229,3 +232,94 @@ class TestDCFFAlgorithm(unittest.TestCase):
|
||||||
algorithm.forward(
|
algorithm.forward(
|
||||||
data['inputs'], data['data_samples'], mode='loss')
|
data['inputs'], data['data_samples'], mode='loss')
|
||||||
self.assertEqual(algorithm.step_freq, epoch_step * iter_per_epoch)
|
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))
|
||||||
|
|
|
@ -4,6 +4,7 @@ from typing import Dict, Optional, Union
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
|
from mmengine import fileio
|
||||||
from mmengine.config import Config
|
from mmengine.config import Config
|
||||||
from mmengine.model import BaseModel
|
from mmengine.model import BaseModel
|
||||||
|
|
||||||
|
@ -82,6 +83,24 @@ class TestRegistry(TestCase):
|
||||||
model = MODELS.build(cfg.model)
|
model = MODELS.build(cfg.model)
|
||||||
self.assertTrue(isinstance(model, BaseModel))
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue