计算机视觉正在深刻改变着整个社会的信息资源使用观念和方式。
7 月 12 - 7 月 14 日,CCF-GAIR 全球人工智能与机器人峰会将开设「 智慧城市·视觉智能 」专场。
本专场将全面围绕“未来城市级视觉AI的发展方向”这一主题展开,其中,腾讯贾佳亚、旷视孙剑、商汤王晓刚、云从温浩、澎思马原、千视通胡大鹏等知名专家,将为从业者分享前瞻的技术研究 & 产品经营方法论。
而在去年 CCF-GAIR 的「计算机视觉论坛 」中,权龙、孙剑、林达华等人,讲述了自己对计算机视觉研究和工程化落地的思考:
人工智能的核心是视觉,但现在的视觉仍局限在二维识别层面,未来三维视觉重建将会成为最重要的任务。
现在的计算机视觉就是基于卷积神经网络而来,整个 CNN 的架构非常简单,能做的事其实也没那么多,它提取了高维的特征,然后要结合其它方法解决视觉问题。
如果你有足够的数据并且能够明确定义你想要的东西,CNN 的效果很好,但是它有没有智能?其实没有。
你说它蠢,它跟以前一样蠢。它能识别出猫和狗,但我们要知道猫和狗的分类都是我们人类自己定义的,我们可以把猫和狗分开,也可以把复杂的狗类动物进行聚合和分类,这些东西本质上来说并不是客观的,而是主观的。
我们做计算机视觉研究的理想,是让机器进行理解图像。如何让它进行理解?这非常的困难,直到现在也没有人知道它怎么去进行理解。现在它能做的,只能做到认知。我们研究计算机视觉的目的是得到视觉特征,有了视觉特征后才能开展一系列工作。
为什么视觉特征如此重要?在语音识别领域,语音的特征已经定义得非常清晰——音素。但如果我们拿来一个图像,问它最重要的视觉特征是什么,答案并不明确。大家知道图像包含像素,但像素并不是真正的特征。像素只是一个数字化的载体,将图像进行了数字化的表述。计算机视觉的终极目标就是寻找行之有效的视觉特征。
在这样一个拥有视觉特征前提之下,计算机视觉也只有两个现实目的,一个是识别,另一个是三维重建。
它们的英文单词都以“re”做前缀,说明这是一个反向的问题。
计算机视觉不是一个很好定义(ill-posed)的问题,没有一个完美的答案或方法。
这一轮的卷积神经网络最本质的一件事是重新定义了计算机视觉的特征。在此之前,所有的特征都是人工设计的。今天CNN学来的东西,它学到特征的维度动辄几百万,在以前没有这类网络的情况下是根本做不到的。
纵使CNN的特征提取能力极其强,但是我们不要忘记建立在 CNN 基础上的计算机视觉是单目识别,而人类是双目。我们的现实世界是在一个三维空间,我们要和三维打交道。拿着二维图像去做识别,这远远不够。
双目视觉对整个生物世界的等级划分是非常严格的。大家知道马的眼睛往外看,对角的部分才有可能得到一部分三维信息,但它的三维视角非常小,不像人类。鱼的眼睛也是往两边看的,它的主要视线范围是单目的,它能看到的双目视区也是非常狭窄的一部分。
人类有两只眼睛,通过两只眼睛才能得到有深度的三维信息。当然,通过一只移动的眼睛,也可以获得有深度的信息。
获取深度信息的挑战很大,它本质上是一个三角测量问题。第一步需要将两幅图像或两只眼睛感知到的东西进行匹配,也就是识别。这里的“识别”和前面有所不同,前面提到的是有标注情况下的识别,这里的“识别”是两幅图像之间的识别,没有数据库。它不仅要识别物体,还要识别每一个像素,所以对计算量要求非常高。
在生物世界里,双目视觉非常重要,哺乳动物都有双目视觉,而且越凶猛的食肉的动物双目重叠的区域越大,用双目获得的深度信息去主动捕捉猎物。吃草的或被吃的动物视觉单目视觉,视野很宽,只有识别而无深度,目的是被进攻时跑得快!
在这一轮的CNN之前,计算机视觉里面研究最多的是三维重建这样的问题,在CNN之前有非常好的人工设计的视觉特征,这些东西本质上最早都是为三维重建而设计,例如SIFT特征。而在这之后的“识别”,只是把它放在一个没有结构的图像数据库里去搜索而已。 由此可见,现代三维视觉是由三维重建所定义。CNN诞生之前,它曾是视觉发展的主要动力源于几何,因为它的定义相对清晰。
计算机视觉中的三维重建包含三大问题:一、定位置。假如我给出一张照片,计算机视觉要知道这张照片是在什么位置拍的。二、多目。通过多目的视差获取三维信息,识别每一个像素并进行匹配,进行三维重建。三、语义识别。完成几何三维重建后,要对这个三维信息进行语义识别,这是重建的最终目的。
这里我再强调下,我们要把三维场景重新捕捉,但三维重建不是最终的目的,而是要把识别加进去,所以说最终的应用肯定要把三维重建和识别融为一体。
ResNet 为什么能够工作呢?
到今天也没有一个明确答案,当然有很多解释。最直观的解释是说当你的非线性变换层数非常多,相邻两层变换的差别就非常小,与其直接学习这个映射,不如学习映射的变化,这样的方式就让整个学习过程,特别是训练优化过程变得更容易。
还有一个解释来自该论文的第二作者张祥雨,他认为 ResNet 的整个学习过程是一个由浅到深的动态过程,在训练初期等效训练一个浅层网络,在训练后期等效训练一个深层网络。
论文第一作者何恺明有另外一个更“科学”的解释,他认为整个训练过程相当于深度学习的梯度下降过程中,最为困难的梯度消失问题被 ResNet 解决了,该解释也发表在 ECCV 2016 的一篇论文(Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Identity Mapping in Deep Residual Networks. ECCV 2016.)中,并在该论文中第一次训练了一个 1001 层的神经网络。
还有一些同行提出的解释。一种是把 ResNet 和 RNN 关联起来,认为如果有 Weight Share, ResNet 可以看作是一种 RNN。还有一种解释把 ResNet 看成是指数多个不同深度网络的集成。用“集成”这个词其实有些问题,因为一般我们做集成算法不联合训练,但这里面整个 ResNet 里指数多个网络是联合训练的,所以很难定义它是不是集成。
我个人比较认同的一种解释是 Iterative Refinement,它是说网络初期的层学习表示,后期很多层不断迭代和 Refine 这个表示。这跟人理解看图识字很相似,一个不容易理解的东西你要看一会,是基于当前一些已看内容的理解,反复看才能看懂。
还有从从优化观点的解释,如果不用 ResNet 这种构造,系统的损失函数会非常坑坑洼洼和高低不平,所以很难优化。我们知道整个网络训练是非凸的优化问题,如果是这种不光滑的损失函数,训练很难跳出局部极小;如果是上图右边使用 ResNet 的情况,就可以比较容易地达一个很好的局部极小。最近研究表明,局部极小区域的面积和平坦性和一个方法的推广能力非常强相关。
多层 ResNet 学习高度非线性映射的能力非常强。去年,ResNet 成功应用于 DeepMind 的 AlphaGo Zero 系统中,用 一个40 或 80 层的网络就可以学到从棋盘图像到落子位置这样一个高度复杂的映射,这非常让人吃惊。
2012 年开始有各种各样的神经网络结构出现。如果从计算平台的角度看这些工作,大概可以分成三类:第一类是在“云”上,像 GoogleNet、ResNet,其目标是向着最高精度方向走,有 GPU、TPU 可以训练非常大的模型,来探知我们的认知边界;
第二类平台是在“端”上,特别是一些嵌入式设备,这些设备上的计算能力,内存访问都有限制,但很多真实的场景就是如此,那你怎么去做这上面的研究工作呢?谷歌在去年提出 MobileNet 运行在移动端设备上,旷视科技去年提出 ShuffleNet,其目标是说如何在一个给定计算量的设备上得到最好的效果。
一个网络的最基本结构是多个 3×3 的卷积,ResNet 加了一个跳转连接,我们在 ResNet 中还引入一个 Bottleneck 结构,先做 1×1,再做 3×3,再回到 1×1,这样可以提高卷积的效率。
去年何恺明有一项工作叫 ResNeXt。
它在 3x3 的基础上引入分组卷积的方法,可以很好地提高卷积的有效性;谷歌的 MobileNet 是一个 3x3 分层卷积的方式,每个层各卷各的,这种方式非常有效,特别是在低端设备上。ShuffleNet 结合分组卷积和分层卷积的思想,对 1×1 Conv 分组;但是如果只分组的话,组间的信息不会交换,这样会影响特征学习,因此我们通过引入 Shuffle 操作,让不同分组的信息更好地交换,然后做 3×3 的分层卷积,再回到 1×1 分组卷积,这就是 ShuffleNet 的核心思想。和其它方法相比,在相同的精度下,ShuffleNet 在真实设备上的速度要比 AlexNet 快 20 倍左右。
我们去年专为手机设计的 ShuffleNet,它在 CPU/ARM 上效果非常好;如果在 GPU 上,它的性能并不好,因为 CPU 和 GPU 的特性不太一样,这里面有很多原因,比如卷积的设计,Group 卷积等等,我就不赘述了。
今年我们设计了 ShuffleNet v2,也就是第二版,抛弃分组卷积的思想,引入 Channel Split 和 Channel Shuffle 组合的新方法。这个方法把 Channel 先一分为二,并把每个分支用非常简单的结构来做,然后在用 Shuffle 操作合并 Channel,这样做的根源是我们在网络设计中发现的一些基本指导原则,比如说我们需要平衡的卷积而不是稀疏的卷积,更加规整的卷积而不是零乱的卷积。
这项工作目前在 CPU 和 GPU 上都获得了最好的精度和速度;不光在小模型,在大模型上同样取得了非常好的效果,上图最后一行是说 ShuffleNet v2 目前在计算量只有 12.7G Flops 情况下在 ImageNet 上取得了非常高的精度。
我们还需要将神经网络运行在芯片上,这不光对网络结构设计有要求,还要对网络内部精度的表示做限制,现在最流行的方法是做低精度化,比如 BNN 和 XNOR Net,还有旷视科技提出的 DorefaNet。低精度方法是指神经网络的权重或激活值用低精度表示,比如 1 位,2 位,4 位。如果可以用低精度表示两个向量,那么卷积计算就可以通过芯片上非常简单的位运算完成计算。
我们提出的 DorefaNet 是第一个对梯度也做量化的研究工作,从而可以让我们在 FPGA 甚至 ASIC 上训练。在这些设备上计算量是一方面,但是它的内存访问限制更大,DorefaNet 这种方法可以做到更好。上图是我们在 ImageNet 上得到的 1 位,2 位,4 位和 6 位量化精度下的最好分类结果。
上述分类问题网络设计需要考虑不同的平台,其它问题多是以分类为基础,比如说检测,上图是检测最近几年的发展路程,从 R-CNN 到我们提出的 SPP-Net,到 Fast R-CNN,再到我们提出的 Faster R-CNN,它们都是先应用基础分类网络,然后构建不同的物体检测框架。
再往下应该怎么做呢?今天我们是分平台,根据平台的特性设计不同的网络。我们相信下一代会有一个“MetaNet”,统一解决各个平台上的神经网络设计和优化的问题。
深度学习开启了计算机视觉发展的黄金时代,这几年里计算机视觉取得了长足发展,但这种发展是粗放式的,是用数据和计算资源堆出来的,这种发展模式是否可以持续,值得深思。
随着计算机视觉在准确率方面触顶,行业应该寻求更多层面的发展。商汤主要尝试从三大方面提升:一、提高计算资源的使用效率;二、降低数据资源的标注成本;三、提高人工智能的品质。
一、如何提高效率
目前大多数玩家现在走的是粗放型发展路线,是靠堆积数据和计算资源来换取高性能,这是资源而不是效率的竞赛。
行业发展到今天,制定标准的公司赚取了大部分利润,面对这种情况,未来该如何发展?
要回答这个问题,首先要回顾现在的模型和技术模式,看是否还有优化的空间,优化的原理非常简单,就是把好钢用在刀刃上。
两年前商汤开始进入视频领域,视频对效率的要求非常高,因为视频的数据量非常庞大,一秒钟视频有 24 帧,一分钟就是 1500 帧,相当于一个中型数据库,用传统处理图像的方式处理视频显然不合适。
2013、2014 年的时候,大部分视频分析方法都比较简单粗暴:把每一帧都拿出来跑一个卷积网络,最后把它们综合到一起进行判断。
虽然说过去几年计算资源发展非常快,但是 GPU 的显存还是有限的,如果每一层都放到CNN里去跑,GPU 显存只能容纳 10 帧到 20 帧左右,一秒钟的视频就把 GPU 占满了,没办法长时间对视频进行分析,这是一种非常低效的模式。
视频相邻帧之间的重复度非常高,如果每一帧都跑一次,其实大量计算资源都被浪费了,意识到这种重复计算模式的低效后,他们对采样方法进行了改变,改用稀疏采样:无论多长的视频,都划分成等长的段落,每个段落只取一帧。
这样一来就能在时间上对视频形成完整覆盖,分析出的结果自然具有较高的可靠性和准确性。
我们希望把这样一个技术用在实际场景,得到实时性的物体检测的框架。如果每一帧都是按刚才的方法处理,需要 140 毫秒,完全没有办法做到实时。但如果稀疏地去采,比如说每20帧采一次,中间的帧怎么办呢?
大家可能想到用插值的方法把它插出来,但是他们发现这个方法对准确度影响很大,隔 10 帧采一次,中间的准确度差距很大。
在新提出的方法里,他们利用帧与帧之间相互的关系,通过一个代价小得多的网络模块,只需要花5毫秒,在帧与帧之间传递信息,就能很好地保持了检测精度。
重新改变了做视频分析的路径之后,整体的代价就得到了大幅度的下降,这其中没有什么新鲜的东西,网络都是那些网络,只是说重新去规划了视频分析的计算路径,重新设计了整个框架。
自动驾驶需要对驾驶过程中的场景自动地进行理解和语义分割,这也是一个非常成熟的领域。但大家一直没关注到点子上,大家关注的是分割的准确率,像素级的准确率,这是没有意义的。我们真正做自动驾驶,关心的是人在你车前时,你能以多快的速度判断出有个人在那里,然后做出紧急处理。所以在自动驾驶的场景,判断的效率、判断的速度是非常重要的。之前的方法处理一帧要 100 多毫秒,如果真有一个人出现在车前面,是来不及做出反应的。
利用刚才所说的方法,我们重新改造了一个模型,充分地使用了帧与帧之间的联系,我们可以把每一帧处理的效能从 600 毫秒降低到 60 毫秒,大幅度地提高了这个技术对于突发情景响应的速度。
二,如何降低数据标注成本
人工智能是先有人工才有智能,有多少人工才有多少智能。人工智能有今天的繁荣,不能忘记背后默默奉献的成千上万的数据标注人员。今天商汤有近 800 名标注员在日夜不断地标注数据,一些大公司的标注团队更是多达上万人,这也是一块巨大的成本。
如何降低数据标注的成本,是我们每天都在思考的事情。既然很多东西没法通过人工标注,是否可以换个思路,从数据、场景中寻找它本身就蕴含的标注信息?
我们去年的一项研究成果,尝试了一种全新的学习方式。过去图片的标注成本非常高,每张图片不仅要标注,还要把目标物体框出来。比如学习识别动物,需要人工把动物标出来。我们小时候学习辨认动物的过程不是这样的,不是老师给我一个带框的图片去学习,而是通过看《动物世界》学习的。这促使我产生了一个想法:能否让模型通过看《动物世界》,把所有动物识别出来?纪录片中有字幕,如果把它跟视觉场景联系在一起,模型是否就能自动学习?为此我们设计了框架,建立起视觉与文本之间的联系,最后得出了下图中的结果。
我们在没有任何标注和人工干预的情况下,靠看《动物世界》和《国家地理》杂志,能够精确识别的几十种动物。
此外,做人脸识别也需要标注大量人脸数据。其中有一些数据,比如我们的家庭相册,这些相册虽然没有标注,但却蕴含很多信息。
大家看下面这张图,这是电影《泰坦尼克号》中的一些场景。
左上角这个场景,如果光看人脸很难认出这两个人是谁。再看右上角第一个场景,我们可以认出左边这个人是 Rose,但右边这个穿西装的人还是看不清。如果我们能识别出电影背后的场景,就会发现 Jack 和 Rose 经常出现在同一个场景。基于这种社交互动信息,我们可以推断,那个穿黑西装的男子可能是 Jack。这样一来,在不用标注人脸的情况下,我们就获取了大量有意义的数据。
我们还把这项技术用到了安防领域:一个人从深圳的街道这头走到那头,人脸图像经常会发生变化,但只要能追踪到他的轨迹,我们就能判断所拍摄到的人脸属于同一个人,这对训练人脸模型是非常宝贵的信息。
三、如何提高人工智能质量
人工智能的最终目的是为生活带来便利,提高生活质量。但最近几年人工智能的发展好像步入了误区,认为人工智能的质量和准确率挂钩。我觉得人工智能的质量是多方面、多层次的,不仅仅是准确率。
给大家看几个例子。“看图说话”是近几年特别火的领域,即向计算机展示一张图片,让它自动生成描述。下图是我们用最新方法得出的结果。
大家发现,我们向这个最好的模型展示三张不同的图片,它会说同一句话,这句话在标准测试中的得分非常高,没有任何问题。但我们把它和人类的描述放在一起后发现,人类不是这样说话的。人类描述一张图片的时候,即使面对同一张图片,不同人的表述是不一样的。也就是说,人工智能在追求识别准确度的时候忽略了其他的品质,包括语言的自然性和图片的特征。
为了解决这个问题,去年我们提出了一个新方法。它不再把内容描述看成翻译问题,而是把它当做一个概率采样问题。它承认描述的多样性,承认每个人看到同一张图片会说不同的话。我们希望把这个采样过程学习出来。
我们再发散延伸一下:既然 AI 模型能生成一句话,那么是不是也能生成一段动作?下图展示了我们的一项最新研究,很多AI公司都在做这方面的研究,让 AI 生成一段生动的舞蹈。下面是一些简单的动作,这些动作都是计算机自动生成的,不是我们用程序描述出来的。
最后,对前面的分享做一个总结。过去几年,人工智能和深度学习都取得了突飞猛进的发展,这种发展既体现在标准数据集上的准确率提升,也体现在商业场景的落地。但回顾这一段发展历程,我们发现,朝着准确率高歌猛进的过程中我们也遗忘了很多东西。我们的效率是否足够高?我们是否在透支数据标注的成本?我们训练出的模型是否能够满足现实生活对品质的要求?从这些角度来看,我觉得我们才刚刚起步。虽然我们实验室和世界上许多其他实验室取得了一些重要进展,但我们仍然处在起步阶段,前面还有很长的路要走。雷锋网
计算机视觉技术应用路上,道阻且长,尚有无数未知黑暗森林亟待探索。
历史车轮滚滚势不可挡,每隔一段时间都会有新的技术突破。
一年后,“MetaNet ”式能够统一解决各个平台上的神经网络设计和优化问题的框架,是否有进展?技术的迭代又匹配了哪些城市场景?而这是否又会带来新一轮的市场洗牌?
六天后,雷锋网AI掘金志将带你共同见证「智慧城市·视觉智能」的未来,寻找问题的最优解。雷锋网