[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']
|
||||
|
||||
# model settings
|
||||
model = _base_.model
|
||||
model['is_deployed'] = True
|
||||
model_cfg = dict(
|
||||
_scope_='mmrazor',
|
||||
type='sub_model',
|
||||
cfg=dict(
|
||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
|
||||
fix_subnet='configs/pruning/mmcls/dcff/fix_subnet.json',
|
||||
mode='mutator',
|
||||
init_cfg=dict(
|
||||
type='Pretrained',
|
||||
checkpoint='configs/pruning/mmcls/dcff/fix_subnet_weight.pth'))
|
||||
|
|
|
@ -76,7 +76,10 @@ model = dict(
|
|||
type='ChannelAnalyzer',
|
||||
demo_input=(1, 3, 224, 224),
|
||||
tracer_type='BackwardTracer')),
|
||||
fix_subnet=None,
|
||||
data_preprocessor=None,
|
||||
target_pruning_ratio=target_pruning_ratio,
|
||||
step_freq=1,
|
||||
linear_schedule=False,
|
||||
is_deployed=False)
|
||||
linear_schedule=False)
|
||||
|
||||
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||
|
|
|
@ -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']
|
||||
|
||||
# model settings
|
||||
model = _base_.model
|
||||
model['is_deployed'] = True
|
||||
model_cfg = dict(
|
||||
_scope_='mmrazor',
|
||||
type='sub_model',
|
||||
cfg=_base_.architecture,
|
||||
fix_subnet='configs/pruning/mmdet/dcff/fix_subnet.json',
|
||||
mode='mutator',
|
||||
init_cfg=dict(
|
||||
type='Pretrained',
|
||||
checkpoint='configs/pruning/mmdet/dcff/fix_subnet_weight.pth'))
|
||||
|
|
|
@ -65,10 +65,6 @@ param_scheduler = dict(
|
|||
_delete_=True)
|
||||
train_cfg = dict(max_epochs=120, val_interval=1)
|
||||
|
||||
# !dataset config
|
||||
# ==========================================================================
|
||||
# data preprocessor
|
||||
|
||||
model = dict(
|
||||
_scope_='mmrazor',
|
||||
type='DCFF',
|
||||
|
@ -76,18 +72,16 @@ model = dict(
|
|||
mutator_cfg=dict(
|
||||
type='DCFFChannelMutator',
|
||||
channel_unit_cfg=dict(
|
||||
type='DCFFChannelUnit',
|
||||
units='configs/pruning/mmdet/dcff/resnet_det.json'),
|
||||
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||
parse_cfg=dict(
|
||||
type='ChannelAnalyzer',
|
||||
demo_input=(1, 3, 224, 224),
|
||||
tracer_type='BackwardTracer')),
|
||||
target_pruning_ratio=target_pruning_ratio,
|
||||
step_freq=1,
|
||||
linear_schedule=False,
|
||||
is_deployed=False)
|
||||
linear_schedule=False)
|
||||
|
||||
model_wrapper = dict(
|
||||
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
||||
|
||||
val_cfg = dict(_delete_=True)
|
||||
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||
|
|
|
@ -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']
|
||||
|
||||
# model settings
|
||||
model = _base_.model
|
||||
model['is_deployed'] = True
|
||||
model_cfg = dict(
|
||||
_scope_='mmrazor',
|
||||
type='sub_model',
|
||||
cfg=_base_.architecture,
|
||||
fix_subnet='configs/pruning/mmpose/dcff/fix_subnet.json',
|
||||
mode='mutator',
|
||||
init_cfg=dict(
|
||||
type='Pretrained',
|
||||
checkpoint='configs/pruning/mmpose/dcff/fix_subnet_weight.pth'))
|
||||
|
|
|
@ -108,25 +108,22 @@ target_pruning_ratio = {
|
|||
model = dict(
|
||||
_scope_='mmrazor',
|
||||
type='DCFF',
|
||||
architecture=dict(
|
||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
|
||||
architecture=architecture,
|
||||
mutator_cfg=dict(
|
||||
type='DCFFChannelMutator',
|
||||
channel_unit_cfg=dict(
|
||||
type='DCFFChannelUnit',
|
||||
units='configs/pruning/mmpose/dcff/resnet_pose.json'),
|
||||
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||
parse_cfg=dict(
|
||||
type='ChannelAnalyzer',
|
||||
demo_input=(1, 3, 224, 224),
|
||||
tracer_type='BackwardTracer')),
|
||||
target_pruning_ratio=target_pruning_ratio,
|
||||
step_freq=1,
|
||||
linear_schedule=False,
|
||||
is_deployed=False)
|
||||
linear_schedule=False)
|
||||
|
||||
dataset_type = 'CocoDataset'
|
||||
data_mode = 'topdown'
|
||||
data_root = 'data/coco'
|
||||
data_root = 'data/coco/'
|
||||
|
||||
file_client_args = dict(backend='disk')
|
||||
|
||||
|
@ -187,3 +184,5 @@ val_evaluator = dict(
|
|||
type='mmpose.CocoMetric',
|
||||
ann_file=data_root + 'annotations/person_keypoints_val2017.json')
|
||||
test_evaluator = val_evaluator
|
||||
|
||||
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||
|
|
|
@ -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']
|
||||
|
||||
# model settings
|
||||
model = _base_.model
|
||||
model['is_deployed'] = True
|
||||
model_cfg = dict(
|
||||
_scope_='mmrazor',
|
||||
type='sub_model',
|
||||
cfg=_base_.architecture,
|
||||
fix_subnet='configs/pruning/mmseg/dcff/fix_subnet.json',
|
||||
mode='mutator',
|
||||
init_cfg=dict(
|
||||
type='Pretrained',
|
||||
checkpoint='configs/pruning/mmseg/dcff/fix_subnet_weight.pth'))
|
||||
|
|
|
@ -80,21 +80,20 @@ target_pruning_ratio = {
|
|||
model = dict(
|
||||
_scope_='mmrazor',
|
||||
type='DCFF',
|
||||
architecture=dict(
|
||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py', pretrained=False),
|
||||
architecture=_base_.architecture,
|
||||
mutator_cfg=dict(
|
||||
type='DCFFChannelMutator',
|
||||
channel_unit_cfg=dict(
|
||||
type='DCFFChannelUnit',
|
||||
units='configs/pruning/mmseg/dcff/resnet_seg.json'),
|
||||
type='DCFFChannelUnit', default_args=dict(choice_mode='ratio')),
|
||||
parse_cfg=dict(
|
||||
type='ChannelAnalyzer',
|
||||
demo_input=(1, 3, 224, 224),
|
||||
tracer_type='BackwardTracer')),
|
||||
target_pruning_ratio=target_pruning_ratio,
|
||||
step_freq=200,
|
||||
linear_schedule=False,
|
||||
is_deployed=False)
|
||||
linear_schedule=False)
|
||||
|
||||
model_wrapper = dict(
|
||||
type='mmcv.MMDistributedDataParallel', find_unused_parameters=True)
|
||||
|
||||
val_cfg = dict(_delete_=True, type='mmrazor.ItePruneValLoop')
|
||||
|
|
|
@ -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 .distill_val_loop import SelfDistillValLoop, SingleTeacherDistillValLoop
|
||||
from .evolution_search_loop import EvolutionSearchLoop
|
||||
from .iteprune_val_loop import ItePruneValLoop
|
||||
from .slimmable_val_loop import SlimmableValLoop
|
||||
from .subnet_sampler_loop import GreedySamplerTrainLoop
|
||||
from .subnet_val_loop import SubnetValLoop
|
||||
|
@ -9,5 +10,6 @@ from .subnet_val_loop import SubnetValLoop
|
|||
__all__ = [
|
||||
'SingleTeacherDistillValLoop', 'DartsEpochBasedTrainLoop',
|
||||
'DartsIterBasedTrainLoop', 'SlimmableValLoop', 'EvolutionSearchLoop',
|
||||
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop'
|
||||
'GreedySamplerTrainLoop', 'SubnetValLoop', 'SelfDistillValLoop',
|
||||
'ItePruneValLoop'
|
||||
]
|
||||
|
|
|
@ -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.structures import BaseDataElement
|
||||
|
||||
from mmrazor.models.mutables import BaseMutable
|
||||
from mmrazor.models.mutators import DCFFChannelMutator
|
||||
from mmrazor.registry import MODELS
|
||||
from mmrazor.structures.subnet.fix_subnet import _dynamic_to_static
|
||||
from mmrazor.utils import ValidFixMutable
|
||||
from .ite_prune_algorithm import ItePruneAlgorithm, ItePruneConfigManager
|
||||
|
||||
LossResults = Dict[str, torch.Tensor]
|
||||
|
@ -30,8 +29,8 @@ class DCFF(ItePruneAlgorithm):
|
|||
Args:
|
||||
architecture (Union[BaseModel, Dict]): The model to be pruned.
|
||||
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
||||
of a mutator. Defaults to dict( type='ChannelMutator',
|
||||
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
|
||||
of a mutator. Defaults to dict( type='DCFFChannelMutator',
|
||||
channel_unit_cfg=dict( type='DCFFChannelUnit')).
|
||||
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
|
||||
Defaults to None.
|
||||
target_pruning_ratio (dict, optional): The prune-target. The template
|
||||
|
@ -47,8 +46,6 @@ class DCFF(ItePruneAlgorithm):
|
|||
Defaults to None.
|
||||
linear_schedule (bool, optional): flag to set linear ratio schedule.
|
||||
Defaults to False due to dcff fixed pruning rate.
|
||||
is_deployed (bool, optional): flag to set deployed algorithm.
|
||||
Defaults to False.
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
|
@ -56,35 +53,17 @@ class DCFF(ItePruneAlgorithm):
|
|||
mutator_cfg: Union[Dict, DCFFChannelMutator] = dict(
|
||||
type=' DCFFChannelMutator',
|
||||
channel_unit_cfg=dict(type='DCFFChannelUnit')),
|
||||
fix_subnet: Optional[ValidFixMutable] = None,
|
||||
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
||||
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
||||
step_freq=1,
|
||||
prune_times=0,
|
||||
init_cfg: Optional[Dict] = None,
|
||||
linear_schedule=False,
|
||||
is_deployed=False) -> None:
|
||||
linear_schedule=False) -> None:
|
||||
# invalid param prune_times, reset after message_hub get [max_epoch]
|
||||
super().__init__(architecture, mutator_cfg, data_preprocessor,
|
||||
target_pruning_ratio, step_freq, prune_times,
|
||||
init_cfg, linear_schedule)
|
||||
self.is_deployed = is_deployed
|
||||
if (self.is_deployed):
|
||||
# To static ops for loaded pruned network.
|
||||
self._deploy()
|
||||
|
||||
def _fix_archtecture(self):
|
||||
for module in self.architecture.modules():
|
||||
if isinstance(module, BaseMutable):
|
||||
if not module.is_fixed:
|
||||
module.fix_chosen(None)
|
||||
|
||||
def _deploy(self):
|
||||
config = self.prune_config_manager.prune_at(self._iter)
|
||||
self.mutator.set_choices(config)
|
||||
self.mutator.fix_channel_mutables()
|
||||
self._fix_archtecture()
|
||||
_dynamic_to_static(self.architecture)
|
||||
self.is_deployed = True
|
||||
super().__init__(architecture, mutator_cfg, fix_subnet,
|
||||
data_preprocessor, target_pruning_ratio, step_freq,
|
||||
prune_times, init_cfg, linear_schedule)
|
||||
|
||||
def _calc_temperature(self, cur_num: int, max_num: int):
|
||||
"""Calculate temperature param."""
|
||||
|
|
|
@ -10,6 +10,7 @@ from mmengine.structures import BaseDataElement
|
|||
from mmrazor.models.mutables import MutableChannelUnit
|
||||
from mmrazor.models.mutators import ChannelMutator
|
||||
from mmrazor.registry import MODELS
|
||||
from mmrazor.utils import ValidFixMutable
|
||||
from ..base import BaseAlgorithm
|
||||
|
||||
LossResults = Dict[str, torch.Tensor]
|
||||
|
@ -97,6 +98,8 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
|||
mutator_cfg (Union[Dict, ChannelMutator], optional): The config
|
||||
of a mutator. Defaults to dict( type='ChannelMutator',
|
||||
channel_unit_cfg=dict( type='SequentialMutableChannelUnit')).
|
||||
fix_subnet (str | dict | :obj:`FixSubnet`): The path of yaml file or
|
||||
loaded dict or built :obj:`FixSubnet`. Defaults to None.
|
||||
data_preprocessor (Optional[Union[Dict, nn.Module]], optional):
|
||||
Defaults to None.
|
||||
target_pruning_ratio (dict, optional): The prune-target. The template
|
||||
|
@ -118,10 +121,11 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
|||
type='ChannelMutator',
|
||||
channel_unit_cfg=dict(
|
||||
type='SequentialMutableChannelUnit')),
|
||||
fix_subnet: Optional[ValidFixMutable] = None,
|
||||
data_preprocessor: Optional[Union[Dict, nn.Module]] = None,
|
||||
target_pruning_ratio: Optional[Dict[str, float]] = None,
|
||||
step_freq=-1,
|
||||
prune_times=-1,
|
||||
step_freq=1,
|
||||
prune_times=1,
|
||||
init_cfg: Optional[Dict] = None,
|
||||
linear_schedule=True) -> None:
|
||||
|
||||
|
@ -133,7 +137,6 @@ class ItePruneAlgorithm(BaseAlgorithm):
|
|||
self.prune_times = prune_times
|
||||
self.linear_schedule = linear_schedule
|
||||
|
||||
# mutator
|
||||
self.mutator: ChannelMutator = MODELS.build(mutator_cfg)
|
||||
self.mutator.prepare_from_supernet(self.architecture)
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ class SearchableShuffleNetV2(BaseBackbone):
|
|||
6 initializers, including ``Constant``, ``Xavier``, ``Normal``,
|
||||
``Uniform``, ``Kaiming``, and ``Pretrained``.
|
||||
|
||||
Excamples:
|
||||
Examples:
|
||||
>>> mutable_cfg = dict(
|
||||
... type='OneShotMutableOP',
|
||||
... candidates=dict(
|
||||
|
|
|
@ -41,6 +41,16 @@ class MutableChannelUnit(ChannelUnit):
|
|||
|
||||
super().__init__(num_channels)
|
||||
|
||||
@classmethod
|
||||
def init_from_cfg(cls, model: nn.Module, config: Dict):
|
||||
"""init a Channel using a config which can be generated by
|
||||
self.config_template(), include init choice."""
|
||||
unit = super().init_from_cfg(model, config)
|
||||
# TO DO: add illegal judgement here?
|
||||
if 'choice' in config:
|
||||
unit.current_choice = config['choice']
|
||||
return unit
|
||||
|
||||
@classmethod
|
||||
def init_from_mutable_channel(cls, mutable_channel: BaseMutableChannel):
|
||||
unit = cls(mutable_channel.num_channels)
|
||||
|
|
|
@ -5,7 +5,7 @@ Each node is a child of the root registry in MMEngine.
|
|||
More details can be found at
|
||||
https://mmengine.readthedocs.io/en/latest/tutorials/registry.html.
|
||||
"""
|
||||
from typing import Any, Optional, Union
|
||||
from typing import Any, Dict, Optional, Union
|
||||
|
||||
from mmengine.config import Config, ConfigDict
|
||||
from mmengine.registry import DATA_SAMPLERS as MMENGINE_DATA_SAMPLERS
|
||||
|
@ -107,10 +107,32 @@ VISBACKENDS = Registry('vis_backend', parent=MMENGINE_VISBACKENDS)
|
|||
|
||||
# manage sub models for downstream repos
|
||||
@MODELS.register_module()
|
||||
def sub_model(cfg, fix_subnet, prefix='', extra_prefix=''):
|
||||
def sub_model(cfg,
|
||||
fix_subnet,
|
||||
mode: str = 'mutable',
|
||||
prefix: str = '',
|
||||
extra_prefix: str = '',
|
||||
init_weight_from_supernet: bool = False,
|
||||
init_cfg: Optional[Dict] = None):
|
||||
model = MODELS.build(cfg)
|
||||
# Save path type cfg process, set init_cfg directly.
|
||||
if init_cfg:
|
||||
# update init_cfg when init_cfg is valid.
|
||||
model.init_cfg = init_cfg
|
||||
if init_weight_from_supernet:
|
||||
# Supernet is modified after load_fix_subnet(), init weight here.
|
||||
model.init_weights()
|
||||
from mmrazor.structures import load_fix_subnet
|
||||
|
||||
load_fix_subnet(
|
||||
model, fix_subnet, prefix=prefix, extra_prefix=extra_prefix)
|
||||
model,
|
||||
fix_subnet,
|
||||
load_subnet_mode=mode,
|
||||
prefix=prefix,
|
||||
extra_prefix=extra_prefix)
|
||||
|
||||
if init_weight_from_supernet:
|
||||
# Supernet is modified after load_fix_subnet().
|
||||
model.init_cfg = None
|
||||
|
||||
return model
|
||||
|
|
|
@ -3,8 +3,10 @@ import copy
|
|||
from typing import Dict, Optional, Tuple
|
||||
|
||||
from mmengine import fileio
|
||||
from mmengine.logging import print_log
|
||||
from torch import nn
|
||||
|
||||
from mmrazor.registry import MODELS
|
||||
from mmrazor.utils import FixMutable, ValidFixMutable
|
||||
from mmrazor.utils.typing import DumpChosen
|
||||
|
||||
|
@ -29,6 +31,7 @@ def _dynamic_to_static(model: nn.Module) -> None:
|
|||
|
||||
def load_fix_subnet(model: nn.Module,
|
||||
fix_mutable: ValidFixMutable,
|
||||
load_subnet_mode: str = 'mutable',
|
||||
prefix: str = '',
|
||||
extra_prefix: str = '') -> None:
|
||||
"""Load fix subnet."""
|
||||
|
@ -45,6 +48,22 @@ def load_fix_subnet(model: nn.Module,
|
|||
if isinstance(model, DynamicMixin):
|
||||
raise RuntimeError('Root model can not be dynamic op.')
|
||||
|
||||
if load_subnet_mode == 'mutable':
|
||||
_load_fix_subnet_by_mutable(model, fix_mutable, prefix, extra_prefix)
|
||||
elif load_subnet_mode == 'mutator':
|
||||
_load_fix_subnet_by_mutator(model, fix_mutable)
|
||||
else:
|
||||
raise ValueError(f'Invalid load_subnet_mode {load_subnet_mode}, '
|
||||
'only mutable or mutator is supported.')
|
||||
|
||||
# convert dynamic op to static op
|
||||
_dynamic_to_static(model)
|
||||
|
||||
|
||||
def _load_fix_subnet_by_mutable(model: nn.Module,
|
||||
fix_mutable: Dict,
|
||||
prefix: str = '',
|
||||
extra_prefix: str = '') -> None:
|
||||
# Avoid circular import
|
||||
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
||||
from mmrazor.models.mutables.base_mutable import BaseMutable
|
||||
|
@ -92,19 +111,62 @@ def load_fix_subnet(model: nn.Module,
|
|||
else:
|
||||
load_fix_module(module)
|
||||
|
||||
# convert dynamic op to static op
|
||||
_dynamic_to_static(model)
|
||||
|
||||
def _load_fix_subnet_by_mutator(model: nn.Module, mutator_cfg: Dict) -> None:
|
||||
if 'channel_unit_cfg' not in mutator_cfg:
|
||||
raise ValueError('mutator_cfg must contain key channel_unit_cfg, '
|
||||
f'but got mutator_cfg:'
|
||||
f'{mutator_cfg}')
|
||||
mutator_cfg['parse_cfg'] = {'type': 'Config'}
|
||||
mutator = MODELS.build(mutator_cfg)
|
||||
mutator.prepare_from_supernet(model)
|
||||
mutator.set_choices(mutator.current_choices)
|
||||
|
||||
|
||||
def export_fix_subnet(
|
||||
model: nn.Module,
|
||||
export_subnet_mode: str = 'mutable',
|
||||
slice_weight: bool = False) -> Tuple[FixMutable, Optional[Dict]]:
|
||||
"""Export subnet config with (optional) the sliced weight.
|
||||
"""Export subnet that can be loaded by :func:`load_fix_subnet`. Include
|
||||
subnet structure and subnet weight.
|
||||
|
||||
Args:
|
||||
slice_weight (bool): Whether to return the sliced subnet.
|
||||
Defaults to False.
|
||||
model (nn.Module): The target model to export.
|
||||
export_subnet_mode (bool): Subnet export method choice.
|
||||
Export by `mutable.dump_chosen()` when set to 'mutable' (NAS)
|
||||
Export by `mutator.config_template()` when set to 'mutator' (Prune)
|
||||
slice_weight (bool): Export subnet weight. Default to False.
|
||||
|
||||
Return:
|
||||
fix_subnet (ValidFixMutable): Exported subnet choice config.
|
||||
static_model (Optional[Dict]): Exported static model state_dict.
|
||||
Valid when `slice_weight`=True.
|
||||
"""
|
||||
|
||||
static_model = copy.deepcopy(model)
|
||||
|
||||
fix_subnet = dict()
|
||||
if export_subnet_mode == 'mutable':
|
||||
fix_subnet = _export_subnet_by_mutable(static_model)
|
||||
elif export_subnet_mode == 'mutator':
|
||||
fix_subnet = _export_subnet_by_mutator(static_model)
|
||||
else:
|
||||
raise ValueError(f'Invalid export_subnet_mode {export_subnet_mode}, '
|
||||
'only mutable or mutator is supported.')
|
||||
|
||||
if slice_weight:
|
||||
# export subnet ckpt
|
||||
print_log('Exporting fixed subnet weight')
|
||||
_dynamic_to_static(static_model)
|
||||
if next(static_model.parameters()).is_cuda:
|
||||
static_model.cuda()
|
||||
return fix_subnet, static_model
|
||||
else:
|
||||
return fix_subnet, None
|
||||
|
||||
|
||||
def _export_subnet_by_mutable(model: nn.Module) -> Dict:
|
||||
|
||||
# Avoid circular import
|
||||
from mmrazor.models.mutables import DerivedMutable, MutableChannelContainer
|
||||
from mmrazor.models.mutables.base_mutable import BaseMutable
|
||||
|
@ -125,14 +187,14 @@ def export_fix_subnet(
|
|||
module_dump_chosen(source_mutable, fix_subnet)
|
||||
else:
|
||||
module_dump_chosen(module, fix_subnet)
|
||||
return fix_subnet
|
||||
|
||||
if slice_weight:
|
||||
copied_model = copy.deepcopy(model)
|
||||
load_fix_subnet(copied_model, fix_subnet)
|
||||
|
||||
if next(copied_model.parameters()).is_cuda:
|
||||
copied_model.cuda()
|
||||
def _export_subnet_by_mutator(model: nn.Module) -> Dict:
|
||||
if not hasattr(model, 'mutator'):
|
||||
raise ValueError('model should contain `mutator` attribute, but got '
|
||||
f'{type(model)} model')
|
||||
fix_subnet = model.mutator.config_template(
|
||||
with_channels=False, with_unit_init_args=True)
|
||||
|
||||
return fix_subnet, copied_model
|
||||
|
||||
return fix_subnet, None
|
||||
return fix_subnet
|
||||
|
|
|
@ -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.
|
||||
import copy
|
||||
import json
|
||||
import os
|
||||
import os.path as osp
|
||||
import unittest
|
||||
|
||||
import torch
|
||||
|
@ -12,6 +14,7 @@ from mmrazor.models.algorithms.pruning.dcff import DCFF
|
|||
from mmrazor.models.algorithms.pruning.ite_prune_algorithm import \
|
||||
ItePruneConfigManager
|
||||
from mmrazor.registry import MODELS
|
||||
from mmrazor.structures import export_fix_subnet
|
||||
|
||||
|
||||
# @TASK_UTILS.register_module()
|
||||
|
@ -229,3 +232,94 @@ class TestDCFFAlgorithm(unittest.TestCase):
|
|||
algorithm.forward(
|
||||
data['inputs'], data['data_samples'], mode='loss')
|
||||
self.assertEqual(algorithm.step_freq, epoch_step * iter_per_epoch)
|
||||
|
||||
def test_export_subnet(self):
|
||||
|
||||
model = MODELS.build(MODEL_CFG)
|
||||
mutator = MODELS.build(MUTATOR_CONFIG_FLOAT)
|
||||
mutator.prepare_from_supernet(model)
|
||||
mutator.set_choices(mutator.sample_choices())
|
||||
|
||||
custom_groups = [[
|
||||
'backbone.layer1.0.conv1_(0, 64)_64',
|
||||
'backbone.layer1.1.conv1_(0, 64)_64'
|
||||
]]
|
||||
mutator_cfg = copy.deepcopy(MUTATOR_CONFIG_FLOAT)
|
||||
mutator_cfg['custom_groups'] = custom_groups
|
||||
|
||||
iter_per_epoch = 10
|
||||
epoch_step = 2
|
||||
epoch = 6
|
||||
data = self.fake_cifar_data()
|
||||
|
||||
stage_ratio_1 = 0.65
|
||||
stage_ratio_2 = 0.6
|
||||
stage_ratio_3 = 0.9
|
||||
stage_ratio_4 = 0.7
|
||||
|
||||
target_pruning_ratio = {
|
||||
'backbone.layer1.0.conv1_(0, 64)_64': stage_ratio_1,
|
||||
'backbone.layer1.0.conv2_(0, 64)_64': stage_ratio_2,
|
||||
'backbone.layer1.0.conv3_(0, 256)_256': stage_ratio_3,
|
||||
'backbone.layer1.1.conv1_(0, 64)_64': stage_ratio_1,
|
||||
'backbone.layer1.1.conv2_(0, 64)_64': stage_ratio_2,
|
||||
'backbone.layer1.2.conv1_(0, 64)_64': stage_ratio_1,
|
||||
'backbone.layer1.2.conv2_(0, 64)_64': stage_ratio_2,
|
||||
# block 1 [0.65, 0.6] downsample=[0.9]
|
||||
'backbone.layer2.0.conv1_(0, 128)_128': stage_ratio_1,
|
||||
'backbone.layer2.0.conv2_(0, 128)_128': stage_ratio_2,
|
||||
'backbone.layer2.0.conv3_(0, 512)_512': stage_ratio_3,
|
||||
'backbone.layer2.1.conv1_(0, 128)_128': stage_ratio_1,
|
||||
'backbone.layer2.1.conv2_(0, 128)_128': stage_ratio_2,
|
||||
'backbone.layer2.2.conv1_(0, 128)_128': stage_ratio_1,
|
||||
'backbone.layer2.2.conv2_(0, 128)_128': stage_ratio_2,
|
||||
'backbone.layer2.3.conv1_(0, 128)_128': stage_ratio_1,
|
||||
'backbone.layer2.3.conv2_(0, 128)_128': stage_ratio_2,
|
||||
# block 2 [0.65, 0.6] downsample=[0.9]
|
||||
'backbone.layer3.0.conv1_(0, 256)_256': stage_ratio_1,
|
||||
'backbone.layer3.0.conv2_(0, 256)_256': stage_ratio_2,
|
||||
'backbone.layer3.0.conv3_(0, 1024)_1024': stage_ratio_3,
|
||||
'backbone.layer3.1.conv1_(0, 256)_256': stage_ratio_1,
|
||||
'backbone.layer3.1.conv2_(0, 256)_256': stage_ratio_2,
|
||||
'backbone.layer3.2.conv1_(0, 256)_256': stage_ratio_1,
|
||||
'backbone.layer3.2.conv2_(0, 256)_256': stage_ratio_2,
|
||||
'backbone.layer3.3.conv1_(0, 256)_256': stage_ratio_4,
|
||||
'backbone.layer3.3.conv2_(0, 256)_256': stage_ratio_4,
|
||||
'backbone.layer3.4.conv1_(0, 256)_256': stage_ratio_4,
|
||||
'backbone.layer3.4.conv2_(0, 256)_256': stage_ratio_4,
|
||||
'backbone.layer3.5.conv1_(0, 256)_256': stage_ratio_4,
|
||||
'backbone.layer3.5.conv2_(0, 256)_256': stage_ratio_4,
|
||||
# block 3 [0.65, 0.6]*2+[0.7, 0.7]*2 downsample=[0.9]
|
||||
'backbone.layer4.0.conv1_(0, 512)_512': stage_ratio_4,
|
||||
'backbone.layer4.0.conv2_(0, 512)_512': stage_ratio_4,
|
||||
'backbone.layer4.0.conv3_(0, 2048)_2048': stage_ratio_3,
|
||||
'backbone.layer4.1.conv1_(0, 512)_512': stage_ratio_4,
|
||||
'backbone.layer4.1.conv2_(0, 512)_512': stage_ratio_4,
|
||||
'backbone.layer4.2.conv1_(0, 512)_512': stage_ratio_4,
|
||||
'backbone.layer4.2.conv2_(0, 512)_512': stage_ratio_4
|
||||
# block 4 [0.7, 0.7] downsample=[0.9]
|
||||
}
|
||||
|
||||
algorithm = DCFF(
|
||||
MODEL_CFG,
|
||||
target_pruning_ratio=target_pruning_ratio,
|
||||
mutator_cfg=mutator_cfg,
|
||||
step_freq=epoch_step).to(DEVICE)
|
||||
|
||||
algorithm.init_weights()
|
||||
self._set_epoch_ite(0, 0, epoch)
|
||||
algorithm.forward(data['inputs'], data['data_samples'], mode='loss')
|
||||
self.assertEqual(algorithm.step_freq, epoch_step * iter_per_epoch)
|
||||
|
||||
fix_subnet, static_model = export_fix_subnet(
|
||||
algorithm, export_subnet_mode='mutator', slice_weight=True)
|
||||
fix_subnet = json.dumps(fix_subnet, indent=4, separators=(',', ':'))
|
||||
subnet_name = 'subnet.json'
|
||||
weight_name = 'subnet_weight.pth'
|
||||
with open(osp.join('tests/data/test_registry/', subnet_name),
|
||||
'w') as file:
|
||||
file.write(fix_subnet)
|
||||
torch.save({
|
||||
'state_dict': static_model.state_dict(),
|
||||
'meta': {}
|
||||
}, osp.join('tests/data/test_registry/', weight_name))
|
||||
|
|
|
@ -4,6 +4,7 @@ from typing import Dict, Optional, Union
|
|||
from unittest import TestCase
|
||||
|
||||
import torch.nn as nn
|
||||
from mmengine import fileio
|
||||
from mmengine.config import Config
|
||||
from mmengine.model import BaseModel
|
||||
|
||||
|
@ -82,6 +83,24 @@ class TestRegistry(TestCase):
|
|||
model = MODELS.build(cfg.model)
|
||||
self.assertTrue(isinstance(model, BaseModel))
|
||||
|
||||
def test_build_subnet_prune_from_cfg(self):
|
||||
mutator_cfg = fileio.load('tests/data/test_registry/subnet.json')
|
||||
init_cfg = dict(
|
||||
type='Pretrained',
|
||||
checkpoint='tests/data/test_registry/subnet_weight.pth')
|
||||
# test fix subnet
|
||||
model_cfg = dict(
|
||||
# use mmrazor's build_func
|
||||
type='mmrazor.sub_model',
|
||||
cfg=dict(
|
||||
cfg_path='mmcls::resnet/resnet50_8xb32_in1k.py',
|
||||
pretrained=False),
|
||||
fix_subnet=mutator_cfg,
|
||||
mode='mutator',
|
||||
init_cfg=init_cfg)
|
||||
model = MODELS.build(model_cfg)
|
||||
self.assertTrue(isinstance(model, BaseModel))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue