DeepLabV3+源码链接:https://github.com/bubbliiiing/deeplabv3-plus-pytorch(打不开私信我获取)
一、简介
一般的模型如Unet一般用于医学领域,小目标,如细胞分割。
为了增大感受野(从而更好的获得全局特征),通常会选择pooling操作(一般就是每隔几层卷积就会进行pooling),但会丢失部分信息。
二、方法
2.1空洞卷积(dilated convolution)
下图展示了空洞卷积的原理。左图是普通的卷积,这是紧凑的,连在一起的区域(3*3)。右边是空洞卷积,它在传统卷积的区域分割开了(5*5),从而增大感受野
通过设置dilated参数可以得到不同感受野的特征(3*3,7*7,15*15)
图像分割任务中(除了医学领域小目标分割,其它场景也适用)需要较大感受野来完成任务。同样目标检测领域等等其他计算机视觉领域都能用到。
2.2 SPP-Layer
假设输入图像经过了卷积层已经得到了256个特征图,第一种对其进行4*4的切分,划分为16个小方格,然后每个小方格进行maxpooling得到4*4=16个特征值,第二种进行对其进行2*2的切分,划分为4个小方格,同样进行maxpooling得到2*2=4个特征值,第三种直接全局提取特征,然后再拼上(16+4+1)*256,这就是SPP层。
三种不同的策略,得到三种不同的特征,在拼在一起,相当于全局的也有,粗糙的也有,细节的也有,这样的特征就比较好了。保证了输出固定·
2.3 ASPP(atrous convolution SPP)
这个其实和APP差不多,只不过引入了不同倍率的空洞卷积,如下图
三、DeepLab V3+
结构图如下:
输入图像,先进行基础网络(这里是ResNet),再进行五种特征提取方法:①1*1卷积;②3*3卷积,并有间隔为6 的空洞卷积;③3*3卷积,并有间隔为12 的空洞卷积;④3*3卷积,并有间隔为18 的空洞卷积;⑤pooling池化;得到了5种不同的特征图,并要保持他们h,w(即长和宽)一样(利用pading进行),五个特征拼接在一起,经过1*1卷积,得到一个融合很多信息的特征。
并有粗糙提取得到的特征(图中Low-Level Features),经过1*1卷积得到特征图,然后与上一段得到的融合很多信息的特征进行再次融合(为了保证两个特征图大小一样,这里要进行上采样,因为它已经经过多次卷积后特征图变小),再进行3*3卷积,最终再上采样得到和输入大小相同的输出结果。