def __init__(self, in_channel_list, out_channel_list, kernel_size_list=3, expand_ratio_list=6, stride=1, act_func='relu6', use_se=False): super(DynamicMBConvLayer, self).__init__() self.in_channel_list = in_channel_list self.out_channel_list = out_channel_list self.kernel_size_list = int2list(kernel_size_list, 1) self.expand_ratio_list = int2list(expand_ratio_list, 1) self.stride = stride self.act_func = act_func self.use_se = use_se # build modules max_middle_channel = round( max(self.in_channel_list) * max(self.expand_ratio_list)) if max(self.expand_ratio_list) == 1: self.inverted_bottleneck = None else: self.inverted_bottleneck = nn.Sequential( OrderedDict([ ('conv', DynamicPointConv2d(max(self.in_channel_list), max_middle_channel)), ('bn', DynamicBatchNorm2d(max_middle_channel)), ('act', build_activation(self.act_func, inplace=True)), ])) self.depth_conv = nn.Sequential( OrderedDict([('conv', DynamicSeparableConv2d(max_middle_channel, self.kernel_size_list, self.stride)), ('bn', DynamicBatchNorm2d(max_middle_channel)), ('act', build_activation(self.act_func, inplace=True))])) if self.use_se: self.depth_conv.add_module('se', DynamicSE(max_middle_channel)) self.point_linear = nn.Sequential( OrderedDict([ ('conv', DynamicPointConv2d(max_middle_channel, max(self.out_channel_list))), ('bn', DynamicBatchNorm2d(max(self.out_channel_list))), ])) self.active_kernel_size = max(self.kernel_size_list) self.active_expand_ratio = max(self.expand_ratio_list) self.active_out_channel = max(self.out_channel_list)
def __init__(self, in_channel_list, out_channel_list, kernel_size=3, stride=1, dilation=1, use_bn=True, act_func='relu6'): super(DynamicConvLayer, self).__init__() self.in_channel_list = in_channel_list self.out_channel_list = out_channel_list self.kernel_size = kernel_size self.stride = stride self.dilation = dilation self.use_bn = use_bn self.act_func = act_func self.conv = DynamicPointConv2d( max_in_channels=max(self.in_channel_list), max_out_channels=max(self.out_channel_list), kernel_size=self.kernel_size, stride=self.stride, dilation=self.dilation, ) if self.use_bn: self.bn = DynamicBatchNorm2d(max(self.out_channel_list)) self.act = build_activation(self.act_func, inplace=True) self.active_out_channel = max(self.out_channel_list)
def __init__(self, in_channel_list, out_channel_list, kernel_size=3, stride=1, dilation=1, act_func='relu6', w_bit=-1, a_bit=-1, half_wave=True): super(DynamicQConvLayer, self).__init__() self.in_channel_list = in_channel_list self.out_channel_list = out_channel_list self.kernel_size = kernel_size self.stride = stride self.dilation = dilation self.act_func = act_func self.conv = DynamicPointQConv2d( max_in_channels=max(self.in_channel_list), max_out_channels=max(self.out_channel_list), kernel_size=self.kernel_size, stride=self.stride, dilation=self.dilation, w_bit=w_bit, a_bit=a_bit, half_wave=half_wave) self.bn = DynamicBatchNorm2d(max(self.out_channel_list)) self.act = build_activation(self.act_func, inplace=True) self.active_out_channel = max(self.out_channel_list)
def __init__(self, in_channel_list, out_channel_list, kernel_size_list=3, expand_ratio_list=6, stride=1, act_func='relu6', pw_w_bit=-1, pw_a_bit=-1, dw_w_bit=-1, dw_a_bit=-1, **kwargs): super(DynamicMBQConvLayer, self).__init__() self.in_channel_list = in_channel_list self.out_channel_list = out_channel_list self.kernel_size_list = int2list(kernel_size_list, 1) self.expand_ratio_list = int2list(expand_ratio_list, 1) self.stride = stride self.act_func = act_func # build modules max_middle_channel = round( max(self.in_channel_list) * max(self.expand_ratio_list)) if max(self.expand_ratio_list) == 1: self.inverted_bottleneck = None else: self.inverted_bottleneck = nn.Sequential( OrderedDict([ ('conv', DynamicPointQConv2d(max(self.in_channel_list), max_middle_channel, w_bit=pw_w_bit, a_bit=pw_a_bit, half_wave=False)), ('bn', DynamicBatchNorm2d(max_middle_channel)), ('act', build_activation(self.act_func, inplace=True)), ])) self.depth_conv = nn.Sequential( OrderedDict([('conv', DynamicSeparableQConv2d(max_middle_channel, self.kernel_size_list, self.stride, w_bit=dw_w_bit, a_bit=dw_a_bit)), ('bn', DynamicBatchNorm2d(max_middle_channel)), ('act', build_activation(self.act_func, inplace=True))])) self.point_linear = nn.Sequential( OrderedDict([ ('conv', DynamicPointQConv2d(max_middle_channel, max(self.out_channel_list), w_bit=pw_w_bit, a_bit=pw_a_bit)), ('bn', DynamicBatchNorm2d(max(self.out_channel_list))), ])) self.active_kernel_size = max(self.kernel_size_list) self.active_expand_ratio = max(self.expand_ratio_list) self.active_out_channel = max(self.out_channel_list)