全连接参考1:https://zhuanlan.zhihu.com/p/32819991
全连接参考2:代码实现
神经网络前后传输
CNN中卷积、池化的前向与反向传播:
CNN卷积神经网络和反向传播(公式标出)
CNN卷积(总结)
CNN的反向传播
CNN中感受野的计算
感受野(receptive field)是怎样一个东西呢,从CNN可视化的角度来讲,就是输出featuremap某个节点的响应对应的输入图像的区域就是感受野。
比如我们第一层是一个33的卷积核,那么我们经过这个卷积核得到的featuremap中的每个节点都源自这个33的卷积核与原图像中33的区域做卷积,那么我们就称这个featuremap的节点感受野大小为33
如果再经过pooling层,假定卷积层的stride是1,pooling层大小22,stride是2,那么pooling层节点的感受野就是44
有几点需要注意的是,padding并不影响感受野,stride只影响下一层featuremap的感受野,size影响的是该层的感受野。
计算感受野,一般使用 top to down的方式(即从输出层往原图片方向推)。
感受野计算分两种情况:
- conv层: ( f e a t u r e M a p S i z e − 1 ) ∗ s t r i d e + f i l t e r S s i z e (featureMapSize - 1) * stride + filterSsize (featureMapSize−1)∗stride+filterSsize
如,原feature map经过3 x 3conv, stride = 1后得到 1 x 1 的feature map。那输出的feature map中的一个点对应原来的区域大小为(1-1) x 1 + 3= 3(即感受野为3 x 3)
- pool层:
1)若size和stride数一样,则为 f e a t u r e M a p S i z e ∗ s i z e featureMapSize * size featureMapSize∗size
如,原feature map经过2 x 2 maxpooling, stride = 2后得到 1 x 1 的feature map。那输出的feature map中的一个点对应原来的区域大小为1 x 2 = 2(即感受野为3 x 3)
2)若不一样,则为
( f e a t u r e M a p S i z e ∗ f i l t e r s i z e ) − ( f e a t u r e M a p S i z e − 1 ) ∗ ( f i l t e r s i z e − s t r i d e ) (featureMapSize * filtersize) - (featureMapSize - 1) * (filtersize - stride) (featureMapSize∗filtersize)−(featureMapSize−1)∗(filtersize−stride)如:featuresize = 2x2, filtersize = 3x3,stride = 2
则:(2 x 3) - (2 - 1) * (3 - 1) = 5
- 计算实例:
计算最后输出层对应的不同层的感受野
pool3:1*2 = 2,故 2 x 2
conv4:(2-1)*1 +3 = 4,故 4x4
conv3:(4-1)*1 +3 = 6, 6x6
pool2:6 * 2 = 12, 12x12
conv2:(12-1)*1 +3 = 14, 14x14
pool1:14 * 2 = 28, 28x28
conv1:(28 - 1)*1 + 3 = 30, 30x30
关于CNN的一些问题
- CNN的优缺点:
- 优点:
- 共享卷积核,参数量较少;
- 卷积层负责提取特征,采样层负责压缩数据和参数量,减少过拟合
- 缺点:
- 当网络层次太深时,采用BP传播修改参数会使靠近输入层的参数改动较慢;
- 池化层会丢失大量有价值信息,忽略局部与整体之间关联性;
- 可解释性不强,由于特征提取的封装,为网络性能的改进罩了一层黑盒
- CNN中的卷积层为什么能提取特征,为什么好用?
- 卷积核可以刻画图像的局部特征,CNN能够提取图片的特征;
- 通过反向传播算法,CNN可以动态的去更改卷积核的参数,使得卷积核越来越倾向于提取更好的特征。
- CNN中的池化层作用?
池化层的主要作用 :保持主要特征的同时减少冗余信息,可以达到减少参数与计算量的目的,防止过拟合,提高模型的泛化能力。
池化层具有两个性质:1.平移、尺度不变形;2.特征降维
- Max pooling和average pooling的异同:
- max感觉是做了特征选择,选出了分类辨识度更好的特征,提供了非线性
- average更多保留了图像的背景信息,感觉更多体现在信息的完整传递上
CNN中参数量与计算量的计算
参考:卷积中参数量和计算量
计算flops的时候,为什么要×2???
CNN中的组卷积
输入C1 X W X H,卷积核 K X K X C1 X C2,使用组卷积(分组为G)
计算量:C1/G X K X K X C2/G
解析:整体参数变为原来的1/G,使用组卷积后,输入的featuremap的channel变为1/c,卷积核变成K X K X C1/G, 输出的通道数变为C2/G
CNN中的上采样
参考:怎样通俗易懂地解释反卷积?
参考:反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)
上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling)。
- FCN结构中,上采样是使用的双线性插值方式;
- UNET结构中,上采样使用的是反卷积方式;
反卷积的大致过程:
1)根据步数strides对输入进行填充
2)使用卷积核对填充的结果进行卷积,得到反卷积结果
注:反卷积只能恢复尺度,不能恢复数值
CNN中的可变形卷积与空洞卷积
- 可变形卷积:
参考1:Deformable Convolution 关于可变形卷积
参考2:可变形的卷积网络
通过额外加入分支预测offset,使得卷积核中每个采样点发生偏移,集中于我们感兴趣的区域。从而解决CNN对几何形变建模受限都问题
- 空洞卷积:
参考:空洞卷积
通过扩张卷积核之间的空隙,从而达到获得更大感受野的效果。解决了pool层下采样再上采样 导致信息损失都问题。