CNN模型复现11 ShuffleNetV2


ShuffleNetV2优点:
1、卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快。

2、过量使用组卷积会增加MAC。

3、网络碎片化会降低并行度。

4、不能忽略元素级操作,比如ReLU和Add,虽然它们的FLOPs较小,但是却需要较大的MAC。

1. shuffle_unit结构


在这里插入图片描述

# strides = 1
input
↓
channel split
↓
P1->conv(1*1)BNRelu->DwConv(3*3)BN->conv(1*1)->p2
↓
concatenate([p1,p2])
↓
channel shuffle


# strides = 2
input->conv(1*1)BNRelu->DwConv(3*3,s=2)BN->conv(1*1)BNRelu->p1
input->DwConv(3*3,s=2)BN->conv(1*1)BNRelu->p2
↓
concatenate([p1,p2])
↓
channel shuffle

2. shuffle_unit代码

'''ShuffleNetV2
# 1.Imports
# 2.Block
    # 2.1 channel_split
    # 2.2 channel_shuffle
    # 2.3 shuffle_unit
    # 2.4 block
# 3.ShuffleNetV2
input[224,224,3]
|
Conv1(24,3,2)+MaxPool(3,2)
|
Stage2(116,s=2,(s=1)*3)
|
Stage3(232,s=2,(s=1)*7)
|
Stage4(464,s=2,(s=1)*3)
|
Conv1(1024,1,1)
|
GlobalPool(7)
|
FC

'''
# 1.Imports
from keras.layers import Input,Lambda,Conv2D,MaxPool2D,Activation,Add,Concatenate,GlobalAveragePooling2D,MaxPooling2D,BatchNormalization,DepthwiseConv2D
import keras.backend as K
from keras.models import Model
import numpy as np

##  2.Block
### 2.1 channel_split
def channel_split(x):
    in_channels = x.shape.as_list()[-1]
    ip = in_channels//2
    c_hat = Lambda(lambda z: z[:,:,:,:ip])(x)
    c = Lambda(lambda z: z[:,:,:,ip:])(x)
    return c_hat,c
### 2.2 channel_shuffle
def channel_shuffle(x):
    h,w,c = x.shape.as_list()[1:]
    channels_per_split = c // 2
    x = K.reshape(x,[-1,h,w,2,channels_per_split])
    x = K.permute_dimensions(x,(0,1,2,4,3))
    x = K.reshape(x,(-1,h,w,c))
    return x

# 2.3 shuffle_unit
def shuffle_unit(inputs, out_channels, bottleneck_ratio, strides=2, stage=1, block=1):
    bn_axis = -1
    bottleneck_channels = int(out_channels * bottleneck_ratio/2)
    if strides < 2:
        c_hat, c = channel_split(inputs, '{}/spl'.format(prefix))
        inputs = c

    x = Conv2D(bottleneck_channels, kernel_size=(1,1), strides=1, padding='same')(inputs)
    x = BatchNormalization(axis=bn_axis)(x)
    x = Activation('relu')(x)

    x = DepthwiseConv2D(kernel_size=3,strides=strides,padding='same')(x)
    x = BatchNormalization(axis=bn_axis)(x)

    x = Conv2D(bottleneck_channels, kernel_size=1, strides=1, padding='same')(inputs)
    x = BatchNormalization(axis=bn_axis)(x)
    x = Activation('relu')(x)

    if strides<2:
        ret = Concatenate(axis=bn_axis)([x,c_hat])
    else:
        s2 = DepthwiseConv2D(kernel_size=3,strides=strides,padding='same')(x)
        s2 = BatchNormalization(axis=bn_axis)(x)

        s2 = Conv2D(bottleneck_channels, kernel_size=1, strides=1, padding='same')(inputs)
        s2 = BatchNormalization(axis=bn_axis)(x)
        s2 = Activation('relu')(x)
        ret = Concatenate(axis=bn_axis)([x,s2])

    return ret


# 2.4 block
def block(x, channel_map, bottleneck_ratio, repeat=1, stage=1):
    x = shuffle_unit(x, out_channels=channel_map[stage-1],
                     strides=2,bottleneck_ratio=bottleneck_ratio,stage=stage,block=1)

    for i in range(1, repeat+1):
        x = shuffle_unit(x, out_channels=channel_map[stage-1],strides=1,
                         bottleneck_ratio=bottleneck_ratio,stage=stage, block=(1+i))

    return x

