一文详解图像分割基本方法(收藏版)

您所在的位置:网站首页 图像去噪与图像分割的定义 一文详解图像分割基本方法(收藏版)

一文详解图像分割基本方法(收藏版)

2023-05-04 02:18| 来源: 网络整理| 查看: 265

来源:投稿 作者:卷舒编辑:学姐

上回我们了解了图像分割的基本概念,今天就来学习一下图像分割的基本方法。

输入输出

下面讲解一下模型的输入与输出的形式。尤其是输出。

输入 (Input):RGB图像 (height, width, 3) 或者灰度图 (height, width, 1) 。第三个维度是通道数,RGB图像有三个通道,而灰度图只有一个通道。在第一维再加一个batch size 就是 RGB 图像 (batch_size, height, width, 3) / 灰度图 (batch_size, height, width, 1)

输出 (Output) :和我们处理分类任务的时候类似,我们通过为每个可能的类别创建一个输出通道,并one-hot来编码类别标签,来表示target。如下图所示。

通过采用每个深度方向像素向量的argmaxargmax,可以将预测折叠到一张分割图中(如下图所示)

注意:对于视觉清晰度,我标记了一个低分辨率预测图。实际上,分段标签分辨率应匹配原始输入的分辨率。

我们可以很容易地检查一个目标,把它覆盖到观察。

当我们覆盖我们的target(或预测)的单个频道时,我们将此称为 mask,该 mask 照亮存在特定类的图像的区域。

当我们不做argmaxargmax直接输出target的时候,输出的形状应该是 (batch_size, num_class, height, width),每张图片的每个通道的里是非0即1的one-hot向量 。

而当我们对target进行argmaxargmax后,输出的形状应该是跟输入同一形状 (batch_size, height, width)。

模型结构

这一节我们来简要地了解一下用于图像分割的最经典的深度学习模型结构:编码器/解码器结构 (Encoder/Decoder structure)

全连接到1×1卷积

回想一下在分类任务当中的CNN网络都是几个卷积层和池化层组成,最后是几个全连接层。然而一张图片经全连接层之后的输出是个一维的向量。这对分类任务中,我们只需要知道图片的内容,而不关心其位置十分适用。如果想得到上面我我们想要的二维的输出,那么我们就不能采用全连接层。在2014年发表的 Fully Convolutional Network 的论文认为,最终的全连接层可以被认为是做一个覆盖整个区域的1x1卷积。即如下图所示。

这里使用1×1的卷积替代全连接层还有一个好处:那就是输入的图片形状不在固定了。由于全连接层的输入必须固定形状的,所以输入模型的图片一般都要先resize到固定的shape,而使用1×1卷积代替全连接层之后变不在存在这一问题。在推理的时候,不需要再对图片进行resize,从而最好可能会导致输出的图片的失真。

这么一个不断加深网络并不断增加通道数来提取浅层信息和深层特征的过程就是**编码器 (Encoder)**。

上采样

很明显上方编码器的输出与我们想要的输出还是存在一定的差距。我们想要的一个与原输入同尺寸的输出。如果我们直接用双线性插值来进行上采样,讲encoder的输出直接resize到原图的大小,这可能会有一定的效果,但一定不是最理想的。

那么还有一张方法,每层我们设置一定数量的padding,只是用卷积层,取消所有池化层。这样堆叠多个卷积层最后得到的输出变能够跟原图保持同尺寸,输出对应像素点的类别了。就如下图所示一样。

然而,我们知道,要想抽取出深层的特征,那么这个网络就需要足够的深,通道数足够多。而由于所有的层都保留了原尺寸,所以他的计算量是极其巨大的。所以这种方法也没有被广泛使用。

最终我们还是采用了先通过编码器将图像的特征映射到高维空间,这之后再通过解码器上采样,将特征恢复到图片的原尺寸。我们将上采样的这一部分网络叫做解码器(Decoder)。

