CNN模型复现6 SqeezeNet
6.SqueezeNet
SqueezeNet:arXiv:1602.07360v4 [cs.CV] 4 Nov 2016 ;
论文下载link
6.1 网络结构
(1) 网络结构
- Conv + MaxPool
- Fire blocks + MaxPool
- Conv + AvgPool
(2) Fire blocks
Conv 1x1
↓
Conv 1x1 + Conv 3x3
↓
concatenate
(3) Model diagram
Conv
MaxPool
↓
Fire block * 3 + maxpool
↓
Fire block * 4 + maxpool
↓
Fire block
↓
Conv2D
GlobalAvgPool
softmax
6.2 代码
(1) 代码流程
- 导入程序包
- 编写Fire blocks
- 建立stem
- 建立model
(2) 代码
# 1.Imports
from keras import Model
from keras.layers import Input,Conv2D,Concatenate,Activation,MaxPool2D,GlobalAvgPool2D
# 2 Fire block
def fire_block(x,squeeze_filters,expand_filters):
'''
conv 1x1 --> squeezed tensor1
conv 1x1 + conv 3x3 --> tensor2
concatenate([tensor1,tensor2])
'''
squeezed = Conv2D(filters=squeeze_filters,kernel_size=1,activation='relu')(x)
expanded_1x1 = Conv2D(filters=expand_filters,kernel_size=1)(squeezed)
expanded_3x3 = Conv2D(filters=expand_filters,kernel_size=3,padding='same')(squeezed)
expanded = Concatenate()([expanded_1x1,expanded_3x3])
expanded = Activation('relu')(expanded)
return expanded
# 3.Model stem
input = Input(shape=(224,224,3))
x = Conv2D(filters=96,kernel_size=7,strides=2,padding='same')(input)
x = MaxPool2D(pool_size=3,strides=2,padding='same')(x)
# 4.Fire block * 3 + maxpool + Fire block * 4 + maxpool + Fire block
x = fire_block(x,squeeze_filters=16,expand_filters=64)
x = fire_block(x,squeeze_filters=16,expand_filters=64)
x = fire_block(x,squeeze_filters=32,expand_filters=128)
x = MaxPool2D(pool_size=3,strides=2,padding='same')(x)
x = fire_block(x,squeeze_filters=32,expand_filters=128)
x = fire_block(x,squeeze_filters=48,expand_filters=192)
x = fire_block(x,squeeze_filters=48,expand_filters=192)
x = fire_block(x,squeeze_filters=64,expand_filters=256)
x = MaxPool2D(pool_size=3,strides=2,padding='same')(x)
x = fire_block(x,squeeze_filters=64,expand_filters=256)
# 5. Last
x = Conv2D(filters=1000,kernel_size=1)(x)
x = GlobalAvgPool2D()(x)
output = Activation('softmax')(x)
model = Model(inputs=input,outputs=output)
model.summary()
'''
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 224, 224, 3) 0
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 112, 112, 96) 14208 input_1[0][0]
__________________________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D) (None, 56, 56, 96) 0 conv2d_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 56, 56, 16) 1552 max_pooling2d_1[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 56, 56, 64) 1088 conv2d_2[0][0]
__________________________________________________________________________________________________
conv2d_4 (Conv2D) (None, 56, 56, 64) 9280 conv2d_2[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 56, 56, 128) 0 conv2d_3[0][0]
conv2d_4[0][0]
__________________________________________________________________________________________________
activation_1 (Activation) (None, 56, 56, 128) 0 concatenate_1[0][0]
__________________________________________________________________________________________________
conv2d_5 (Conv2D) (None, 56, 56, 16) 2064 activation_1[0][0]
__________________________________________________________________________________________________
conv2d_6 (Conv2D) (None, 56, 56, 64) 1088 conv2d_5[0][0]
__________________________________________________________________________________________________
conv2d_7 (Conv2D) (None, 56, 56, 64) 9280 conv2d_5[0][0]
__________________________________________________________________________________________________
concatenate_2 (Concatenate) (None, 56, 56, 128) 0 conv2d_6[0][0]
conv2d_7[0][0]
__________________________________________________________________________________________________
activation_2 (Activation) (None, 56, 56, 128) 0 concatenate_2[0][0]
__________________________________________________________________________________________________
conv2d_8 (Conv2D) (None, 56, 56, 32) 4128 activation_2[0][0]
__________________________________________________________________________________________________
conv2d_9 (Conv2D) (None, 56, 56, 128) 4224 conv2d_8[0][0]
__________________________________________________________________________________________________
conv2d_10 (Conv2D) (None, 56, 56, 128) 36992 conv2d_8[0][0]
__________________________________________________________________________________________________
concatenate_3 (Concatenate) (None, 56, 56, 256) 0 conv2d_9[0][0]
conv2d_10[0][0]
__________________________________________________________________________________________________
activation_3 (Activation) (None, 56, 56, 256) 0 concatenate_3[0][0]
__________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D) (None, 28, 28, 256) 0 activation_3[0][0]
__________________________________________________________________________________________________
conv2d_11 (Conv2D) (None, 28, 28, 32) 8224 max_pooling2d_2[0][0]
__________________________________________________________________________________________________
conv2d_12 (Conv2D) (None, 28, 28, 128) 4224 conv2d_11[0][0]
__________________________________________________________________________________________________
conv2d_13 (Conv2D) (None, 28, 28, 128) 36992 conv2d_11[0][0]
__________________________________________________________________________________________________
concatenate_4 (Concatenate) (None, 28, 28, 256) 0 conv2d_12[0][0]
conv2d_13[0][0]
__________________________________________________________________________________________________
activation_4 (Activation) (None, 28, 28, 256) 0 concatenate_4[0][0]
__________________________________________________________________________________________________
conv2d_14 (Conv2D) (None, 28, 28, 48) 12336 activation_4[0][0]
__________________________________________________________________________________________________
conv2d_15 (Conv2D) (None, 28, 28, 192) 9408 conv2d_14[0][0]
__________________________________________________________________________________________________
conv2d_16 (Conv2D) (None, 28, 28, 192) 83136 conv2d_14[0][0]
__________________________________________________________________________________________________
concatenate_5 (Concatenate) (None, 28, 28, 384) 0 conv2d_15[0][0]
conv2d_16[0][0]
__________________________________________________________________________________________________
activation_5 (Activation) (None, 28, 28, 384) 0 concatenate_5[0][0]
__________________________________________________________________________________________________
conv2d_17 (Conv2D) (None, 28, 28, 48) 18480 activation_5[0][0]
__________________________________________________________________________________________________
conv2d_18 (Conv2D) (None, 28, 28, 192) 9408 conv2d_17[0][0]
__________________________________________________________________________________________________
conv2d_19 (Conv2D) (None, 28, 28, 192) 83136 conv2d_17[0][0]
__________________________________________________________________________________________________
concatenate_6 (Concatenate) (None, 28, 28, 384) 0 conv2d_18[0][0]
conv2d_19[0][0]
__________________________________________________________________________________________________
activation_6 (Activation) (None, 28, 28, 384) 0 concatenate_6[0][0]
__________________________________________________________________________________________________
conv2d_20 (Conv2D) (None, 28, 28, 64) 24640 activation_6[0][0]
__________________________________________________________________________________________________
conv2d_21 (Conv2D) (None, 28, 28, 256) 16640 conv2d_20[0][0]
__________________________________________________________________________________________________
conv2d_22 (Conv2D) (None, 28, 28, 256) 147712 conv2d_20[0][0]
__________________________________________________________________________________________________
concatenate_7 (Concatenate) (None, 28, 28, 512) 0 conv2d_21[0][0]
conv2d_22[0][0]
__________________________________________________________________________________________________
activation_7 (Activation) (None, 28, 28, 512) 0 concatenate_7[0][0]
__________________________________________________________________________________________________
max_pooling2d_3 (MaxPooling2D) (None, 14, 14, 512) 0 activation_7[0][0]
__________________________________________________________________________________________________
conv2d_23 (Conv2D) (None, 14, 14, 64) 32832 max_pooling2d_3[0][0]
__________________________________________________________________________________________________
conv2d_24 (Conv2D) (None, 14, 14, 256) 16640 conv2d_23[0][0]
__________________________________________________________________________________________________
conv2d_25 (Conv2D) (None, 14, 14, 256) 147712 conv2d_23[0][0]
__________________________________________________________________________________________________
concatenate_8 (Concatenate) (None, 14, 14, 512) 0 conv2d_24[0][0]
conv2d_25[0][0]
__________________________________________________________________________________________________
activation_8 (Activation) (None, 14, 14, 512) 0 concatenate_8[0][0]
__________________________________________________________________________________________________
conv2d_26 (Conv2D) (None, 14, 14, 1000) 513000 activation_8[0][0]
__________________________________________________________________________________________________
global_average_pooling2d_1 (Glo (None, 1000) 0 conv2d_26[0][0]
__________________________________________________________________________________________________
activation_9 (Activation) (None, 1000) 0 global_average_pooling2d_1[0][0]
==================================================================================================
Total params: 1,248,424
Trainable params: 1,248,424
Non-trainable params: 0
__________________________________________________________________________________________________
Process finished with exit code 0
'''