本文首发于微信公众号 CVHub,不得以任何形式转载到其它平台,仅供学习交流,违者必究!
引言
为什么会有这篇文章的出现,这来自于笔者在知乎闲逛之余偶然间看到的一个话题:
Topic: 语义分割该如何走下去?
回首往昔,一转眼间两年时间过去了,作为一名有幸参与过该方向的一员,当看到此类话题时不禁令人感慨好好的一条路怎么就走不下去了呢,这当中是有什么隐情?该话题目前被知乎圆桌——CVPR 2020 热点收录,里面也有部分先驱者的回答,建议还没看过的同学可以去围观一下。
恰逢举国上下疫情大放开之际,刚好得以抽出点时间整理下笔者对这个问题的一些本质思考。本文将围绕语义分割这一核心表达一些个人的观点与看法,鄙人自知资质平庸,文中难免会出现观点错漏现象,恳请大家批评指导。
什么是图像分割?
首先,考虑下面这张图片:
假设我们有一张图片,我们要解决的问题是图片中出现的是什么?没错,这是一只可爱的小狗狗,我们可以将其表述为图像分类问题。但是,当图像中同时出现两个目标呢?再看下这张图片:
现在我们需要同时在图像中识别多个对象,因此我们的问题会相应地改变,即图像中存在的物体是什么。答案显而易见,是一只狗和一只猫,为此我们可以将其表述为多标签分类问题。
现在,假设我们还关心对象存在的位置,而不仅仅是了解对象是什么应该怎么做?例如下面这张图片:
毫无疑问,这个问题是属于目标检测的范畴。
更进一步的,此时假如我们想了解对象的确切位置信息应该如何解决?换句话说,就是我们不是在对象周围绘制一个粗略的矩形框,而是在对象周围绘制一个多边形,并为该对象的每个像素进行着色,如下图所示:
好了,这便是我们今天要讨论的主角老爸——图像分割。
图像分割是一种根据存在的对象及其语义重要性对图像进行划分的像素级分类预测任务,其致力于为图像中的每一个目标都生成一个像素级别的掩膜,也就是大家耳熟能详的——mask。
本质上来说,图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布,“像“是人的视觉系统所接受的图在人脑中所形成的印象或认识,照片、绘画、剪贴画、地图、书法作品、手写汉字、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像。而在计算机中,图像是一个多维矩阵,矩阵中的每一个数字表示画面中的一个像素。换言之,一张图像就是一个包含许多像素的集合。
对于计算机视觉领域来说,图像分割指的是将数字图像细分为多个图像子区域或称为超像素的过程。图像分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等),是对图像中的每个像素加标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。
图像分割有什么用?
或许很多人心中都有一个疑问,那便是我们是否需要如此精心的预测一张图像中的目标?其实,对于绝大数CV应用场景来说,仅依赖目标检测是可以解决的。但是,这并不意味图像分割就没有存在的意义。举个简单的例子,比如癌症,大家都知道这个都是由癌细胞扩散所造成的。通常,癌细胞的形状在确定癌症的严重程度中起着至关重要的作用,这时候图像分割便派上用场了。
除了医学成像任务,图像分割还可以应用在许多领域,例如遥感领域:
借助遥感图像分割技术,我们可以轻松的识别出地面的成分,例如该地区的森林覆盖率或发现采矿甚至森林火灾等活动。再举一个比较使用的应用方向就是人像分割,自疫情爆发以来,钉钉和腾讯会议等线上视频会议软件算是妥妥的积累了一大批用户。而在这些软件中,一个比较常用的功能就是虚拟背景,这背后应用的技术便是人像分割技术:
最后,我们再介绍一个最近几年比较火的概念——自动驾驶,借此引申出图像分割包含哪些方向:
图像分割在自动驾驶领域中可用于车道线分割或场景解析等。通过精确预测重要物体(例如道路或行人)的位置,自动驾驶系统可以采取适当的步骤来处理下游任务,例如申请休息时间或让汽车减速。
上图展示了图像分割的三种常见任务,即语义分割、实例分割和全景分割。
- 语义分割
语义分割描述了将每个像素与类标签相关联的过程。很简单,这里我们只关心图像中所有对象的粗略表示。在这里,你可以看到所有以蓝色表示的汽车,以红色表示的行人,以及略带粉红色的街道等。
仔细观察可以发现,属于同一类的所有目标之间并没有明显的区别,这意味着所有的车都是蓝色的。这是定义图像分割问题的最简单方法。不同类的物体产生不同的语义,而语义分割就是要将这些属于不同类别的像素进行归类,把属于同一类的像素归为一起。
- 实例分割
现在,如果你想更进一步以不同的方式表示类的每个实例,这个问题称为实例分割。
与语义分割不同,在图像分割中,我们独立地屏蔽图像中包含的对象的每个实例。所以这意味着,我们将首先关注重要的对象,然后分别识别对象的每个实例。而对于实例分割任务来说,你可以看到图像中的所有对象汽车和人都被突出显示,并且所有目标都被赋予不同的颜色以示区别。
- 全景分割
当我们把语义分割和实例分割结合起来看时,便会得到一种新的任务——全景分割。这是近几年挖的一个新坑,全景分割致力于将图像中的每个像素与分类的语义标签相关联,并识别特定类的实例。
好了,简单介绍到这里,本文将重点围绕语义分割进行介绍,接下来让我们看看它是如何一路磕磕绊绊地走过来。
历史演变
传统图像分割
图像分割最初是从数字图像处理加上优化算法开始的。这些原始算法使用区域生长等方法,在这些方法中设置初始区域,然后算法比较像素值以获得分割图的概念。
这些方法起初是对图像中的特征进行局部观察,并关注像素中的局部差异和梯度。对输入图像进行全局扫描的算法出现得晚得多,在经典图像处理方法中提出了自适应阈值化、Otsu 算法和聚类算法等方法。
基于阈值的分割
阈值化是最简单的图像分割方法之一,其中设置阈值以将像素分为两类。值大于阈值的像素设置为 1,而值小于阈值的像素设置为 0。
对应的图像我们称之为二值图,而这个过程便是二值化。图像阈值化在两个目标类之间的像素值差异非常大的情况下非常有用,通常选择平均值作为阈值。
阈值分割通常用于图像二值化,可应用于轮廓检测和识别等任务。
基于阈值分割方法的优点是:
- 计算简单
- 效率更高
不过,当图像中灰度值差异不明显或者灰度值出现重叠的情况,它将很难被精确的分割。
基于区域的分割
基于区域的分割算法通过寻找相邻像素之间的相似性并将它们分组在一个公共类别下来工作。
通常,分割过程从一些像素设置为种子像素开始,算法通过检测种子像素的直接边界并将它们分类为相似或不相似来工作。
然后将直接邻居视为种子并重复这些步骤直到整个图像被分割。类似算法的一个例子是用于分割的流行分水岭算法,它从欧几里得距离图的局部最大值开始工作,并在没有两个种子可以归类为属于同一区域或分割图的约束下增长。
边缘检测分割
在具有不同灰度值的两个相邻区域之间总是存在边缘。边缘可以被认为是图像的不连续局部特征。我们可以利用这种不连续性来检测边缘,从而定义出对象的边界。
边缘分割,也称为边缘检测,是检测图像中边缘的任务。
从基于分割的角度来看,我们可以说边缘检测对应于将图像中的哪些像素分类为边缘像素,并相应地将这些边缘像素挑出一个单独的类别。
边缘检测通常是通过使用特殊的过滤器来执行的,这些过滤器在卷积时为我们提供图像的边缘。这些滤波器由专门的算法计算得出,这些算法用于估计空间平面的 x 和 y 坐标中的图像梯度。
使用 Canny 边缘检测算法的边缘检测示例,最流行的边缘检测算法之一如下所示。
基于聚类的分割
依赖于图像处理技术的现代分割算法通常是使用聚类算法进行分割。
聚类,其实就是将具有相似性质的数据点给划分为一组,每一组我们称为一簇。聚类算法的性能优于同类算法,并且可以在短时间内提供相当好的分割效果。像 K-means 聚类算法这样的流行算法是无监督算法,它们通过将具有共同属性的像素聚集在一起作为属于特定片段来工作。
特别是,K 均值聚类考虑了所有像素并将它们分成了多个类。与区域增长方法不同,基于聚类的方法不需要种子点来开始分割。其工作流程如下:
- 随机的选择一个初始化的k值;
- 随机将每个数据点分配给k个簇中的任何一个;
- 计算各个簇之间的中心点;
- 计算每一个数据点离各个簇中心点的距离;
- 按照它们之间的距离将这些数据点分配给离它们最近的簇;
- 重新计算这些簇的中心点;
- 最后,重复步骤4-6,直到各个聚类中心点不再变化或者达到我们设定的迭代次数。
K-means 适用于数据量比较小的情况。当它应用于大型数据集时,该算法会遇到瓶颈,因为它会在每次迭代时查看所有样本,因此所耗费的时间代价很昂贵。 此外,由于K-means是基于距离的算法,因此它仅适用于凸数据集,不适合对非凸集群进行聚类。
现代图像分割
现代图像分割主要经历两个阶段,一个是基于传统机器学习的分割,这一块大概是从2009-2015年期间,伴随着Adaboost、SVM、GMM、C-Means等算法的兴起,许多研究人员将这些方法应用到分割任务中。不过,大部分方法仍然属于是启发式的工作,基本都要依赖人工设计的特征。
另一个阶段便是基于深度学习的图像分割。自从全卷机神经网络(Fully Convolution Network, FCN)这个开创性的工作被提出以来,卷积神经网络(Convolution Neural Network, CNN)在图像分割领域的应用算是正式拉开了序幕。几乎同一时期,另一个代表性的经典工作——U-Net,也随之诞生。
基于深度学习的分割模型通常会输出一个原图分辨率同等大小的掩码图,这些掩码图通常是 n 通道的,n 是模型的输出类别数。对应到 n 通道中的每一个掩码图本质上都是一张二分类图,存在对象的位置会被填充为 1,而其余区域则由 0 组成,类的索引从0到n-1。
下面大致分几个派系带大家快速过一遍,那些年我们一起追过的语义分割网络。(多图预警)
医学图像分割
U-Net
Paper: 《U-Net: Convolutional Networks for Biomedical Image Segmentation》
Accepted by MICCAI 2016.
U-Net最初是在由 MICCAI 举办的细胞分割挑战比赛中大获全胜,紧接着一路开挂,在场景解析、医学图像分割、显著性检测、遥感图像分割等领域遍地开花,逐渐成为了语义分割领域的新标杆,哪怕今天爆火的 AGI 技术 Diffusion 模型中也应用到了此网络结构。
- 编码器:用于将输入图像编码为多个不同级别的特征表示,通常由一堆卷积和池化组成;
- 解码器:用于将编码器学习到的判别性特征(lower-resolution)语义逐步投影至与原始空间分辨率一致的像素空间(higher-resolution)以进行密集预测分类,通常由上采样模块和卷积组成;
- 长跳跃连接:在网络中进行上采样的同时,将来自编码器网络的更高分辨率的特征图与上采样的特征图拼接(
Concat)起来,以便更好地学习后续卷积的表征【FCN中采用Add操作】。由于上采样是一种稀疏操作,因此引入早期阶段的良好先验可以更好地帮助网络定位到目标。
R2U-Net
Paper: 《Recurrent Residual Convolutional Neural Network based on U-Net (R2U-Net) for Medical Image Segmentation》
Arxiv.
R2U-Net是早期将循环卷积结构嵌入到 U-Net 的一个工作,在当时比较火,后面作者本人好像没有投稿,一直挂载 arxiv 上。不过这个网络本身精度也是不高,前几年测了下几乎在大部分医学图像分割任务上均比不过 U-Net,也不失为一个完美的对(当)比(我)方(没)法(说),这里提一下仅留个纪念,不喜勿喷。
DSN
Paper: 《Deeply-Supervised Nets》
Accepted by PMLR 2015
深监督网络 DSN 是一种同时最小化分类错误并提高隐藏层学习过程的直接性和透明度的方法。
Attention U-Net
Paper: 《Attention U-Net: Learning Where to Look for the Pancreas》
Accepted by MIDL 2018.
Attention U-Net 提出了一种应用于医学影像的基于门控注意力 attention gate 的模型,该模型可以抑制背景区域,强调前景区域,自动学习如何区分目标的外形和尺寸。
U-Net++
Paper: 《UNet++: Redesigning Skip Connections to Exploit Multiscale Features in Image Segmentation》
Accepted by TMI 2019.
U-Net++ 的第一个优势就是精度的提升,通过整合不同层次的特征加强信息交互;第二个是灵活的网络结构配合深监督,让参数量巨大的深度网络在可接受的精度范围内大幅度的缩减参数量。
CE-Net
Paper: 《UNet++: Redesigning Skip Connections to Exploit Multiscale Features in Image Segmentation》
Accepted by TMI 2019.
CE-Net 主要包含三个主要组件,即特征编码器模块、上下文提取器和特征解码器模块。
- 特征编码器模块:使用预训练的 ResNet 块作为固定特征提取器;
- 上下文提取器模块:由密集空洞卷积(DAC)块和残差多核池(RMP)块组成,旨在来捕获更多高级信息并保留空间信息;
- 特征解码器模块:主要包括连续的1×1卷积,3×3转置卷积和1×1卷积,利用转置卷积学习自适应映射以恢复具有更多详细信息的特征。
综合结果表明,所提出的方法在视盘分割、血管检测、肺部分割、细胞轮廓分割和视网膜光学相干断层扫描层分割方面均取得了不错的效果。
nnU-Net
Paper: 《nnU-Net: Self-Adapting Framework for U-Net-Based Medical Image Segmentation》
nnU-Net 是医学图像十项全能比赛的冠军,目前在医学图像分割领域有着不可撼动的地位,相信目前研究该领域的人员应该无人不知,无人不晓。nnU-Net 本身并不侧重于网络结构的创新,更多的是提出一个统一的框架,包括针对医学影响设设计的一系列丰富的预处理、后处理和训练 tricks 等。
MultiResUNet
Paper: 《MultiResUNet : Rethinking the U-Net architecture for multimodal biomedical image segmentation》
Accepted by Neural Networks 2020.
MultiResUNet 主要针对医学图像分割任务普遍存在的两个问题——尺度多样性以及不同层级特征之间融合所存在的语义鸿沟,提出了 MultiRes 模块和 Res Path 进行解决,最终在多模态医学图像分割任务上获得优异的性能。
CPFNet
Paper: 《CPFNet: Context Pyramid Fusion Network for Medical Image Segmentation》
Accepted by TMI 2020.
CPFNet,即上下文金字塔融合网络,基于U-Net架构并结合两个金字塔模块来融合全局的多尺度上下文信息。
- 全局金字塔引导(GPG)模块:通过重构跳跃连接为解码器提供不同层次的全局上下文信息;
- 尺度感知金字塔融合(SAPF)模块:实现了多尺度上下文信息的动态高层次融合;
实验结果表明,提出的方法在四个不同的挑战性任务,包括皮肤损伤的分割,视网膜线性损伤的分割,胸部器官的多分类分割和视网膜水肿损伤的分割任务上具有很强的竞争力。
PraNet
Paper: 《PraNet: Parallel Reverse Attention Network for Polyp Segmentation》
Accepted by MICCAI 2020.
PraNet 利用并行的部分解码器在高级层中聚合特征作为初始引导区域,再使用反向注意模块挖掘边界线索,其最大贡献点在于统一了多个结直肠息肉分割任务,为后续息肉分割相关的研究铺垫了基础。
FAT-Net
Paper: 《FAT-Net: Feature Adaptive Transformers for Automated Skin Lesion Segmentation》
Accepted by MIA 2021.
FAT-Net 属于最早期应用 Transformer 架构的经典医学图像图像分割网络,致力于解决皮肤病变分割任务。整个网络基于编解码架构,编码器部分采用 Transformer + CNN 的并行双分支架构进行主要的特征提取,以有效地捕获远程依赖关系和全局上下文信息。随后,基于特征重标定的策略对来自不同架构所提取到的的特征图进行更深层次的融合,通过学习的方式来自动获取到每个特征通道的重要程度,最后再筛选出更加有用的特征图。最后,通过在跳跃连接部分集成了特征自适应模块(FAM)来激活有效通道和抑制不相关的背景噪声,从而增强相邻层特征之间的特征融合。
BA-Net
Paper: 《Boundary-aware context neural network for medical image segmentation》
Accepted by MIA 2022.
BA-Net 是一个针对 2D 医学图像分割并基于编解码结构所设计的边界感知上下文神经网络,可以捕获更丰富的上下文并保留精细的空间信息;其次,通过在编码器子网络的每个阶段,应用金字塔边缘提取模块来获得多粒度边缘信息;最后,一个新设计的迷你多任务学习模块用于联合学习分割对象掩码和检测病变边界,其中引入了一个新的交互式注意层来桥接这两个任务。通过这种方式,实现了不同任务之间的信息互补,有效地利用边界信息为更好的分割预测提供了强有力的线索。最后,交叉特征融合模块用于选择性地聚合来自整个编码器子网络的多级特征。通过级联这三个模块,每个阶段的更丰富的上下文和细粒度特征被编码,然后传递给解码器。
CASTformer
Paper: 《Class-Aware Generative Adversarial Transformers for Medical Image Segmentation》
Accepted by NeuraIPS 2022.
CASTformer 是 CNN + Transformer 组合而成的混合网络结构,通过整合多尺度金字塔结构以捕获丰富的全局空间信息和局部多尺度上下文信息。此外,进一步的应用生成对抗训练的策略用于提高分割性能,使基于 Transformer 的判别器能够捕获低级解剖特征和高级语义。
Others
《Transunet: Transformers make strong encoders for medical image segmentation》
《CoTr: Efficiently Bridging CNN and Transformer for 3D Medical Image Segmentation》
《Convolution-Free Medical Image Segmentation using Transformers》
《Transfuse: Fusing transformers and cnns for medical image segmentation》
《Medical Transformer: Gated Axial-Attention for Medical Image Segmentation》
《Medical Image Segmentation Using Squeeze-and-Expansion Transformers》
《Multi-Compound Transformer for Accurate Biomedical Image Segmentation》
《UTNet: A Hybrid Transformer Architecture for Medical Image Segmentation》
《Mixed Transformer U-Net For Medical Image Segmentation》
《An Effective Medical Image Segmentation Transformer》
《T-AutoML: Automated Machine Learning for Lesion Segmentation using Transformers in 3D Medical Imaging》
《RTNet: Relation Transformer Network for Diabetic Retinopathy Multi-lesion Segmentation》
Related Repo:github.com/junyuchen24…
自然图像分割
DeconvNet
Paper: 《Learning Deconvolution Network for Semantic Segmentation》
Accepted by ICCV 2015.
DeconvNet 提出了深度反卷积结构,并首次应用到语义分割任务上。同时,结合目标检测技术,将训练好的网络应用到每个提议框上以获得实例级的分割结果;最后,再将这些单个分割的结果拼接起来以完成最终的语义分割推理,有效的解决了 FCN 网络无法有效处理细小目标的局限性。
SegNet
Paper: 《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentationn》
Accepted by TPAMI 2017.
SegNet 是伴随着 U-Net 同时发布的,它首先在深度学习中引入跳跃连接作为典型的下采样层中观察到的信息丢失的解决方案编码器-解码器网络。跳跃连接是从编码器直接到解码器而不经过瓶颈层的连接。 换句话说,在解码器中捕获并连接到编码表示的各个级别的特征图。这有助于通过积极的池化和下采样来减少信息丢失,帮助恢复更精细的物体定位。
DeepLab
继 SegNet 之后,Facebook 提出的 DeepLab 成为一个新的里程碑,提供了语义分割的最先进结果。
DeepLab 前后共发布过四个版本,分别为 v1 - v3+:
DeepLab-v1 整体沿用了 VGG-16 的架构,其贡献点加入引入了空洞卷积,在保持原有特征分辨率的前提下增大网络的感受野,同时应用了条件随机场 CRF 作为后处理去平滑边缘细节。
DeepLab-v2 提出了多尺度的空洞池化金字塔卷积模块——ASPP,以增强网络识别不同尺寸的同一物体的能力。
DeepLab-v3 引入了 Multi-Grid 策略,同时在 v2 提出的 ASPP 模块内融合了 BN 技术;此外,为了更高效的捕获多尺度信息,v3 将全局池化层集成到了 ASPP 模块内。
DeepLab-v3+ 整体架构借鉴了 U-Net 和 SegNet 转换为编解码结构,通过引入适当的 Skip Connection 来获取更好的分割边缘;此外,v3+ 进一步参照了 MobileNet,改用深度可分离卷积,同时集成了优化过后的 Xception 模块。
PSPNet
Paper: 《Pyramid Scene Parsing Network》
Accepted by CVPR 2017.
PSPNet 中提出了金字塔池化模块——SPP,主要围绕多尺度信息和全局上下文建模进行设计,同时借鉴了 GoogleNet 的思路引入了辅助 loss,帮助网络更好的收敛。
RefineNet
Paper: 《RefineNet: Multi-Path Refinement Networks with Identity Mappings for High-Resolution Semantic Segmentation》
Accepted by CVPR 2017.
RefineNet 旨在建模多个层级特征之间的信息交互,同时结合残差思想来帮助网络的梯度回传,使模型整体的训练更加容易收敛;此外,应用 Chained Residual Pooling 模块来捕获更多的上下文信息。
GCN
Paper: 《Large Kernel Matters —— Improve Semantic Segmentation by Global Convolutional Network》
Accepted by CVPR 2017.
语义分割涉及两个任务——分类和定位。分类网络具有平移和旋转不变性,因此不注重位置信息;而定位涉及获取准确的位置细节。因此,这两项任务本质上是矛盾的。大多数分割算法更重视定位,因此忽略了全局上下文。在这项工作中,作者提出了一种在不丢失定位信息的同时也重视分类任务的方法——全局卷积网络,是早期较早验证大卷积核能带性能增益的代表性工作之一。
ExFuse
Paper: 《ExFuse: Enhancing Feature Fusion for Semantic Segmentation》
Accepted by ECCV 2018.
Low-level 的特征具备丰富的细节信息,但缺乏高级语义信息;High-level 的特征则与之相反,具备丰富的高级语义但缺乏空间细节信息。ExFuse 旨在探讨如何更高效的将编码器中的 High-level 特征与解码器中的 Low-level 特征进行深度融合,从而在低层特征中引入更多的语义信息,在高层特征中嵌入更多的空间信息。
DFN
Paper: 《Learning a Discriminative Feature Network for Semantic Segmentation》
Accepted by CVPR 2018.
DFN 主要针对语义分割任务面临的两大挑战:类内不一致(intra-class inconsistency)和类间无差别(inter-class indistinction),提出了对应的特征判别性网络——Discriminative Feature Network,其包含Smooth Network和Border Network。
Smooth Network用于处理类内一致性问题,通过结合通道注意力模块和全局平均池化来选择更有判别性的特征;Border Network则用于处理边界不清晰问题,借助多层语义边界监督区分边界两边的特征。
PSANet
Paper: 《PSANet: Point-wise Spatial Attention Network for Scene Parsing》
Accepted by ECCV 2018.
PSANet 针对场景解析任务提出了逐点空间注意力机制,通过自适应学习一个注意力掩码,将特征映射上的每个位置与其他位置联系起来,来缓解局部邻域约束。
NonLocal
Paper: 《Non-local Neural Networks》
Accepted by CVPR 2018.
NonLocal 借鉴自注意力机制的思路来完成远距离的上下文建模,整体效果不错,但计算量过大。
DUpsampling
Paper: 《Decoders Matter for Semantic Segmentation:Data-Dependent Decoding Enables Flexible Feature Aggregation》
Accepted by CVPR 2019.
先前绝大多数基于编解码架构的语义分割网络,解码器的上采样层通常依赖双线性插值操作,这种与数据无关的方法无法学习到有效的特征映射。该论文则提出一种数据相关型的上采样方法 DUpsampling 来替代双线性插值,大幅提升了模型的采样重构能力,在降低计算复杂度的同时提升分割精度。
DMNet
Paper: 《Dynamic Multi-scale Filters for Semantic Segmentation》
Accepted by ICCV 2019.
DMNet 从多尺度表示出发,设计了一种动态多尺度网络来自适应捕获多尺度内容以预测像素级语义标,从而解决语义分割中对象和东西的尺度变化。DMNet 主要由多个并行排列的动态卷积模块(DCM)组成,每个模块都利用上下文感知过滤器来估计特定规模的语义表示。最后,多个 DCM 的输出进一步集成以完成分割。
DANet
Paper: 《Dual Attention Network for Scene Segmentation》
Accepted by CVPR 2019.
DANet 包含了两个注意力模块——通道注意力和空间注意力,旨在捕捉空间和通道维度中的全局特征依赖关系。其中,空间注意力模块用于学习特征的空间相互依赖性,通道注意力模块用于模拟通道相互依赖性,通过在局部特征上建模丰富的上下文依赖关系,显著的改善了最终的分割结果。
CCNet
Paper: 《CCNet: Criss-Cross Attention for Semantic Segmentation》
Accepted by ICCV 2019.
CCNet 提出 criss-cross attention module 来捕捉图像周围像素的上下文信息,从而捕获全局信息。CCNet 通过使用两次交叉注意力机制,使较远处的像素点同样可以间接作用于该像素点,相比于 Non-local 模块可以大幅降低计算量。
ANN
Paper: 《Asymmetric Non-local Neural Networks for Semantic Segmentation》
Accepted by ICCV 2019.
ANN 针对 NonLocal 作出了优化,主要解决前者计算量和显存占用量巨大的问题。ANN 设计了一种非对称非局部的神经网络,主要包含非对称金字塔非局部块(APNB)和非对称融合非局部块(AFNB)两个组件。其中,APNB 在非本地块中利用金字塔采样模块,在不牺牲性能的情况下大大减少了计算和内存消耗。另一方面,AFNB 则由 APNB 改编而来,在充分考虑长程依赖性的情况下融合了不同层次的特征,从而显着提高了性能。
Gated-SCNN
Paper: 《Gated-SCNN: Gated Shape CNNs for Semantic Segmentation》
Accepted by ICCV 2019.
Gated-SCNN 是一种基于双流的卷积神经网络架构,通过在常规流之外引入形状流分支额外处理形状信息,有效去除噪声并帮助形状流仅专注于处理相关的边界相关信息。
EMAU
Paper: 《Dual Super-Resolution Learning for Semantic Segmentation》
Accepted by ICCV 2019 (oral).
EMAU 提出了期望最大化注意力机制,摒弃了在全图上计算注意力图的流程,转而通过期望最大化算法迭代出一组紧凑的基,在这组基上运行注意力机制,从而大大降低了复杂度。其中,E步更新注意力图,M步更新这组基。E、M交替执行,收敛之后用来重建特征图。
DSRL
Paper: 《Dual Super-Resolution Learning for Semantic Segmentation》
Accepted by CVPR 2020.
DSRL 主要讲超分引入了语义分割框架,以指导语义分割如何更好的恢复至原始的空间分辨率。
OCRNet
Paper: 《Object-Contextual Representations for Semantic Segmentation》
Accepted by ECCV 2020.
OCRNet 从 pixel 出发,作者人为每个像素点的类别应该是它所属目标的类别,因此可以通过用相应的对象区域表示来表征每个像素来加强像素表示。具体地,本文结合每一类的类别语义信息给每个像素加权,再和原始的 pixel 特征 concat 组成最终每个像素的特征表示,以此来求出每个像素点和每个类别的相关性,从而对每个像素点的上下文信息进行建模。
值得一提的是,HRNet 结合 OCRNet 的语义分割网络《High-resolution networks and Segmentation Transformer for Semantic Segmentation》也取得了异常优秀的效果,感兴趣的同学可以参考下官方的 Github —— github.com/HRNet/HRNet…
PointRend
Paper: 《PointRend: Image Segmentation as Rendering》
Accepted by CVPR 2020.
PointRend 将图像分割当做一个渲染问题,整体方案遵循 coarse-to-fine 的迭达式算法,可以在自适应选择的位置执行基于点的分段预测,从而在先前方法过度平滑的区域中输出清晰的对象边界。
DynamicRouting
Paper: 《Learning Dynamic Routing for Semantic Segmentation》
Accepted by CVPR 2020 (oral).
DynamicRouting 是旷视研究院针对语义分割任务提出一个全新的理念。具体而言,动态路径选择会在推理过程中根据输入图像生成前向传播路径,也就是说随着输入数据的不同,网络也会自适应地生成不同的结构进行特征编码。利用该方法,网络可以将不同尺寸的物体(或背景)分配到对应分辨率的层级上,以实现有针对性的特征变换。
SETR
Paper: 《Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers》
Accepted by CVPR 2021.
SETR 记得没错的话应该是当时最早将 ViT 引入语义分割框架的代表型工作之一。
MagNet
Paper: 《Progressive Semantic Segmentation》
Accepted by CVPR 2021.
MagNet 主要贡献在于解决如何在有限硬件资源条件下训练超高分辨率输入的语义分割问题。
UN-EPT
Paper: 《A Unified Efficient Pyramid Transformer for Semantic Segmentation》
Accepted by ICCV 2021.
UN-EPT 网络统一考虑了上下文信息和 boundary artifacts 来分割对象。首先,应用稀疏采样策略来整合基于 Transformer 的注意力机制,以实现高效的上下文建模。最后,引入了一个单独的空间分支来捕获图像细节以进行边界细化,整个模型可以以端到端的方式进行训练。
PVT
Paper: 《Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction Without Convolutions》
Accepted by ICCV 2021.
PVT 主要的贡献是从多尺度角度出发,将金字塔结构引入到 ViT 中,以更好的完成密集预测任务。
SegFormer
Paper: 《SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers》
Accepted by NeuraIPS 2021.
SegFormer 整体架构上沿用分层特征表示来捕获多尺度特征,同时去掉了原始 ViT 结构中的 position embedding,避免了测试图像与训练图像尺寸不同而导致模型性能下降的问题。最后,在解码器部分则应用了 MLP 结构来聚合来自编码器输出的不同尺度特征图,以同时融合局部注意力和全局注意力。
Segmenter
Paper: 《Segmenter: Transformer for Semantic Segmentation》
Accepted by ICCV 2021.
Segmenter 是一个依赖纯 Transformer 编解码器所构建的网络结构,可建模全局上下文信息,并使用逐点线性解码器或掩码 Transformer 来获取类标签。
SegNeXt
Paper: 《SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation》
Accepted by NeurIPS 2022.
SegNeXt 是基于 Segmenter 改进的,提倡使用大卷积核来替代 Transformer 中的注意力操作。
实时语义分割
ENet
Paper: 《ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation》
Accepted by ICLR 2017.
ENet 主要是针对此前 SegNet 等网络参数量大推理时间长以及下采样容易丢失精确边缘空间信息等问题提出了一系列的改进方案。
- 保留最大池化层的最大元素索引,并将其应用在解码器中以生成稀疏的上采样映射;
- 采用
BN、PReLu、Dropout等Tricks; - 结合原始卷积、空洞卷积、非对称卷积和全卷积来进一步提升网络的多尺度特征捕捉能力。
ICNet
Paper: 《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》
Accepted by ECCV 2018.
ICNet 设计了一种新颖而独特的图像级联网络,充分地建模了低分辨率图的语义信息和高分辨率图的细节信息,实现了图像的实时语义分割所开发的级联特征融合单元与级联标签指导相结合,可以在较低计算量的情况下逐步恢复和细化分割的结果。
CGNet
Paper: 《CGNet: A Light-weight Context Guided Network for Semantic Segmentation》
Accepted by TIP 2020.
CGNet 即轻量化语义分割模型,可以满足移动设备的运行需要,主要由 Context Guided Block 构建而成。CG 块可以学习局部特征和周围环境上下文的联合特征,最后再通过引入全局上下文特征进一步改善联合特征的学习。
BiSeNet
Paper: 《BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation》
Accepted by CVPR 2018.
BiSeNet 系列是实时语义分割网络中的经典工作之一,其围绕丰富的空间信息以及大感受野来设计双分支网络结构,最后再通过特征融合模块FFM进行信息整合。
Paper: 《BiSeNet V2: Bilateral Network with Guided Aggregation for Real-Time Semantic Segmentation》
Accepted by IJCV 2021.
BiSeNet V2 提出了一种用于实时语义分割的具有引导聚合的双边网络,主要围绕低级空间细节和高级语义信息这两个方面进行建模。
Paper: 《BiSeNet V3: Bilateral Segmentation Network with Coordinate Attention for Real-time Semantic Segmentation》
BiSeNet V3 (未正式发表)引入了一个新的特征细化模块来优化特征图和一个特征融合模块来有效地组合特征。此外,借助注意力机制来帮助模型捕获上下文信息,并使用边缘检测来增强边界特征。
Paper: 《Rethinking BiSeNet For Real-time Semantic Segmentation》
Accepted by CVPR 2021.
STDC 是由美团提出的针对 BiSeNet 网络所改进的实时语义分割网络架构,该方法通过逐步降低特征图的维度,并利用聚合信息来表示图像。在解码器中,通过将空间信息的学习以 single-stream 的方式整合到低层,提出一个 Detail Aggregation 模块。最后,再通过融合浅层特征和深层特征输出最终的分割结果。
SSR
Paper: 《Efficient Joint-Dimensional Search with Solution Space Regularization for Real-Time Semantic Segmentation》
Accepted by IJCV 2022.
SSR 是通过神经架构搜索自动搜索出来的一个最优的网络结构,可以实现实时且准确的语义分割。文中提出了一种新颖的解空间正则化(SSR)损失函数,有效地鼓励超网收敛到其离散网络。随后,通过分层渐进解空间收缩策略,进一步提高搜索的效率并减少计算消耗。此外,作者从理论上证明了 SSR 损失在优化上等效于 L0 范数正则化,这解释了缩小的离散化差距。综合实验表明,所提搜索方案可以高效地找到最优的分割网络结构,在保持精度相当的同时,以极小的模型尺寸(1M)获得极快的分割速度(175 FPS)。
SenFormer
Paper: 《Efficient Self-Ensemble for Semantic Segmentation》
Accepted by BMVC 2022.
SenFormer 提出了一种自集成方法,通过利用特征金字塔网络方法产生的多尺度特征集来提供独立的解码器,从而在单个模型中创建一个集成,有效的提升了语义分割的性能,同时避免传统集成方法所需的昂贵训练成本。
IncepFormer
Paper: 《IncepFormer: Efficient Inception Transformer with Pyramid Pooling for Semantic Segmentation》
Accepted by NeuraIPS 2022.
IncepFormer 是一种基于金字塔结构的 Transformer 编码器,可同时捕获全局上下文和精细定位特征。此外,借鉴 Inception 模块,该方法为为每个自注意力层嵌入轻量化的前馈模块,更高效的提取到丰富的局部多尺度上下文信息。
统一分割框架
Mask R-CNN
Paper: 《Mask R-CNN》
Accepted by ICCV 2017 (Best paper).
Mask R-CNN 是早期将分类、检测、分割等任务大一统的经典代表性工作,通过在 Faster-RCNN 的基础上添加一个分支网络,在实现目标检测的同时,把目标掩码同时分割出来。
K-Net
Paper: 《K-Net: Towards Unified Image Segmentation》
Accepted by NeurIPS 2021.
K-Net 提出了由一组卷积核生成一组 mask 的思想,每一个 mask 至多只分割图片中的一个物体,且不同的 kernel 负责不同物体的 mask 生成。如此一来,便可以不借助任何额外的组件来完成实例分割任务,在提高推理效率的同时实现端到端的训练优化。
K-Net 是近期大一统分割框架的代表性工作之一,突破 Mask-RCNN 的先检测后分割的范式,统一了语义分割、实例分割以及全景分割任务的解决范式。
MaskFormer
Paper: 《Per-Pixel Classification is Not All You Need for Semantic Segmentation》
Accepted by NeurIPS 2021.
MaskFormer 从语义分割任务本身出发,将语义分割从一个像素级分类问题转换成一个掩码级分割问题,不仅更自然的把语义级分割和实例级分割联系在了一起,并且在语义分割上取得了比像素级分类方法更好的结果。
kMaX-DeepLab
Paper: 《k-means Mask Transformer》
Accepted by ECCV 2022.
kMaX-DeepLab 重新思考像素和对象查询之间的关系,并建议将交叉注意力学习重新定义为聚类过程。受传统 k-means 聚类算法的启发,本文开发了一种用于分割任务的 k-means Mask Xformer (kMaX-DeepLab),其结构简单优雅,但取得了 SOTA 性能。
Mask2Former
Paper: 《Masked-attention Mask Transformer for Universal Image Segmentation》
Accepted by CVPR 2022.
Mask2Former 旨在构建一个简单的元框架 MaskFormer 和一个新的 Transformer 解码器,其关键组成部分为掩码注意力 Masked-attention,通过将交叉注意力限制在预测的掩码区域内来提取局部特征,最终在有效节省计算资源的情况下,在全景分割、实例分割和语义分割上均实现了 SOTA。
OneFormer
Paper: 《OneFormer: An Universal Image Segmentation Framework That Unifies Segmentation With A Multi-Task Train-Once Design》
Accepted by CVPR 2022.
OneFormer 应该是目前截止至笔者收稿为止最强的通用图像分割网络,其基于 Transformer 架构,骨干网络采用ConvNeXt和DiNAT,真正意义上统一了语义分割、实例分割或全景分割任务,仅通过训练一遍网络,实现了在三个图像分割任务中实现 SOTA 性能。其次,引入了一种任务token,将该模型限定在手头任务上,使模型具有任务动态性,以支持多任务训练和推理。最后,该方法在训练过程中使用了查询-文本对比损失来更好的区分不同任务和类间的关系。
MasK DINO
Paper: 《Mask DINO: Towards A Unified Transformer-based Framework for Object Detection and Segmentation》
Arxiv 2022.
Mask DINO 是一个简单、高效且可扩展d 统一对象检测和分割框架,通过添加支持所有图像分割任务(实例、全景和语义)的掩码预测分支扩展了 DINO,利用 DINO 中查询嵌入通过点积生成一个高分辨率的像素点嵌入特征以预测一组二分类掩码,并且可以受益于联合大规模检测和分割数据集。
语义分割扩展
零样本语义分割
Paper: 《Decoupling Zero-Shot Semantic Segmentation》
Accepted by CVPR 2022.
零样本语义分割(Zero-Shot Semantic Segmentation, Z3S)旨在分割出训练中未曾出现的新类别。现有方法将 ZS3 表述为像素级 zeroshot 分类问题,并在仅使用文本进行预训练的语言模型的帮助下,将语义知识从已见类别转移到未见类别。
本文提出将 ZS3 分解为两个子任务:
- 分类不可知分组任务,将像素分组为段;
- 完成段上的零样本分类任务。 前一个任务不涉及类别信息,可以直接转移到未见类的组像素。后一项任务在分段级别执行,并提供了一种自然的方式来利用为
ZS3使用图像文本对(例如CLIP)预训练的大规模视觉语言模型。
弱监督/样本语义分割
Paper: 《Mining Cross-Image Semantics for Weakly Supervised Semantic Segmentation》
Accepted by ECCV 2020 (oral).
近年来,基于图像标签信息(image-level label)的弱监督语义分割方法大部分都是基于以下步骤:
- 训练一个通用的图像分类器;
- 通过分类器的
CAM获取每张图像在分类中被激活的区域(物体定位图); - 生成伪标签
mask作为监督信号训练语义分割模型。
然而,CAM 生成的物体定位图仅关注物体中最具辨识度的区域,而不是物体整体。为了解决这种问题,本方法通过在分类器中引入两种注意力模型来帮助分类器识别更多的物体区域:
- 协同注意力(co-attention) : 用于帮助分类器识别一对图像之间共同的语义信息(common semantics),而且能够在物体定位图(object localization maps)的推理过程中利用上下文信息;
- 对比协同注意力(contrastive co-attention) : 则用于识别一对图像之间不同的语义信息(unshared semantics)。
Paper: 《Weak-shot Semantic Segmentation via Dual Similarity Transfer》
Accepted by NeuraIPS 2022.
弱样本学习(weak-shot learning)和零样本学习、少样本学习任务相似,均是将所有种类划分成没有交集的基础种类和新种类。不同的是,基础种类有大量强标注的训练样本,而新种类有大量弱标注的训练样本。
对一些基础种类,通常都有完整的像素级别的强标注数据,而针对更为广阔的新种类普遍仅有图片级别的弱标注数据。在该学习模式下,本文提出名为 SimFormer 的方法,旨在从带有强标注数据的基础种类中迁移双重相似度来辅助从弱标注数据中学习新类别。
半监督语义分割
Paper: 《Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels》
Accepted by CVPR 2022.
本文基于 Every Pixel Matters 的理念,有效利用了包括不可靠样本在内的全部无标签数据,大幅提升了算法精度。
域自适应语义分割
域自适应(Domain Adaption),顾名思义就是自适应不同的域,即不同的场景分布,包括:
- 从一个场合迁移到另一个场合
- 从天气晴朗迁移到雨雪雾
- 从白天迁移到黑夜
通常来说,不同域之间会存在域间隙和标签偏移问题,同时伪标记目标数据包含混合的封闭集和开放集标签噪声。
Paper: 《DANNet: A One-Stage Domain Adaptation Network for Unsupervised Nighttime Semantic Segmentation 》
Accepted by CVPR 2021.
在自动驾驶中,夜间图像的语义分割与白天图像具有同样重要的作用,但由于光照差和费力的人工注释,前者更具挑战性。在本文中,作者提出了一种新的域自适应网络用于夜间语义分割,无需使用标记的夜间图像数据。该方法基于对抗性训练,使用一个标记的白天数据集和一个包含粗对齐的昼夜图像对。具体来说,对于未标记的昼夜图像对,使用日间图像上静态对象类别的像素级预测作为伪监督来分割其对应的夜间图像。通过进一步设计了一种重加权策略,以处理昼夜图像对错位和日间图像预测错误所导致的不准确性,并提高小物体的预测精度。DANNet 是第一个用于夜间语义分割的单阶段自适应框架,它没有训练额外的昼夜图像传输模型作为一个单独的预处理阶段。在 Dark Zurich 和 Nighttime Driving 数据集上的大量实验表明,该法实现了最先进的夜间语义分割性能。
Paper: 《SimT: Handling Open-set Noise for Domain Adaptive Semantic Segmentation》
Accepted by CVPR 2022.
在本文中,作者提出了一个单纯形噪声转换矩阵(SimT)来模拟 DA 语义分割 中的混合噪声分布,并将问题表述为 SimT 估计。通过利用计算几何分析和分割特性,设计了三个互补的正则化器,即体积正则化、锚引导、凸保证,以逼近真实的 SimT。 具体来说,体积正则化最小化由非正方形 SimT 的行形成的单纯形的体积,这确保分割模型的输出适合GT标签分布。此外,为了弥补开放集知识的不足,文中进一步设计了 anchor guidance和convex guarantee,以促进开放集噪声分布的建模,并增强封闭集和开放集类之间的判别特征学习。估计的 SimT 进一步用于纠正伪标签中的噪声问题,并提高分割模型对目标域数据的泛化能力。
点云语义分割
Paper: 《2DPASS: 2D Priors Assisted Semantic Segmentation on LiDAR Point Clouds》
Accepted by ECCV 2022.
2DPASS 是基于二维图像先验辅助的激光雷达点云语义分割,不同于先前的多模态方法,即训练和推理阶段均需要成对的图像和点云数据作为输入,该方法仅在训练阶段利用额外的图像数据,从原始相机数据中获取更丰富的语义和结构信息,并将其提炼蒸馏至三维语义分割网络中。在测试阶段,该方法可实现实时感知,无需图像数据输入,即可实现又快又准的三维语义分割,实现 SemanticKITTI 和 NuScenes 双 SOTA。
扩散语义分割
Paper: 《Label-Efficient Semantic Segmentation with Diffusion Models》
Accepted by ICLR 2022.
去噪扩散概率模型最近受到了很多研究人员的关注,其性能由于以往 GAN 为代表的一众生成式模型,在图像修复、超分辨率、语义编辑等 low-level 领域遍地开发。最近,许多研究工作将 DDPM 引入到了 high-level 任务上,例如目标检测和语义分割等。本方法便是 DDPM 在语义分割领域的一个代表性工作,作者向我们证明了扩散模型也可以用作语义分割的工具,尤其是在标记数据稀缺的情况下。
推陈出新
上面笔者已经简单的为大家过一篇语义分割的简略发展史,下面将带大家追本溯源,一步一步的探讨出语义分割未来发展的诸多可能性。
先来简单总结下传统图像分割。对于传统的图像分割算法,无论是阈值分割、区域分割、边缘分割或基于聚类的方法,几乎都停留在纯手工设计的阶段,例如人为确定一个阈值或者定义一个滤波器模板。此类方法更加适应的场景偏颜色、纹理、形状或梯度等简单的底层特征提取。然而,当遇到光照变化、姿态变化或者背景变化等情况几乎无能为力,更遑论提取到更进一步的高级语义特征。此外,此类先验知识往往需要专家经验,完全不易于推而广之。因此,基于传统的图像分割算法目前较多的是作为预处理(简单去噪)或者后处理(比如条件随机场和分水岭算法平滑边界轮廓)的一种手段去使用,亦或者取其精华去其糟粕,将其核心思想凝练出来融于现代的神经网络架构。
随着 AlexNet 引爆深度学习热潮开始,以卷积神经网络为代表的新一代神经网络架构逐渐开始流行起来,几乎在每个深度学习子领域均遍地开花。特别地,自全卷机神经网络(Fully Convolutional Network, FCN)这个里程碑式的网络被提出后,基于深度学习的语义分割正式拉开帷幕。既然谈到 FCN 势必很多人会拿它跟 U-Net 作比较。其实这两个网络包括整体的结构设计和思路是大同小异的,只不过是一个应用在场景解析任务,另一个应用在医学图像分割任务;一个长跳跃连接采用相加的操作然后直接一步到位上采样到原始空间分辨率,另一个长跳跃连接方式是通过拼接操作后再用卷积进行更细致的特征融合,然后不断细化,使其整体结构更加对称。后续提出的多数语义分割方法大都是基于此架构从不同方向延伸发展而成的。
因此,要想捋清楚语义分割究竟何去何从,从分析这个编解码架构的角度出发无疑是较合适的。
性能
早期的语义分割以追求性(涨)能(点)为主,整体核心思想均是考虑如何高效建模上下文信息而设计。下面我们将围绕编解码器展开详细的讨论。
编解码的思想早期是出自自编码器,这个结构是由 Hinton 提出并发表在 Nature 上,主要用于解决图像压缩和去噪任务,随后该思路被广泛应用到图像分割任务上。编解码架构(Encoder-Decoder Architecture)主要由编码器、长跳跃连接和解码器所组成。
编码器
首先,让我们来看下编码器。众所周知,编码器一般可视为整个网络的特征提取器(a.w.a Backbone),用于压缩原始图像并逐步地提取出富含高级语义信息的特征图。这个过程中最关键的因素便是上下文信息,它是提升语义分割性能最为重要的因素之一,而有效感受野则大致决定了网络能够利用到多少上下文信息。
对于大部分网络结构来说,通常都会在编码的过程中引入池化或步长卷积来逐步降低输入特征图的空间分辨率,一方面可以降低计算资源的消耗,另一方面也能够在一定程度扩大感受野。此外,除了卷积操作本身(参数共享)所具备的平移等变性 translation equivalence 外,引入池化操作还能够为网络带来一定的平移不变性 translation invariant,使网络对目标位置不那么敏感,间接地增强了网络对未知数据的推理能力,同时又通过共享卷积核来达到控制模型复杂度的目的。
理论上,通过堆叠足够深的卷积(池化)层,网络的感受野能够覆盖到输入图像的全局区域。然而,考虑到以下三点:
- 网络的实际感受野远小于其理论感受野,理论上呈高斯分布;
- 考虑到参数量激增和计算量消耗与性能之间的平衡;
- 频繁的下采样操作会导致小目标的细节信息丢失严重;
所以,单纯依赖堆叠一堆常规的卷积池化操作来实现覆盖原图的感受野其实是不太实际的。扯到这里,我想还有部分人没明白究竟上下文信息是个什么概念?考虑下面这张图片:
先看第一行第三列,这里模型将远处的一艘船的部分误判为车,这是因为它具有与汽车相似的外观,而模型由于缺乏有效的局部上下文信息容易导致分割失败。局部上下文信息是分割领域中不可或缺的一部分,常用于区分具备相似特征的不同对象。
再看下第二行第三列,此处目标是一栋美丽的大厦,可惜模型未能将其完整的表示出来,这是由于传统的卷积运算一次仅能处理一个局部领域,这大概率会导致大尺寸对象分割的不完整性。因此,为了解决这个问题,我们需要思考如何设计更大的感受野来获取充足的全局上下文信息
再来看下这张图片:
上图展示了多个结直肠息肉数据集统计后的目标尺寸分布,可以明显看出,不同的息肉目标之间是存在明显的尺度差异的,这种现象也普遍存在于许多语义分割任务中。因此,如何有效的提取多尺度特征以适应不同尺寸、形状变化多样的目标也是一个亟需解决的问题。
以上多重因素均会在一定程度上制约模型的表示能力。因此,如上所述,早期的语义分割网络大都是围绕如何在保证效率的同时尽可能的捕获有效的上下文信息开展的,而主流的方法主要有两种:扩大感受野或引入注意力机制。
扩大感受野的方法主要有以下几种方式:
- 使用大卷积核的
GCN等方法; - 使用空洞卷积的
DeepLab等方法; - 使用池化操作的
PSPNet等方法;
现在,让我们再进一步思考,以上这些方法存在什么局限性?例如:
- 使用不同大小的卷积核组合,一方面参数量过大容易导致多拟合,另一方面理论感受野远小于实际感受野;
- 使用空洞卷积虽然可以保留完整的空间信息,然而会引入额外的计算量,容易引起局部领域的信息丢失,同时,当扩张率选取不恰当时还会造成网格(棋盘)效应;
- 使用池化操作虽然简单高效,但容易因为降采样导致小尺寸目标丢失;
此外,感受野是否越大越好?实际上,感受野太小,不足以建模远距离依赖捕获大尺寸对象;感受野太大,则容易引入过多噪声和无效信息,这些最终都会影响到整体的分割性能。那么,设计合理的多尺度表征来获取丰富的等效感受野就显得尤为重要了。例如,DMNet 提出了动态多尺度的过滤器来自适应不同的目标尺寸。解决了尺度参数设计的问题,那么如何更高效的融合不同尺度的信息?CPFNet通过借鉴SK-Net的思想引入了尺度感知模块来自适应的融合来自不同尺度的特征。
另一方面,引入注意力机制的作用主要是获取足够的全局上下文信息以建立远距离依赖,主要方式有:
- 结合通道和空间双注意力的
DANet等; - 借鉴自注意力机制的
NonLocal等;
同样地,对于基于注意力机制的分割方法来说,其优化点可以考虑从不同维度去考虑如何建模,例如基于区域信息建模的PSANet以及针对不同类别信息进行像素加权的OCRNet;另一方面可以考虑从效率方面去改进注意力机制本身带来的计算资源问题,例如采用十字交叉注意力进行等效替代的CCNet、引入非对称结构的ANN、亦或是从全局上下文建模角度所实际的简化版GCNet等等。
长跳跃连接
聊完编码器部分,再来分析下长跳跃连接。
既然谈到跳跃连接,想必大家第一时间想到的是 ResNet 中的残差连接 skip connection。与原始的(短)跳跃连接操作缓解梯度弥散的动机不同,考虑到语义分割任务本身是一种密集型分类预测任务,因此 U-Net 或 FCN 中所涉及到的长跳跃连接操作本质上是为了更好的弥补编码过程中下采样导致的信息损失问题,帮助网络在解码的过程中更好的恢复对物体细节的定位。
另一方面,通过引入长跳跃连接,可以实现不同层级特征之间的信息融合,从而提取到更具有判别力的特征。因此,早期的 RefineNet 便是结合这两点,通过建模多个层级特征之间的信息交互来弥补下采样操作所带来的信息损失。那么问题来了:
- 如何融合更多的特征?
众所周知,不同抽象层级的特征具有不同的独特语义表征。因此,融合不同层级之间的特征是一个自然而然的想法,例如,UNet++ 中便尝试结合长、短跳跃连接来实现尽可能丰富的信息共享。
- 如何融合更好的特征?
首先,考虑下医学图像分割任务。不同于自然图像,医学图像在成像过程中,受采集设备或光照等因素的影响,不可避免的会引入许多背景噪声。此时,如果我们单纯的采用长跳跃连接操作,势必会引入浅层特征中一些不纯净的噪声,从而影响解码器输出特征的质量。为了解决此问题,一方面可以从数据源本身出发,进行去噪处理,例如nnUnet中设计了许多有效的预处理操作,例如CLAHE、Gamma增强等来更好的处理图像。另一方面可以从模型角度考虑,例如Attention-UNet中引入门控注意力来强化前景区域抑制背景区域;又或者像MultiResUNet堆叠多个1×1卷积来进行特征"提纯"。
特征融合本质上是为了获得更具有判别力的特征表示。一般而言,浅层特征注重边缘、纹理等空间细节,但缺乏高级语义;而深层特征具备精确的高级语义信息,但缺乏空间细节信息。一种自然而然的想法便是融合两者。然而,由于特征结构以及特征内容本身的限制,不同层级之间的特征融合势必会存在语义鸿沟。为了解决此问题,ExFuse提出了许多方法使网络得以在浅层特征中引入更多的语义信息,在深层特征中嵌入更多的空间信息。
解码器
解码器的作用是将编码器所提取到的高级特征上采样至固定分辨率以实现端到端的训练从而完成像素级的密集预测分类。通常来说,解码器设计的核心是如何高效的将经过压缩的高级语义特征尽可能无损的还原。这个过程中会涉及两个操作:上采样和特征输出。
如上所述,由于编码器会涉及到多次下采样操作,不可避免的会导致图像精细特征的丢失。一种解决方法是“提前止损”,正如我们上面所介绍的DeepLab,采用空洞卷积可以在无需降采样的情况下拥有更大的感受野,但这仍然会引入许多问题。另一种方法便是“直面困难”,通常将一个特征图进行上采样有两种方式,即使用线性插值和反卷积。
线性插值算法是一种与数据无关的算法,它是根据设定好的公式近似模拟出未知点的信息,这必将制约模型的表达能力。而使用反卷积由于本身自带可学习参数,一般可获得更优的分割性能,但不可避免会引入过多的参数量和计算量。因此,一种参考的解决方案便如同 DUsampleing 中基于通道重排的思路所设计的新型上采样方式,可以同时结合两者的优势。
特征输出的作为为了让网络能进行端到端的训练以更新模型参数。通常来说,大多数网络只会输出最后一层特征图,但大家思考下这一定是最优解吗?众所周知,不同层级的特征所提取到的语义是不一样的,如果能够对中间层的特征进行监督学习,是否能取得比较好的效果?这个思想早期在 GoogLeNet 中有所体现,例如该论文中所提及到的辅助损失。后续一部分语义分割网络也应用了此思路,例如 PSPNet 和 DSN。DSN 中较早提出了深监督的思想,旨在为解码器中所有层级的输出特征均建立监督机制,一来可以有效的综合多个输出层的信息来学习更加鲁邦的特征;二来可以有效的缓解训练过程中梯度消失的现象,加速网络收敛。
谈完深监督的好处,那潜在的问题会出现在哪呢?这里给大家举几个栗子:
- 需要监督多少层特征?
- 需要监督哪些层特征?
- 如何分配合适的权重?
对于第1点,这其实并没有一个严格的定论,关键之处还是取决于训练数据本身的特性。对于第2和第3点,一个经验法则是越靠近输出层的特征理应是最重要的,因此越靠近输出层的中间特征理应分配更多的权重,这一点其实也有不少论文验证过了。
演进思路
经过早几年的发展,这种通过设计新的网络结构或者拼接模(积)块(木)的方式所带来的性能增益,其边际效应逐渐降低,紧接着伴随而来的便是大量同质化工作的涌现,以至于在某个时间节点会出现诸如“xxx还能不能走下去”的窘境。当然,以上现象不仅限于语义分割,对于大部分视觉任务来说亦如此。
尽管在中间这段短暂的时间也涌现一些有意思的工作,但最终都未能掀起大的波澜,好比下面这个段子:
- 手动设计网络结构 → NAS搜索;
- 固定感受野 → 引入动态加权实现感受野的自动调节;
- 效果提升不上去 → 换个思路做实时分割来对比结果;
- 强监督太热门 → 换成弱监督(GAN, 知识蒸馏, ...) + trick = 差不多的指标;
DNN太枯燥,融入点传统视觉的方法设计成端到端模式;CNN太单调,配合GCN搞点悬念;- 嫌
2D分割过于饱和,转3D点云分割;
作者:湃森
来源:知乎
随着 ViT 的诞生,吹响了 Transformer 席卷 CV 界的号角,一时间横扫计算机视觉各个子领域的 SOTA 之星,成为了夜空中最亮的仔,间接盘活了这盘棋。虽然 Transformer 同普通的卷积在数学概念上基本是等价的,整体的架构也都很类似,只不过在优化和实现细节上有所出入,但是整体而言还是有许多不同之处,主要体现在几个方面。
归纳偏置
对于 CNN 来说,由于有了归纳偏置,无需大量训练数据和精心设计的 trick 便能够取得不错的效果;反观 Transformer,尽管少了这层约束,但是却造就其无限潜力的可能,而且这种性能上的差异会伴随着数据和算力规模的提升被逐渐放大。
远距离依赖
众所周知,由于感受野有限无法捕获有效的长距离依赖,CNN 在高层视觉语义信息中相对缺乏特征的连贯性来关联实例,导致在大尺寸目标对象上的分割结果堪忧。尽管可以通过其他方式(见上)辅助,但效果铁定不如 Transformer 这种开场即全局来得更加直接。
空间分辨率
Transformer 的另一个特性便是能够自始至终保持输入和输出的空间分辨率不变,这对于语义分割这种非常注重空间细节信息的密集型预测分类任务来说是非常有用的,在一定程度上可以缓解 CNN 多次下采样所导致的小目标信息损失的问题。
不过,Transformer 对于底层特征的提取其实并不擅长,容易导致对小目标的错误预测,这也是后面为什么涌现出这么多 CNN + Transformer 的混合双打架构,当然还有其他的益处,例如降低计算量。
总的来说,找到一个合适的点去开展并不难,关键是要摆脱思维的禁锢,下面给大家举几个示例,更多的研究方向可参考前面"语义分割扩展"章节。
- 当感觉定量结果上已经难以再去提升时,可以尝试从定性角度出发,譬如从改善图像分割边缘这个点入手,虽然从数值指标上几乎不会有什么差距,但可视化结果展示出来的分割边界就是个极大的优势,不失为一个亮点去宣传。
- 当感觉主流的数据集已经趋于饱和时,尝试转换个思路去突破,例如大家都做白天,你便可以做夜视场景;大家都做基于陆地的场景解析,你可以做基于水下的场景分割;大家都在做基于晴天的场景,你便可以尝试做风雷雨雪等极端场景下的分割等等;甚至自己还可以开辟一个新的方向出来开源新数据集。
- 正所谓它山之石可以攻玉,平常一定要多阅读积累,广泛涉猎相关领域的知识,不求精通点到为止。下面以半监督学习为例,其核心问题在于如何有效利用无标注样本,作为有标签样本的补充,以提升模型性能。一种很容易想到的方法便是借助知识蒸馏的方法,首先基于另一半有标签的数据训练处一个模型;随后基于这个训练好的模型为剩余另一半没有带标签的数据提供标签,即伪标签;最后再用这些伪标签去训练模型。常规的做法是通过样本筛选只保留高置信度预测的结果,这种做法会存在几个:
- 如何保证最终筛选出来的伪标签就是高质量的?
- 如何保证被剔除掉的数据就是真正的无效?
如果我们将大量的无标签数据排除在训练过程外,便会导致模型训练不充分。此外,如果模型不能较好地预测某些困难类别,那么后面就更难为该类别的无标签像素分配准确的伪标签,从而无法获得提升,形成「马太效应」。因此,有效的解决了包括不可靠样本在内的全部无标签数据,理论上一定是可以提升算法精度的,这便是 U2P 所提倡的。此前如果你有涉猎到目标跟踪的算法,你会惊奇的发现这其实跟 ByteTrack 有着异曲同工之妙,有时候思想的火花一碰撞便能产生美妙的灵感。
写在最后,让我们展望下 2023 年,这里笔者斗胆预测一波,明年开始,一堆 Diffusion Model 在语义分割的应用必将遍地开花。同 Transformer 一般,尽管这两年涌现出非常非常多的模型,但绝大多数都没有本质上的创新,几乎是把 CNN 那套 多尺度 + 局部上下文 + 全局上下文 理论套成壳搬上荧幕再重演一遍。现在原始的 DDPM 等扩散模型内部架构还是基于原始的 U-Net,可以预计不远的将来必将又是在 Diffusion Model 这层外壳上套用 Transformer 或 CNN 再进行各种魔改重走一遍老路——"Deep learning is brute force, which is equivalent to evil."
写在最后
如果您也对人工智能和计算机视觉全栈领域感兴趣,强烈推荐您关注有料、有趣、有爱的公众号『CVHub』,每日为大家带来精品原创、多领域、有深度的前沿科技论文解读及工业成熟解决方案!欢迎扫码与我交流,一起探讨更多有趣的话题!