计算机视觉的三大基础任务简介
文章目录[隐藏]
目前本人在浙大进修,感受到AI+VIS的广泛应用前景。之前已经写了博客简单介绍过自然语言处理(NLP)的内容。这次则从对图像的理解出发,简单介绍计算机视觉。
计算机视觉的概念,与机器视觉的区别
计算机视觉(computer vision)旨在识别和理解图像/视频中的内容。
与之类似的词汇是机器视觉(machine vision), 但是机器视觉更偏重于计算机视觉技术的工程应用,而计算机视觉则更偏向学术的算法研究。简单的说,计算机视觉相当于设计API,机器视觉相当于调用API开发软件。如果只是就图像内容应如何理解的一般性讨论,则两个词可以混用。
计算机视觉的顶级会议有CVPR、ICCV、和ECCV,此外ICLR也有不少计算机视觉论文。顶级期刊有IJCV和TPAMI。CVPR年投稿量从2020年就超过1万篇,录用量在2022年也超过了2000,可见火热程度。由于计算机视觉领域发展十分迅速,不论身处学术界或产业界,通过阅读顶级会议和期刊论文了解计算机视觉的最近研究成果都十分必要。
计算机视觉的基础任务
虽然说计算机视觉的目的是理解图像/视频中的内容,但怎么算是理解,需要有具体的任务进行描述。计算机科学家总结了计算机视觉的基础任务,包含如下三大类,分别是:
- 图像分类(Image Classification)
- 目标识别:目标定位(Object Localization)-- 目标检测(Object Detection)
- 图像分割:语义分割(Semantic Segmentation)-- 实例分割(Instance Segmentation)--全景分割(Panoptic Segmentation)
以上三类基础任务被统一归入了计算机视觉的“图像理解”范畴。这是因为现在计算机视觉还有很多其他应用方向,比如图像生成(超分辨率、文本to图像、图像去噪、风格迁移,视频生成),图像检索(以图搜图、以文搜图,视频搜索)图像序列(目标跟踪、图像序列分类、步态识别),多模态(与NLP结合,与专业领域知识结合等)。但是后面所说这些应用方向,无一不是以图像理解为基础的。因此必须对图像理解的三大任务有所了解。
图像分类
图像分类主要解决图片“是什么?”的问题,即给定一张图或一段视频,判断里面包含什么类别的目标。图像分类作为机器视觉最基础的问题,是早期人工智能主要的挑战任务。图像分类的常用数据集是ImageNet,包含1400万张图像和1万多个类别。2012年,采用CNN构建的深度学习网络ALexNet获得了ImageNet图像识别比赛冠军,被认为是深度学习推广元年。现今除了CNN,来自NLP的Transformer架构的深度学习网络体现了更强性能。
图像分类作为整个计算机视觉大厦的基础,长期处于重要的位置。自2017年ImageNet中大部分机器学习模型都取得了95%以上的准确率后,针对普通图像的图像分类已不在是重点。近年来主要研究集中于小样本数据和风格迁移后的图像分类等细分领域。
目标识别:目标定位(Object Localization)-- 目标检测(Object Detection)
在图像分类的基础上,我们还想知道目标(比如苹果)具体在另一张图(比如一张静物画)的什么位置。在计算机视觉中,目标物体的位置通常是以包围盒的(bounding box)形式标出。从描述中我们可以发现,要完成目标定位至少要完成两个子任务,一个子任务是判断什么是目标物体,通常要用图像分类方法将图片分为前景(目标物体)和背景;另一个子任务是判断目标物体位置。
随着计算机是觉的不断发展,目标定位(Object Localization)这一名词逐渐为目标检测(Object Detection)所取代。在目标定位中,通常只有一个或固定数目的目标,而目标检测更一般化,其图像中出现的目标种类和数目都不定。也就是说,定位与检测的主要区别在于分类这一子任务的复杂性。如果只需要判断一种目标物体的位置,即其分类子任务是一个二分类任务(只需要判断前景和背景),那就是目标定位。如果还需要进一步知道目标物体是什么(是人?是车?是猫?是狗?等等),即其分类子任务是一个多分类任务,那就是目标检测。
显然,目标检测是比目标定位更具挑战性的任务,也是现在计算机视觉领域的研究热点之一。现今常用的数据集是微软的COCO,其包含80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。
关于目标检测具体的方法,则有两种思路:一是两级式框架,先判断图像的颜色、纹理、面积、位置等,合并相似的像素,得到一些候选区域,然后用滑动窗口依次把所有候选区域匹配一遍。典型如Fast R-CNN。二是单级式框架,就是不预先生成候选区域,而是将图像简单划分为网格,然后直接输出分类/回归结果,典型如YOLO1,2,3,4,5。但无论何种思路,还没有哪个目标检测模型能在COCO上达到95%这样准确率。
目标检测在特定领域中有一些重要应用,例如人脸检测、行人检测、文本检测、交通信号和遥感目标检测等。这都需要针对特定问题进行特殊处理和优化。除此以外,融合多种数据源进行目标检测也是未来的发展趋势。例如融合文本信息、激光雷达和图像等多模态数据进行目标检测,对于自动驾驶、无人机、图像数据查询等非常重要。关于目标检测的更多介绍可以参考这篇综述A Survey of Modern Deep Learning based Object Detection Models。
图像分割:语义分割(Semantic Segmentation)-- 实例分割(Instance Segmentation)--全景分割(Panoptic Segmentation)
图像分割是目标检测更进阶的任务,它需要检测到目标物体,然后把目标物体从原始图像中分出来。如同从目标定位到目标检测的升级过程,图像分割的主要研究方向也经历了从语义分割到实例分割的迭代。
先说语义分割,语义图像分割的目标是给图像中的每个像素都贴上对应的一类所代表的内容的标签(stuff)。其输出的最终结果有两种呈现方式:区域掩码和轮廓线。区域掩码就是直接将分好类别的像素用区域掩码表示,如果对区域掩码指定颜色,那么输出的结果将可以看到一片一片的色块;轮廓线是在区域掩码的基础上,将区域边缘用一系列点表示成一个闭合多边形。从这个角度上看,语义分割能够使用细致轮廓线将目标物体从原始图像中圈出来,而不是像目标检测那样简单地用方形边界框标记。必须指出的是,语义分割虽然区分了色块,但并一定不知道这个色块可能代表什么物体(thing),这是与目标检测大不相同的地方。
语义分割的典型应用如从人脸识别、手写字符识别、智能抠图、替换视频会议时的背景等“小工具”,到汽车自动驾驶,医学影像自动识别等专业应用不一而足。语义分割的具体方法,从简单的设置阈值,边缘检测,聚类,区域生长再到复杂一点的方法诸如主动轮廓线。代表性深度学习模型是FCN(2014),DeepLab系列等。
语义分割是是从像素级别来理解图像的,它只能区分语义层面的前景和背景内容(stuff),不能区分属于相同类别的不同实例。例如,当图像中有多只羊时,语义分割会三只羊整体的所有像素预测为“羊”这个类别,将其与背景区分开。但它不能区分出哪些像素属于第一只羊、哪些像素属于第二只羊。为了令计算机视觉更加接近人的理解,计算机视觉的研究人员提出了实例分割的概念,要求不仅能区分羊所占的像素,还能够区分目标物体(thing)。
因为结合了语义分割和目标检测两方面的功能,实例分割的实现则更复杂一些。具体实现思路可以分为两条:先目标检测再语义分割(也被称为自下而上方法),和先语义分割再目标检测(也被称为自下而上方法)。前者先用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同包围盒内进行逐像素标记,典型如DeepMask,DeepSnake等 。后者首先进行像素级别的语义分割,再通过聚类、度量学习等手段区分不同的实例,典型如Mask R-CNN, Polar Mask。
最后还有一个2018年以后提出的新概念,全景分割(Panoptic Segmentation)。全景分割将语义分割(为每个像素分配一个类标签)和实例分割(检测并分割每个对象实例)的典型任务统一起来,旨在同时分割实例层面的目标(thing)和语义层面的背景内容(stuff),将输入图像中的每个像素点都赋予类别标签和实例ID,生成全局的,统一的分割图像。全景分割在模拟人类视觉系统的道路上可谓又进一步。
全景分割在具体实现上有三种方法。1.thing和stuff使用不同的分支预测,其中thing的分割基于目标检测边界框,如Panoptic FPN。2.thing和stuff使用不同的分支预测,先预测语义再生成实例,不需要先进行目标检测,更不需要依赖边界框,如Panoptic-DeepLab。3.thing和stuff完全使用相同的结构进行预测,如Panoptic-FCN。
因为是目标检测的进阶任务,所以语义分割、实例分割、全景分割也通常使用COCO数据集进行训练。当然还有别的数据集,具体可以参阅这篇文章。关于图像分割的机器学习模型的更多介绍可以查阅这篇综述:Image Segmentation Using Deep Learning: A Survey。