CNN
卷积层
- 平移不变性,局部性
- 虽称为卷积,但用的是互相关运算(不翻转),而非信号处理中的卷积(翻转)概念
- 影响前向计算的所有可能输入区域称为感受野
- 填充(padding) 是在输入高宽两侧填充,通常为0,控制输出形状的减少量
- 步幅(stride) 是卷积核每次滑动的大小,使得输出形状成倍减少
conv_valid = keras.layers.Conv2D( filters=1, kernel_size=kernel_size, strides=strides, padding="VALID")
- 卷积核本质是二维信号滤波器
- 卷积本质是提取图像不同频率的特征
- 核矩阵大小、填充、步幅是超参数
- 有时,1个5x5卷积核 不如 2个3x3卷积核
- 训练 CNN 需大量内存,如内存不足需调整 batch_size 或 strides
- 核矩阵和偏移的值是可学习的参数
- 每个卷积和生成一个特征图
- 在 TensorFlow 中,3D图像格式为[h, w, c]
1*1 卷积核
- 作用:不识别模式,只增加通道
池化层
- 对称不变形,下采样
- 减小计算量、内存占用和参数(防止过拟合)
- 缓解卷积层对位置的过度敏感性
- 最大池化,均值池化…
max_pool = keras.layers.MaxPool2D(pool_size=2) avg_pool = keras.layers.AvgPool2D(pool_size=2)
- 最大池化保留了最强的特征,因此效果通常比均值池化好
- 也有填充、步幅,是超参数
- 没有可学习参数
- 对每个输入通道分别池化,输出通道数不变
经典CNN网络
LeNet
- 卷积-池化-…-全连接-输出
AlexNet
VGG
- 重复使用3x3卷积块
- 不同卷积块个数和超参数得到不同复杂度的变种
NiN
- 串联多个卷积层和全连接层构成小网络并构建深层网络
GoogLeNet
-
第一个达上百层的模型
-
含非常经典的子模块 Inception
-
常用Iception版本为 V3, V4
-
不同层面重启特征,然后融合
ResNet -非常经典的残差结构
- resnet50:
- skip-connection 有效地缓解梯度消失
DenseNet
- 在通道维度上连结
Xception
- 深度可分离卷积
- depthwise + pointwise
- 各通道分别卷积处理,再合并(或先合并再分别卷积)
SE-Net
-
Squeeze-and Excitation Network
-
SE块分析其连接的单元的输出,仅专注于深度维度,并了解哪一些特征通常最活跃,然后使用此信息重新校准特征图
-
SE块的组成:
-
SE-Inception模块 和 SE-ResNet单元:
DeepLab
PSPNet
使用预训练模型
model = keras.applications.resnet50.ResNet50(weights="imagenet")