Skip to content

想替换ShiTu模块中的LCNetv2为HGNet话,需要做哪些调整呢? #3372

@TyrionChou

Description

@TyrionChou

这是LCNetv2_base到LCNetv2_base_ShiTu的变化:
from paddle.nn import Conv2D, Identity

from ..legendary_models.pp_lcnet_v2 import MODEL_URLS, PPLCNetV2_base, RepDepthwiseSeparable, _load_pretrained

all = ["PPLCNetV2_base_ShiTu"]

def PPLCNetV2_base_ShiTu(pretrained=False, use_ssld=False, **kwargs):
"""
An variant network of PPLCNetV2_base
1. remove ReLU layer after last_conv
2. add bias to last_conv
3. change stride to 1 in last two RepDepthwiseSeparable Block
"""
model = PPLCNetV2_base(pretrained=False, use_ssld=use_ssld, **kwargs)

def remove_ReLU_function(conv, pattern):
    new_conv = Identity()
    return new_conv

def add_bias_last_conv(conv, pattern):
    new_conv = Conv2D(
        in_channels=conv._in_channels,
        out_channels=conv._out_channels,
        kernel_size=conv._kernel_size,
        stride=conv._stride,
        padding=conv._padding,
        groups=conv._groups,
        bias_attr=True)
    return new_conv

def last_stride_function(rep_block, pattern):
    new_conv = RepDepthwiseSeparable(
        in_channels=rep_block.in_channels,
        out_channels=rep_block.out_channels,
        stride=1,
        dw_size=rep_block.dw_size,
        split_pw=rep_block.split_pw,
        use_rep=rep_block.use_rep,
        use_se=rep_block.use_se,
        use_shortcut=rep_block.use_shortcut)
    return new_conv

pattern_act = ["act"]
pattern_lastconv = ["last_conv"]
pattern_last_stride = [
    "stages[3][0]",
    "stages[3][1]",
]
model.upgrade_sublayer(pattern_act, remove_ReLU_function)
model.upgrade_sublayer(pattern_lastconv, add_bias_last_conv)
model.upgrade_sublayer(pattern_last_stride, last_stride_function)

# load params again after upgrade some layers
_load_pretrained(pretrained, model, MODEL_URLS["PPLCNetV2_base"], use_ssld)
return model

如题,上面做了三个操作,如果想把HGNet用于shitu,也需要进行上述的步骤吗?这三个步骤的目的分别是什么呢?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions