文章目录


目标分割

在这里插入图片描述
  • 图像分割是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标。但是,语义分割不区分属于相同类别的不同实例。如上图所示,当图像中有多个 cube 时,语义分割会将所有立方体整体的所有像素预测为 “cube” 这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一个 cube、哪些像素属于第二个 cube……。

1 定义

在计算机视觉领域,图像分割(Object Segmentation)指的是将数字图像细分为多个图像子区域(像素的集合)的过程,并且同一个子区域内的特征具有一定相似性,不同子区域的特征呈现较为明显的差异。

图像分割的目标就是为图像中的每个像素分类。应用领域非常的广泛:自动驾驶、医疗影像,图像美化、三维重建等等。

  • 自动驾驶(Autonomous vehicles):汽车需要安装必要的感知系统以了解它们的环境,这样自动驾驶汽车才能够安全地驶入现有的道路
  • 医疗影像诊断(Medical image diagnostics):机器在分析能力上比放射科医生更强,而且可以大大减少诊断所需时间。

2 任务描述和类型

2.1 任务描述

简单来说,我们的目标是输入一个 RGB 彩色图片(heigh**t×width×3)或者一个灰度图(heigh**t×width×1),然后输出一个包含各个像素类别标签的分割图(heigh**t×width×1)。如下图所示:

在这里插入图片描述

与我们处理分类值的方式类似,预测目标可以采用 one-hot 编码,即为每一个可能的类创建一个输出通道。通过取每个像素点在各个 channel 的 argmax 可以得到最终的预测分割图,(如下图所示):

在这里插入图片描述

比如:person 的编码为:10000,而 Grass 的编码为:00100

当将预测结果叠加到单个 channel 时,称这为一个掩膜 mask,它可以给出一张图像中某个特定类的所在区域:

在这里插入图片描述
2.2 任务类型

目前的图像分割任务主要有两类: 语义分割和实例分割

我们以下图为例,来介绍这两种分割方式:

在这里插入图片描述
  • 语义分割就是把图像中每个像素赋予一个类别标签,如下图我们将图像中的像素分类为人,羊,狗,草地即可。
在这里插入图片描述
  • 实例分割,相对于语义分割来讲,不仅要区分不同类别的像素,还需要需要对同一类别的不同个体进行区分。如下图所示,不仅需要进行类别的划分,还要将各个个体划分出来:羊 1,羊 2,羊 3,羊 4,羊 5 等。
在这里插入图片描述

目前图像分割的任务主要集中在语义分割,而目前的难点也在于 “语义”,表达某一语义的同一物体并不总是以相同的形象出现,如包含不同的颜色、纹理等,这对精确分割带来了很大的挑战。而且以目前的模型表现来看,在准确率上还有很大的提升空间。而实例分割的思路主要是目标检测 + 语义分割,即用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同检测结果内进行逐像素标记。

3 评价指标

图像分割中通常使用许多标准来衡量算法的精度。这些标准通常是像素精度及 IoU 的变种,以下我们将会介绍常用的几种逐像素标记的精度标准。

为了便于解释,假设如下:共有 k+1 个类(从 L0 到 L**k,其中包含一个背景类),pij 表示本属于类 i 但被预测为类 j 的像素。即 pii 表示预测正确的像素。

3.1 像素精度

Pixel Accuracy (PA,像素精度):这是最简单的度量,为预测正确的像素占总像素的比例。

在这里插入图片描述

对于样本不均衡的情况,例如医学图像分割中,背景与标记样本之间的比例往往严重失衡。因此并不适合使用这种方法进行度量。

3.2 平均像素精度

Mean Pixel Accuracy (MPA,平均像素精度):是 PA 的一种简单提升,计算每个类内被正确分类像素数的比例,之后求所有类的平均。

在这里插入图片描述
3.3 平均交并比

Mean Intersection over Union (MIoU,平均交并比):为语义分割的标准度量,其计算两个集合的交集和并集之比,在语义分割的问题中,这两个集合为真实值(ground truth)和预测值(predicted segmentation)。交集为预测正确的像素数(intersection),并集为预测或真实值为 i 类的和减去预测正确的像素,在每个类上计算 IoU,之后求平均即可。

在这里插入图片描述

那么,如何理解这里的公式呢?如下图所示,红色圆代表真实值,黄色圆代表预测值。橙色部分红色圆与黄色圆的交集,即预测正确的部分,红色部分表示假负(真实值为该类预测错误)的部分,黄色表示假正(预测值为 i 类,真实值为其他)的部分。

在这里插入图片描述

MIoU 计算的是计算 A 与 B 的交集(橙色部分)与 A 与 B 的并集(红色 + 橙色 + 黄色)之间的比例,在理想状态下 A 与 B 重合,两者比例为 1 。

在以上所有的度量标准中,MIoU 由于其简洁、代表性强而成为最常用的度量标准,大多数研究人员都使用该标准报告其结果。PA 对于样本不均衡的情况不适用。

4 经典深度学习网络

4.1 FCN

FCN(Fully Convolutional Networks) 用于图像语义分割,自从该网络提出后,就成为语义分割的基本框架,后续算法基本都是在该网络框架中改进而来。

对于一般的分类 CNN 网络,如 VGG 和 Resnet,都会在网络的最后加入一些全连接层,经过 softmax 后就可以获得类别概率信息。

在这里插入图片描述

但是这个概率只能标识整个图片的类别,不能标识每个像素点的类别,所以这种全连接方法不适用于图像分割。

而 FCN 提出可以把后面几个全连接都换成卷积,这样就可以获得一张 2 维的 feature map,后接 softmax 获得每个像素点的分类信息,从而解决了分割问题,如下图所示:

在这里插入图片描述

