深度学习的分割方法

FCN:基于深度学习的语义分割模型

Fully Convolutional Networks,全卷积网络

其核心思想为:

使用不包含全连接的全卷积网络,所以可以输入任意大小的图片。
使用跳跃连接,以结合不同尺度的图像特征,使得模型具备更高的精度与鲁棒性。
使用反卷积对提取后的低分辨率图像进行上采样,输出与原图同分辨率的分割图片,保留了原始图像的空间信息,从而能够对原图的每一个像素都进行预测。

(20条消息) 图像分割(二):模型(FCN)_fcn模型_米之炼金术师的博客-CSDN博客

语义分割的定义:对像素进行精细化的分类。

用深度学习来解决语义分割,所面临的主要问题是:

  • 早期的深度模型用于分类,输出一维向量,无法分割

  • 深度模型不够精细

动机

  1. 如何让网络的可以用于分割?

让网络输出二维特征就可以了

如何令早期神经网络输出二维图像?

去掉全连接层。

  1. 如何让模型的输出足够精细?

不精细的原因是?

经过多层卷积池化,feature map的分辨率较低。

比如224*224的图像输出为7*7的feature map,很显然无法很精细

一种可行的方法就是,再把7*7给变大

具体方法就是反卷积。

模型结构

由于1/32分辨率太低,直接分割很粗糙,因此先扩大再与1/16的拼在一起...(yolov3后面的思路灵感来源于此)

FCN的pytorch实现

前面就是一个常规的CNN网络,将一张图像变成feature map。而后,进行反卷积,得到原图尺寸。

输出尺寸
输入图像224×224
卷积1224×224
池化1112×112
卷积2112×112
池化256×56
卷积356×56
池化328×28
卷积428×28
池化414×14
卷积514×14
反卷积6224×224
输出224×224

实现细节

反卷积

结果展示

反池化和反卷积:只是把尺寸恢复了,卷积(或池化)过程中丢失的信息并没有恢复

下采样(encoding)下采样(decoding)

UNet

DeepLab系列语义分割

FCN存在的问题

  1. 池化层的存在导致细节信息丢失

  2. 空间不变性(在左边、右边不对分类结果有影响)对分割任务不友好

难点1: 细节信息丢失

本质上,语义分割是一种包含了低维语义特征的任务。

对于边缘、纹理、颜色等信息较为敏感。

而池化层的存在导致了这些细节信息丢失,即便进行上采样也无法恢复。

之前讨论过,池化的意义在于对信息进行浓缩,从而扩大感受野,提高信息的维度。

那么如何才能在不损失细节信息的情况下,尽量扩大感受野?

解决方案1: 空洞卷积

 空洞卷积可以在不进行池化的前提下,尽可能地扩大感受野,从而快速提高信息的浓缩程度。

练习:计算上述模型的最终感受野

空洞卷积的优势: 扩大感受野,保存细节信息

空洞卷积的劣势: 小物体不够健壮

难点2: 空间不变性

CNN的一个重大优势在于空间不变性。

同一个物体,在图像的不同位置,不同形态,不同角度,都应当输出相同的值。

例如,一张猫的图像,总会输出猫类别的one hot向量。

但是对于分割来说,这种空间不变形会带来不便性。

对应解决方案:CRF

引入了fully connected CRF,从原图作为输入,结合特征图进行了优化。

CRF

条件随机场 (conditional random field)

前置知识

CRF是一种判别模型,利用条件概率图模型建模条件概率�(�|�)完成判别任务。

也就是说,CRF是对一个条件概率进行估计。

 CRF用于语义分割

动机

图像分割任务的核心目的在于对每个像素都分配一个标签。

然而,由于池化卷积的处理方式,导致目标区域的边缘存在较为模糊的地方。

那么就需要CRF为边缘提供新的信息,从而得到更好的边缘。

建立随机场

给定一张图像:

* 定义 $X=\{X_1, X_2, ..., X_N\}$, 其中$X_i$为第i个像素的预测标签;
* 定义 $L=\{L_1, L_2, ..., L_N\}$, 其中$L_i$为第i个像素的真实标签;
* 定义 $I=\{I_1, I_2, ..., I_N\}$, 其中$I_i$为第i个像素数据。

直观解释

每个像素点(RGB为向量)可以作为观测值,我们需要根据观测值为每个像素点推测出一个标签。

因此,现在主流的语义分割模型,基本都是以下框架

CRF循环多少次?多少个类别,循环多少次

缺点

然而,这种方法存在一个比较大的问题,即速度慢

速度慢的原因,主要来自于CRF。

CRF的求解复杂度较高,因此需要更长的时间来优化结果。

解决方案

用训练的方式近似地求解CRF

也就是说,将CRF过程分解成一系列的卷积过程,用RNN的方式进行求解。

step2

其次,message passing步骤中,是用m个高斯滤波器在Q上滤波实现的。

相当于对feature map进行模糊处理,等价于卷积操作。

得到如下结果

step3

第三步:compatibility transform

step4

之后,进行unary potentials,即(相减)

也就是将上次结果和这次结果的增量做对比。

最后,进行归一化,采用softmax实现。

CRF as RNN

将上述视为一个RNN过程,对每一类的feature map都进行CRF处理,即可得到较优的结果。

实现

示例代码

 DeepLab v1总体框图

分割 要得到一个二维的东西,因此,将fc--->conv2d:

code

DeepLabV2

DeepLabV2是对DeeplabV1的改进,主要改进包含以下内容:

  • 新的bottelNet

  • ASPP

  • 改进的CRF

ASPP

ASPP的灵感来自于SPPNet

旨在于将不同尺度的特征融合到一起

网络结构

DeepLab V3

比V2的改进:

  1. 以前的方法都是集联的cnn,不采用空洞卷积。V3则采用了不断扩大的空洞卷积,从而获得更好的细节

  1. 改进的ASPP

1*1卷积:减少参数,改变通道数量

特征融合更好的方式不是直接加起来:将其concat起来然后通过1*1的卷积学习新的通道的映射参数

总体结构:r 逐步递增

 

 60*60-->480*480:通过线性插值实现,线性插值取代了V2中的CRF

深度学习怎样实现尺度不变形:池化-->感受野扩大 -->相当于金字塔

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值