DeepLabv2:Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
DeepLabv2 是在DeepLabv1基础上的优化,主要改进是引入空洞卷积金字塔池化(ASPP)
什么是 DeepLabv2?
- DeepLabv2 是在 DeepLabv1 基础上的优化,主要改进是引入空洞卷积金字塔池化
- 特征分辨率的降低:DeepLabv2 在最后几最大池化(Max pooling)层中去除下采样,取而代之的是使空洞卷积,以更高的采样密度计算特征映射
- 物体存在多尺度: 受到空间金字塔池化(SpatialPyramidPooling,SPP)的启发,提出空洞卷积金字塔池化,以多尺度的信息得到更强健的分割结果
- DCNN 的空间不变性: DCNN 中最大池化和下采样组合存在空间不变性(Spatialinvariance),通过最终的 DCNN 层相应全连接条件随机场 (fully CRFs) 结合来克服这个问题
DeepLabv2的网络结构?
- 与 DeepLabv1 的网络结构相差不大,主要有2点改进:(1)主干网络使用 RestNet 替代 VGG16;(2)使用 空洞卷积金字塔池化(ASPP) 解决多尺度的问题
DeepLabv2的损失函数?
- CNN的每个输出map(原图1/8大小)空间位置信息与原始groud truth标签(下采样为1/8)交叉熵损失(CrossEntropyLoss)
什么是空洞卷积金字塔池化(Atrous Spatial Pyramid Pooling, ASPP)? ^bhummg
- 在空间金字塔池化(SpatialPyramidPooling,SPP) 的基础上,结合空洞卷积(Atrousconvolution)可在不丢失分辨率(即不进行下采样)的情况下扩大卷积核的感受野,有助于考虑不同的物体比例
- 根据卷积的输出计算torch.nn.Conv2d,对于卷积核为3x3的空洞卷积,只要其dilation=padding,stride=1,卷积层输出的大小保持不变
1
2
3
4
5
6
7>>> input = torch.randn(5, 8, 56, 128)
>>> m = torch.nn.Conv2d(8, 33, (3, 3), padding=(4, 4), dilation=(4, 4));
>>> m(input).shape
torch.Size(\[5, 33, 56, 128])
>>> m = torch.nn.Conv2d(8, 33, (3, 3), padding=(24, 24), dilation=(24, 24));
>>> m(input).shape
torch.Size(\[5, 33, 56, 128])
DeepLabv2的如何训练全连接条件随机场(fully-connected CRF)?
- 通过10倍的CRF,飞机周围不同颜色的小区域变得平滑起来
- CRF是一个后阶段的处理过程,它使DeepLabv1和DeepLabv2变为不是端到端的学习框架
DeepLabv2的缺点?
- 不能捕捉物体的微妙边界,如自行车和椅子。由于一元术语不够可靠,CRF后处理甚至无法恢复细节
DeepLabv2与DeepLabv1使用空洞卷积的差异?
- DeepLabv1模型使用了单分支的空洞卷积
- DeepLabv2模型使用了多分支的并行空洞卷积,最终组合空洞卷积金字塔池化(ASPP)
空洞卷积与标准卷积的效果差异?
- 空洞卷积在原图上直接进行卷积操作,这样省去了下采样和上采样的操作,而且计算量不变的情况下(卷积核中那些为0的系数在反向梯度计算中没有传递性),能得到更大的感受野,也就是说能获取到更多的密集特征,尤其是像素的边界信息,对比两个分支的输出feature map可以得到印证
deeplabv2使用学习率衰减对结果有什么影响?
- 衰减策略:其中power=0.9
- 使用poly策略比固定的step策略效果要好