1 卷积神经网络
1.1 概念
处理,网格结构数据,的神经网络
在网络某一层,用卷积操作代替矩阵乘法
1.2 基本CNN架构
输入层—》
Conv0(ReLU)—Conv1—Pool1—Conv2—Pool2—FC1—FC2
—》输出层
Conv层的激活函数都是:ReLU
1.3 典型网络
LeNet-5
重复2{卷积+平均池化} ——2层FC
AlexNet
卷积+最大池化——same——最大池化——same——same——same——最大池化——3层FC
VGG-16
重复2{卷积2次+池化1次} ——重复3{卷积3次+池化1次}
1.4 NN的问题
参数数量=图像尺寸(100010003)*神经元个数(100)=3亿
网络参数爆炸,需要简化网络结构。
如何简化网络结构?
法一:局部识别——卷积
法二:图像压缩——池化
2 关键技术
2.1 卷积(conv)
2.1.1 what卷积?
(1)信号中的卷积:
离散形式:
(2)CNN中的卷积:图像局部操作,提取基本模式
对二维图像I的卷积,如下:
基本模式(pattern):边缘、颜色、形状、纹理
2.1.2 why卷积?
(1) 稀疏交互(稀疏连接/稀疏权重)
实现:核大小,远小于,输入大小
作用:提取局部特征,减少网络参数,降低计算量,提高效率
m个输入,n个输出
矩阵乘法(跟所有人连),需要mxn个参数
卷积(只跟自己的k个邻居连),只需要kxn个参数
稀疏交互合理吗,NN的表达能力会不会下降?
处在NN深层的单元可能与绝大部分输入是间接交互的,这允许NN可以只通过稀疏交互来高效描述多变量复杂交互。
(2) 参数共享(参数绑定)
实现:相同的核
作用:降低了存储需求(k个参数),训练难度
(3) 等变表示
得益于:参数共享
其他卷积功能:平滑,模糊,去燥,锐化,边缘提取
2.1.3 how卷积?
原始尺寸:n * n = 7 * 7
卷积核尺寸:k * k = 3 * 3
卷积后的尺寸:(n-k+1) * (n-k+1)= 5 * 5
2.1.3 卷积核
卷积核大小为奇数:关于中间像素点中心对称
卷积核元素和为1:图像能量(亮度)守恒
元素和大于1,卷积后比原图更亮;小于1,更暗
卷积后出现0或255:取绝对值或截断
2.1.4 特征图(feature map)
特征图是卷积完,输出的矩阵
特征图非常稀疏的原因:核大小远小于输入图像大小
2.2 池化(pooling)
2.2.1 what池化?
子采样
2.2.2 why池化?
(1)降维:保留关键信息,减少参数,防止过拟合
(2)特征不变性(平移,旋转,尺度):增强位移鲁棒性,提高精度
(3)增大核的感受野
将低层特征组合成高层特征
2.2.3 how池化?
(1)最大池化
滤波器范围内,取最大值
(2)平均池化
滤波器范围内,取平均值
2.3 边界填充(padding)
2.3.1 what边界填充?
在输入矩阵边缘进行填充,扩大图像尺寸
2.3.2 why边界填充?
为了让卷积前后,图像尺寸一致
卷积核3 * 3
原图7 * 7,卷积后5 * 5
卷积前后,图像尺寸不同?
原图7 * 7,边界补充后9 * 9,卷积后7 * 7
2.3.3 how边界填充?
(1)补零填充
(2)边界复制填充
(3)镜像填充
(4)块填充
2.4 全连接层(FC)
2.4.1 what全连接层
在卷积层,池化层后面,接的1层/多层平铺结构,完成最终的分类任务
2.4.2 why全连接层
(1)特征组合:将特征图展开,对局部特征进行组合
(2)作分类器:将隐空间中的特征,映射到标签空间,进行分类任务
2.4.3 how全连接层
一般在卷积,池化完成后,接1 ~ 3层FC,0 ~ 2层做特征组合,1层做分类
3 计算
3.1 基本信息
输入图尺寸: n * n * c(c是输出特征图通道数)
滤波器/卷积核尺寸: k * k * c’(c’是输出特征图通道数/卷积核个数)
填充padding大小: p
步长stride大小: s
3.2 一次卷积后特征图大小
-
先把图n填充p,图尺寸变为:
(n+2p)*(n+2p) -
把卷积核k放入图n+2p上,还剩:
(n+2p)- k格 -
每步s,需要走:
(n+2p-k)/s步 -
刚开始算1个值,每走一步算1次,总共算:
(n+2p-k)/s+1次 -
1次卷积,最终输出特征图尺寸为:
n’ * n’ * c’(c’是输出特征图通道数/卷积核个数)
其中,n’ = (n+2p-k)/s+1 都是向下取整
n’ * n’ 特征图是t个通道卷积相加的结果
有池化层pooling和卷积一样算
(n-f)/s +1
3.3 感受野RF
特征图上一个像素点对应输入图上的尺寸
已知k=3,p=0,s=1,卷积两次
-
首先假设卷积后,特征图尺寸为:
1*1 -
反向计算,设原感受野尺寸为:
n*n -
1次卷积后,特征图尺寸为:
(n-k+1) * (n-k+1) -
2次卷积后,特征图尺寸为:
{(n-k+1)-k+1} * {(n-k+1)-k+1} -
最后:
n-2k+2=1
解得:
n=5 -
原感受野大小是:
5*5
有池化层pooling和卷积一样算,只是没有padding而已
3.4 参数数量
w个数:k * k * c * c’
k:卷积核大小
c:输入特征图通道数
c’:输出特征图通道数/卷积核个数
b个数:c’(c’是输出特征图通道数/卷积核个数)
3.5 计算量/操作的FLOPs
FLOPs:floating point operations,计算量,衡量模型复杂度
FLOPS:floating point operations per second,计算速度,衡量硬件性能
卷积涉及的运算:wx+b
-
wx的计算量:
(1)对于输出特征图的1个单元,有,
k * k * c次乘法,k * k * c - 1次加法
(2)若输出特征图大小为n’ * n’ * c’,有,
(k * k * c ) (n’ * n’ * c’)次乘法,(k * k * c - 1) * (n’ * n’ * c’)次加法* -
b的计算量:
(1)对于输出特征图的1个单元,有,
1次加法
(2)若输出特征图大小为n’ * n’ * c’,有,
(k * k * c - 1) * (n’ * n’ * c’)次加法
总乘法次数=(k * k * c )* (n’ * n’ * c’)
总加法次数 =(k * k * c - 1)* (n’ * n’ * c’)+(n’ * n’ * c’) = (k * k * c )* (n’ * n’ * c’)
k:卷积核尺寸
n:输入特征图尺寸
n‘:输出特征图尺寸
c:输入特征图通道数
c’:输出特征图通道数
4 技巧
4.1 如何增大感受野?
(1)将原始图像的尺寸resize得更大
(2)增大网络层数
(3)池化
缺点:下采样,信息损失,降低准确性
(4)增大卷积核尺寸
缺点:增多参数
(5)增加卷积核个数
缺点:梯度消失问题
(6)增大步幅
(7)空洞(dilated)卷积
滤波器膨胀
参考
https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1
https://blog.csdn.net/a529975125/article/details/80888463
https://zhuanlan.zhihu.com/p/137719986
https://blog.csdn.net/qq_39521554/article/details/81385159
花书deep learning