简而言之,FCN 和 CNN 的区别就是:CNN 卷积层之后连接的是全连接层;FCN 卷积层之后仍连接卷积层,输出的是与输入大小相同的特征图。

1 网络结构

FCN 是一个端到端,像素对像素的全卷积网络,用于进行图像的语义分割。整体的网络结构分为两个部分:全卷积部分和上采样部分。

在这里插入图片描述

1.1 全卷积部分

全卷积部分使用经典的 CNN 网络(以 AlexNet 网络为例),并把最后的全连接层换成 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-OlWEDzDo-1624508143015)(https://math.jianshu.com/math?formula=1%5Ctimes%201)] 卷积,用于提取特征。

  • 在传统的 Alex 结构中,前 5 层是卷积层,第 6 层和第 7 层分别是一个长度为 4096 的一维向量,第 8 层是长度为 1000 的一维向量,分别对应 1000 个不同类别的概率。
在这里插入图片描述
  • FCN 将最后的 3 层转换为卷积层,卷积核的大小 (通道数,宽,高) 分别为 (4096,1,1)、(4096,1,1)、(1000,1,1),虽然参数数目相同,但是计算方法就不一样了,这时还可使用预训练模型的参数。
在这里插入图片描述
  • CNN 中输入的图像固定成 227x227 大小,第一层 pooling 后为 55x55,第二层 pooling 后图像大小为 27x27,第五层 pooling 后的图像大小为 13x13, 而 FCN 输入的图像是 H*W 大小,第一层 pooling 后变为原图大小的 ½,第二层变为原图大小的 ¼,第五层变为原图大小的 ⅛,第八层变为原图大小的 1/16,如下所示:
在这里插入图片描述
  • 经过多次卷积和 pooling 以后,得到的图像越来越小,分辨率越来越低。对最终的特征图进行 upsampling,把图像进行放大到原图像的大小,就得到原图像的分割结果。

1.2 上采样部分

上采样部分将最终得到的特征图上采样得到原图像大小的语义分割结果。

在这里采用的上采样方法是反卷积(Deconvolution),也叫做转置卷积(Transposed Convolution):

  • 反卷积是一种特殊的正向卷积
  • 通俗的讲,就是输入补 0 + 卷积。先按照一定的比例通过补 0 来扩大输入图像的尺寸,再进行正向卷积即可。

如下图所示:输入图像尺寸为 3x3,卷积核 kernel 为 3x3,步长 strides=2,填充 padding=1

在这里插入图片描述

假设反卷积的输入是 n x n ,反卷积的输出为 mxm ,padding=p,stride=s,kernel_size = k。

那么此时反卷积的输出就为:

m=s(n−1)+k−2pm=s(n−1)+k−2p

在这里插入图片描述

与正向卷积不同的是,要先根据步长 strides 对输入的内部进行填充,这里 strides 可以理解成输入放大的倍数,而不能理解成卷积移动的步长。

这样我们就可以通过反卷积实现上采样。

1.3 跳层连接

如果只利用反卷积对最后一层的特征图进行上采样的到原图大小的分割,由于最后一层的特征图太小,会损失很多细节。因而提出增加 Skips 结构将最后一层的预测(有更富的全局信息)和更浅层(有更多的局部细节)的预测结合起来。

在这里插入图片描述

那么:

  • 对于 FCN-32s,直接对 pool5 feature 进行 32 倍上采样获得 32x upsampled feature,再对 32x upsampled feature 每个点做 softmax prediction 获得 32x upsampled feature prediction(即分割图)。
  • 对于 FCN-16s,首先对 pool5 feature 进行 2 倍上采样获得 2x upsampled feature,再把 pool4 feature 和 2x upsampled feature 逐点相加,然后对相加的 feature 进行 16 倍上采样,并 softmax prediction,获得 16x upsampled feature prediction。
  • 对于 FCN-8s,首先进行 pool4+2x upsampled feature 逐点相加,然后又进行 pool3+2x upsampled 逐点相加,即进行更多次特征融合。具体过程与 16s 类似,不再赘述。

下面有一张 32 倍,16 倍和 8 倍上采样得到的结果图对比:

在这里插入图片描述

可以看到随着上采样做得越多,分割结果越来越精细。

4.2 UNet

Unet 网络是建立在 FCN 网络基础上的,它的网络架构如下图所示,总体来说与 FCN 思路非常类似。

在这里插入图片描述

整个网络由编码部分(左) 和 解码部分(右)组成,类似于一个大大的 U 字母,具体介绍如下:

1、编码部分是典型的卷积网络架构:

  • 架构中含有着一种重复结构,每次重复中都有 2 个 3 x 3 卷积层、非线性 ReLU 层和一个 2 x 2 max pooling 层(stride 为 2)。(图中的蓝箭头、红箭头,没画 ReLu)
  • 每一次下采样后我们都把特征通道的数量加倍

2、解码部分也使用了类似的模式:

  • 每一步都首先使用反卷积 (up-convolution),每次使用反卷积都将特征通道数量减半,特征图大小加倍。(图中绿箭头)
  • 反卷积过后,将反卷积的结果与编码部分中对应步骤的特征图拼接起来。(白 / 蓝块)
  • 编码部分中的特征图尺寸稍大,将其修剪过后进行拼接。(左边深蓝虚线)
  • 对拼接后的 map 再进行 2 次 3 x 3 的卷积。(右侧蓝箭头)
  • 最后一层的卷积核大小为 1 x 1,将 64 通道的特征图转化为特定类别数量(分类数量)的结果。(图中青色箭头)

数,而不能理解成卷积移动的步长。

这样我们就可以通过反卷积实现上采样。

× 请我吃糖~
打赏二维码