# 3.ShuffleNetV2
import numpy as np
from keras.utils import plot_model
from keras.layers import Input, Conv2D, MaxPool2D
from keras.layers import Activation, Add, Concatenate, Conv2D
from keras.layers import GlobalAveragePooling2D, Dense
from keras.layers import MaxPool2D,AveragePooling2D, BatchNormalization, Lambda, DepthwiseConv2D
from keras.models import Model
import keras.backend as K

import numpy as np


def channel_split(x, name=''):
    # 输入进来的通道数
    in_channles = x.shape.as_list()[-1]
    ip = in_channles // 2
    # 对通道数进行分割
    c_hat = Lambda(lambda z: z[:, :, :, 0:ip], name='%s/sp%d_slice' % (name, 0))(x)
    c = Lambda(lambda z: z[:, :, :, ip:], name='%s/sp%d_slice' % (name, 1))(x)
    return c_hat, c

def channel_shuffle(x):
    height, width, channels = x.shape.as_list()[1:]
    channels_per_split = channels // 2
    # 通道交换
    x = K.reshape(x, [-1, height, width, 2, channels_per_split])
    x = K.permute_dimensions(x, (0,1,2,4,3))
    x = K.reshape(x, [-1, height, width, channels])
    return x


def shuffle_unit(inputs, out_channels, bottleneck_ratio, strides=2, stage=1, block=1):
    bn_axis = -1

    prefix = 'stage{}/block{}'.format(stage, block)

    # [116, 232, 464]
    bottleneck_channels = int(out_channels * bottleneck_ratio/2)
    if strides < 2:
        c_hat, c = channel_split(inputs, '{}/spl'.format(prefix))
        inputs = c

    # [116, 232, 464]
    x = Conv2D(bottleneck_channels, kernel_size=(1,1), strides=1, padding='same', name='{}/1x1conv_1'.format(prefix))(inputs)
    x = BatchNormalization(axis=bn_axis, name='{}/bn_1x1conv_1'.format(prefix))(x)
    x = Activation('relu', name='{}/relu_1x1conv_1'.format(prefix))(x)

    # 深度可分离卷积
    x = DepthwiseConv2D(kernel_size=3, strides=strides, padding='same', name='{}/3x3dwconv'.format(prefix))(x)
    x = BatchNormalization(axis=bn_axis, name='{}/bn_3x3dwconv'.format(prefix))(x)

    # [116, 232, 464]
    x = Conv2D(bottleneck_channels, kernel_size=1,strides=1,padding='same', name='{}/1x1conv_2'.format(prefix))(x)
    x = BatchNormalization(axis=bn_axis, name='{}/bn_1x1conv_2'.format(prefix))(x)
    x = Activation('relu', name='{}/relu_1x1conv_2'.format(prefix))(x)

    # 当strides等于2的时候,残差边需要添加卷积
    if strides < 2:
        ret = Concatenate(axis=bn_axis, name='{}/concat_1'.format(prefix))([x, c_hat])
    else:
        s2 = DepthwiseConv2D(kernel_size=3, strides=2, padding='same', name='{}/3x3dwconv_2'.format(prefix))(inputs)
        s2 = BatchNormalization(axis=bn_axis, name='{}/bn_3x3dwconv_2'.format(prefix))(s2)

        s2 = Conv2D(bottleneck_channels, kernel_size=1,strides=1,padding='same', name='{}/1x1_conv_3'.format(prefix))(s2)
        s2 = BatchNormalization(axis=bn_axis, name='{}/bn_1x1conv_3'.format(prefix))(s2)
        s2 = Activation('relu', name='{}/relu_1x1conv_3'.format(prefix))(s2)
        ret = Concatenate(axis=bn_axis, name='{}/concat_2'.format(prefix))([x, s2])

    ret = Lambda(channel_shuffle, name='{}/channel_shuffle'.format(prefix))(ret)

    return ret


def block(x, channel_map, bottleneck_ratio, repeat=1, stage=1):
    x = shuffle_unit(x, out_channels=channel_map[stage-1],
                     strides=2,bottleneck_ratio=bottleneck_ratio,stage=stage,block=1)

    for i in range(1, repeat+1):
        x = shuffle_unit(x, out_channels=channel_map[stage-1],strides=1,
                         bottleneck_ratio=bottleneck_ratio,stage=stage, block=(1+i))

    return x

