Mobilenet_v2的参数alpha和depth_multiplier

Mobilenet_v2 是一个十分常用的轻量级网络,很多人直接使用的时候会忽略有两个参数 alpha和depth_multiplier,这两个参数也控制着网络的结构,那么这两个参数什么意思?

首先看下Mobilenet_v1中提到的可分离深度卷积,该卷积可以分为两部分:depth_wise卷积 and point_wise卷积,这两个参数也就对应着这两个卷积。

# 1、先进行 depth_wise 卷积
    x = DepthwiseConv2D((3, 3),
                        padding='same',
                        depth_multiplier=depth_multiplier,
                        strides=strides,
                        use_bias=False,
                        name='conv_dw' % block_id)(inputs)
    x = BatchNormalization(axis=channel_axis, name='bn' % block_id)(x)
    x = Activation(relu6, name='relu' % block_id)(x)
    
# 2、再进行 point_wise 卷积
    x = Conv2D(pointwise_conv_filters, (1, 1),
               padding='same',
               use_bias=False,
               strides=(1, 1),
               name='conv_pw_1' % block_id)(x)
    x = BatchNormalization(axis=channel_axis, name='conv_pw_bn' % block_id)(x)
    x = Activation(relu6, name='conv_pw_relu' % block_id)(x)

depth_multiplier:

对应着 depth_wise卷积过程,比如输入的图片是Dk*Dk*M(Dk是图片大小,M是输入的通道数),那么有M个Dw*Dw的卷积核,分别去跟M个渠道进行卷积,输出Df*Df*M结果,(上述只是该处标准的深度卷积网络,实际上的是有可能有n个M*Dw*Dw的卷积核,卷积之后的输出为Df*Df*(m*n))所以这里的 n 就对应着 depth_multiplier,主要的作用还是改变输出的通道数。

alpha:

对Df*Df*M进行卷积合并,有1*1*N的卷积核,进行合并常规的卷积,输出Df*Df*N的结果,上述是标准的 point_wise卷积,那么alpha怎么使用?只需要对上述进行改变:对Df*Df*M进行卷积,1*1*(N*alpha)的卷积核,输出为Df*Df*(N*alpha)

你可能感兴趣的:(CV)