经典CNN结构解析与实现
Contents
实现代码地址:Github
目录
- AlexNet
- VGG
- Google Inception Net
- ResNet
- DenseNet
- MobileNet
- Shuffle Net
AlexNet
- 首次使用CNN组建的深度网络在ImageNet上达到最好效果
- 它使用Relu 激活函数代替了传统的激活函数(Sigmoid/Tanh)
- 使用Dropout 解决过拟合问题
- 计算量较大
VGG
- VGG使用连续的几个3*3卷积核代替AlexNet中较大的卷积核,减少计算量。
- VGG Net中采用的卷积核是非常一致的,全都是3*3的filter
- VGG 分为4-5个block,每个block包含若干个
3*3
的卷积层和一个2*2
的MaxPooling层所以得到的conv4_3是16倍的下采样的feature map
Inception Net
- 设计了Inception Block,采用了不同尺度的filter,size为
1*1
,3*3
,5*5
,获得了不同scale的特征,具有对不同尺度特征的提取能力,而且还通过1*1的卷积层来大大降低运算。 - 在卷积层结束后,使用全局AveragePooling,避免使用全连接层
ResNet
- 在VGG网络后,研究人员发现仅仅堆叠越来越多层的CNN 或 全连接层等是无法再提高准确率,主要原因就是梯度消失的问题,因为在多层神经网络中,梯度传到最前面的网络层就非常接近0了,导致前面网络层的参数更新很慢。于是提出ResNet去解决这个梯度消失的问题。
- ResNet主要是设计了一个ResBlock。ResBlock使用skip connect 跳层连接,使得梯度能够有效地回传,从而参数得以更新,才敢设计比VGG深很多的网络。
DenseNet
设计思路与ResNet非常相似,但实际上一个很大的区别是,它是做多channel的特征的拼接,而ResNet是做求和计算
DenseNet主要包含两个模块,DenseBlock和Transition层,每个DenseBlock的内部是将第N层之前的feature map都经过卷积处理到固定shape拼接到第N层,Transition作为缓冲层是将维度进行降低,减少计算量
优点:梯度消失问题得到改善,特征复用,使用了multi-scale的特征,参数少,因为特征图的channel不像之前的那么多
缺点: 耗费显存(concat拼接操作)
MobileNet
解决深度学习网络移动设备上的运行速度问题,提出的高效的网络,在模型大小显著减少的情况下,对准确率不造成太大影响
使用 depthwise separable convolution 代替传统卷积网络。
depthwise separable convolution
- depthwise卷积
- 对输入的
D*D*M
的M个通道,每个通道使用一个filter进行卷积,即使用M个卷积核分别对M个通道进行卷积,得到feature mapD*D*M
- 对输入的
- pointwise卷积
- 对经过上面步骤得到的feature map
D*D*M
的每个cell(shape为1*1*M
) 使用1*1*M*N
卷积核进行卷积
- 对经过上面步骤得到的feature map
- depthwise卷积
SqueezeNet
Shuffle Net
NIN(Network In Network)
- 提出
1*1
的卷积filter来构建新的卷积单元1*1
的卷积核的优势: 减少运算,加强多通道的特征融合,提高模型非线性变换能力
- 使用average pooling 来代替最后面的全连接层,大大减少计算量
Author: leexuan
Link: http://xuanli19.github.io/2019/08/02/CNN-Network/
License: 知识共享署名-非商业性使用 4.0 国际许可协议