计算机视觉(Computer Vision)是人工智能 (AI) 的一个领域,是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提供建议。 如果说人工智能赋予计算机思考的能力,那么计算机视觉就是赋予发现、观察和理解的能力。
1 计算机视觉的工作原理
计算机视觉需要大量数据。 它一遍又一遍地运行数据分析,直到能够辨别差异并最终识别图像为止。例如,要训练一台计算机识别汽车轮胎,计算机视觉需要为其输入大量的轮胎图像和轮胎相关数据,供其学习轮胎差异和识别轮胎,尤其是没有缺陷的轮胎。
这个过程会用到两种关键技术:一种是机器学习,叫做深度学习,另一种是卷积神经网络 (CNN)。机器学习使用算法模型,让计算机能够自行学习视觉数据的上下文。如果通过模型馈入足够多的数据,计算机就能"查看"数据并通过自学掌握分辨图像的能力。算法赋予机器自学的能力,而无需人类编程来使计算机能够识别图像。CNN 将图像分解为像素,并为像素指定标记或标签,从而使机器学习或深度学习模型能够"看"到物体。它使用标签来执行卷积运算(用两个函数产生第三个函数的数学运算)并预测它"看到"的东西。 该神经网络运行卷积运算,并通过一系列迭代检验预测准确度,直到预测开始接近事实。 然后它以类似于人类的方式识别或查看图像。就像人类辨别远距离的图像一样,CNN 首先辨别硬边缘和简单的形状,然后一边运行预测迭代,一边填充信息。 CNN 用于理解单个图像。循环神经网络 (RNN) 以类似的方式在视频应用程序中帮助计算机理解一连串帧中的图片关系。
2 计算机视觉的 8 大任务
2.1图像分类
图像分类是计算机视觉中重要的基础问题。后面提到的其他任务也是以它为基础的。举几个典型的例子:人脸识别、图片鉴黄、相册根据人物自动分类等。
2.2目标检测
目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。
2.3语义分割
它将整个图像分成像素组,然后对像素组进行标记和分类。语义分割试图在语义上理解图像中每个像素是什么(人、车、狗、树…)。
如下图,除了识别人、道路、汽车、树木等之外,我们还必须确定每个物体的边界。
2.4实例分割
除了语义分割之外,实例分割将不同类型的实例进行分类,比如用 5 种不同颜色来标记 5 辆汽车。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界、差异和彼此之间的关系!
2.5视频分类
与图像分类不同的是,分类的对象不再是静止的图像,而是一个由多帧图像构成的、包含语音数据、包含运动信息等的视频对象,因此理解视频需要获得更多的上下文信息,不仅要理解每帧图像是什么、包含什么,还需要结合不同帧,知道上下文的关联信息。
2.6人体关键点检测
体关键点检测,通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要。
在 Xbox 中就有利用到这个技术。
2.7场景文字识别
很多照片中都有一些文字信息,这对理解图像有重要的作用。
场景文字识别是在图像背景复杂、分辨率低下、字体多样、分布随意等情况下,将图像信息转化为文字序列的过程。
停车场、收费站的车牌识别就是典型的应用场景。
2.8目标跟踪
目标跟踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。传统的应用就是视频和真实世界的交互,在检测到初始对象之后进行观察。
无人驾驶里就会用到这个技术。
3目标检测
现在,市面上已经有多种算法来实现此目标检测任务,如R-CNN系列、YOLO系列、SSD系列等。从实现方式上来讲主要有两类:一类是候选区域/窗 + 深度学习分类,也可以叫TWO-STAGE,另一类是基于深度学习的回归方法,也叫ONE-STAGE。接下来,我将简单介绍一下这两类算法的实现方式和优劣。
3.1候选区域/框+深度学习分类—R-CNN系列
R-CNN也就是我们上面讲到的TWO-STAGE模型,R就是Region Proposal(候选区域/边界框),CNN就是常规的卷积神经网络(使用SVM进行分类),两方结合形成的一个模型。
但由于找R的时候,需要选择多个区域,问题就转变成找出可能含有物体的区域/框(也就是候选区域/框,比如选2000个候选框),而这些候选框每个都需要进行CNN提取特征+SVM进行分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s,处理过程如下图。
为了解决R-CNN速度慢的问题,出现了Fast-RCNN,由于R-CNN速度瓶颈的原因在于需要经过多次重复特征提取计算,因此,针对这一块Fast-RCNN做了结构上的优化(共享卷积层),具体如下图。
它不像R-CNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到卷积层上,只需要计算一次特征,剩下的只需要在卷积层上操作就可以了。
但是,Fast-RCNN还是有点慢,它是选择性搜索,找出所有的候选框,这个会非常耗时,因此更加快速的RCNN横空出世—Faster-RCNN,Faster RCNN在Fast RCNN的基础上更进一步,将候选框生成也融入到CNN网络中,使得 候选框生成、特征提取、候选框分类、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练,实现了真正端到端的目标检测。架构如下图所示。
3.2基于深度学习的回归方法
3.2.1 YOLO
先不说YOLO的实现,单纯这个名字就很有意思,叫You Only Look Once(你只看一次),而他的实现方式也很好的体现了他的这个名字。其作者为Joseph Redmon,被称为YOLO之父,其本人在2020年初由于自己的开源算法用于军事和隐私问题,宣布退出CV领域。因此,自YOLOv3之后,其余的YOLO算法都是其他人进行完善而形成的。
尽管Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,利用整张图作为网络的输入,直接在图像的多个位置上回归出这个位置的目标边框,以及目标所属的类别。具体流程如下。
(1) 给个一个输入图像,首先将图像划分成7×7的网格
(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出7×7×2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后使用非极大值抑制(NMS)去除冗余窗口即可。
可以看到整个过程非常简单,不再需要中间的Region Proposal找目标,直接回归便完成了位置和类别的判定。
但是YOLO也存在问题:没有了Region Proposal机制,只使用7×7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。
YOLO各版本介绍
- 2016 年发布的YOLOv2 通过纳入批量归一化、锚框和维度集群改进了原始模型。
- 2018 年推出的YOLOv3 使用更高效的骨干网络、多锚和空间金字塔池进一步增强了模型的性能。
- YOLOv4于 2020 年发布,引入了 Mosaic 数据增强、新的无锚检测头和新的损失函数等创新技术。
- YOLOv5进一步提高了模型的性能,并增加了超参数优化、集成实验跟踪和自动导出为常用导出格式等新功能。
- YOLOv6于 2022 年由美团开源,目前已用于该公司的许多自主配送机器人。
- YOLOv7增加了额外的任务,如 COCO 关键点数据集的姿势估计。
- YOLOv8是YOLO 的最新版本,由Ultralytics 提供。YOLOv8 YOLOv8 支持全方位的视觉 AI 任务,包括检测、分割、姿态估计、跟踪和分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8 的功能。
- YOLOv9 引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 等创新方法。
- YOLOv10是由清华大学的研究人员使用该软件包创建的。 UltralyticsPython 软件包创建的。该版本通过引入端到端头(End-to-End head),消除了非最大抑制(NMS)要求,实现了实时目标检测的进步。
自YOLOv3开始,每一代YOLO算法都在之前的基础上进行完善,可以说现在在目标检测领域中,YOLO是运用的最为广泛的深度学习算法。
3.2.2 SSD
由于YOLO使用整图特征在7×7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合YOLO的思想实现精准一些的定位?SSD(Single Shot MultiBox Detector-单发多框检测)结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了这点。
SSD与YOLO架构比较
SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster R-CNN一样比较精准。SSD在VOC2007上mAP可以达到72.1%,速度在GPU上达到58帧每秒。
3.3总结
当前SSD系列,faster-RCNN、YOLO V3算法都有非常多的人青睐。在这些主流的算法中,TWO-STAGE主要是先通过启发式方法(selective search)或者 CNN 网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类(classification)与回归(bounding box regression),它的优势是准确度高,而ONE-STAGE方法,如YOLO和SSD,其主要思路是均匀地在图片多个层数的特征图上进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快。但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致模型准确度稍低。