def ShuffleNetV2(input_tensor=None,
                 pooling='max',
                 input_shape=(224,224,3),
                 num_shuffle_units=[3,7,3],
                 scale_factor=1,
                 bottleneck_ratio=1,
                 classes=1000):
    name = 'ShuffleNetV2_{}_{}_{}'.format(scale_factor, bottleneck_ratio, "".join([str(x) for x in num_shuffle_units]))

    out_dim_stage_two = {0.5:48, 1:116, 1.5:176, 2:244}

    out_channels_in_stage = np.array([1,1,2,4])
    out_channels_in_stage *= out_dim_stage_two[scale_factor]  #  calculate output channels for each stage
    out_channels_in_stage[0] = 24  # first stage has always 24 output channels
    out_channels_in_stage = out_channels_in_stage.astype(int)

    img_input = Input(shape=input_shape)

    x = Conv2D(filters=out_channels_in_stage[0], kernel_size=(3, 3), padding='same', use_bias=False, strides=(2, 2),
               activation='relu', name='conv1')(img_input)
    x = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding='same', name='maxpool1')(x)

    for stage in range(len(num_shuffle_units)):
        repeat = num_shuffle_units[stage]
        x = block(x, out_channels_in_stage,
                  repeat=repeat,
                  bottleneck_ratio=bottleneck_ratio,
                  stage=stage + 2)

    if scale_factor!=2:
        x = Conv2D(1024, kernel_size=1, padding='same', strides=1, name='1x1conv5_out', activation='relu')(x)
    else:
        x = Conv2D(2048, kernel_size=1, padding='same', strides=1, name='1x1conv5_out', activation='relu')(x)
    x = GlobalAveragePooling2D(name='global_avg_pool')(x)

    x = Dense(classes, name='fc')(x)
    x = Activation('softmax', name='softmax')(x)

    inputs = img_input

    model = Model(inputs, x, name=name)

    return model

if __name__ == '__main__':
    import os
    os.environ['CUDA_VISIBLE_DEVICES'] = ''
    model = ShuffleNetV2(input_shape=(224, 224, 3),scale_factor=1)
    model.summary()