而上采样主要采用的是一种可以学习参数的转置卷积 (Transposed Convolution) /反卷积 (Deconvolution) 的非线性上采样。

所以整个模型结构可以理解为是一个先下采样再上采样的过程,如下图所示。

几种上采样 (upsample)方法

上采样的几种方法的名字很容易混淆,下面让我们来一一滤清。

上采样 (upsample) 主要有三种方法:转置卷积 (Transpose Convolution)、上采样 (unsampling)和反池化 (unpooling)。讲到这里有两个地方需要提前解释清楚。

上采样 (upsample) 是这些方法的总称,而上采样 (unsampling) 是一种具体的方法。主要一个是 ”up”,一个是 ”un”,所以这样要将英文给写出来。

这里的的转置卷积 (Transpose Convolution) 还有很多名称:反卷积 (Deconvolution)、逆卷积 (Inverse Convolution)、Upconvolution、Fractionally strided convolution、Backward strided convolution。最常用的是转置卷积和反卷积这两个名称。这里我们主要使用转置卷积这个名称。

这一节将简单介绍三种方法的区别,然后主要讲解转置卷积的原理,和输出形状的计算公式。

三种方法对比

图(a)是反池化。在MaxPooling的时候会保留Pooling使用的最大值的索引,然后UnPooling的时候使用索引将输入映射到feature map中,而其他位置全填0。

再对比图(b),反池化和上采样很明显的差别就是没有Pooling Indices这个输入,而是直接将输入特征扩充到feature map中

图(c)是转置卷积,通过有参数的卷积核将输入特征映射到feature上,重复的地方会进行叠加。

转置卷积原理

在这之前我们要先引入卷积矩阵 (Convolution Matrix) 这一概念。

卷积矩阵

首先让我们来回顾一下卷积的操作过程。

给定输入,卷积核。大家可以计算一下卷积操作之后的输出是什么。

大致是按下图方式进行计算。

下图是一个动画演示,3×3的卷积核在4×4的蓝色输入上进行没有padding 和单位stride的卷积操作,得到2×2的灰色输出

Source Convolution arithmetic[1]

最后的卷积计算结果应该是

那么卷积矩阵是什么呢?我们用另一种方式来表示卷积操作:

我们将3×3的卷积核的卷积运算表示成一个4×16的矩阵,如下图所示。

每一行表示一次卷积操作。比如第一行:

就是由第一次卷积操作时卷积核在输入中的映射拉直而来的。可以看到,没有进行卷积计算的位置被补了零。

而后我们再将输入拉直成一个列向量,如下图所示,这样通过卷积矩阵C与输入向量I进行矩阵乘法,就能得到最后的输出O了。即O=CI

Source XuHaoSource XuHao

卷积操作是将卷积矩阵与拉直的输入进行矩阵乘法,即O=CI,那么反卷积不就是卷积的反向操作,希望对卷积操作的输出进行反卷积操作,从而得到卷积操作的输入嘛。

那么我们可以有如下公式推导:

所以我们只需要将卷积矩阵转置一下就可以得到转置卷积矩阵。

转置卷积矩阵

即如下图所示,转置卷积操作即可从转置卷积矩阵与拉直的输入进行举证乘法得到输出。

Source XuHao

注意:转置卷积矩阵中的权值不必要来自于原始的卷积矩阵,重要的是这些权值的布局时从卷积矩阵中来的。同时,转置卷积不保证恢复输入卷积操作的输入本身,而只是返回具有相同形状的特征图。

可以将卷积操作和转置卷积操作理解成一个卷积核使用卷积矩阵进行正向操作或使用转置卷积矩阵进行反向操作。

转置卷积的输出形状计算

我们可以通过卷积来模拟转置卷积。

如下左图,3×3的卷积核在4×4的蓝色输入上进行没有padding和单位stride的卷积操作,得到2×2的灰色输出。

