计算机视觉五大技术介绍
计算机视觉五大技术
如果有人朝你扔过来一个球,通常你会怎么办?——当然是马上把它接住。
这个问题是不是很弱智?实际上,这一过程是最复杂的处理过程之一,实际上的过程大概如下:首先球进入人类的视网膜,一番元素分析后,发送到大脑,视觉皮层会更加彻底地去分析图象,把它发送到剩余的皮质,与已知的任何物体相比较,进行物体和维度的归类,最终决定你下一步的行动:举起双手、拿起球(之前已经预测到它的行进轨迹)。
上述过程只在零点几秒内发生,几乎都是完全下意识地行为,也很少会出差错。因此,重塑人类的视觉并不只是单一一个困难的课题,而是一系列、环环相扣的过程。
一,计算机视觉技术的概念
正像其它学科一样,一个大量人员研究了多年的学科,却很难给出一个严格的定义,模式识别如此,目前火热的人工智能如此,计算机视觉亦如此。与计算机视觉密切相关的概念有视觉感知(visual perception),视觉认知(visual congnition),图像和视频理解(image and video understanding)。这些概念有一些共性之处,也有本质不同。
从广义上说,计算机视觉就是“赋予机器自然视觉能力”的学科。自然视觉能力,就是指生物视觉系统体现的视觉能力。一则生物自然视觉无法严格定义,再机上这种广义视觉定义又“包罗万象”,同时也不太符合40多年来计算机视觉的研究状况,所以这种“广义计算机视觉定义”,虽无可挑剔,但也缺乏实质性内容,不过是一种“循环式游戏定义”而已。
实际上,计算机视觉本质上就是研究视觉感知问题。视觉感知,根据维基百科(wikipedia)的定义,是指对“环境表达和理解中,对视觉信息的组织、识别和解释的过程”。根据这种定义,计算机视觉的目标是对环境的表达和理解,核心问题是研究如何对输入的图像信息进行组织,对物体和场景进行识别,进而对图像内容给予解释。
计算机视觉(computer vision,CV)是一门研究如何让计算机达到人类那样“看”的学科。更准确点说,它是利用摄像机和电脑代替人眼使得计算机拥有类似于人类的那种对目标进行分割、分类、识别、跟踪、判别决策的功能。
计算机视觉是使用计算机及相关设备对生物视觉的一种模拟,是人工只能领域的一个重要部分,它的研究目标是使计算机具有通过二维图像认知三维环境信息的能力。计算机视觉是以图像处理技术、信号处理技术、概率统计分析、计算几何、神经网络、机器学习理论和计算机信息处理技术等为基础,通过计算机分析与处理视觉信息。
通常来说,计算机视觉定义应当包含以下三个方面:
1,对图像中的客观对象构建明确而有意义的描述;
2,从一个或多个数字图像中计算三维世界的特性;
3,基于感知图像做出对客观对象和场景有用的决策。
作为一个新兴学科,计算机视觉是通过对相关的理论和技术进行研究,从而试图建立从图像或多维数据中获取“信息”的认工智能系统。计算机视觉是一门综合性的学科,其中包括计算机科学和工程、信号处理、物理学、应用数学和统计学,神经生理学和认知科等,同时与图像处理,模式识别,投影几何,统计推断,统计学习等学科密切相关,近年来,与计算机图形学,三维表现等学科也发生了很强的联系。
二,人工智能与计算机视觉
计算机视觉与人工智能有密切联系,但也有本质的不同。人工智能的目的是让计算机去看、去听和去读。图像、语音和文字的理解,这三大部分基本构成了我们现在的人工智能。而在人工智能的这些领域中,视觉又是核心。大家知道,视觉占人类所有感官输入的80%,也是最困难的一部分感知。如果说人工智能是一场革命,那么它将发轫于计算机视觉,而非别的领域。
人工智能更强调推理和决策,但至少计算机视觉目前还主要停留在图像信息表达和物体识别阶段。“物体识别和场景理解”也涉及从图像特征的推理与决策,但与人工智能的推理和决策有本质区别。
计算机视觉和人工智能的关系:
- 第一,它是一个人工智能需要解决的很重要的问题
- 第二,它是目前人工智能的很强的驱动力。因为它有很多应用,很多技术是从计算机视觉诞生出来以后,再反运用到AI领域中去。
- 第三,计算机视觉拥有大量的量子AI的应用基础。
三,计算机视觉的原理
计算机视觉就是用各种成像系统代替视觉器官作为输入敏感手段,由计算机来代替大脑完成处理和解释。计算机视觉的最终目标就是使计算机能像忍那样通过视觉观察和理解世界,具有自主适应环境的能力。再实现最终目标以前,人们努力的中期目标是建立一种视觉系统,这个系统能依据视觉敏感和反馈的某种程度的智能完成一定的任务。例如,计算机视觉的一个重要应用领域就是自主车辆的视觉导航,还没有条件实现像人那样能识别和理解任何环境,完成自主导航的系统。因此,人们努力的研究目标是实现高速公路上具有道路跟踪能力,可避免与前方车辆碰撞的视觉辅助驾驶系统。
这里要指出的一点是再计算机视觉系统中计算机起到代替人脑的作用,但并不意味着计算机必须按人类视觉的方法完成视觉信息的处理。计算机视觉可以而且应该根据计算机系统的特点来进行视觉信息的处理。但是,人类视觉系统是迄今为止,人们所执导的功能最强大和完善的视觉系统,对人类视觉处理机制的研究将给计算机视觉的研究提供启发和指导。因此,用计算机信息处理的方法研究人类视觉的机理,建立人类视觉的计算理论,也是一个非常重要的研究领域。
四,5种主要的计算机视觉技术
4.1 图像分类
给定一组各自被标记为单一类别的图像,我们对一组新的测试图像的类别进行预测,并测量预测的准确性结果,这就是图像分类问题。图像分类问题需要面临以下几个挑战:
视点变化,尺度变化,类内变化,图像变形,图像遮挡,照明条件和背景杂斑
我们怎样来编写一个图像分类算法呢?计算机视觉研究人员提出了一种基于数据驱动的方法:该算法并不是直接再代码种知顶每个感兴趣的图像类别,而是为计算机每个图像类别都提供许多示例,然后设计一个学习算法,查看这些示例并学习每个类别的视觉外观。也就是说,首先积累一个带有标记图像的训练集,然后将其输入到计算机中,由计算机来处理这些数据。
因此,可以按照下面的步骤来分解:
- 输入是由N个图像组成的训练集,共有K个类别,每个图像都被标记为其中一个类别。
- 然后,使用该训练集训练一个分类器,来学习每个类别的外部特征。
- 最后,预测一组新图像的类标签,评估分类器的性能,我们用分类器预测的类别标签与其真是的类别标签进行比较
目前较为流行的图像分类架构是卷积神经网络(CNN)——将图像送入网络,然后网络对图像数据进行分类。卷积神经网络从输入“扫描仪”开始,该输入“扫描仪”也不会一次性解析所有的训练数据。比如输入一个大小为100*100的图形,你也不需要一个由10000个节点的网络层。相反,你只需要创建一个大小为10*10的扫描输入层,扫描图像的前10*10个像素,然后,扫描仪向右移动一格像素,再扫描下一个10*10的像素,这就是滑动窗口。
输入数据被送入卷积层,而不是普通层。每个节点只需要处理离自己最近的临近节点,卷积层也随着扫描的深入而趋于收缩。除了卷积层之外,通常还会有池化层。池化是过滤细节的一种方法,常见的池化技术是最大池化,它用大小为2*2的矩阵传递拥有最多特定属性的像素。
现在,大部分图像分类技术都是再ImageNet数据集上训练的,ImageNet数据集中包含了约120万张高分辨率训练图像。测试图像没有初始注释(即没有分割或标签),并且算法必须产生标签来指定图像中存在哪些对象。
现存的很多计算机视觉算法,都是被来自牛津、INRIA和XRCE等顶级的计算机视觉团队在ImageNet数据集上实现的。通常来说,计算机视觉系统使用复杂的多级管道,并且,早期阶段的算法都是通过优化几个参数来手动微调的。
4.2 对象检测
识别图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签。这不同于分类/定位任务——对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位。在对象检测中,你只有2个对象分类类别,即对象边界框和非对象边界框。例如,在汽车检测中,你必须使用边界框检测所给定图像中的所有汽车。
如果使用图像分类和定位图像这样的滑动窗口技术,我们则需要将卷积神经网络应用于图像上的很多不同物体上。由于卷积神经网络会将图像中的每个物体识别为对象或背景,一次你我们需要在大量的位置和规模上使用卷积神经网络,但是这需要很大的计算量!
为了解决这一问题,神经网络研究人员建议使用区域(region)这一概念,这样我们就会找到可能包含对象的“斑点”图像区域,这样运行速度就会大大提高。第一种模型是基于区域的卷积神经网络(R-CNN),其算法原理如下:
1,在R-CNN中,首先使用选择性搜索算法扫描输入图像,寻找其中的可能对象,从而生成大约2000个区域建议;
2,然后,在这些区域件以上运行一个卷积神经网络
3,最后,将每个卷积神经网络的输出传给支持向量机(SVM),使用一个线性回归收紧对象的边界框。
实际上,我们将对象检测转换为一个图像分类问题。但是也存在这些问题:训练速度慢,需要大量的磁盘空间,推理速度也很慢。R-CNN的第一个升级版本是Fast R-CNN,通过使用了2次增强,大大提高了检测速度:
1,在建议区域之前进行特征提取,因此在整幅图像上只能运行一次卷积神经网络;
2,用一个softmax层代替支持向量,对用于预测的神经网络进行扩展,而不是创建一个新的模型。
Fast R-CNN的运行速度要比R-CNN快得多,因为在一幅图像上它只能训练一个CNN,但是,择性搜算算法生成区域提议仍然要花费大量时间。
Faster R-CNN是基于深度学习对象检测的一个典型案例:该算法用一个快速神经网络代替了运算速度很慢的选择性搜索算法:通过插入区域提议网络(RPN),来预测来自特征的建议。RPN决定查看“哪里”,这样可以减少整个推理过程的计算量。RPN快速且高效的扫描每一个位置,来评估在给定的区域内是否需要作进一步处理,其实现方式如下:通过输出k个边界框建议,每个边界框建议都有2个值——代表每个位置包含目标对象和不包含目标对象的概率。
一旦我们有了区域建议,就直接将它们送入Fast R-CNN。并且,我们还添加了一个池化层、一些全连接层、一个softmax分类曾以及一个边界框回归器。
总之,Faster R-CNN的速度和准确度更高。值得注意的是,虽然以后的模型在提高检测速度方面做了很多工作,但很少有模型能够大幅度的超越Faster R-CNN.换句话说,Faster R-CNN可能不是最简单或最快速的目标检测方法,但仍然是性能最好的方法之一。
近年来,主要的目标检测算法已经转向更快、更高效的检测系统。这种趋势在You Only Look Once(YOLO), Single Shot MultiBox Detector(SSD)和基于区域的全卷积网络(R-FCN)算法中尤为明显,这三种算法转向在整个图像上共享计算。因此,这三种算法和上述的3中造价较高的R-CNN技术有所不同。
4.3 目标跟踪
目标跟踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。传统的应用就是视频和真实世界的交互,在检测到初始对象之后进行观察。寻找,目标跟踪在无人驾驶领域也很重要,例如Uber和特斯拉等公司的无人驾驶。
根据观察模型,目标跟踪算法可分成2类:生成算法和判别算法。
- 生成算法使用生成模型来描述表观特征,并将重建误差最小化来搜索目标,如主成分分析算法(PCA);
- 判别算法用来区分物体和背景,其性能更稳健,并逐渐成为跟踪对象的主要手段(判别算法也成为Tracking-by-Detection,深度学习也属于这一范畴)
为了通过检测实现跟踪,我们检测所有帧的候选对象,并使用深度学习从候选对象中识别想要的对象。有两种可以使用的基本网络模型:堆叠自动编码器(SAE)和卷积神经网络(CNN)。
目前,最流行的使用SAE进行目标跟踪的网络是Deep Learning Tracker(DLT),它使用了离线预训练和在线微调。其过程如下:
- 离线无监督预训练使用大规模自然图像数据集获得通用的目标对象表示,对堆叠去噪自动编码器进行预训练。堆叠去噪自动编码器在输入图像中添加噪声并重构原始图像,可以获得更强大的特征表述能力。
- 将预训练网络的编码部分与分类器合并得到分类网络,然后使用从初始帧中获得的正负样本对网络进行微调,来区分当前的对象和背景。 DLT 使用粒子滤波作为意向模型(motion model),生成当前帧的候选块。 分类网络输出这些块的概率值,即分类的置信度,然后选择置信度最高的块作为对象。
- 在模型更新中, DLT 使用有限阈值。
鉴于 CNN 在图像分类和目标检测方面的优势,它已成为计算机视觉和视觉跟踪的主流深度模型。 一般来说,大规模的卷积神经网络既可以作为分类器和跟踪器来训练。具有代表性的基于卷积神经网络的跟踪算法有全卷积网络跟踪器( FCNT )和多域卷积神经网络( MD Net )。
FCNT 充分分析并利用了 VGG 模型中的特征映射,这是一种预先训练好的 ImageNet 数据集,并有如下效果:
- 卷积神经网络特征映射可用于定位和跟踪。
- 对于从背景中区分特定对象这一任务来说,很多卷积神经网络特征映射是噪音或不相关的。
- 较高层捕获对象类别的语义概念,而较低层编码更多的具有区性的特征,来捕获类别内的变形。
因此, FCNT 设计了特征选择网络,在 VGG 网络的卷积 4-3 和卷积 5-3 层上选择最相关的特征映射。 然后为避免噪音的过拟合, FCNT 还为这两个层的选择特征映射单独设计了两个额外的通道(即 SNet 和 GNet ): GNet 捕获对象的类别信息; SNet 将该对象从具有相似外观的背景中区分出来。
这两个网络的运作流程如下:都使用第一帧中给定的边界框进行初始化,以获取对象的映射。而对于新的帧,对其进行剪切并传输最后一帧中的感兴趣区域,该感兴趣区域是以目标对象为中心。最后,通过 SNet 和 GNet ,分类器得到两个预测热映射,而跟踪器根据是否存在干扰信息,来决定使用哪张热映射生成的跟踪结果。 FCNT 的图如下所示。
与 FCNT 的思路不同, MD Net 使用视频的所有序列来跟踪对象的移动。上述网络使用不相关的图像数据来减少跟踪数据的训练需求,并且这种想法与跟踪有一些偏差。该视频中的一个类的对象可以是另一个视频中的背景,因此, MD Net 提出了“多域”这一概念,它能够在每个域中独立的区分对象和背景,而一个域表示一组包含相同类型对象的视频。
如下图所示, MD Net 可分为两个部分,即 K 个特定目标分支层和共享层:每个分支包含一个具有 softmax 损失的二进制分类层,用于区分每个域中的对象和背景;共享层与所有域共享,以保证通用表示。
近年来,深度学习研究人员尝试使用了不同的方法来适应视觉跟踪任务的特征,并且已经探索了很多方法:
- 应用到诸如循环神经网络( RNN )和深度信念网络(DBN )等其他网络模型;
- 设计网络结构来适应视频处理和端到端学习,优化流程、结构和参数;
- 或者将深度学习与传统的计算机视觉或其他领域的方法(如语言处理和语音识别)相结合。
4.4 语义分割
计算机视觉的核心是分割,它将整个图像分成一个个像素组,然后对其进行标记和分类。特别地,语义分割试图在语义上理解图像中每个像素的角色(比如,识别它是汽车、摩托车还是其他的类别)。如上图所示,除了识别人、道路、汽车、树木等之外,我们还必须确定每个物体的边界。因此,与分类不同,我们需要用模型对密集的像素进行预测。
与其他计算机视觉任务一样,卷积神经网络在分割任务上取得了巨大成功。最流行的原始方法之一是通过滑动窗口进行块分类,利用每个像素周围的图像块,对每个像素分别进行分类。但是其计算效率非常低,因为我们不能在重叠块之间重用共享特征。
解决方案就是加州大学伯克利分校提出的全卷积网络( FCN ),它提出了端到端的卷积神经网络体系结构,在没有任何全连接层的情况下进行密集预测。
这种方法允许针对任何尺寸的图像生成分割映射,并且比块分类算法快得多,几乎后续所有的语义分割算法都采用了这种范式。
但是,这也仍然存在一个问题:在原始图像分辨率上进行卷积运算非常昂贵。为了解决这个问题, FCN 在网络内部使用了下采样和上采样:下采样层被称为条纹卷积( striped convolution );而上采样层被称为反卷积( transposed convolution )。
尽管采用了上采样和下采样层,但由于池化期间的信息丢失, FCN 会生成比较粗糙的分割映射。 SegNet 是一种比 FCN (使用最大池化和编码解码框架)更高效的内存架构。在 SegNet 解码技术中,从更高分辨率的特征映射中引入了 shortcut/skip connections ,以改善上采样和下采样后的粗糙分割映射。
目前的语义分割研究都依赖于完全卷积网络,如空洞卷积 ( Dilated Convolutions ),DeepLab 和 RefineNet 。
4.5 实例分割
除了语义分割之外,实例分割将不同类型的实例进行分类,比如用 5 种不同颜色来标记 5 辆汽车。分类任务通常来说就是识别出包含单个对象的图像是什么,但在分割实例时,我们需要执行更复杂的任务。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界、差异和彼此之间的关系!
到目前为止,我们已经看到了如何以多种有趣的方式使用卷积神经网络的特征,通过边界框有效定位图像中的不同对象。我们可以将这种技术进行扩展吗?也就是说,对每个对象的精确像素进行定位,而不仅仅是用边界框进行定位? Facebook AI 则使用了 Mask R-CNN 架构对实例分割问题进行了探索。
就像 Fast R-CNN 和 Faster R-CNN 一样, Mask R-CNN 的底层是鉴于 Faster R-CNN 在物体检测方面效果很好,我们是否可以将其扩展到像素级分割?
Mask R-CNN 通过向 Faster R-CNN 添加一个分支来进行像素级分割,该分支输出一个二进制掩码,该掩码表示给定像素是否为目标对象的一部分:该分支是基于卷积神经网络特征映射的全卷积网络。将给定的卷积神经网络特征映射作为输入,输出为一个矩阵,其中像素属于该对象的所有位置用 1 表示,其他位置则用 0 表示,这就是二进制掩码。
另外,当在原始 Faster R-CNN 架构上运行且没有做任何修改时,感兴趣池化区域( RoIPool ) 选择的特征映射区域或原始图像的区域稍微错开。由于图像分割具有像素级特性,这与边界框不同,自然会导致结果不准确。 Mas R-CNN 通过调整 RoIPool 来解决这个问题,使用感兴趣区域对齐( Roialign )方法使其变的更精确。本质上, RoIlign 使用双线性插值来避免舍入误差,这会导致检测和分割不准确。
一旦生成这些掩码, Mask R-CNN 将 RoIAlign 与来自 Faster R-CNN 的分类和边界框相结合,以便进行精确的分割:
————————————————
版权声明:本文为CSDN博主「AI科技大本营」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/80016353
摘自:https://www.sohu.com/a/243410183_468626
https://www.sohu.com/a/231713369_178408