计算机视觉的完整链条:从成像到早期视觉再到识别理解
编者按:本文作者 SenceTime (商汤科技)CEO 徐立,文章内容整理自 4月20日 由将门举办的 “计算机视觉” 主题技术专家微信群分享嘉宾实录。文章首发于微信号:将门创业(ID:thejiangmen)。
我是从 03年 开始就接触视觉这个领域,也就是从本科三年级开始做这个方向,到现在十几年了,所以我对计算机视觉的整个链条,从成像(Imaging)到早期视觉(Early Vision)以及识别(Recognition)都有些涉猎。
我感觉现在业界比较热的或者最近大家讲的计算机视觉的内容,只是视觉方面的很小的一部分。计算机视觉的整个范畴其实更大更美一些。从传统 CV 的内容来看,大致可分为:
一.成像 (Imaging)。从视觉整个链条上来说,最早的部分讲的是相机的成像原理,以及从它延伸出来的更多的一些美妙的应用。按照人的视觉系统,可以理解为对应的人眼睛的能力。 第一层次可以归结为看的能力 (SEEING)。这些算法帮助延伸人眼的能力,使得人眼可以在某种程度上有所突破,是计算机视觉的输入。
二.早期视觉 (Early Vision)。这个词我觉得也比较有意思。为什么称之为 Early Vision 呢?它解释是反映人脑视觉感知里面中间的这一层,比较早期的视觉感知,实际上大家可以理解为视觉系统所生成的中间结果,其实并没有什么 X 用(-_-b)。它是一个对于视觉场景来说的一些中间结果。这些结果必须得存在,但是又没有直接带来我们所谓的理解和识别,所以做视觉的人就形成了 “Early Vision” 这么一个中间的形态。Early vision 的内容主要包含图象分割、边缘求取,运动和深度的估计这些方面。
Early Vision 做的事情其实是我们看不到的部分,比如说物体的边缘、深度、场景以及分割的形态,并不是眼睛能够直接能看到的,我理解这是第二个层次,感知(PERCEIVING)的部分这个层次带来了一些中间的一些状态和结果,同样它可以影响到我们后面很多的视觉应用。
三.识别 (Recognition)。这部分是现在业界很火的内容。对应人的理解 (UNDERSTANDING)。过去数年中人脸识别、物体识别,以及从各个图象整体进行识别,包括最近相对来说比较火的图象和文字的结合 (image captioning),这些应用其实都是属于我们认为第三部分。
另有一种比较笼统的分类是把 Imaging 和 Early Vision 部分都称为 Low-level vision,对应的 Recognition 部分就是 High-level vision。
计算机视觉这门应用其实它是很美的,我认为本身计算机视觉不能作为一个单独的学科来看,因为它并不像数学的某个领域有一套统一的理论,它是为了解决一个个特殊的问题,它是一系列的应用学科集合,只是它讨论的主题讲的是我们眼睛所能看到的、感知到的,包括和视觉输入相关的理解,和视觉相关的内容。所以我并不认为 “计算机视觉” 这个词,或者说这块的内容是一个理论体系很完整的一门学科。但我自己去加入这个领域完全是因为我觉得计算机视觉有很多很漂亮的内容,它其实是一个很美的研究方向。
我稍微讲一下我当时选视觉的一个原因,我在上交的时候也有很多很尊敬的老师,包括过几天要分享的马利庄老师。我在大三的时候选毕业设计的时候做的相关内容叫自然语言处理(人工智能的另一个分支),但我总觉得文字上的变换,在那个点没有大量的突破性、爆发性的应用。第二它并没有引发我自己内心的认同感,很多结果都只是以字对字的,并没有一些特别满足的内容。所以当时在选方向的时候,我就做了计算机视觉方面的选题,加入戚飞虎教授的视觉实验室(CVLAB),当时做的是自然场景下的文字检测和识别。
我相信大家如果做计算机视觉会有一个感觉,如果在处理视频、图象或者各种内容的时候,当你把这些内容处理完,有一个直观的、对应的视觉结果的时候,你就会觉得这个应用会带来一种满足感。我进入这个行业是因为视觉很美,从而才开始接触了各种各样的视觉方面的一些应用,只不过在现在工业界的讨论,忽略了视觉的美的因素。我见了很多工业界的朋友,或者一些合作伙伴,其实很少真正从视觉中这几个领域、方向来探讨我们现在的视觉技术的发展,更多把视觉当成一个统一的学科名词。其实忽略了它的精髓。
中间分享一个故事,我和我博士导师(贾佳亚教授)的导师 (CK) 去希腊开会的时候他指着一个学者问我是否认识,我想在这个领域出名的老年学者特别多,并不认识。他说这是他导师的导师。也就是我导师的导师的导师的导师,我立马有种学术圈不好混的感觉,因为从辈份上来说我可能到处碰到师叔,太师叔……所以还是先进工业界吧 (LOL)。接下我就讲一下从我理解的计算机视觉三个方向,来看看我们在行业当中有什么样的落地。
成像(Imaging)
成像其实是和相机的镜头、人眼的构成有非常大的关系,这块的内容最早是从模拟相机原理开始。解决怎么样把拍摄照片的质量进行提升,包括我要去除一些相机带来的畸变,分辨率问题,把相机的一些噪声、各种复杂的相机成像的元素带来的损失进行一些复原。
在我们这个行业的前 10年,整个视觉在工业界并不是那么火,不像现在的状态,现在的这个行业确实到了很热的阶段,有很多工业界的应用。但是在十年前我们的视觉通常会被大部分的人认为并没有到一个真正工业成熟的阶段,它的几个原因:
原因一:我们整个的视觉基础都是建在统计学习推理的这套逻辑之上,这套逻辑通常它会依赖于对于世界的先验假设,这类假如如果做的好,通常带来一个新的突破和变化,但是如果做的不好的话,在真实世界当中的应用就会产生问题。
为什么要用这些统计学习推理的框架去做这样的视觉问题,有一个很重要的点就是,当时的数据其实并没有达到一定足够的量,所以我们在十几年前研究很多的视觉问题,都是在一些小数据集问题,先验变得尤为重要。其中有一个相对来说对数据量的依赖小一些,或者对这方面不是那么关键的一个方向,就是成像 (Imaging) 这块。
这里我想讲我另外的一个观点,我认为什么时候是真正地可以用做技术创业或者技术带来工业界颠覆性变化——就是一个技术方向它既是学术的热点又是工业的热点。因为只有这两个热点都同时具备的时候,这个技术方向才能真正地作为一个使能者,工业级的应用能在先进学术成果催化下行程颠覆性突破。
如果它单纯是一个学术热点的话,发展只是学术上的一些理论,一些数学模型演进,在实际的工业场景当中的应用它可能并没有带来实质性变化。反之,如果单是工业热点的话,它也会有另外的问题,可能工业界觉得这个技术的变现以及它商业的前途会很好,但是学术认为它已经不是学术最前沿的东西,那么它的技术迭代就不会有这么快,这样的话想要以技术去做创业或者用技术去做改变的话比较难,因为大公司或者巨头会有更多的资源和应用场景,它用已经成熟的技术就能够完成同样的事情。
为什么讲到成像这块我会有这个感触呢?因为在前十年当中我们的视觉并不是工业热点和学术热点的结合点,反之,有另外一个行业,其实是满足了工业热点和学术热点结合的趋势,那就是我们称之为计算机图形学(Computer Graphics)。这个行业当时像 SIGGRAPH 这样一些顶级会议有一些比较特殊的现象,就是不到 100 篇的文章,但是会有 2-3 万的人去参加。而这些人都是来自于工业界的。原因也很简单,当时任何一个新兴的图形学技术如渲染技术能够取得一定的突破的话,就会带来一些电影行业的突破,以及一些实际上商业的价值,所以在当时那个行业其实是非常地有活力。我们在做视觉成像或者图象的增强、变化当中,其实是和图形这块有一定交集,叫做计算成像学(Computational Photography)。
就是在做 Imaging 成像的时候,可以通过一些计算的辅助,使得成像质量更好。所以那个时候我们在做研究的时候,会去蹭图形学的会议。最近的趋势在视觉方面的工业热点和学术热点渐渐地 match,当然也是因为大家都众所周知的深度学习突破的原因,在视觉领域取得了重大的突破,同时形成了真正行业级的应用,所以现在真的是做视觉的一个黄金时代。
回过头来说,做我们的成像和 Imaging 是解决什么样的问题?是解决让大家看清,甚至是说超越人眼睛视觉的这么一个问题,我给大家看一张图片。
这个例子是为了说明我们在做图像的增强或者成像的处理,解决的是什么样的问题——即我们想要通过算法的计算,使得这张黑的照片能够被大家看清。在视觉做这件事情的时候其实你就会很享受,你就可以把一些本身看不见的东西变得很漂亮,可以真正呈现他的内容。
另一个例子是这张明信片,拍摄过程中因为光线不好等问题会存在手抖的现象,看不清上面的文字。同样我们视觉解决的问题就是从这些模糊的照片当中恢复出原来的内容(单张照片)。所以我想说视觉成像部分在很大的一个程度上,它是帮人眼做延伸,使得人能够看清本身看不清的内容。恢复的结果虽然不能说是一张很漂亮的图片,但是它确实是可以能够把上面的一些结构都恢复的比较清楚。当我第一次把一张非常模糊的照片去恢复出来的时候,其实我也很兴奋,觉得视觉这样的东西,其实带来的不光是说解决数学上的问题,更多的是带来感官上的刺激。
再给大家分享一个例子,这也是当时我摆在桌面上的几个小玩具,通过算法来恢复出来的,比如有意思的是这类恢复除了可以把清晰的照片能够得到之外,它还可以得到下面的东西 (右图),我们称之为 “核图像”,它可以反映出来相机振动轨迹,也就是说相机是通过这张核图像的轨迹振动之后,形成了上面的这张模糊照片 (左图)。
下面左边这张是北京的一张雾霾照片,理论上如果我们想要得到的会是一张比较清晰的照片,这也是我们计算机视觉的范畴——“去雾霾”。开始我的观点是,计算机视觉它不是一套非常完整地体系型的学派,但是它里面诸多的诸多应用本身(包括我说的暗光增强、去模糊、去雾霾),都会让人觉得是一个完整的应用体系,有一个特殊的数学问题去描述它,然后大家就会觉得比较有意思。右边这张是我们通过算法把上面这张照片进行一定的恢复之后形成的照片,大家还可以见到微弱的蓝天。现在这个算法在微博相机里面已经被嵌入使用了,如果说你用微博相机在北京、在国内的一些城市拍照的话,其实都会得到一个比较好的效果,这样再发微信、发微博,我相信政府都会感谢我们,因为发出来的照片都是蓝天白云。所以蓝天白云也是可以通过算法合成的。当然视觉不光是说做成真实的复原,它其实可以生成更多的我们称之为更浪漫的内容 (Non-photo Realistic),也是通过计算来完成。比如说刚刚那张雾霾的照片,我们可以生成像是油彩画的一样结果。下面那张雾霾可能比较难一些,因为场景会比较复杂一些,不可能把带深度的雾霾完全去除,如果去除不了的情况下,我们觉得不妨可以生成更有意思的艺术照片,这也是我觉得视觉另外一个美妙的地方,就是它可以通过计算来形成一些让人觉得有美感的内容。
早期视觉(Early Vision)
刚才说这个词可能是做计算机视觉的人忽悠出来的,因为计算机视觉会有一些大部分的叫 “中间结果”,你生成图象的分割,生成一些边缘,生成一些运动矢量,这些东西其实并没有什么直接用途,而这样的一些中间结果同时也会带来很多的学术上新的问题,所以就会生成这么一个中间状态,套上一个人类视觉感知早期过程的解释。
举一个有意思的例子。这是一个很传统的问题,我们称之为 “光流场” 或者是运动估计。就是说我有两张图,或者我一个视频中的很多帧,我要获得这个视频当中的任何一个点的运动,运动本身是稠密场,所以它是可以用一个颜色的图来表示出来的。颜色越深的就表明运动得越大,颜色代表了它的方向,比如红色可能是代表了某一个往右的方向,所以整张颜色图就能够恢复出来真实的运动。
这就是早期视觉的一个经典的问题。大家可以看出来,即使把运动恢复得非常准确、非常到位,但后面还是要带上一些研究课题,才能使它能够转换成真实的应用性的价值。所以我们在做这方面研究的时候,一个重点就是怎么样真正地用这些结果,从而生成有价值的应用。
实际上我觉得我做了 Optical Flow(光流)这么多年,有很长的一段时间曾在 Middlebury 的测试库上排名第一,我的光流应该也是最早 OpenCV 考虑收录进去的一个 flow 算法之一。但我一直在纠结的是,怎么样用这种中间的结果去得到更好的应用,至今来说觉得这都是一个比较难回答的问题。
所以在早期视觉的很多问题就是出现一个尴尬状态:第一,早期视觉的问题不能做到非常地精准,肯定会有一些缺陷 (图像分割就是一个例子),但是早期视觉的问题和直接的应用结果又不能完全挂钩。后续应用直接依赖于早期视觉结果直接影响系统稳定性。现在考虑端到端的训练方法是一种解决方案。
其中有一块可能算是落地比较好的就是深度计算,通过单张图加结构光也好,通过我们称之为 TOF 扫描也好。或者通过两张图算 Stereo Matching(立体匹配)也好,这个是我们能够在一定范围内看到有比较多的应用,我们看到 Xbox 的 Kinect,以及英特尔的 RealSense,以及很多 ADAS(高级驾驶辅助系统)相关的应用,要用双目来做这方面的事情,其实都是基于我们称之为 “深度的中间结果”,它也是属于早期视觉一个非常大的部分。
现在讲人工智能、计算机视觉的范畴,对这两块的熟悉程度其实并不高,因为大家关注的是和识别相关的内容,但是我想说从早期的 Imaging 成像也好,从中间的 Early Vision 也好,其实都是视觉非常重要的一些环节,这两部分的内容其实需要一个比较长的时间知识积淀。
这里想补充一点的是传统当中我们认为做这两部分,一定需要相当长领域知识积累,也就是说你做图象增强的、视频增强的,和你做深度的、做运动的,其实必须是有不同的知识。当然背后肯定是一套相对比较完整的数学统计学习的理论。最近行业上发现的趋势变化是说,这些对于领域知识,或者说先验知识依赖较强的应用(如依赖图自然图像统计先验)渐渐也被数据驱动的方法取代了。也就是说我们在做这些问题的时候,也有一个可能性,是用数据驱动的方法,比如说在做去模糊,或者说去雾霾,或者说图片超分辨率等。可以看 2013年、2014年 有很多的文章,已经可以通过大量的数据,我告诉机器它输入输出对的关系,从而满足把成像中一些应用如超分辨率(super resolution)这些操作都变成一个通过机器学习完成的一个过程。
这样的事情同样也发生在我们说的早期视觉这个领域,比如我们在做深度计算、运动分析,其实 2013年、2014年 的 CVPR 都有文章说怎么样通过一个深度神经网络,来完成刚才我在图片中展示的深度结果、运动结果。在某种的意义上有一定的好处,就是不太需要太多的领域上的背景知识干扰,可以通过大量的数据来弥补对于真实场景理解的缺陷。比如说深度计算有一些应用场景是马路上的场景,会有特殊的纹理特征等,如果我们要去做的话,可能对于这些场景要有一些特殊的先验知识。从数据驱动的角度来说,它其实可以通过收集足量的数据,使得这种先验知识融合到到现有的深度网络学习当中去。
所以我认为下一个阶段,在早期视觉、在成像这块的内容会有一个趋势,就是我们称之为从统计学习来的生成式模型(Generative Model)和深度学习 Bottom-up、数据驱动模式的结合。
识别理解(Recognition)
工业界的应用突破,大多都是基于这部分。
我们讲最终的识别理解,其实之前提到视觉问题当中,做的事情,是需要把一张(输入)图对应到一张(输出)图,或者说一张(输入)图对应到一个中间结果。识别更多的就是把一张图对应到这样的一个文字或标签。所以这也是为什么我们真正地机器学习也好,大数据分析也好,最早肯定是从识别开始入手,因为文字到标签的 matching,其实得来更自然,并且容易。比如说对于人脸识别,我们要做的事情我给机器两张人脸,告诉它这两个人 “是” 同一个人,或者 “不是” 同一个人,给出这二者的标签。
从 2010年 之后深度学习在语音当中取得了一定地突破之后,在视觉领域的突破,最早就是从这样的图片(或视频)到文字的匹配(matching)来完成的,其中最著名的是 Hinton 参加了 ImageNet 挑战赛取得了突破之后,深度学习以及大数据的方法,在视觉识别当中的各个领域展开。
在一些我们公司涉猎的垂直领域,只要把图片和这种标签定义得足够好,数据量足够大,数据够完善的话,它有非常大的可能在垂直领域上,能够超越现有人类的识别准确率。这点在工业应用上尤为重要,我们认为有一个叫 “game-changing line”,就是改变这个游戏的这么一条线,其实就是人的准确率。
一旦当某一个应用它已经达到了人识别的准确率,那么这样的一个工具就会替代现有的人力来完成这样的任务。这种应用从图像当中包含的我们最传统的车牌识别、文字识别、车型识别,在公安交通当中应用比较广泛的。另外,从人的角度出发,对于人脸、人体、人群的识别,这些细分领域只要我们定义了一个比较清楚的图到文字的 Mapping(描绘)的话,识别就变得可行,工业应用也很广。
最后,我讲两个非常简单的例子,我们怎么样去定义这样的 matching,在某些应用当中变得可行。
例子一:年龄识别年龄识别看上去是比较主观的,人看上去年纪轻、年纪大,其实是比较难的,怎么样用大数据的方法最后把年龄识别来完成呢?其实我们现在有这样的一个小窍门在里面,去定义这些标签。举例子说,从手机收集来的照片一般会有手机上的时间,同时如果像有身份证号码,它是可以通过身份证的号码,把这个人的出生年月 给算出来。又有现在的照片,又有出生年月,其实它的这么一个从一张照片,到一个人的岁数 matching 就能做成这样一个对。有了足够多的对的时候,就能够自然而然地完成年龄识别的训练,这是我们在数据收集当中最后发现一个比较有意思的例子。
例子二:颜值的识别这看上去是一个比较主观问题,那怎么样去定义一个人的颜值漂亮不漂亮,其实相对来说是比较难的事情,我们也用了讨巧的方法,就是在有一些社交网站、交友网站上对于别人是有这样的一个打分。另外就是大家普遍认可明星的颜值会比较高一些,普罗大众的颜值会比较低一些。所以通过一些现有的网络数据,我们可以完成这样的一个分数大致的范围设定,给一个人定义 “漂亮”、“不漂亮” 标签,完成颜值打分。
非常感谢大家的时间,谢谢大家!