大咖云集人工智能盛会 旷视孙剑详解视觉计算中的挑战
7月7日,由中国计算机学会(CCF)主办、雷锋网与香港中文大学(深圳)全程承办的 AI盛会 --「全球人工智能与机器人峰会」(CCF-GAIR)在深圳顺利召开。旷视(Face++)首席科学家、旷视研究院院长孙剑博士受邀出席并以《视觉计算中的革命和挑战》为题发表了演讲。
以下为演讲全文:
各位来宾,大家下午好。
今天大会的主题是人工智能和机器人。今年是2017年,我在1997年的时候就非常幸运的进入西安交大郑南宁院士创办的人工智能与机器人研究所。
当时我的第一个课题就是用硬件来加速一个混沌神经网络,也就是NVIDIA今天做的事情。一晃20年过去了,人工智能和机器人进入了前所未有的时代。
现在很多人都把这次AI的复兴归功于三大原因:大数据、算法的进步、计算力的提升。可以说是,但也可以说不是。
我们先看大数据。CIFAR是一个用来研究图像分类的常用数据集。这个数据集并不大,一共10类,每类6000张照片。就算在这个小数据上训练,深度学习远远好于传统方法。另一个例子是人脸识别,我们只是用一个包含一万人的训练数据来训练深度学习算法,就可以产生远好于传统方法的效果。由此可见没有大数据,深度学习依然可以研究的很好。
我们再看计算力的提升。这里是2015年世界上最大的云计算平台,他们的多机并行运算能力不可谓不强,远大于我们现在用于训练深度学习的计算力。我们再看看这是目前世界上10台最快的超级计算机。但是大家可能都没有听说过深度学习算法是靠他们训练的。
我们在看算法。如果比较目前和90年代用来训练深度神经网络的算法,我们会发现算法主体是没有大的变化的。
如果这三个因素都不是最决定性的,那么是什么呢?
我个人认为计算方式的变革是最重要的原因。这个计算方式的变化体现在从目前主流的冯诺依曼体系结构的计算逐渐演化到神经网络中的计算方式。这个变革也可以称作是神经网络计算的复兴。
我们看一下冯诺依曼体系结构。这个结构以CPU这个计算单元为核心,基本计算方式是将高频地指令和数据从内存搬到CPU中计算,然后写回内存。但是这种计算方式有个很大的瓶颈,称作冯诺依曼瓶颈,就是CPU和内存之间的指令和数据传输速度要远远落后于CPU的速度和内存的大小。典型的一台服务器这个内存带宽大概在几到十几GB/每秒。
那么如何突破这个瓶颈能?如果看一下我们大脑的计算方式,基本上是一个大规模并行的数据和计算流。输入信号被一层层的向前传递且被并行的计算和处理。这个高级智能发生的地方就是我们的大脑皮层,大概有300亿个神经元,稀疏的相互连接着,负责这我们全部的智能计算。
大脑的这个计算方式从宏观上被我们用来构造人工神经网络。在这个神经网络中,计算要素有三个,激活向量,用来表示被加工的信息;非线性处理,用来完成神经元是否激活的选择;权值矩阵,用来存储学习到的知识。
激活向量中的每个元素可以类比于一个神经元。它接受前一层的神经元输入,让后通过简单的加权求和和一个非线性标量变化完成计算。
一个神经网络中的一层计算可以看做是一次对激活向量的非线性变化.那么整个网络的计算就是把这个变化做上很多次。
这样的计算方式最大的好处就是突破了冯诺依曼瓶颈,因为数据传输和计算的并行,达到了上百倍的加速。GPU更是对这种计算方式的雪中送炭,天生就和这种计算方式匹配。最新的NVIDIA GPU中有几千个计算核和几百个新引入的Tensor Cores.
比较一下去年GPU的计算力和今年GPU和TPU的计算力,我们看到了一年10倍的提高,远超Moore定律。这其实都是新的计算方式使能的。
简单总结一下神经网络计算的特点:第一是数据流并行、第二存储和计算之间有非常高的带宽、第三是整合了学习和推理、第四只依赖非常简单的矩阵计算指令。
我们旷视 科技 Face++作为一家 创业 公司,很早就意识到了这样的计算方式的变化。在3年前就开始投入支持这样计算方式的计算资源和深度学习平台技术的研发。这个平台技术是介于底层硬件开发软件和深度学习算法之间的一个通用层。也就是大家常用的TensorFlow, Caffe, Troch, CNTK等。我们开发的这个平台叫Brain++,集成了深度学习训练引擎、数据管理、GPU集群管理等一个完整的流程。
据我所知,我们是目前创业公司中唯一一家全员使用自主研发的训练引擎的公司,没有之一。自研引擎给我们带来很多的好处和优势。我们能做这点也是我们积累的技术深度和广度度的体现。
随着计算方式的变革,我们的视觉计算也在发生着变革。
视觉计算的对应学术领域是计算机视觉。第一个计算机视觉项目是从1966年开始。从计算机诞生的一开始,我们就想构造像人一样能看世界的机器。计算机视觉中最重要的任务是要理解图像,理解图像里面都有什么东西、理解图像里面真在发生或将要发生什么事情。
理解图像有可以拆分成一些核心子任务:例如分类、检测、分割和他们在序列中的处理。
过去50年计算机视觉领域诞生了很多模型和算法,但是直到2012年前,都没有有效的解决图像理解问题。
之前的方法大体上可以描述成研究员人工设计好的feature,让后用SVMorRF来做分类。
这也是机器学方法,但是它是一种shallow learning。shallow learning有两个特性:1.变换的层数很少;2. feature基本靠人工设计。
相对应的使用深度神经网路的 deep learning方法,它有两个对应相反的特性:1.变换的层数非常长或深,这样就可以非常高效的逼近非常复杂的非线性映射;2.使用end-to-end learning,基本消除了人工feature设计。feature和分类器一起联合学习和优化,融为一体。
神经网络的研究比计算机视觉还要长,发展到今天的道路也是很曲折的。
其中一个非常大的问题,或者说是信念是:深度神经网络到底有没有必要,这么复杂的非凸优化问题能不能很好的求解,网络能不能训练好?
这里面网络的深度是个很大的问题。在2012年,Hilton和他的学生做出了开创性的工作,第一次用一个8层的网络赢得了imagenet的冠军,更重要的是把错误率降低了十几个百分比;他们论文中还专门有一段来证明越深越好,因为但是很多人都不信深了有用。随后在2014年,牛津大学和Google将网络深度推进到20层左右,错误率进一步大幅降低。但我们当时发现,如果简单的加深层数,性能反而会更差。
在2015年的时候,我和微软的同事们发明了一种新的网络结构,叫做ResNet。ResNet使用残差学习的原理,第一次破除了深度的限制,历史性的达到了152层。我的同事何凯明做了这个动画,生动的展示了152层有多深。
ResNet的原理很简单,使用跨层链接的方法来完成残差学习,因为当网络非常深的时候,相邻几层之间的变化更趋向一个恒等变化,所以学习残差映射会更容易。ResNet出来后,学术界产生了各种解释。我们自己的一个解释是:1. ResNet训练的过程中有一个由浅到深的动态,训练早期在训练一个比较浅的网络,之后逐渐训练很深的网络;另一个数学上的解释是跳层链接有效的消除了梯度消失问题。
ResNet的效果是惊人的,在2015一举取得了ImageNet上包括分类、检测、定位的三项冠军。并且第一次在ImageNet上,机器的性能超过了人类。在这个图像分类任务上,人的错误率大概在5%。
如果回顾一下这几年图像分类方法,我们会发现我们已经从人工设计feature,变成了人工设计网络结构。从2012年的AlexNet开始,到2014年的GoogleNet & VGG,到2015年的ResNet。在2016年时,我们还将ResNet简单的推进到了1001层深。我们选取1001层也是想表达对能做到这步,对于我们来说确实是个神话。目前仍然有大量的网络设计工作不断涌现。
回到到计算的角度上,当我们考察一项不同网络的计算量时,我们会发现在这个Spectrum上,一个方向是计算量愈来愈大,精度越来越高;
当另一个方向研究的确比较少;我们知道今天智能计算不仅要运行在云上,也要运行在端上。对于一个嵌入式设备,计算量可能只有10M FLOPS,我们如何设计网络以取得最好的精度。
我在这里也想分享一下我们Face++旷视研究院最近研究成果 - ShuffleNet。ShuffleNet的计算设计目标是10-50M FLOPS,它的核心思想是进一步把滤波器分组的思想应用的1x1卷积上,使用一个通道间的shuffling操作,有效的增强了分组channel间的信息交换。这个网络在10-100M FLOPS上的性能现在是做好的。和AlexNet相同精度时候,实际加速比可以达到15-20倍。
刚才我介绍的图像分类的网络结构设计。相似的变革也发生在物体检测,另一个核心子任务。
物体检测的任务既要知道图像中有什么,还要知道在哪里。
大概在5年前,我们能把人脸和车比较好的检测出来。但是今天我们可以做非常复杂场景中上百种物体的检测。
这背后是不断演进的物体检测体系结构。第一个重大突破发生在2013年,当时在Berkeley做postdoc的Ross做出了一个叫R-CNN的方法,简单的来说就是对图像中2000多个可能是物体的区域做图像分类,一举大幅提高了检测性能;但是这个方法很慢,需要运行2000次分类神经网络。在2014年,我和微软的同事发现其实不要在原图上做2000次分类,在feature map上做就一样好,一下加速了接近100倍速度;后来Ross加入微软后做了一个工作加Fast R-CNN,他把SPP-Net彻底end-to-end的训练起来了;在2015年,我的博士生Shaoqing Ren,开发了一个方法叫做Faster R-CNN,一举解决了如何获得候选区域的问题并进一步提高的性能和速度,在GPU上能够做到接近实时检测的效率。在去年,我和微软的同事有做了一个方法叫R-FCN,这个方法试图通过一次卷积就能检测出所有物体。
这张表展示了最近10年物体检测体系结构的变化和性能的不断提升。
那么这些视觉计算方式的变革能够带来什么样视觉应用上的变革呢?
这里我先展示一下我们最新成果,把一个ShuffleNet运行在一个成本只有10美元的FPGA上。FGPA是一种可编程的芯片。这个视频展示了我们在一个高清1080p,做每秒30帧的实时人脸检测。注意我们没有用到任何时间序列信息和跟踪技术。我们在每一帧都做检测。
检测人脸是第一步,第二步自然是人脸识别。人脸识别可以按一个分类问题来做,也可以按一个测度学习来做,核心是要学习一个通用的人脸识别特征。
在2013年是,我们当时做了一个最好的人脸识别方法,但是还是和人是有差距的。在2014年,Facebook的研究员们第一次使用深度学习来做人脸识别,已经非常接近人眼的性能了;随后包括Face++在内的研究团队都大幅超过了人眼的性能。
基于高精度的人脸识别,Face++推出了FaceID,一个在线身份认证服务,并已经广泛的应用在支付宝、 互联网金融 、出行认证、银行等不同的行业。FaceID在线身份认证只需要用户用 手机 进行一下自拍,上传到云端,就可以和国家认证的人像数据库进行比对认证。
FaceID目前是世界上最大的身份验证平台,在2016年完成了2.1亿次认证。
我们Face++也非常荣幸的在今天获得了两个MIT TR的大奖:一个是我们和支付宝合作的paying with you face获得2017年十大技术突破之一,这也是近十年唯一一家中国企业获此殊荣;另一个是上个月我们入选MIT TR全球50家做聪明公司的第11名。
除了人脸识别,视觉计算更广阔的应用在于深度理解视频中都发生了什么。
目前在家庭或公共场所有着海量的摄像头,世界上一半以上的硬盘都用来存储这些视频。我们希望能够让机器都能看懂这些视频。
这个问题在安防领域叫做视频结构化。我在这里放一个视频,展示一下我们现在可以做到什么地步了。目前的技术可以精确的检测、跟踪和识别人和车的一些属性,例如男女、是否戴帽子、是否骑车、是那种类型的车辆等。目前的的技术成果已经在智能交通和安防中发挥着作用。
目前我们Face++正聚焦在视觉计算的两个领域,其实视觉计算无人车、医学图像、机器人等领域都在发生着巨大的变革。
最后我谈一下视觉计算中的一些挑战。
我们如果把计算机视觉放在AI的大版图中,大致是这个样子的。我用绿色代表技术的进展已经非常大了,已经很多 商业 的应用了,用偏红色代表目前的深度学习在这个领域带来有限的进展,还需要进一步发展。左边大致叫做感知,右边叫做认知。
那为什么左边容易做,右边不容易做?我认为有三个大的因素:1)左边的任务比较单一,输入输出只需要学习一个映射F(X),这是深度神经网络最擅长的,而右边的任务比较复杂,经常无法用一步映射来解决;2)左边任务中的输入信号都是物理世界产生的,而我们这个世界是有非常强的规律的,而右边任务的输入已经具有高层语义了,我们期望的是更加高层的理解;3)左边任务我们大概知道如何教计算机,右边任务我们经常都不知道如何教计算机。
对于计算机视觉,其实它并不是简单的感知层的任务,它其实是一个跨感知和认知的任务,如果我们想做的和人一样好的。下面我举起一些例子:
首先举一个物体识别的例子。椅子这类物体将Functional Object,是用来完成特定功能的东西,每年被设计出来的椅子成百上千。但对于人来说,只要能坐,都可以称为椅子。但目前对于机器,还不能理解能坐不能坐这个抽象的概念。
再一个例子,图片中的人的这个姿态是不经常发生的。对于使用统计机器学习为技术的人工智能技术,如何能处理好不常见视角下的物体是个非常基本的问题和难题。但是人的认识智能处理不常见情况却非常的出色。
这个例子中,如果他们是我们的家人,我们会轻而易举的识别出谁是谁。我们人类的认知智能非常的自适应,能否很好从比较弱的视觉线索中鲁棒的提取信息。
在看一个物体检测中的挑战。大家仔细看一下,我用红框标注的区域是有一个被严重遮挡的人。目前我们的算法还不能很好的处理这种情况。而人在检测这个人的时候同时动用了推理、想象、预测的认知能力。对于遮挡的建模是非常复杂的,一个简单的映射函数不能有效的解决。
这是另一物体检测中的难点。当物体很小的时候,我们人能根据对场景的理解,推断出红框里面大概率是人。或者说,那里不是人的可能很小。这里就是我们常说的上下文信息。
下面我想问一下大家,你是否能很快的识别出来这张图什么物体吗? 没有上下文,可能不能一下子说出来,但是上下文让我们的识别变得很容易。
这个另外关于上下文的另外两个例子。上下文和我们说的常识是紧密相连的。我们现在学习上下文主要是从物体与场景的共生分布的统计学习。但是物体和场景的共生可能需要指数级多的数据才能真正学到。如果没有知识提取、抽象和应用智能,是很难做到的。
下面一个例子是如何同时跟踪视频中的多个对象。大家如果仔细观察,是能够把每个人的轨迹都正确无误的画出来的。虽然可能我们没有意识到,但是我们其实是动用了非常多的认知智能,比如说对一个新的物体实例的快速学习和识别、在时间序列上的预测能力、和对遮挡的推理。
这段视频是目前最好的物体追踪算法。大家如果仔细观察,特别是人群密集的地方,还是非常有挑战性的。
除了被动的观察时间,下一个挑战是如何和物理世界交互。其中核心要解决的问题是机器人的手眼协调问题,其中涉及连续规划、反馈、预测等核心的认知智能问题。目前的有趣的尝试是使用增强学习来教机器学习抓取东西。但是需要的训练量和时间是可能使我们现在不能承受的。
对于性命忧关的应用,可能我们希望能够达到非常非常高的精度或召回率。比如说、我们不希望潜在的癌症没有被检测出来,我们不希望遇到雨雪天我们的无人车不安全。
最后举一个我参与过的一个看图说话的例子。为了能否知道谁是谁、和这是哪里,我们人为的加入了名人识别和地点识别。大家可以想象,这样的高层知识是无穷无尽的。这也触及到人工智能的精髓 -知识是如何获取、表示和应用的。
视觉计算这么多的挑战也正是他的魅力所在。我对AI是抱有乐观的态度,坚信通过公司的技术、商业、数据循环能够不断推进AI的进展,通过个人的热情、洞察和耐心能够不断突破我们现在的认知,收获不多的惊喜。
我的信心也来自于全球最聪明人们,前所未有的将脑力都投入到其中,也包括在座的各位。谢谢大家。