语义分割:FCN
实例分割:MASK R-CNN
全景分割:panoptic FPN
Pascal VOC:调色板模式。训练过程中会忽略掉边缘。
MS COCO:对每一个目标都记录了多边形坐标。
Global ACC:正确分类像素个数 / 总像素个数
mean Accuracy:(正确分类像素个数 / 总像素个数) / 类别数
mean Iou:Iou,交并比。Iou越大,预测区域和真实区域的重叠部分越大。mean Iou是平均每个类别的交并比。一个类的Lou = (类的正确分类数 / 类的真实标签数+类的预测标签数-类的正确分类数),mean Lou = 所有类的Lou之和 / 类别数
LabelMe
EIseg
作用:上采样
方法:在四周填充零元素。
特点:
转置卷积并不是卷积的逆运算,只是将特征层的大小还原到之前的大小。
转置卷积也是卷积。
步骤:
在输入特征图元素间填充s-1行,列0。
在输入特征图四周填充k-p-1行,列0。
卷积核参数上下,左右翻转。
正常的卷积运算。(padding = 0, stride = 1)
原因:由于在语义分割任务中如果下采样的倍率过大对于还原回原图有影响。比如最大池化的下采样过程中,既会减小尺寸,也会丢失信息。而去掉最大池化会导致特征图感受野变小。而膨胀卷积可以增大感受野,并且保持原输入特征图大小。但是一味地堆叠空洞卷积会造成gridding effect。
堆叠过多的膨胀卷积会导致只能利用窗口中的一部分像素值,会丢失细节上的信息。可以采用不同膨胀系数的膨胀卷积。
如何HDC(混合膨胀卷积)设计?HDC的膨胀系数为从r1到rn,目标是通过一系列膨胀卷积之后能覆盖底层特征层的区域,并且区域没有孔洞。
设计建议:
膨胀系数从1开始
膨胀系数呈锯齿状,例如【1,2,3,1,2,3】
公约数不能大于1,不然还是会存在gridding effect
具体见
膨胀卷积(Dilated convolution)详解_哔哩哔哩_bilibili
首个端对端针对像素级预测的全卷积网络.(全卷积:将分类的全连接层也替换成卷积),它将之前的分类网络作为backbone.
如图,先通过一系列的卷积下采样,再进行一个上采样得到和原图同样大小的特征图,这里通道为21是因为Pascal VOC中有20个类,在通道维度进行softmax最终得到每个类的概率.
convolutionalization : 将全连接层转为卷积层后解决了输入尺寸固定的要求.但如果输入尺寸大于预设尺寸,则其上采样前的高宽都不为1.
做法:将全连接层的每一个结点的权重做reshape处理.
padding可调:在这些卷积中可以用padding=3调节输入输出的H,W相同.
移除padding 100操作,因为基本不会用小于32*32的图像去做语义分割,所以这个措施没有必要.可以通过刚刚所说的padding可调来解决.
刚刚所说的padding可调就在FC6之中.因为它是一个7*7的卷积核,所以如果经过backbone后特征图尺寸小于7*7。
这里的上采样步距为32,也就是说会上采样32倍,变回原来尺寸。
使用双线性差值来初始化转置卷积的参数。
在原论文中转置卷积的参数设置为不训练,因为作者实验发现训练不训练结果差不多,这可能是因为上采样率过大的原因。
FCN-8s
总结:注意全连接的卷积化和膨胀卷积膨胀系数的设计。
提出语义分割的两个问题:下采样会导致图像分辨率变低,空间不敏感。
解决方案:膨胀卷积,fully-connected CRF
large FOV:由于卷积化的全连接中的参数过多,因此对他进行下采样并增大膨胀系数从而使得感受野不变。
DCNN在语义分割中的问题:分辨率被降低,多尺度问题,DCNN的不变性会降低精度。
解决方法:
针对分辨率降低,将最后几个最大池化层或者卷积层的stride降为1,并搭配膨胀卷积使用。
针对多尺度问题,将图像缩放到不同的尺度进行推理,最后将多个结果融合。为了解决它计算量大的问题,在V2中提出了ASPP模块。
针对DCNN不变性导致精度降低,这里仍然采用CRFs解决。
ASPP:对backbone得到的特征图进行多分支,每个分支都采用膨胀卷积,就可以做到多尺度。
相比V2,引入Multi-grid,从而更合理的设置膨胀系数;改进ASPP;移除CRFs后处理;
获取多尺度信息的可选架构:
a:缩放到不同尺度分别推理,再将结果融合。
b:进行一些列下采样,将最后的特征层进行一系列上采样,再和浅层的特征层融合。(Unet)
c:将backbone的最后介个下采样层stride设置为1,再引入膨胀卷积增大感受野。、
d:通过多分支获取多尺度能力。(ASPP)
Multi-grid:膨胀卷积的膨胀系数=rate*multi-grid。
轻量级语义分割网络,相较于MobileNet V3,它将下采样32倍变为下采样16倍。如图在ASPP的第二个分支相当于一个SE模块,
Encoder:特征提取,下采样。Decoder:上采样得到分割图。
模型结构:
蓝色箭头的卷积步长为1,并且没有padding,所以每次之后特征图大小的高宽会减小2。
最大池化操作不改变通道数,会将分辨率宽高大小减小两倍。
绿色箭头的上采样会将分辨率宽高放大两倍。
蓝绿色箭头代表最后一个卷积层,它不包含relu激活函数。
注意:
在每个下采样层和对应的上采样层中,由于尺寸不同,所以需要将下采样中的特征图裁剪后与下采样层中的特征图拼接。
注意看个别卷积层和反卷积层对通道数的变化。
输入和输出的大小并不相同。
最后输出的通道数是分类类别。
现在主流的实现是在卷积层中加padding使得不改变特征图尺寸。如果这样不需要考虑边缘数据缺失的情况。
对分辨率很高的图片进行分割的主流实现方法是裁剪成一部分一部分去分割,并且每部分之间都要有重叠的部分,从而更好的分割边界区的信息。
作者举的例子在分割细胞会比较困难,这时候可以给细胞之间的区域更大的权重,给背景更小的权重。
针对SOD(salient object detection,协助目标检测)任务,与分割任务的区别是只有前景和背景两个类。它的任务是将图片中最吸引人注意的区域分离出来,说白了相当于语义分割的二分类任务。
名称来源:由于它的大结构相当于Unet,而在每个小结构中也类似于一个Unet(Residual U-Blcok),所以为U方Net。
Encoder的1-4和Decoder的1-4采用的模块相同,只是模块的深度不同。
在Encoder中,每一个模块后都要经过一个使用最大池化的下采样。在Decoder中,每一个模块前都会经过一个上采样。在图中表示为空心三角箭头。
Encoder和Decoder中的模块从1-4分别采用RSU-7,6,5,4。每次比上一个少一个下采样卷积和上采样卷积的部分。
在Encoder5,6和Decoder5中采用RSU-4F。由于经过Encoder4以及之后的下采样后分辨率就已经比较小了,为了不丢失过多信息,在Encoder5,6后不再进行下采样,而且在RSU-4中的下采样和上采样全部变成膨胀卷积。
RSU-4F
将每个阶段的特征图融合。将Decoder层的输出都经过3*3,卷积核个数为1的卷积层,图中表示为空心白色箭头。再经过双线性差值的方法将特征图尺寸还原,之后将所有拼接,再经过1*1的卷积核和sigmoid激活函数得到融合之后的概率图。
损失计算
文章仅供自己复习。