图像语义分割
图像语义分割可以分为语义分割、实例分割、全景分割。
语义分割(semantic segmentation):对图像中的每个像素划分到不同的类别;
实例分割(instance segmentation):对图像中每个像素划分到不同的个体(可以理解为目标检测和语义分割的结合);
全景分割(panoptic segmentation):语义分割和实例分割的结合,即要对所有目标都检测出来,又要区分出同个类别中的不同实例
实例分割(instance segmentation):对图像中每个像素划分到不同的个体(可以理解为目标检测和语义分割的结合);
全景分割(panoptic segmentation):语义分割和实例分割的结合,即要对所有目标都检测出来,又要区分出同个类别中的不同实例
难点:
数据问题
计算资源问题
精细分割
上下文信息
评价指标
像素精度:对/总
均像素精度
平均交并比
FCN
FCN与CNN的区别在把于CNN最后的全连接层换成卷积层(所以称为“全卷积网络”)。该网络可以分为两部分,第一部分,通过卷积运算提取图像中的特征,形成特征图;第二部分,对特征图进行上采样,将特征图数据恢复为原来的大小,并对每个像素产生一个分类标签,完成像素级分类。
网络结构
特征融合
U-Net(2015)
网络结构
由收缩路径(左侧)和扩展路径(右侧)组成,共包含23个卷积层。
训练细节
损失函数:采用像素级交叉熵作为损失函数输入:单个大的图像,而不是大的批次图像
输出:得到的输出图像比输入图像小,边界宽度不变
优化方法:随机梯度下降
激活函数:ReLU
权重初始值:标准差为 的高斯分布(N表示一个神经元的传入节点数)
采用数据增强策略
Mask R-CNN(2017)
在Faster R-CNN基础之上进行扩展,并行地在bounding box recognition分支上添加一个用于预测目标掩模(object mask)的新分支。
分割原理:其输出数据主要包含两组:一组是图像分类预测,一组是图像边框回归。
算法步骤
输入待处理图片,进行预处理将图片送入经过预训练的卷积神经网络,进行卷积运算获取图像的特征图
对特征图中的每个点产生ROI,从而获取多个候选区域
将候选区域送入RPN网络进行而分类回归(前景或背景)、边框回归,过滤掉
一部分候选区域
对剩余的ROI进行ROIAlign操作(将原图中的像素和特征图中的点对应)
对这些ROI进行分类(N个类别)、边框回归、Mask生成
网络结构
损失函数
分类损失 和检测框损失 与Faster R-CNN中定义的相同。掩码分支对于每个RoI的输出维度为 ,即K个分辨率为m×m的二值掩码,每个类别一个,K表示类别数量。每个像素应用Sigmoid,并将 定义为平均二值交叉熵损失。对于真实类别为k的RoI,仅在第k个掩码上计算 (其他掩码输出不计入损失)。
DeepLab系列
1)DeepLab v1(2015)
DeepLab v1采用了空洞卷积、条件随机场等技术,有效提升了分割准确率。空洞卷积
Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) ,是在标准的convolution map 里注入空洞,以此来增加感受野。当不填充空洞时,dilation rate为1,当填充1时,dilation rate为2,当填充2时,dilation rate为3。
条件随机场
条件随机场(Conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。
将最后三个全连接层(fc6, fc7, fc8)改成卷积层
将最后两个池化层(pool4, pool5)步长由2改成1
将最后一组的三个卷积层(conv5_1, conv5_2, conv5_3)的dilate rate 设置为2
输出层通道数改为21(20个类别,1个背景)
网络结构
DeepLab v1使用VGG-16作为基础模型,为了更适合图像分割任务,做出了以下修改:将最后三个全连接层(fc6, fc7, fc8)改成卷积层
将最后两个池化层(pool4, pool5)步长由2改成1
将最后一组的三个卷积层(conv5_1, conv5_2, conv5_3)的dilate rate 设置为2
输出层通道数改为21(20个类别,1个背景)
DeepLab v1使用了全连接条件随机场(Fully-connected Conditional RandomField)来保证分类准确和位置准确。
Batch Normalization。先在增强数据集上output stride = 16(输入图像与输出特征大小的比例),batch size=16,BN参数衰减为0.9997,训练30k个iter。
采用上采样真值计算Loss。DeepLabv1/v2中都是下采样的真值来计算loss,这样会让细节标记产生损失,本模型使用上采样最后的输出结果计算。数据随机处理。在训练阶段,对输入的图像进行随机缩放(缩放率在0.5-2.0之间),并随机执行左右翻转。
采用深度可分离卷积,大幅度降低参数数量
② 网络结构
2)DeepLab v2(2017)
DeepLab v2在DeepLab v1的基础上,主要引入了ASPP(Atrous Spatial PyramidPooling,膨胀空间金字塔池化)策略。
ASSP原理:
3)DeepLab v3(2017)
使用更深的网络结构,以及串联不同膨胀率的空洞卷积,来获取更多的上下文信息
优化Atrous Spatial Pyramid Pooling
去掉条件随机场
优化Atrous Spatial Pyramid Pooling
去掉条件随机场
① 串联结构
② 并行结构
③ Mult-grid策略
每个block中的三个卷积有各自unit rate,例如MultiGrid = (1, 2, 4),block的dilate rate=2,则block中每个卷积的实际膨胀率=2* (1, 2,4)=(2,4,8)
训练策略
采用变化的学习率,学习率衰减策略如下(其中,power设置为0.9):裁剪。在训练和测试期间,在PASCAL VOC 2012数据集上采用的裁剪尺寸为513,以保证更大的膨胀率有效。Batch Normalization。先在增强数据集上output stride = 16(输入图像与输出特征大小的比例),batch size=16,BN参数衰减为0.9997,训练30k个iter。
采用上采样真值计算Loss。DeepLabv1/v2中都是下采样的真值来计算loss,这样会让细节标记产生损失,本模型使用上采样最后的输出结果计算。数据随机处理。在训练阶段,对输入的图像进行随机缩放(缩放率在0.5-2.0之间),并随机执行左右翻转。
4)DeepLab v3+
① 深度可分离卷积采用深度可分离卷积,大幅度降低参数数量
② 网络结构
Encoder:同DeepLabv3。
Decoder:先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征进行concat融合,再进行3*3卷积,最后上采样4倍得到输出结果。融合低层次信息前,先进行1*1卷积,目的是减少通道数,进行降维。主干网部分:采用更深的Xception网络,所有max pooling结构为stride=2的深度可卷积代替;每个3*3的depthwise卷积都跟BN和Relu。改进后的主干网结构如下:
Decoder:先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征进行concat融合,再进行3*3卷积,最后上采样4倍得到输出结果。融合低层次信息前,先进行1*1卷积,目的是减少通道数,进行降维。主干网部分:采用更深的Xception网络,所有max pooling结构为stride=2的深度可卷积代替;每个3*3的depthwise卷积都跟BN和Relu。改进后的主干网结构如下: