Segmentation as classification
像素分类(Pixel classification)
作为分类问题的图像分割。给定一个窗口(NxN 个像素),对中心像素进行分类。
分类单个像素可能非常慢(例如,一张小图片 = 600 x 800 = 480,000 像素)
但是 CNN 可以并行分类多个像素。
全卷积网络(Fully-convolutional network)
全卷积网络(FCN)只有卷积层,没有全连接层。最后一层是一个空间映射图。可以接受任何尺寸的图像作为输入,输出映射图的大小取决于输入大小。
并行补丁分类(Parallel patch classification)
标准的 CNN 架构存在两个问题:
- Receptive field 大小与卷积层的数量成线性关系
- 缺点
- 局部性丢失:CNN的一大优点是能够捕捉局部特征,如边缘、角点等。随着感受野的增大,局部信息可能被稀释,从而降低网络对细节的敏感度。
- 过多的上下文信息:可能会引起混淆导致性能下降。
- 计算复杂度增大
- 大多数方法使用下采样 downsample(例如,最大池华)来减少计算量
感受野 Receptive field 定义:卷积神经网络每一层输出的特征图(feature map)上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域。
随着卷积核的增多(即网络的加深),感受野会越来越大。
解决方案:使用编码器 - 解码器结构。 编码器对图像进行下采样(downsamples), 解码器进行上采样(upsamples)
下采样(Downsampling)
- 主要用于缩小图像
- 使得图像符合显示区域的大小
- 特征提取:通过卷积层和池化层,网络可以从原始图像中提取更抽象、更高层次的特征。
上采样(Upsampleing)
- 主要用于放大原图像
- 空间分辨率恢复
- 细节和局部信息的恢复
我们可以避免maxpoolig,但是这样会让网络速度变慢,也无法解决第一个问题。
上采样(Upsampling)
每一个上采样层都与一个下采样层配对。 最大值的位置被保存并传递给上采样器。
转置卷积(Transposed convolution)
步长(stride)> 1 的卷积是一种下采样形式
- 例如,步长 = 2 意味着在输入中每移动1像素,滤波器在输出中移动2像素
- 可学习的下采样 (Learnable downsampling)
当两个放大的卷积核相交时,会在重叠的像素上求和。
示例
Note:因为第三格是重叠的部分,所以可以进行相加。
转置卷积的矩阵表示
1x1 卷积层
它的特点是可以在不改变空间维度(即图像的宽度和高度)的情况下,改变通道数。
应用场景
1x1 卷积通常作为全链接网络的最后几层出现。全连接层能够学习特征之间的非空间(全局)关系,但参数数量比较多,计算复杂度和过拟合风险比较高。使用 1x1 卷积可以减少参数数量,同时保留网络的深度。
学习的内容
1x1 卷积层通常用于在不同层次的特征图间进行信息融合,调整通道数目,实现跨通道的特征交互,同时也用于降低特征维度,减少计算量。这些卷积核可以学习如何在各个通道间进行有效的特征整合。
如图,最后一个是一个 1x1 的卷积层,步长为 1,这一层保持了空间尺寸不变,但改变了通道数到 100。
损失函数
在每个像素点上,计算预测的类别和真实类别之间的交叉熵 cross-entropy损失值。
结果
随着步长缩短,我们可以看到分割的质量变得更好。
小结
语义分割可以被看作是一个像素分类(pixel classification)问题。这可以通过全卷积网络来高效完成。
编码器 - 解码器架构:
- 通过最大池化、步长卷积来下采样
- 通过最大反池化、转置卷积来上采样
输出结果为每个像素的标签。
U-Net
最初是为医学图像分割提出的。是编解码器(encoder-decoder)结构,加上一些额外的功能特性。
架构
在解码器中,上采样的特征图与对应编码器层的原始特征进行了拼接。
对于细胞分割,U-Net只使用两个类别,并采用加权交叉熵损失(weighted cross-entropy loss):细胞之间的边缘具有更高的权重。
小结
U-Net:用于分割的全卷积网络,带有一些修改。最初用于医学图像分析,但也常用于其他分割任务。
同时也被用作其他任务的编码-解码(encoding-decoding)网络,如:
- 图像去噪
- 图像修复
实例分割(Instance segmentation)
语义分割对像素进行分类,但不区分不同的实例。
不是给每个像素打上实例标签,而是提取图像中可能是独立实例的区域块。在每个区域块内进行分割。
Instead of giving each pixel an instance label, extract patches of image that are likely to be separate instances. Do segmentation within each patch.
常用的架构是 Mask R-CNN。
Note: Stuff 和 things
视觉场景包含"物体(things)"和"材质(stuff)"两个部分。
- "Things" = objects, "可数名词(countable nouns)" (cow, person, car)
- "Stuff" = regions/materials, "不可数名词(mass nouns)" (road, grass)
- 有些类别可能即使 thing 也是 stuff。(tree)
实例分割(以及计算机视觉领域通常)主要关注"物体(things)"。
R-CNN:
- R-CNN 指的是基于区域(Region-based) 的卷积神经网络。
- 它有效地提取"感兴趣区域 regions of interest"(很可能包含物体的图像区块)进行进一步处理。
Mask R-CNN
- Mask R-CNN将通过R-CNN提取的图像区块送入一个完全卷积网络(FCN)。
- FCN预测一个二值分割掩码 (binary segmentation mask),区分"对象"或"背景"。
结果
小结
- 实例分割为同一类的每个实例赋予独立的标签(instance of a class),不仅仅是类别标签(class labels)。
- 通常只适用于可数的"物体(things)"类别。
- 典型的方法是先检测出物体的区块,然后在这些区块内进行二值分割(binary segmentation)。
小结
全卷积网络(FCN)的优点:
- 更能够处理非常复杂的对象/背景。
- 对于它们训练的类别,可能会给出更好的结果。
全卷积网络(FCN)的缺点:
- 在捕捉精确的边界细节方面可能表现得较差。
- 可能无法泛化到训练集之外的类别。