本文经授权转载自机器之心(almosthuman2014),来源:medium,作者:Jakub Czakon,编译:小舟、Racoon、张倩,未经授权禁止二次转载与摘编。
本文长度为2400字,建议阅读6分钟
本文带你了解计算机视觉的科研成果、资源和面临困境。
作为计算机视觉的一个热门方向,每年都会有很多同学入坑图像分割。这一领域已经有了哪些研究成果、资源?目前面临什么困境?还有哪些问题值得研究?本文将重点讨论这些问题。
初识图像分割
顾名思义,图像分割就是指将图像分割成多个部分。在这个过程中,图像的每个像素点都和目标的种类相关联。图像分割方法主要可分为两种类型:语义分割和实例分割。语义分割会使用相同的类标签标注同一类目标(下图左),而在实例分割中,相似的目标也会使用不同标签进行标注(下图右)。
图源:Anurag Arnab, Shuai Zheng et. al 2018"Conditional Random Fields Meet Deep Neural Networks for Semantic Segmentation"
图像分割模型的基本架构包括编码器与解码器。编码器通过卷积核提取图像特征。解码器负责输出包含物体轮廓的分割蒙版。
图源:Vijay Badrinarayanan et. al 2017"SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation"
大多数图像分割架构都具有这样的结构或是其变体,比如以下几种:
U-Net
U-Net 最初是一个用于分割生物医学图像的卷积神经网络。它的架构由两部分组成,左侧是提取路径,右侧是扩展路径。提取路径用来捕获上下文,扩展路径用来精准定位。提取路径由两个 3*3 的卷积组成。卷积后经过 ReLU 激活和用于降采样的 2*2 最大池化计算。
图源:Olaf Ronneberger et. al 2015"U-net architecture image segmentation"
FastFCN——快速全连接网络
在快速全连接网络(FastFCN)架构中,联合金字塔上采样(Joint Pyramid Upsampling, JPU)模型代替了消耗大量存储空间和时间的扩张卷积。该架构在核心部分使用了全连接网络,并应用 JPU 进行上采样。JPU 将低分辨率特征图上采样为高分辨率特征图。
图源:Huikai Wu et.al 2019"FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation"
Gated-SCNN
Gated-SCNN 架构包括一个双流卷积神经网络结构。在该模型中,使用一个单独的分支来处理图像的形状信息。该形状流被用来处理边界信息。
图源:Towaki Takikawa et. al 2019"Gated-SCNN: Gated Shape CNNs for Semantic Segmentation"
DeepLab
在 DeepLab 架构中,带有上采样滤波器的卷积被用于密集预测型任务。多尺度的物体分割是通过空洞空间金字塔池化(atrous spatial pyramid pooling)完成的。最后,使用 DCNN 来提升物体边界的定位精准度。通过在上采样滤波器过程中插入 0 或对输入特征图稀疏采样,来实现空洞卷积。
图源:iang-Chieh Chen et. al 2016"DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs"
Mask R-CNN
在 Mask R-CNN 架构中,使用边界框和将图片分割成一系列像素点的语义分割来对物体进行分类和定位。每个兴趣区域会得到一个分割蒙版。最终还会输出类标签和边界框。
图源:Kaiming He et. al 2017"Mask R-CNN"。
下图为在 COCO 测试集上实现的分割效果。
图源:Kaiming He et. al 2017"Mask R-CNN"
图像分割的损失函数、数据集、框架
语义分割模型在训练过程中通常使用简单的跨类别熵损失函数。但是,如果你想获得图像的细节信息,则需要更高级的损失函数。
损失函数
1.Focal 损失
该损失是对标准的交叉熵评价函数的改进。通过对其变形实现,以使分配给分好类别样本的损失是低权重的。最终,这确保了没有分类失衡。在该损失函数中,随着正确类别置信度的增加,交叉熵损失随比例因子逐渐衰减为零。比例因子会在训练时自动降低简单样本的贡献,更注重复杂的样本。
2.Dice 损失
Dice 损失通过计算平滑的 dice 系数函数得到。该损失是分割问题中最常用的损失函数之一。
3.IoU-平衡损失
IoU-平衡分类损失旨在增加高 IoU 样本的梯度同时减少低 IoU 样本的梯度。通过这种方法,提升机器学习模型的定位准确率。
4. 边界损失
边界损失的一种变体被用于高度不平衡的分割任务。这种损失的形式是一种空间轮廓而非区域的距离度量。此方式解决了高度不平衡任务中区域损失带来的问题。
5. 加权交叉熵
在交叉熵的一种变体中,所有正向的样本都按一定的系数加权,用于类不平衡的情况下。
6.Lovász-Softmax 损失
该损失基于凸 Lovasz 扩展的子模块损失,直接优化神经网络中的平均 IoU。
另外还有几种值得注意的损失:
TopK 损失:用来确保网络在训练过程中专注于复杂样例;
距离惩罚 CE 损失:用在那些难以分割的区域为网络提供指引;
灵敏度-特异性(SS)损失:计算特异性和灵敏度均方差的加权和;
Hausdorff 距离(HD)损失:通过卷积神经网络估计 Hausdorff 距离。
数据集
图像分割可能用到的数据集有:
Common Objects in COntext—Coco Dataset
PASCAL Visual Object Classes (PASCAL VOC)
The Cityscapes Dataset
The Cambridge-driving Labeled Video Database—CamVid
框架
在图像分割领域,可用的框架有如下几种:
FastAI 库:给出一张图像,该库能为图像中的物体创建蒙版;
Sefexa 图像分割工具:Sefexa 是一个用于图像分割、图像分析、创造基本事实的免费的半自动工具;
Deepmask:Facebook 研究中心的 Deepmask 是 DeepMask 和 SharpMask 的 Torch 实现;
MultiPath:它是一个来自"用于对象检测的多路径网络"的目标检测网络的 Torch 实现;
OpenCV:一个有超过 2500 种的优化算法的开源计算机视觉库;
MIScnn:一个医学图像分割的开源库。它仅需数行代码就能用 SOTA 卷积神经网络和深度学习模型建立路径;
Fritz:Fritz 提供了包括移动设备中的图像分割工具在内的几种计算机视觉工具。
路在何方?
作为一个新入坑的小白,如果以上内容你都掌握了,那恭喜你可以进入下一阶段。但在进阶过程中,有人表示自己遇到了问题:
在这个问题的讨论区,我们可以看到关于"语义分割这一研究方向的讨论,问题、出路都有人指出,可以为入坑图像分割的小白提供一些洞见。"
综合来看,大家认为语义分割目前存在以下问题:
研究进展趋缓,甚至已进入瓶颈期,提升 0.5 mIoU 都非常困难;
数据集受限,少有的几个数据集已经刷到接近天花板;
算力消耗大,学界和一些小型业界团队往往被算力掣肘;
领域内卷,研究同质化严重,很容易被审稿人 diss,不容易中顶会
那么,问题这么多,还有哪些方向值得努力呢?对此,港中文信息工程系助理教授周博磊等资深研究者给出了自己的观点。
周博磊认为,大家之所以觉得语义分割遇到了瓶颈,很大程度上是因为没找对问题。除了一些已经被广泛研究的问题之外,"如何去进行小样本物体检测与分割,如何检测和分割小件物体等都是目前语义分割和物体检测需要去克服的难题。之所以大家没有注意到这些本质问题,是因为现有的数据库把这些问题都规避掉了。"
其他答主也指出了一些尚待研究的方向,比如轻量级语义分割、点云分割、实时分割、如何更有效地利用数据等。喜欢挑战的同学还可以去啃全监督语义分割,但需要丰富的机器资源。
参考链接:
https://towardsdatascience.com/image-segmentation-in-2020-756b77fa88fc
https://www.zhihu.com/question/390783647?utm_source
编辑:于腾凯