AlexNet,VGG,Inceptions, ResNet, MobileNet对比
以下是几种经典卷积神经网络(CNN)架构的对比与关键特性分析:
AlexNet(2012)
model = Sequential([Conv2D(96, (11,11), strides=4, activation='relu', input_shape=(227,227,3)),MaxPooling2D((3,3), strides=2),Conv2D(256, (5,5), padding='same', activation='relu'),MaxPooling2D((3,3), strides=2),Conv2D(384, (3,3), padding='same', activation='relu'),Conv2D(384, (3,3), padding='same', activation='relu'),Conv2D(256, (3,3), padding='same', activation='relu'),MaxPooling2D((3,3), strides=2),Flatten(),Dense(4096, activation='relu'),Dense(4096, activation='relu'),Dense(1000, activation='softmax')
])
- 首个深层CNN,5个卷积层+3个全连接层
- 使用ReLU激活函数提升训练速度
- 引入Dropout防止过拟合
VGG(2014)
def VGG_block(num_convs, filters):block = Sequential()for _ in range(num_convs):block.add(Conv2D(filters, (3,3), padding='same', activation='relu'))block.add(MaxPooling2D((2,2), strides=2))return block
- 统一使用3x3小卷积核堆叠
- 典型配置VGG16/VGG19(16/19层)
- 参数量大(138M),全连接层占比高
Inception系列(2014-2016)
def Inception_module(x, filters):branch1 = Conv2D(filters[0], (1,1), padding='same', activation='relu')(x)branch2 = Conv2D(filters[1], (1,1), padding='same', activation='relu')(x)branch2 = Conv2D(filters[2], (3,3), padding='same', activation='relu')(branch2)branch3 = Conv2D(filters[3], (1,1), padding='same', activation='relu')(x)branch3 = Conv2D(filters[4], (5,5), padding='same', activation='relu')(branch3)branch4 = MaxPooling2D((3,3), strides=1, padding='same')(x)branch4 = Conv2D(filters[5], (1,1), padding='same', activation='relu')(branch4)return concatenate([branch1, branch2, branch3, branch4])
- 多尺度并行卷积(1x1,3x3,5x5)
- 引入1x1卷积降维减少计算量
- v3加入BN层,v4结合ResNet思想
ResNet(2015)
def residual_block(x, filters, strides=1):shortcut = xx = Conv2D(filters, (3,3), strides=strides, padding='same')(x)x = BatchNormalization()(x)x = ReLU()(x)x = Conv2D(filters, (3,3), padding='same')(x)x = BatchNormalization()(x)if strides != 1 or shortcut.shape[-1] != filters:shortcut = Conv2D(filters, (1,1), strides=strides)(shortcut)shortcut = BatchNormalization()(shortcut)x = Add()([x, shortcut])return ReLU()(x)
- 残差连接解决梯度消失问题
- 典型结构ResNet50/101/152
- 使用Bottleneck结构(1x1-3x3-1x1)
MobileNet(2017)
def depthwise_separable_conv(x, filters, strides):x = DepthwiseConv2D((3,3), strides=strides, padding='same')(x)x = BatchNormalization()(x)x = ReLU()(x)x = Conv2D(filters, (1,1), padding='same')(x)x = BatchNormalization()(x)return ReLU()(x)
- 深度可分离卷积降低计算量
- 宽度乘子调整模型大小
- v2引入倒残差结构和线性瓶颈
- v3加入SE模块和h-swish激活
这些架构的发展趋势表现为:网络深度增加(AlexNet 8层 → ResNet 152层)、计算效率提升(标准卷积 → 深度可分离卷积)、模块化设计(Inception/Residual块)、准确率与速度的平衡(MobileNet系列)。实际应用中需根据计算资源和精度要求选择合适的架构。