FCN、ReSeg、U-Net、ParseNet、DeepMask…你都掌握了吗?一文总结图像分割必备经典模型(一)
机器之心 2023-04-30 13:14 发表于上海
以下文章来源于机器之心SOTA模型,作者机器之心SOTA模型
机器之心专栏
本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 3 期进行连载,共介绍 19 个在图像分割任务上曾取得 SOTA 的经典模型。
- 第 1 期:FCN、ReSeg、U-Net、ParseNet、DeepMask、SegNet、Instance-Aware Segmentation
- 第 2 期:DeepLab、DeepLabv3、RefineNet、PSPNet、Dense-Net、Mask-Lab
- 第 3 期:PANet、DANet、FastFCN、Gated-SCNN、OneFormer、PSPNet-ResNet50_PSSL
您正在阅读的是其中的第 1 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本期收录模型速览
| 模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
| FCN | https://sota.jiqizhixin.com/project/fcn 收录实现数量:12 支持框架:PyTorch、TensorFlow等 |
Fully convolutional networks for semantic segmentation |
| ReSeg | https://sota.jiqizhixin.com/project/reseg 收录实现数量:2 支持框架:PyTorch |
ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation |
| U-Net | https://sota.jiqizhixin.com/project/unet 收录实现数量:16 支持框架:PyTorch、TensorFlow等 |
U-net: Convolutional networks for biomedical image segmentation |
| ParseNet | https://sota.jiqizhixin.com/project/parsenet-2 收录实现数量:4 支持框架:TensorFlow |
ParseNet: Looking Wider to See Better |
| DeepMask | https://sota.jiqizhixin.com/project/deepmask 收录实现数量:2 支持框架:TensorFlow、Torch |
Learning to Segment Object Candidates |
| SegNet | https://sota.jiqizhixin.com/project/segnet 收录实现数量:6 支持框架:PyTorch、TensorFlow等 |
Segnet: A deep convolutional encoder-decoder architecture for image segmentation |
| Instance-Aware Segmentation | https://sota.jiqizhixin.com/project/instance-aware-segmentation 收录实现数量:1 支持框架:Caffe2 |
Instance-aware semantic segmentation via multi-task network cascades |
图像分割是计算机视觉中的一项基本任务,其应用领域包括场景理解、医学图像分析、机器人感知、视频监控、增强现实和图像压缩等。图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类。
图像分割可以表示为带有语义标签的像素分类问题(语义分割,Semantic Segmentation)或单个对象的分割问题(实例分割,Instance Segmentation)。语义分割是对所有图像像素进行一组对象类别(如人、车、树、天空)的像素级标记,即简单地对图像中各个像素点分类。实例分割进一步扩展了语义分割的范围,需要检测和描绘图像中每个感兴趣的对象(例如,对个人的分割),即区分开不同的物体。从一定意义上来说,实例分割可以看作是语义分割加检测。
此外,还有全景分割(Panoramic segmentation),全景分割是语义分割和实例分割的结合。跟实例分割不同的是:实例分割只对图像中的object进行检测,并对检测到的object进行分割,而全景分割是对图中的所有物体(包括背景)都要进行检测和分割。本文不涉及全景分割的方法。
随着深度学习技术的应用,已经产生了新一代的图像分割模型,其性能有了显著的提高——通常在流行的基准测试中获得了最高的准确率——致使许多研究人员认为该领域发生了范式转变。
本文聚焦于深度学习技术,回顾图像分割中必备的TOP模型,包括语义分割模型和实例分割模型。
1、 FCN
本文提出了全卷积网络(Fully convolutional network,FCN)的概念,针对语义分割训练一个端到端、点对点的网络,达到了state-of-the-art。这是第一次训练端到端的FCN用于像素级的预测,也是第一次用监督预训练的方法训练FCN。其主要思想是建立一个“全卷积”网络,它接受任意大小的输入,通过密集的前向计算和反向传播进行有效的推理和学习并生成相应大小的输出。在构建网络过程中,通过将经典的分类网络(AlexNet、VGG和GoogleLeNet等)调整为全卷积网络(去掉了全连接层),并通过微调将它们的学习表示传递给分割任务;之后定义了一个skip结构,它将来自深层、粗层的语义信息与来自浅层、细层的外观信息结合起来,以生成精确和详细的分段。
CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,可以学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象的特征。FCN与CNN“在卷积层后使用全连接层得到固定长度的特征向量再进行分类”的处理方式不同。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,7,7)、(4096,1,1)、(1000,1,1)。FCN的所有层都是卷积层,故称为全卷积网络。FCN可以接受任意尺寸的输入图像,采用反卷积层(deconvolution)对最后一个卷积层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,从抽象的特征中恢复出每个像素所属的类别,实现了从图像级别的分类延伸到像素级别的分类。最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本。下图是用于语义分割所采用的FCN结构示意图:
图1 将全连接层转化为卷积层使分类网能够输出热力图。添加层和空间损失生成一个高效的机器,用于端到端的密集学习
FCN主要使用了三种技术:卷积化(Convolutional)不含全连接层(FC)的全卷积(fully conv)网络。可适应任意尺寸输入;上采样(Upsample)增大数据尺寸的反卷积(deconv)层,能够输出精细的结果;跳跃结构(Skip Layer)结合不同深度层结果的skip结构。FCN能够同时确保鲁棒性和精确性。
图2 全卷积网络可以有效地学习对每个像素进行密集预测,如语义分割
当前SOTA!平台收录FCN共12个模型实现。
| 项目 | SOTA!平台项目详情页 |
| FCN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/fcn |
2、 ReSeg
本文提出了用于语义分割的ReSeg结构,该结构是基于用于图像分类的基于RNN的ReNet所构建的。ReSeg网络的特征提取阶段(编码器阶段)采用的是预训练好的CNN网络结构,而在恢复图像尺寸的时候(解码器阶段,也就是上采样阶段)采用了RNN结构,RNN结构部分是基于ReNet的。ReSeg结构处理语义分割任务非常灵活、高效,其中的ReNet模块能够很好地整合上下文信息,获得很好的效果。
首先,输入图像经过第一阶段的VGG-16网络的层(在ImageNet上预训练,没有fine-tune,设定图像分辨率不会变得过小),得到的特征图随后送入一个或多个ReNet层,在图像上滑动。最后,一个或多个上采样层用于对最后的特征图进行分辨率恢复,使其与输入分辨率相同,再应用softmax非线性得到每个像素点对应的类别概率分布。循环层是这个结构的核心,由多个RNN(可以是初级的tanh RNN层)、一个Gated Recurrent Unit(GRU)层或一个LSTM层组成。根据ReNet不需要过多的回归单元的特性,这里选择用GRU模块,因为其能够很好地平衡计算力和内存之间的关系。ReSeg结构如图3所示。
图3 ReSeg网络。由于空间的原因未展示预训练的VGG-16卷积层,我们用它来预处理ReSeg的输入。前两个RNN(蓝色和绿色)被应用于图像的2x2x3 patches,它们的16x16x256特征图被串联起来,并作为输入送入下两个RNN(红色和黄色),它们读取1x1x512 patches并发出第一个ReNet层的输出。两个类似的ReNet层被堆叠起来,然后是一个上采样层和一个softmax非线性
ReSeg整体由两部分组成:特征提取阶段使用的是预训练好的VGG16结构,解码器阶段使用的是ReNet结构,通过ReNet的BRNN(双向RNN)联系上下文信息。ReSeg应用了3次串联的完整ReNet模块,空间分辨率在这个过程中逐渐减小。这么做的目的是将VGG-16提取的特征进行进一步的处理,从而得到对输入图像更复杂的特征描述。特征提取结束后,特征图对输入图像的空间分辨率下降为1/8,因此需要恢复空间分辨率以得到稠密的分割结果。在所有ReNet模块结束后,ReSeg应用了若干层由反卷积组成的上采样层,将特征图的空间分辨率恢复成原始输入图像的空间分辨率。最后,简单应用softmax实现分割。
当前SOTA!平台收录ReSeg共2个模型实现。
| 项目 | SOTA!平台项目详情页 |
| ReSeg | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/reseg |
3、U-Net
以往训练深度神经网络需要大量的标注好的样本数据,本篇论文提出了全新的U形网络和基于数据增强的训练策略以更加充分的利用标注数据。本文所提出的UNet网络利用下采样提取图像信息,原因是下采样后深层次的特征语义性更强;此外,利用对称结构以便更精确的定位,即将浅层特征融合到深层特征中。UNet可以直接端到端训练,效果优于以往方法。
UNet在FCN的基础上进行改进,目的是以很少的训练样本图像工作,产生更精确的分割。UNet的主要思想是用连续层来补充通常的收缩网络,其中,使用上采样算子取代池化操作,这些层提高了输出的分辨率。为了定位,将收缩路径中的高分辨率特征与上采样输出结合在一起。然后,利用连续卷积层学习根据这些信息组装的更精确的输出。具体来说,在上采样部分,UNet也有大量的特征通道,这使得网络能够将上下文信息传播到更高分辨率的层。其结果是,扩展路径与收缩路径或多或少对称,并产生U形结构。UNet网络没有任何全连接层,只使用每个卷积的有效部分,即分割映射只包含输入图像中可用的全部内容的像素。该策略允许通过重叠块策略对任意大的图像进行无缝分割。要预测图像边框区域中的像素,则需要通过镜像输入映像来推断丢失的内容。此外,可以通过对可用的训练图像施加弹性变形来进行数据增强,这允许网络学习这种变形的不变性,而不强制标注数据(图像)库中包含这些转换。这在生物医学图像分割中尤为重要。
UNet网络体系结构如图4所示,它由收缩路径(左侧)和扩展路径(右侧)组成。收缩路径遵循卷积网络的典型结构。它包括重复应用两个3x3卷积(非加量卷积),每个卷积后面是一个校正的线性单元(Relu)和一个2x2最大池化操作,以步长为2进行下采样。在每个下采样步骤中,将特征通道的数量增加一倍。扩展路径中的每一步都包括一个特征映射的上采样;然后是一个2x2卷积(上卷积),它将特征通道的数量减半,与收缩路径中相应裁剪的特征映射连接;以及两个3x3卷积,每个卷积后面跟着一个relu。
由于每个卷积中的边界像素的丢失,还需要裁剪处理。在UNet最后一层,使用1x1卷积来将每个64维分量特征向量映射到所需数量的类别。总UNet网络共计有23个卷积层。为了允许输出分段映射的无缝拼接,需要选择输入块的大小,以便将所有2x2池化操作应用到具有均匀x和y大小的层。
图4 UNet结构(最低分辨率下32x32像素的例子)。每个蓝框对应于一个多通道特征图。通道的数量表示在box顶部。X-Y尺寸在box左下角提供。白色方框代表复制的特征图。箭头表示不同的操作
当前SOTA!平台收录U-Net共16个模型实现。
| 项目 | SOTA!平台项目详情页 |
U-Net |
前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/unet |