'''
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            (None, 224, 224, 3)  0                                            
__________________________________________________________________________________________________
conv1 (Conv2D)                  (None, 112, 112, 24) 648         input_1[0][0]                    
__________________________________________________________________________________________________
maxpool1 (MaxPooling2D)         (None, 56, 56, 24)   0           conv1[0][0]                      
__________________________________________________________________________________________________
stage2/block1/1x1conv_1 (Conv2D (None, 56, 56, 58)   1450        maxpool1[0][0]                   
__________________________________________________________________________________________________
stage2/block1/bn_1x1conv_1 (Bat (None, 56, 56, 58)   232         stage2/block1/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage2/block1/relu_1x1conv_1 (A (None, 56, 56, 58)   0           stage2/block1/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage2/block1/3x3dwconv (Depthw (None, 28, 28, 58)   580         stage2/block1/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage2/block1/3x3dwconv_2 (Dept (None, 28, 28, 24)   240         maxpool1[0][0]                   
__________________________________________________________________________________________________
stage2/block1/bn_3x3dwconv (Bat (None, 28, 28, 58)   232         stage2/block1/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage2/block1/bn_3x3dwconv_2 (B (None, 28, 28, 24)   96          stage2/block1/3x3dwconv_2[0][0]  
__________________________________________________________________________________________________
stage2/block1/1x1conv_2 (Conv2D (None, 28, 28, 58)   3422        stage2/block1/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage2/block1/1x1_conv_3 (Conv2 (None, 28, 28, 58)   1450        stage2/block1/bn_3x3dwconv_2[0][0
__________________________________________________________________________________________________
stage2/block1/bn_1x1conv_2 (Bat (None, 28, 28, 58)   232         stage2/block1/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage2/block1/bn_1x1conv_3 (Bat (None, 28, 28, 58)   232         stage2/block1/1x1_conv_3[0][0]   
__________________________________________________________________________________________________
stage2/block1/relu_1x1conv_2 (A (None, 28, 28, 58)   0           stage2/block1/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage2/block1/relu_1x1conv_3 (A (None, 28, 28, 58)   0           stage2/block1/bn_1x1conv_3[0][0] 
__________________________________________________________________________________________________
stage2/block1/concat_2 (Concate (None, 28, 28, 116)  0           stage2/block1/relu_1x1conv_2[0][0
                                                                 stage2/block1/relu_1x1conv_3[0][0
__________________________________________________________________________________________________
stage2/block1/channel_shuffle ( (None, 28, 28, 116)  0           stage2/block1/concat_2[0][0]     
__________________________________________________________________________________________________
stage2/block2/spl/sp1_slice (La (None, 28, 28, 58)   0           stage2/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block2/1x1conv_1 (Conv2D (None, 28, 28, 58)   3422        stage2/block2/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage2/block2/bn_1x1conv_1 (Bat (None, 28, 28, 58)   232         stage2/block2/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage2/block2/relu_1x1conv_1 (A (None, 28, 28, 58)   0           stage2/block2/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage2/block2/3x3dwconv (Depthw (None, 28, 28, 58)   580         stage2/block2/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage2/block2/bn_3x3dwconv (Bat (None, 28, 28, 58)   232         stage2/block2/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage2/block2/1x1conv_2 (Conv2D (None, 28, 28, 58)   3422        stage2/block2/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage2/block2/bn_1x1conv_2 (Bat (None, 28, 28, 58)   232         stage2/block2/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage2/block2/relu_1x1conv_2 (A (None, 28, 28, 58)   0           stage2/block2/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage2/block2/spl/sp0_slice (La (None, 28, 28, 58)   0           stage2/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block2/concat_1 (Concate (None, 28, 28, 116)  0           stage2/block2/relu_1x1conv_2[0][0
                                                                 stage2/block2/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage2/block2/channel_shuffle ( (None, 28, 28, 116)  0           stage2/block2/concat_1[0][0]     
__________________________________________________________________________________________________
stage2/block3/spl/sp1_slice (La (None, 28, 28, 58)   0           stage2/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block3/1x1conv_1 (Conv2D (None, 28, 28, 58)   3422        stage2/block3/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage2/block3/bn_1x1conv_1 (Bat (None, 28, 28, 58)   232         stage2/block3/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage2/block3/relu_1x1conv_1 (A (None, 28, 28, 58)   0           stage2/block3/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage2/block3/3x3dwconv (Depthw (None, 28, 28, 58)   580         stage2/block3/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage2/block3/bn_3x3dwconv (Bat (None, 28, 28, 58)   232         stage2/block3/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage2/block3/1x1conv_2 (Conv2D (None, 28, 28, 58)   3422        stage2/block3/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage2/block3/bn_1x1conv_2 (Bat (None, 28, 28, 58)   232         stage2/block3/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage2/block3/relu_1x1conv_2 (A (None, 28, 28, 58)   0           stage2/block3/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage2/block3/spl/sp0_slice (La (None, 28, 28, 58)   0           stage2/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block3/concat_1 (Concate (None, 28, 28, 116)  0           stage2/block3/relu_1x1conv_2[0][0
                                                                 stage2/block3/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage2/block3/channel_shuffle ( (None, 28, 28, 116)  0           stage2/block3/concat_1[0][0]     
__________________________________________________________________________________________________
stage2/block4/spl/sp1_slice (La (None, 28, 28, 58)   0           stage2/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block4/1x1conv_1 (Conv2D (None, 28, 28, 58)   3422        stage2/block4/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage2/block4/bn_1x1conv_1 (Bat (None, 28, 28, 58)   232         stage2/block4/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage2/block4/relu_1x1conv_1 (A (None, 28, 28, 58)   0           stage2/block4/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage2/block4/3x3dwconv (Depthw (None, 28, 28, 58)   580         stage2/block4/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage2/block4/bn_3x3dwconv (Bat (None, 28, 28, 58)   232         stage2/block4/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage2/block4/1x1conv_2 (Conv2D (None, 28, 28, 58)   3422        stage2/block4/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage2/block4/bn_1x1conv_2 (Bat (None, 28, 28, 58)   232         stage2/block4/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage2/block4/relu_1x1conv_2 (A (None, 28, 28, 58)   0           stage2/block4/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage2/block4/spl/sp0_slice (La (None, 28, 28, 58)   0           stage2/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage2/block4/concat_1 (Concate (None, 28, 28, 116)  0           stage2/block4/relu_1x1conv_2[0][0
                                                                 stage2/block4/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage2/block4/channel_shuffle ( (None, 28, 28, 116)  0           stage2/block4/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block1/1x1conv_1 (Conv2D (None, 28, 28, 116)  13572       stage2/block4/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block1/bn_1x1conv_1 (Bat (None, 28, 28, 116)  464         stage3/block1/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block1/relu_1x1conv_1 (A (None, 28, 28, 116)  0           stage3/block1/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block1/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block1/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block1/3x3dwconv_2 (Dept (None, 14, 14, 116)  1160        stage2/block4/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block1/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block1/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block1/bn_3x3dwconv_2 (B (None, 14, 14, 116)  464         stage3/block1/3x3dwconv_2[0][0]  
__________________________________________________________________________________________________
stage3/block1/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block1/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block1/1x1_conv_3 (Conv2 (None, 14, 14, 116)  13572       stage3/block1/bn_3x3dwconv_2[0][0
__________________________________________________________________________________________________
stage3/block1/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block1/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block1/bn_1x1conv_3 (Bat (None, 14, 14, 116)  464         stage3/block1/1x1_conv_3[0][0]   
__________________________________________________________________________________________________
stage3/block1/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block1/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block1/relu_1x1conv_3 (A (None, 14, 14, 116)  0           stage3/block1/bn_1x1conv_3[0][0] 
__________________________________________________________________________________________________
stage3/block1/concat_2 (Concate (None, 14, 14, 232)  0           stage3/block1/relu_1x1conv_2[0][0
                                                                 stage3/block1/relu_1x1conv_3[0][0
__________________________________________________________________________________________________
stage3/block1/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block1/concat_2[0][0]     
__________________________________________________________________________________________________
stage3/block2/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block2/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block2/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block2/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block2/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block2/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block2/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block2/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block2/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block2/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block2/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block2/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block2/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block2/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block2/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block2/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block2/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block2/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block2/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block2/relu_1x1conv_2[0][0
                                                                 stage3/block2/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block2/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block2/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block3/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block3/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block3/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block3/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block3/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block3/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block3/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block3/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block3/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block3/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block3/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block3/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block3/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block3/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block3/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block3/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block3/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block3/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block3/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block3/relu_1x1conv_2[0][0
                                                                 stage3/block3/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block3/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block3/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block4/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block4/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block4/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block4/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block4/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block4/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block4/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block4/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block4/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block4/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block4/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block4/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block4/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block4/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block4/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block4/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block4/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block4/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block4/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block4/relu_1x1conv_2[0][0
                                                                 stage3/block4/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block4/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block4/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block5/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block4/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block5/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block5/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block5/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block5/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block5/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block5/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block5/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block5/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block5/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block5/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block5/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block5/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block5/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block5/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block5/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block5/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block5/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block4/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block5/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block5/relu_1x1conv_2[0][0
                                                                 stage3/block5/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block5/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block5/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block6/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block5/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block6/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block6/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block6/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block6/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block6/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block6/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block6/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block6/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block6/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block6/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block6/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block6/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block6/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block6/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block6/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block6/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block6/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block5/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block6/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block6/relu_1x1conv_2[0][0
                                                                 stage3/block6/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block6/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block6/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block7/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block6/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block7/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block7/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block7/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block7/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block7/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block7/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block7/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block7/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block7/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block7/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block7/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block7/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block7/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block7/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block7/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block7/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block7/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block6/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block7/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block7/relu_1x1conv_2[0][0
                                                                 stage3/block7/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block7/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block7/concat_1[0][0]     
__________________________________________________________________________________________________
stage3/block8/spl/sp1_slice (La (None, 14, 14, 116)  0           stage3/block7/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block8/1x1conv_1 (Conv2D (None, 14, 14, 116)  13572       stage3/block8/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage3/block8/bn_1x1conv_1 (Bat (None, 14, 14, 116)  464         stage3/block8/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage3/block8/relu_1x1conv_1 (A (None, 14, 14, 116)  0           stage3/block8/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage3/block8/3x3dwconv (Depthw (None, 14, 14, 116)  1160        stage3/block8/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage3/block8/bn_3x3dwconv (Bat (None, 14, 14, 116)  464         stage3/block8/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage3/block8/1x1conv_2 (Conv2D (None, 14, 14, 116)  13572       stage3/block8/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage3/block8/bn_1x1conv_2 (Bat (None, 14, 14, 116)  464         stage3/block8/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage3/block8/relu_1x1conv_2 (A (None, 14, 14, 116)  0           stage3/block8/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage3/block8/spl/sp0_slice (La (None, 14, 14, 116)  0           stage3/block7/channel_shuffle[0][
__________________________________________________________________________________________________
stage3/block8/concat_1 (Concate (None, 14, 14, 232)  0           stage3/block8/relu_1x1conv_2[0][0
                                                                 stage3/block8/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage3/block8/channel_shuffle ( (None, 14, 14, 232)  0           stage3/block8/concat_1[0][0]     
__________________________________________________________________________________________________
stage4/block1/1x1conv_1 (Conv2D (None, 14, 14, 232)  54056       stage3/block8/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block1/bn_1x1conv_1 (Bat (None, 14, 14, 232)  928         stage4/block1/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage4/block1/relu_1x1conv_1 (A (None, 14, 14, 232)  0           stage4/block1/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage4/block1/3x3dwconv (Depthw (None, 7, 7, 232)    2320        stage4/block1/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage4/block1/3x3dwconv_2 (Dept (None, 7, 7, 232)    2320        stage3/block8/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block1/bn_3x3dwconv (Bat (None, 7, 7, 232)    928         stage4/block1/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage4/block1/bn_3x3dwconv_2 (B (None, 7, 7, 232)    928         stage4/block1/3x3dwconv_2[0][0]  
__________________________________________________________________________________________________
stage4/block1/1x1conv_2 (Conv2D (None, 7, 7, 232)    54056       stage4/block1/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage4/block1/1x1_conv_3 (Conv2 (None, 7, 7, 232)    54056       stage4/block1/bn_3x3dwconv_2[0][0
__________________________________________________________________________________________________
stage4/block1/bn_1x1conv_2 (Bat (None, 7, 7, 232)    928         stage4/block1/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage4/block1/bn_1x1conv_3 (Bat (None, 7, 7, 232)    928         stage4/block1/1x1_conv_3[0][0]   
__________________________________________________________________________________________________
stage4/block1/relu_1x1conv_2 (A (None, 7, 7, 232)    0           stage4/block1/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage4/block1/relu_1x1conv_3 (A (None, 7, 7, 232)    0           stage4/block1/bn_1x1conv_3[0][0] 
__________________________________________________________________________________________________
stage4/block1/concat_2 (Concate (None, 7, 7, 464)    0           stage4/block1/relu_1x1conv_2[0][0
                                                                 stage4/block1/relu_1x1conv_3[0][0
__________________________________________________________________________________________________
stage4/block1/channel_shuffle ( (None, 7, 7, 464)    0           stage4/block1/concat_2[0][0]     
__________________________________________________________________________________________________
stage4/block2/spl/sp1_slice (La (None, 7, 7, 232)    0           stage4/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block2/1x1conv_1 (Conv2D (None, 7, 7, 232)    54056       stage4/block2/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage4/block2/bn_1x1conv_1 (Bat (None, 7, 7, 232)    928         stage4/block2/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage4/block2/relu_1x1conv_1 (A (None, 7, 7, 232)    0           stage4/block2/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage4/block2/3x3dwconv (Depthw (None, 7, 7, 232)    2320        stage4/block2/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage4/block2/bn_3x3dwconv (Bat (None, 7, 7, 232)    928         stage4/block2/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage4/block2/1x1conv_2 (Conv2D (None, 7, 7, 232)    54056       stage4/block2/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage4/block2/bn_1x1conv_2 (Bat (None, 7, 7, 232)    928         stage4/block2/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage4/block2/relu_1x1conv_2 (A (None, 7, 7, 232)    0           stage4/block2/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage4/block2/spl/sp0_slice (La (None, 7, 7, 232)    0           stage4/block1/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block2/concat_1 (Concate (None, 7, 7, 464)    0           stage4/block2/relu_1x1conv_2[0][0
                                                                 stage4/block2/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage4/block2/channel_shuffle ( (None, 7, 7, 464)    0           stage4/block2/concat_1[0][0]     
__________________________________________________________________________________________________
stage4/block3/spl/sp1_slice (La (None, 7, 7, 232)    0           stage4/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block3/1x1conv_1 (Conv2D (None, 7, 7, 232)    54056       stage4/block3/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage4/block3/bn_1x1conv_1 (Bat (None, 7, 7, 232)    928         stage4/block3/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage4/block3/relu_1x1conv_1 (A (None, 7, 7, 232)    0           stage4/block3/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage4/block3/3x3dwconv (Depthw (None, 7, 7, 232)    2320        stage4/block3/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage4/block3/bn_3x3dwconv (Bat (None, 7, 7, 232)    928         stage4/block3/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage4/block3/1x1conv_2 (Conv2D (None, 7, 7, 232)    54056       stage4/block3/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage4/block3/bn_1x1conv_2 (Bat (None, 7, 7, 232)    928         stage4/block3/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage4/block3/relu_1x1conv_2 (A (None, 7, 7, 232)    0           stage4/block3/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage4/block3/spl/sp0_slice (La (None, 7, 7, 232)    0           stage4/block2/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block3/concat_1 (Concate (None, 7, 7, 464)    0           stage4/block3/relu_1x1conv_2[0][0
                                                                 stage4/block3/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage4/block3/channel_shuffle ( (None, 7, 7, 464)    0           stage4/block3/concat_1[0][0]     
__________________________________________________________________________________________________
stage4/block4/spl/sp1_slice (La (None, 7, 7, 232)    0           stage4/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block4/1x1conv_1 (Conv2D (None, 7, 7, 232)    54056       stage4/block4/spl/sp1_slice[0][0]
__________________________________________________________________________________________________
stage4/block4/bn_1x1conv_1 (Bat (None, 7, 7, 232)    928         stage4/block4/1x1conv_1[0][0]    
__________________________________________________________________________________________________
stage4/block4/relu_1x1conv_1 (A (None, 7, 7, 232)    0           stage4/block4/bn_1x1conv_1[0][0] 
__________________________________________________________________________________________________
stage4/block4/3x3dwconv (Depthw (None, 7, 7, 232)    2320        stage4/block4/relu_1x1conv_1[0][0
__________________________________________________________________________________________________
stage4/block4/bn_3x3dwconv (Bat (None, 7, 7, 232)    928         stage4/block4/3x3dwconv[0][0]    
__________________________________________________________________________________________________
stage4/block4/1x1conv_2 (Conv2D (None, 7, 7, 232)    54056       stage4/block4/bn_3x3dwconv[0][0] 
__________________________________________________________________________________________________
stage4/block4/bn_1x1conv_2 (Bat (None, 7, 7, 232)    928         stage4/block4/1x1conv_2[0][0]    
__________________________________________________________________________________________________
stage4/block4/relu_1x1conv_2 (A (None, 7, 7, 232)    0           stage4/block4/bn_1x1conv_2[0][0] 
__________________________________________________________________________________________________
stage4/block4/spl/sp0_slice (La (None, 7, 7, 232)    0           stage4/block3/channel_shuffle[0][
__________________________________________________________________________________________________
stage4/block4/concat_1 (Concate (None, 7, 7, 464)    0           stage4/block4/relu_1x1conv_2[0][0
                                                                 stage4/block4/spl/sp0_slice[0][0]
__________________________________________________________________________________________________
stage4/block4/channel_shuffle ( (None, 7, 7, 464)    0           stage4/block4/concat_1[0][0]     
__________________________________________________________________________________________________
1x1conv5_out (Conv2D)           (None, 7, 7, 1024)   476160      stage4/block4/channel_shuffle[0][
__________________________________________________________________________________________________
global_avg_pool (GlobalAverageP (None, 1024)         0           1x1conv5_out[0][0]               
__________________________________________________________________________________________________
fc (Dense)                      (None, 1000)         1025000     global_avg_pool[0][0]            
__________________________________________________________________________________________________
softmax (Activation)            (None, 1000)         0           fc[0][0]                         
==================================================================================================
Total params: 2,298,658
Trainable params: 2,284,574
Non-trainable params: 14,084
__________________________________________________________________________________________________

Process finished with exit code 0
'''



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值