语义分割简述

定义

  • 语义分割: 将同类别的多个object视为一个单一的实体
  • 实例分割:将同类别的多个object各自视为不同的实体

传统方法

  1. 灰阶分割
    根据区域必须满足的属性规则给其硬编码一个便签,例如根据区域的像素灰度强度。例如区域分裂与聚合算法
    此算法递归地将图像拆分为子区域,直到可以分配标签,然后通过合并具有相同标签的相邻子区域。
    缺点:由于必须是基于硬编码的规则,仅仅根据灰阶信息对于复杂的case很难表示,比如人体。需要特征提取及一些优化技巧来更好的学习表示复杂的个体类别。

  2. 条件随机场
    定义:CRF 是一类用于结构化预测的统计建模方法。

而将先验知识:邻接的区域像素往往具有相同的标签类别-----这种先验加入建模。与离散分类器不同,CRF可以在预测之前考虑"相邻上下文",例如像素之间的邻接关系。因此成为语义分割的理想方法之一。

图像中的每个像素都与一组有限的可能状态关联。在语义分割任务重,这个状态就是目标标签。将状态(或标签) u 分配给单个像素 (x) 的成本称为一元损失

为了对像素之间的关系进行建模,我们还考虑将一对标签 (u,v) 分配给一对像素 (x,y) ,这样产生的过程成本称为二元成本
因此我们可以考虑图像中的由一对邻接像素构成的像素对 (网格 条件随机场);也可以同时建模图像中的所有像素对的关系----不再限于邻接像素对,即稠密 条件随机场

所有像素的这种一元损失(或二元损失)之和称为随机场的势---Energy。最小化场势,以获得更好的分割结果。

基于深度学习的方法

深度学习已经大大简化了实现语义分割的pipeline,并取得了不错的效果。

  • 模型架构
    最简洁流行的模型架构是基于全卷积神经网络的---FCN for Semantic Segmentation
    这篇论文中作者:
  1. 首先通过下采样同时增加通道数来编码图像-----称为Encoder过程,
  2. 再对编码得到的结果通过插值或反卷积deconvlution(也称转置卷积tranposed convlution)的方式升采样。----称为Decoder过程

缺点:这种基本架构尽管有效,但是:

  1. 反卷积操作的输出存在棋盘伪影checkerboard artifacts ----全局像素存在规律的不稳定
    这是由于反卷积运算的本质是特征图reshape后的向量 经过卷积核矩阵的乘法 由低维到高维的映射变换。此过程中通过保持核矩阵的位置关系来保持输出特征图的位置不变性关系,每行填充的0数目是 多 少 多 少 交替的,导致反卷积之后的特征图也存在这种像素不稳定。(可以通过在之后级联几层卷积层来缓解,如U-net)
  2. 编码过程的信息损失导致最终解码结果的边界分解率不足

以上问题的解决发展:

  1. U-Net

    将卷积层的输出(分辨率大些)crop后, 跳层连接( 到反卷积得到的对应level特征图(分辨率小些)上。
    跨层连接实现了梯度的更好传播,而且提供了图像的多尺度信息。
    大尺度(Unet图示中的高层layer,分辨率高)有助于模型更好的分类,识别高层语义信息。
    小尺度(Unet图示中的低层layer,分辨率小)有助于模型更好的分割和定位,识别低层语义信息,如位置等。

  2. 提拉米苏模型

    其中的DenseBlock就是卷积-反卷积。然后再拼接上DB前面的所有特征图作为下面的输入。
    优点:参数效率高,可以更好的get到很前面的信息
    缺点:深度学习框架的实现决定了这种大量的concat操作很占内存(img2col典型的空间换时间),因此需要更大的显存。

  3. 多尺度方法

  • 通过卷积核金字塔得到不同尺度的特征图,然后再差值到相同分辨率来信息融合

  • 通过不同rate的膨胀卷积来获取多尺度信息
    其中多个膨胀卷积块的使用方式:
    ** 级联

** 并联

  1. 卷积-条件随机场(CNN-CRF)的混合方法
  • 第一种:利用CNN作为特征提取器,然后接Dense CRF。利用CRF来建模像素间的关系。
  • 第二种:更高级的,将CRF建模成RNN的形式融合到神经网络中,端到端的训练。

损失函数

由于语义分割任务本身的特点,也需要特殊的损失函数

  1. 逐点softmax后作交叉熵损失
    根据像素做one-hot编码后作为真值标签

    一个像素的三个通道共分得一个one-hot 编码向量。因为有四类像素,因此第三章label编码图是4个通道。

  2. focal loss
    RetinaNet中为解决类别不平衡问题标准的交叉熵损失函数做的升级改进。

    横轴:对某个样本的类别置信度
    纵轴:此时对应的样本损失
    可见类别置信度为0.8时,依然存在0.3的样本损失。会导致损失函数,在大量简单(易分)样本的迭代过程中,易分样本产生的这种损失会主导总损失。导致后期的迭代越来越困难,无法专注困难样本且可能无法优化至最优。

因此,为了让模型专注于困难样本,给标注的交叉熵损失函数加上一个焦点系数(一个预测置信度的函数),预测置信度越高,则使简单样本的损失很快接近0,这样损失会尽可能被难样本主导,模型能够更好的学习难样本。

应用

  1. 自动驾驶
    利用语义分割做场景分割,辅助决策
    要求:实时性
    解决思路:
  • GPU集成到汽车上
  • 利用轻量化神经网络或者利用其它的将神经网络用在边缘端的技术
  1. 医疗图像分割
    识别异常如肿瘤,通过3D分割图来估算器官组织的体积

  2. 场景理解
    语义分割是场景理解及视觉问答VQA的基础
    场景理解的目标:输出一个标题或场景图

  3. 遥感地图处理
    确定道路,湖泊,物体类别及区块类别等

  4. 时尚工厂
    提取衣服,redress换装

posted @ 2020-07-28 18:12  Parallax  阅读(2328)  评论(0编辑  收藏  举报