AI算法说-图像分割

描述

1、简介

算法

图像分割任务,即算法需要预测出图片中的每一个像素点的类别。它解决了“图像中每一个像素点是什么类别的问题”。上图所示了一个自动驾驶场景下的图像分割效果,图片中相同的颜色表示相同的类别,不同的颜色表示不同的类别。

图像分割方法种类繁多,包括传统的基于阈值、边缘和区域的方法,以及近年来基于深度学习的方法,如全卷积网络(FCN)、编码器-解码器网络、视觉注意力机制、对抗生成网络等。在图像分割任务中,需注意逐像素标注方式和实例级别标注方式的区别,并需要针对不同的应用场景选择适合的评价指标和数据集。

2、发展历程

算法

2014年,J. Long, E. Shelhamer, and T. Darrell等人发表了“Fully convolutional networks for semantic segmentation”了算法(https://arxiv.org/pdf/2001.05566.pdf),即FCN算法。FCN的核心思想是将传统的全连接层转变为卷积层,并且采用反卷积技术将最后一层卷积输出映射回原始图像大小。

2015年,O. Ronneberger, P. Fischer, and T. Brox等人发表了“U-net: Convolutional networks for biomedical image segmentation”,即U-net算法。U-net的特点是通过一系列卷积、池化和反卷积操作实现了图像分割,并在特征提取过程中保留了高分辨率的细节信息。

2016年,V. Badrinarayanan, A. Kendall, and R. Cipolla等人发表了“Segnet: A deep convolutional encoder-decoder architecture for image segmentation”,即SegNet算法。SegNet的特点是采用了轻量级卷积神经网络结构,并设计了一种基于池化索引的解码器,能够实现快速而准确的图像分割。

2017年,L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille等人发表了“Semantic image segmentation with deep convolutional nets and fully connected crfs”,即DeepLab算法,后续陆续推出DeepLabV2和DeepLabV3等算法。该算法首次在CNN中引入了完全连接的条件随机场(CRFs),该CRF模型建模了图像的全局上下文,通过允许标签之间的相互作用来获得更准确的分割结果。

2018年,L.-C. Chen, A. Hermans, G. Papandreou, F. Schroff, P. Wang, and H. Adam等人发表了“Masklab: Instance segmentation by refining object detection with semantic and direction features”,即Mask-Lab算法。该算法的主要思想是,在卷积神经网络中添加实例感知模块,以分离不同对象的实例。

2019年,Y. Yuan, X. Chen, and J. Wang等人发表了“Object-contextual representations for semantic segmentation”,即HRNet算法。HRNet算法的主要思想是在多个分辨率上进行特征提取,同时跨层连接以消除分辨率差异和信息损失。

2020年,B. Zoph, G. Ghiasi, T.-Y. Lin, Y. Cui, H. Liu, E. D. Cubuk, and Q. V. Le等人发表了“Rethinking pre-training and self-training”,即EfficientNet+NAS-FPN算法。该算法的核心思想是在无标签数据上进行预训练和自训练,从而提高有标签数据的分割性能。

2020年之后,图像分割算法的性能基本达到了精度天花板,很多学者转做实例分割和全景分割。

3、应用场景

算法

自动驾驶-目标分割可以应用在自动驾驶场景中完成静态障碍物和动态障碍物的精准分割,从而构建一个语义地图传递给后面的规划和控制模块。

交互标定-利用目标算法可以基于几个点快速的标注目标物体,这样可以极大的提升人员的标注成本。

人像抠图-人像抠图功能在我们的日常生活中有着大量的应用,最常用的就是各种远程会议软件上面的抠图功能。该算法基本能达到扣头发丝的精度。

医学图像分析-图像分割算法可以针对人体各器官进行精细的分割,协助医生完成一些医学诊断的问题。该功能已经在一些医院有所应用。

4、算法类别

算法

对于图像分割任务而言,我们可以将其细分为语义分割、实例分割和全景分割三种类别。如上图所示,输入的是一张街拍场景的图片。语义分割任务只能区分不同的类别,无法区别相同的类别。实例分割任务不仅可以区分不同的类别,也可以区分相同类别中的不同个数,如图片中的行人和车辆 ,不同的人用不同的颜色进行显示。全景分割则是语义分割和实例分割的交集。

语义分割是区分同类物体的分割任务,实例分割是区分不同实例的分割任务,而全景分割则同时达到这两个目标。全景分割既可以区分彼此相关的物体,也可以区分它们在图像中的位置,这使其非常适合对图像中所有类别的目标进行分割。

5、经典算法剖析

5.1 UNet算法详解

算法

算法简介:

UNet是一种基于卷积神经网络的图像分割算法,它于2015年由Olaf Ronneberger等人提出。与FCN等分割算法不同,UNet采用了一种新的网络结构,能够更好地处理物体边缘和小的物体。

创新点:

UNet算法的创新点在于其网络结构,即将传统的编码器-解码器架构与跳跃连接技术相结合,形成了一个“U”形的网络结构。UNet算法流程:1. 图像编码:首先,通过卷积层实现图像特征的提取和缩小,构建编码器。采用类似于VGG网络的结构,通过不断重复卷积、下采样的过程,将输入的图像逐渐缩小,并提取出不同尺度的特征。2. 图像解码:构建解码器,是为了逐步将图像还原回原始的分辨率。UNet算法中的解码器采用了镜像反卷积操作,逐步还原特征图的尺寸,也通过不断重复卷积、上采样的过程,将特征融合到更高的分辨率上。3. 跳跃连接:UNet算法引入了跳跃连接(skip connection),将编码层和对应的解码层中的特征图进行连接。这种方式能够将底层的语义信息(例如边缘信息)直接提供给解码器,有利于保留物体边缘信息,同时也有利于消除某些不必要的噪声。4. 输出结果:通过在UNet网络的最后一层卷积后接一个含有类别数+1个通道的全连接层,并使用softmax函数得到像素分类的概率值,就可以生成语义分割图了。总的来说,UNet算法采用了跳跃连接,能够更好地保留图像的信息,使得算法更适用于分割小物体和物体之间的边界。该算法在实际应用中被广泛使用,特别是在医学图像分割领域,如肝脏分割和胰腺分割等。

5.2 Mask-RCNN算法详解

算法

简介:

Mask RCNN是一种深度学习图像分割算法,由FAIR(Facebook AI Research)于2018年提出。它是RCNN系列算法的最新版本,在Faster RCNN和Mask RCNN的基础上加入了全新的分割网络。算法创新点:1. Mask RCNN是第一种能够实现目标检测和实例分割的统一框架算法,不需要额外的分割网络; 2. Mask RCNN通过于Faster RCNN相似的两个分支结构,检测出每个物体的对象边界框,并且对其中的每个对象实现语义分割; 3. Mask RCNN创新性地加入了RoIAlign模块,可以以像素级别的准确度提取ROI特征; 4. Mask RCNN在训练时采用了多尺度训练和水平翻转等数据增强技术,提高了鲁棒性; 5. Mask RCNN利用了实例分割结果来辅助目标检测,提高了检测的效率和准确性。算法步骤:1. 首先,在特征提取器(如ResNet)的基础上,添加一个RoI pooling层,用来提取每个BoundingBox内的特征向量; 2. 然后,进入到Proposal Generation 阶段,使用RPN来产生多个区域框,对每个区域框进行候选区域的分类(物体还是非物体)和边界框回归(Bounding Box Regression); 3. 在Proposal Refinement(即Detection)阶段,结合Proposal Generation的结果,利用Fast RCNN的方法,先将每个候选区域的特征向量转换成一个固定尺寸的特征图(由RoI pooling提取),然后通过全连接层来实现分类和位置回归; 4. 最后,加入Mask RCNN的核心部分,即Mask Generation阶段。我们以RoIAlign代替RoI Pooling,对每个RoI内的坐标点都采用双线性滤波,从而在ROI范围内等距采样得到RoIAlign Feature Map。使用一个分支来预测分割,并对每个ROI生成一个mask.

6、评估指标

6.1 定量指标1.精确度(Accuracy):分割正确的像素数占总像素数的比例,即TP+TN/(TP+TN+FP+FN),其中TP为真正例,TN为真反例,FP为假正例,FN为假反例。2.召回率(Recall):正确分割出的像素数占实际应分割像素数的比例,即TP/(TP+FN)。3.精度(Precision):正确分割出的像素数占分割出的像素总数的比例,即TP/(TP+FP)。4.F1值(F1-score):综合考虑Precision和Recall,即2*Precision*Recall/(Precision+Recall)。5.欧拉距离(Euclidean distance):分割图像与真实分割图像之间的欧拉距离。6.交并比(IoU):分割图像与真实分割图像之间的重叠像素数占并集像素数的比例,即TP/(TP+FP+FN)。7.像素错误率(Pixel error rate):错误分割像素数占总像素数的比例,即FP+FN/(TP+TN+FP+FN)。8.平均准确度(Mean accuracy):分类正确的像素数占各类应分割像素数的平均值,即(∑TP_i)/(∑(TP_i+FP_i)),其中i为类别。9.平均交并比(Mean IoU):所有类别的IoU的平均值,即(∑TP_i)/(∑(TP_i+FP_i+FN_i)),其中i为类别。

算法

6.2 定性指标

1.视觉效果(Visual quality):分割结果能否符合人的感受,如边界清晰、区域连续等。2.时间复杂度(Time complexity):计算分割结果所需的时间和计算复杂度,对于实时应用来说尤为重要。3.空间复杂度(Space complexity):占用内存的大小,对于大型图片和数据量来说尤为重要。4.可扩展性(Scalability):算法的扩展性,能否适应不同规模的数据集和不同的场景。5.鲁棒性(Robustness):算法的稳定性和适应性,对于噪声和异常情况的处理能力。

算法

7、开源数据集

1. Cityscapes-https://www.cityscapes-dataset.com/

Cityscapes是一个针对城市街景图像分割的大规模数据集,包含了街景照片、标记为19个不同类别的图像分割或实例分割等多种图像数据类型。

2. COCO-http://cocodataset.org/#overview

COCO是一个通用的目标检测、图像分割和实例分割数据集,包含了各种场景下的图像,涵盖了多种物体类别。

3. PASCAL VOC-http://host.robots.ox.ac.uk/pascal/VOC/

PASCAL VOC是一个流行的计算机视觉数据集,包含了20多个物体类别的图像样本,以及这些物体的位置标记。

4. ADE20K-https://groups.csail.mit.edu/vision/datasets/ADE20K/

ADE20K是一个基于社区贡献的大规模场景理解和图像分割数据集,其中包含了超过20,000张图像和类别标注。

5. BSDS500-https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/segbench/

BSDS500是一个用于边缘检测、分割和显着性检测的数据集,包含了几百张图像和像素级标注。

6. CamVid-http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/

CamVid是一个针对道路场景的图像分割数据集,包含了对不同类别的道路元素(如汽车、行人等)的标记。

7. SUN RGB-D-https://rgbd.cs.princeton.edu/

SUN RGB-D是一个室内场景3D图像分割数据集,其包括了带深度信息的RGB图像,用于分割物体、家具、地板等不同场景中的元素。

8. MS COCO Panoptic Segmentation-https://cocodataset.org/#panoptic-2018

MS COCO Panoptic Segmentation是一个多种物体检测图像分类和实例分割任务的数据集。其包含80类物体和133k张图像。

算法

8、热门论文

1. Fully Convolutional Networks for Semantic Segmentation-https://arxiv.org/abs/1411.4038 简介:本文提出了一种基于完全卷积网络的图像分割方法,能够同时获得像素级别的分类和空间信息。

2. U-Net: Convolutional Networks for Biomedical Image Segmentation-https://arxiv.org/abs/1505.04597 简介:该文介绍了一种特殊结构的U-Net卷积神经网络用于生物医学图像分割。U-Net结构的主要特点是在解码阶段引入了跳跃连接,从而提高了分割的质量。

3. Mask R-CNN-https://arxiv.org/abs/1703.06870 简介:Mask R-CNN是一种基于Faster R-CNN的图像分割模型,相比于其他模型,Mask R-CNN能够在不损失精度的情况下在检测任务上同时实现像素级别的分割。

4. DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs-https://arxiv.org/abs/1606.00915 简介:本文提出了一种语义图像分割方法DeepLab,该方法通过引入扩张卷积和CRF的全连接层,能够提高分割结果的准确性。

5. DenseNet: Densely Connected Convolutional Networks-https://arxiv.org/abs/1608.06993 简介:本文介绍了一种新型的卷积神经网络DenseNet,并将其成功应用于图像分类和物体检测等任务中。DenseNet的主要特点是将每个层的输入与前面所有层的输出相连接,从而提高了信息流的利用效率。

6. FC-DenseNet: Fully Convolutional DenseNets for Semantic Segmentation-https://arxiv.org/abs/1611.09326 简介:FC-DenseNet是一种基于DenseNet的图像分割模型,通过将DenseNet的结构应用于分割任务中,从而提高了分割的准确性和效率。

7. PSPNet: Pyramid Scene Parsing Network-https://arxiv.org/abs/1612.01105 简介:本文提出了一种新的分割模型PSPNet,该模型引入了金字塔池化模块,能够在不同尺度下提取特征信息,并增加了局部和全局上下文的信息。

8. Attention U-Net: Learning Where to Look for the Pancreas-https://arxiv.org/abs/1804.03999 简介:Attention U-Net是一种关注梯度信息的全卷积网络,它通过自适应上下文注意力机制,可以更加准确地实现器官分割任务。

9. Squeeze-and-Excitation Networks-https://arxiv.org/abs/1709.01507 简介:本文提出了一种新型的卷积神经网络Squeeze-and-Excitation Networks(SENet),该网络通过增加逐通道的注意力机制,提高了信息的利用效率和精度。

10. UNet++: A Nested U-Net Architecture for Medical Image Segmentation-https://arxiv.org/abs/1807.10165 简介:UNet++是一种基于U-Net的嵌套结构图像分割方法,通过逐级连接不同大小的U-Net,可以更加准确地获取不同尺度的特征信息。

算法

9、热门仓库

1. Mask R-CNN - https://github.com/matterport/Mask_RCNN

简介:一个基于Faster R-CNN的全卷积神经网络,用于对图像中目标进行实例分割,支持多方向的边界框和掩膜生成。

2. DeepLab - https://github.com/tensorflow/models/tree/master/research/deeplab

简介:一个基于深度卷积神经网络的神经图像分割框架,支持多尺度和多特征融合,能处理大尺度和高分辨率图像。

3. U-Net - https://github.com/zhixuhao/unet

简介:一个专用于医学图像分割的神经网络模型,结构简单,训练效果优秀,已广泛应用于医学图像分析领域。

4. FCN - https://github.com/shelhamer/fcn.berkeleyvision.org

简介:一个基于Fully Convolutional Network的全卷积神经网络模型,用于对图像进行像素级别的分割,支持多分辨率输入和多尺度融合。

5. PSPNet - https://github.com/hszhao/PSPNet

简介:一个基于Pyramid Scene Parsing Network的图像分割模型,通过多尺度和多分辨率的金字塔池化来获取图像的全局和局部信息,进行像素级别的分割。

6. Mask-RCNN-Benchmark - https://github.com/facebookresearch/maskrcnn-benchmark

简介:一个由Facebook Research开发的Mask R-CNN库,使用PyTorch框架实现,支持多GPU并行训练和测试,训练速度快、效果好。

7. HRNet-Semantic-Segmentation - https://github.com/HRNet/HRNet-Semantic-Segmentation

简介:一个基于高分辨率网络的图像分割模型,支持多尺度融合和多分支特征提取,可用于处理高分辨率图像。

8. TensorFlow-Segmentation - https://github.com/divamgupta/image-segmentation-keras

简介:一个使用TensorFlow框架实现的图像分割库,提供了多种经典的分割网络模型,简单易用。

9. PyTorch-Segmentation - https://github.com/qubvel/segmentation_models.pytorch

简介:一个使用PyTorch框架实现的图像分割库,支持多个经典的分割网络模型和多种损失函数,适用于各种应用场景。

10. Semantic-Segmentation-Suite - https://github.com/GeorgeSeif/Semantic-Segmentation-Suite

简介:一个基于深度卷积神经网络的图像分割工具包,支持多个分割网络模型和多种损失函数,具有高效和易用的特点。

11. PaddleSeg-https://github.com/PaddlePaddle/PaddleSeg

简介:PaddleSeg是百度维护的一个基于PaddlePaddle开发的有关图像分割任务的一个高性能部署的工具集,里面包含众多性能优异的图像分割算法。12. mmsegmentation-https://github.com/open-mmlab/mmsegmentation

简介: mmsegmentation是一个基于Pytorch构建的一个开源语义分割库,里面集成了很多经典的语义分割算法,研究人员可以用来快速的开发自己新的算法。

算法

审核编辑 :李倩

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分