这么多年来计算机视觉的卷积神经网络,算法和结构,基本的结构变化是很小的。
但1998年到2012年这十五年来发生了两件特别重要的事:一是英伟达研发了GPU;第二就是李飞飞创建了ImageNet,她把几百万张照片发到网络上并发动群众做了标注。也正是因为算力和数据,才创造了AlexNet的成就。
到了2015年,机器视觉的识别率基本超越了人类。其实人类在识别方面并没有那么强,我们的记忆非常容易犯错误。根据统计,人类在分类上的错误率达到了5%。而机器,从2015年之后你们看各种ImageNet在公开域数据集上的错误率已经远远低于5%。
但为什么ImageNet在两年前停止了比赛,因为现在比拼的基本上都是靠算力和数据。
2015年随着卷积神经网络下的人工智能技术的成熟,AI也到达了一定的巅峰,计算机视觉或者说更宽泛的安防市场也被重新定义。
也在这一时期,旷视、商汤这几家做视觉的公司进入了安防市场。
从2012年到2019年的7年间,所有的数据又都翻了一千倍,计算速度比以前快一千倍,模型也比以前大一千倍。2012年训练AlexNet模型需要使用两块GPU,花费两个星期;今天做同样的事情只需要一块DGX-2,十几分钟就能完成。
从整个模型的参数来看,2012年的AlexNet已非常可观,6000万的参数非常庞大,这个数字我们当时都不敢想象。到今天这个网络又要放大千倍,达到十亿级的参数量。但是从算法、架构来说,现在基本上都是标准的卷积神经网络,其实并没有太大的进步。
我们也可以想一下,计算机视觉里面的识别到底能够达到什么程度?其实它并没有那么强,它只是在一个大数据统计意义上的识别而已。
大家都听说过无监督学习,但无监督学习的结果和应用的场景并不是太多。现在可用的、做的好的也就是可监督的,也就是CNN。
我简要概括下,现在的计算机视觉就是基于卷积神经网络而来,整个CNN的架构非常简单,能做的事其实也没那么多,它提取了高维的特征,然后要结合其它方法解决视觉问题。
如果你有足够的数据并且能够明确定义你想要的东西,CNN的效果很好,但是它有没有智能?其实没有。
你说它蠢,它跟以前一样蠢。它能识别出猫和狗,但我们要知道猫和狗的分类都是我们人类自己定义的,我们可以把猫和狗分开,也可以把复杂的狗类动物进行聚合和分类,这些东西本质上来说并不是客观的,而是主观的。
我们做计算机视觉研究的理想,是让机器进行理解图像。如何让它进行理解?这非常的困难,直到现在也没有人知道它怎么去进行理解。现在它能做的,只能做到认知。我们研究计算机视觉的目的是得到视觉特征,有了视觉特征后才能开展一系列工作。
为什么视觉特征如此重要?在语音识别领域,语音的特征已经定义得非常清晰——音素。但如果我们拿来一个图像,问它最重要的视觉特征是什么,答案并不明确。大家知道图像包含像素,但像素并不是真正的特征。像素只是一个数字化的载体,将图像进行了数字化的表述。计算机视觉的终极目标就是寻找行之有效的视觉特征。
在这样一个拥有视觉特征前提之下,计算机视觉也只有两个现实目的,一个是识别,另一个是三维重建。
它们的英文单词都以“re”做前缀,说明这是一个反向的问题。
计算机视觉不是一个很好定义(ill-posed)的问题,没有一个完美的答案或方法。
这一轮的卷积神经网络(CNN)最本质的一件事是重新定义了计算机视觉的特征。在此之前,所有的特征都是人工设计的。今天CNN学来的东西,它学到特征的维度动辄几百万,在以前没有这类网络的情况下是根本做不到的。
纵使CNN的特征提取能力极其强,但是我们不要忘记建立在CNN基础上的计算机视觉是单目识别,而人类是双目。我们的现实世界是在一个三维空间,我们要和三维打交道。拿着二维图像去做识别,这远远不够。
在双目视觉下,要包含深度、视差和重建三个概念,它们基本等价,使用哪个词汇取决你处在哪个群体。
传统意义上,三维重建是在识别之前,它是一个最本质的问题,三维视觉里面也要用到识别,但是它的识别是对同样物体在不同视角下的识别,所以说它的识别是更好定义(well-posed) 的一个识别,也叫匹配。
双目视觉对整个生物世界的等级划分是非常严格的。大家知道马的眼睛往外看,对角的部分才有可能得到一部分三维信息,但它的三维视角非常小,不像人类。鱼的眼睛也是往两边看的,它的主要视线范围是单目的,它能看到的双目视区也是非常狭窄的一部分。
人类有两只眼睛,通过两只眼睛才能得到有深度的三维信息。当然,通过一只移动的眼睛,也可以获得有深度的信息。
获取深度信息的挑战很大,它本质上是一个三角测量问题。第一步需要将两幅图像或两只眼睛感知到的东西进行匹配,也就是识别。这里的“识别”和前面有所不同,前面提到的是有标注情况下的识别,这里的“识别”是两幅图像之间的识别,没有数据库。它不仅要识别物体,还要识别每一个像素,所以对计算量要求非常高。
在生物世界里,双目视觉非常重要,哺乳动物都有双目视觉,而且越凶猛的食肉的动物双目重叠的区域越大,用双目获得的深度信息去主动捕捉猎物。吃草的或被吃的动物视觉单目视觉,视野很宽,只有识别而无深度,目的是被进攻时跑得快!
在这一轮的CNN之前,计算机视觉里面研究最多的是三维重建这样的问题,在CNN之前有非常好的人工设计的视觉特征,这些东西本质上最早都是为三维重建而设计,例如SIFT特征。而在这之后的“识别”,只是把它放在一个没有结构的图像数据库里去搜索而已。 由此可见,现代三维视觉是由三维重建所定义。CNN诞生之前,它曾是视觉发展的主要动力源于几何,因为它的定义相对清晰。
我们再来看一下当今的三维重建技术的现状和挑战。
三维视觉既有理论又有算法,一部分是统计,另外一部分则是确定性的,非统计,也就是传统的应用数学。
计算机视觉中的三维重建包含三大问题:
-
定位置。
假如我给出一张照片,计算机视觉要知道这张照片是在什么位置拍的。
-
多目。
通过多目的视差获取三维信息,识别每一个像素并进行匹配,进行三维重建。
-
语义识别。
完成几何三维重建后,要对这个三维信息进行语义识别,这是重建的最终目的。
这里我再强调下,我们要把三维场景重新捕捉,
但三维重建不是最终的目的,你要把识别加进去,所以说最终的应用肯定要把三维重建和识别融为一体。
现在三维重建的主要挑战是,算力不够,而且采集也比较困难。我举个例子,我们安防场景识别一个摄像头比较容易,但如果实时重建N个摄像头的实景,这对算力要求非常高。这些限制也使得当前的单目应用比较多,但我认为,未来双目一定会成趋势。
在深度学习的影响下,三维重建已经取得了比较大的成就。CNN在2012年之后的几年内,对三维重建的影响不是很大。但是从2017年开始,CNN就对三维重建产生了重要的影响。在三维重建领域有一个数据集叫KITTI,从2017年,我们开始用三维卷积神经网络。
以前是把它作为一个跟识别有关系的二维CNN,更现代的双目算法都是基于完整的三维卷积神经网络。现阶段三维卷积神经网络的表现也非常强,给任何两幅图像,错误率只有百分之2到3。
现在计算机视觉覆盖的应用场景,被计算机视觉重新定义,但这些应用也受制于计算机视觉的技术瓶颈。
虽然计算机视觉对安防行业的推动作用很大,但基本也不外乎识别人脸、车、物体等应用,如果计算机视觉得到进一步发展,安防行业也将再度被重新定义。
而我认为,三维视觉将对安防产生非常深远的影响。
三维重建在安防领域的应用,第一个是大规模城市级别的三维重建。