当反过来进行转置卷积操作的时候,想由2×2的蓝色输入,通过3×3的卷积核转置卷积得到4×4的输出,那么就要对原输入产生2×2的padding。这里的卷积核大小和stride都是保持不变的。如下右图所示。

No padding, unit strides. Source Convolution arithmeticNo padding, unit strides, transposed. Source Convolution arithmetic

那么到底该如何控制转置卷积输出的形状呢?下面会通过几个栗子,来粗略推导一下转置卷积输出形状的计算。

首先,分别表示卷积操作的输入形状、卷积核大小、stride(步长)大小、padding (填充)大小、输出形状。分表表示转置卷积操作的输入形状、卷积核大小、stride(步长)大小、padding(填充)大小、输出形状。

这里假设高宽的填充是相等的,不考虑不对称填充情况。

No zero padding, unit strides, transposed 

这里的no zero padding指的是卷积操作的时候没有填充的。示意动画在上面给出。

这里,而

这里的都是固定的。为了能使转置卷积的输出与原卷积操作的输入保持一致,就需要做的填充。

则,当卷积操作是No zero padding, unit strides时,其对应的转置卷积有如下公式:

Zero padding, unit strides, transposed 

前面是最简单的卷积操作没有填充的。那么我们卷积操作再加上padding会是什么样呢?

这里可以看到,为了让转置卷积的输出与卷积操作的输入形状相同,所以这里我们转置卷积时的padding 减小了。

Padding, unit strides. Source Convolution arithmeticPadding, unit strides, transposed. Source Convolution arithmetic

则,有如下公式:

No zero padding, non-unit strides,transposed

前面的考虑了卷积操作时采用了padding。那么卷积操作没有padding,但不采用单位长度的stride又该怎么计算呢?

No padding, strides. Source Convolution arithmeticNo padding, strides, transposed. Source Convolution arithmeticZero padding, non-unit strides, transposed 

最后我们来考虑最复杂的情况:卷积输入即使用了 padding,stride 也不是单位步长。

这样我们就能过得到一个对各种情况较为普适的公式。

Padding, strides. Source Convolution arithmeticPadding, strides, transposed. Source Convolution arithmetic

结合前面的两种情况的公式,假设输入i满足i+2p-k是s的倍数,则有以下公式:

有以上公式,基本可以应付转置卷积的大部分的计算。如有任何疑问,欢迎讨论,同时建议参考Dumoulin, Vincent, and Francesco Visin. "A guide to convolution arithmetic for deep learning." arXiv preprint arXiv:1603.07285 (2016).

此外,转置卷积也有它的弊端:会产生棋盘效应。具体更详细的解释请参考:Odena, et al., "Deconvolution and Checkerboard Artifacts", Distill, 2016. http://doi.org/10.23915/distill.00003

Reference

Jeremy Jordan. “An overview of semantic image segmentation.” https://www.jeremyjordan.me/semantic-segmentation/

Fei-Fei Li & Justin Johnson & Serena Yeung. “CS231n: Deep Learning for Computer Vision.” (2017). Lecture11. http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

Sultana, Farhana, Abu Sufian, and Paramartha Dutta. "Evolution of image segmentation using deep convolutional neural network: a survey." Knowledge-Based Systems 201 (2020): 106062.

Kirillov, Alexander, et al. "Panoptic segmentation." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019.

Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully convolutional networks for semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition.  2015.

Naoki, “Up-sampling with Transposed Convolution” https://naokishibuya.medium.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

Dumoulin, Vincent, and Francesco Visin. "A guide to convolution arithmetic for deep learning." arXiv preprint arXiv:1603.07285 (2016).

vdumoulin, fvisin. “Convolution arithmetic” https://github.com/vdumoulin/conv_arithmetic

Odena, et al., "Deconvolution and Checkerboard Artifacts", Distill, 2016. http://doi.org/10.23915/distill.00003

关注【学姐带你玩AI】公众号

回复“500”获取图像分割论文资源

CVPR图像分割方向论文回复“CVPR”获取



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3