商汤科技研发总监张伟:基于深度学习的计算机视觉如何让机器人识人识物?
说到深度学习,它是近年来最热门的机器人学习的方向之一。而谷歌算是最早一批投入深度学习的大公司之一,微软、百度、Facebook、twitter则紧随其后。
深度学习缘何能如此受众科技巨头们的“捧月”?当然与其巨大的市场潜力密不可分。
这期的机器人大家说,我们邀请了商汤科技最值钱的人——张伟,对深度学习和计算机视觉,以及人脸识别这三个热点进行了一次线上分享。张伟现任商汤集团研发总监。曾获安徽省高考状元,清华大学本科毕业,香港中文大学博士。曾在kaggle数据科学家排行榜上排名全球第六,亚洲第一。在CVPR等国际顶级计算机视觉会议和期刊上发表论文10余篇。
以下是第四期的干货整理:
问题1:简要谈一下深度学习和计算机视觉之间的关系。
张伟:计算机视觉,顾名思义就是让计算机拥有人的视觉。它也是人工智能的经典领域之一,和语音、自然语言处理等等一样,都是研究了很久的一个领域。
那么计算机视觉里面的很多问题都是通过机器学习的方法来解决的,可以说机器学习是计算机视觉的基础。深度学习其实它是近年来最热门的机器学习的方向之一,为什么深度学习在工业界受到热捧呢?其中一个标志性的事件是2012年Hinton教授赢了一个世界性的ImageNet图像识别比赛的冠军。当时其实谷歌也参加了这个比赛,而Hinton的结果是远远超过google的成绩,所以当时就震惊了google,所以紧接着google就收购了Hinton建立的初创公司DNNResearch。
再讲到深度学习,其实它是用神经网络的方法去模拟人脑。神经网络其实在上个世纪八十年代已经非常流行,但是到了九十年代就遇到了一些瓶颈。那为什么深度学习,包括深度神经网络,近年来才取得了重大的突破。归根结底它来源于大数据跟计算能力的突破。随着互联网以及移动设备的普及,大家能够采集到大量的照片、视频等等数据,有这样海量的数据,以及近年来在深度学习的训练的硬件,也就是GPU等等这方面的突破就使得我们可以去应用神经网络来处理学习这样大规模的数据,来学习到非常好的效果神经网络。
同时,深度学习在近年来也有一系列的算法和网络结构的创新。所有这三个要素综合在一起使得深度学习在近年来取得重大的突破,然后为世人所瞩目。那么深度学习它不仅仅在计算机视觉领域取得了重大的突破,而且在语音,在自然语言等等,包括下围棋等等领域,都是取得了一系列重大的突破。
我们商汤的创始团队其实是最早将深度学习应用于计算机视觉领域的华人团队之一。2014年,我们在LFW国际上最著名的人脸识别比赛中,达到了99.5%的识别率。当时远远超过了Facebook同期的另外一个深度学习算法。同时,在2014年我们也是取得了ImageNet的图像检测奥赛的亚军,仅次于google。
问题2:对比传统算法,深度学习有哪些优点?它需要哪些硬件平台来支撑?
张伟:我们使用深度学习方法的过程,首先是应用海量数据进行模型训练,让神经网络能够学习到解决问题的知识。再把这个训练得到了神经网络参数保存在我的模型文件里。在实际部署的时候,我们是不需要海量数据的,我们只需要直接使用这个模型就可以实现这个神经网络的效果。
那么和传统的算法相比,深度学习它是一套非常强大的算法框架。个人认为主要有四个方面。
1.深度学习是数据驱动智能,而对于传统的计算机视觉,则是通过人的直觉去设计特征,然后把这个特征放到机器学习的算法里,去学习到智能。
这个特征工程其实是需要非常多的人的干预的,难度非常大,而且进展也非常慢。使用深度学习算法之后,直接基于图像的原始数据的输入,就可以让深度神经网络在海量数据里学习到这种特征,并且它能通过一系列可视化,还发现深度学习。
2.深度学习的算法的学习能力更强。这个是我们在实验中观察到的,就是数据量越大,深度学习它的能力的发挥会越充分,它的性能会随着数据量的增大而持续的提高。而相对于传统机器学习的方法,由于它的特征是人手设计的,然后参数也有限,当数据量达到一定程度时,它就会遇到瓶颈,学习的过程就会出现饱和,算法性能就不会再提升。
3.深度学习的算法、框架和通用性更好。我们可以用一套深度学习的框架去解决多种不同的问题,它对不同的问题的通用性更强。比如说我们一套人脸识别的框架,既可以做人脸识别,也可以做人体,也可以做其它的物体等。
4.深度学习,其算法框架的灵活性非常好。深度学习的算法对不同用户的场景,以及对不同的计算资源的限制,只需要训练对应的模型,在实际部署时只需要替换简单的模型文件,就能够实现对不同场景、不同的计算资源要求的适应。
说到深度学习需要的硬件支持,可以从训练和部署两方面来谈。
1.首先来谈谈训练。
深度学习的训练,目前业界通用的方式就是用多GPU、多集来做。那么为什么要用GPU来做呢?因为深度学习它需要的是海量的数据,我们训练一个模型,通常要用到上百万甚至上千万的图片数据,而且它的模型的参数也非常多,达到几百万甚至上千万,这其中需要训练的计算量就非常大,它需要把所有的图片都去浏览一遍,然后才能学习到这样的知识。在那个GPU出来之前的话,大家会用这个CPU的集群去训练,当时训练一个模型的周期可能是几周或者是一个月这样子。那么使用GPU之后,我们单块的GPU其实训练几十万的数据,就只需要一两天。
使用单块GPU,我们训练几十万数据的周期可以缩短到一两天。现在我们一般是用多个机器,然后多块GPU来训练。在我们公司建设了上千块GPU,连接在一起的这种计算的集群。商汤集团有一个非常专业的训练平台团队来负责搭建这个集群和不断优化我们的多机多卡的深度学习的训练系统。我们现在训练一个模型的周期一般是几个小时,这样就能大大提高算法研究的效率。我们训练一个模型,然后再修改算法,再训练一个模型,就可以非常非常快。一般的方式是针对模型的大小和使用的数据量来选取最优的GPU数量,然后实现模型训练的最短时间,来最大化我们的算法迭代的效率。
2.再来说到部署对深度学习需要的硬件支撑。
其实我们是没有太多的硬件平台的限制的。我们的方案是有一套跨平台的深度学习的SDK。在不同的硬件和操作系统,包括X86,GPU,包括安卓,windows都能运行。
同时,我们也配备了一支非常专业的异构计算的队来负责优化深度学习的SDK,使得它在不同的平台上都能达到运算效率的最大化。对不同的硬件平台,我们在算法方面主要考虑的是,根据处理器的性能以及内存使用的限制,来决定选取模型的大小。一般我们会训练出多个不同大小的模型,在使用的时候就可以根据需要去灵活地选取需要的模型。机器人平台的特点是它的计算资源往往非常紧张,针对这个特点我们会研究出各种模型压缩的方法,在损失非常小准确度的情况下,将模型大幅压缩,使得计算速度能大大提高。
举个例子,我们给国内某个著名的家庭陪伴机器人提供的人脸属性的模块,当时我们拿到它的硬件,测试了我们的一个大小为15M的模型,它的运算时间是2s左右。通过我们的模型压缩技术,成功将15M的模型压缩到3M,运算时间从2s降到了180毫秒,而准确度的差别只是降低了5‰的样子。
当然这个硬件平台比我们的手机硬件平台还是要差不少的。同样的模型在硬件平台上是180毫秒的运算时间,在低端的手机上其实只要70毫秒的运算时间,也就是说如果我们的机器人的硬件平台的性能能够提高的话,那其实我们的模型的效率也是很可观的。
另外一个例子,是我们给一个迎宾机器人开发的一套基于英伟达的Tegra K1 GPU的一套完整方案,里面包括人脸检测跟踪、VIP识别,还有人脸的去重反复的统计,包括基于属性、年龄、性别等一些反复的统计等等,这些都是能在Tegra K1的移动GPU上做到实时。所以我们部署的时候是可以非常灵活选取不同硬件的方案。
问题3:基于深度学习的计算机视觉能为机器人解决哪些问题?请举例说明。
张伟:我们基于深度学习的技术为机器人提供了一系列的视觉模块。计算机视觉的模块可分为三个层次。
1.第一个层次是我们要让机器人看清这个世界。我们有一系列的图像增强算法,包括在夜间环境光线比较暗的情况下,我们的算法可以对画面进行提亮增强,以及去躁。包括无人机在高空飞行时,可能拍到下面的地面会有一层雾,而我们的算法可以把这个雾实时去掉。
2.第二层次是感知世界。我们可以用计算机视觉的算法去通过RGB摄像头去重建深度,其实也就是重建世界的三维结构,这种三维结构其实有非常广的用途,包括可以用于室内的定位,包括增强识别的算法等等。
3.第三个层次是理解世界。在这个层面我们可以做的事情就更多了,包括机器人主要是跟人去交互。我们有一整套的跟人脸相关的算法,可以实时检测、跟踪人脸,可以检测人脸上多达106个关键点,这个技术也被应用到很多的娱乐应用里面,如用关键点帮助美颜,人脸的贴纸等等。当然我们的技术也可以识别人脸,同时我们还能够识别将近20种人脸属性和人脸的表情。
同时我们还有一系列跟人体相关的算法,包括实时的检测和跟踪人体,包括站着的人、坐着的人、蹲着的人等等,可实时定位人体的14个关键点,从而可以估计人体的各种姿态。我们的算法其实还可以进行一系列的服装识别,目前可识别超过20种服装类型,包括上衣下衣,各种体恤,然后短裤、短裙等。
同时我们的算法还会感知环境:可以对物体画一个框,然后实时地跟踪物体。这个算法目前也是可以在手机上能够实时地跑。基于RGB的摄像头,我们的算法可以做到九类家具家电的检测,包括椅子、沙发、茶几、桌子、冰箱、洗衣机、空调、微波炉、电视等等。同时我们还可以通过手势识别,提供除语音以外的新的交互方式。
这些技术其实有着非常广泛的应用,比如说在服务机器人,像迎宾机器人,巡逻机器人等,它都会用到一系列人脸、人体的算法;在娱乐机器人以及无人机等也都有着非常广泛的应用。在机器人领域,视觉的核心价值就是让机器人去理解人和环境,不管是提升机器人跟人之间的交互,还是说根据特定用户的特点去提供个性化服务,都是在提升机器人的附加价值。
除了刚才提到的机器人应用,其实我们也在探索一些工业机器人方面的应用。深度学习它有一个优势就是可以进行端到端的训练,现在一个比较前沿的方向就是利用端到端的训练,然后训练机器人,也能够根据摄像头的输入来确定机械臂的控制参数,从而实现物体的抓取。那么其实我们目前也在进行一些这方面的探索,包括我们会用增强学习的技术来让机械臂不断的自我学习,增强学习技术。其实AlphaGo下围棋也用到了这一技术。
问题4:在不基于云的情况下,IoT设备采用人脸识别目前面临很多问题,能详细说明都有哪些困难吗?解决方案有哪些?
张伟:首先说说人脸识别算法,目前业界标准的人脸识别算法其实主要有三大步:
第一部是检测人脸,就是从图像中把人脸的位置给找到,然后把人脸的相关像素给抠出来。
第二步是检测人脸的关键点,以及对齐人脸,也就是说我们会检测人的眼睛、鼻子、嘴的位置,然后基于这些位置去计算一个变换,然后把人脸拉正。第三步是用深度学习的算法去提取人脸的特征,进行人脸的比对。
人脸识别的应用在IoT设备上,我认为困难主要有两点:
1.计算资源的限制。因为刚刚提到的这三步其实每一步都是基于深度学习的算法去实现的,那么深度学习的算法就在于,它的计算复杂度相对于传统算法来说还是比较大的,那么在这种设备上去运行一整个人脸识别的流程的话,会消耗很多计算资源,所以很难达到实时的人脸识别。
目前一种典型解决方案是把人脸识别的流程拆分成两部分:一部分放到终端上,一部分放到语音上。把人脸的检测部分放在终端上,通过前端视频流进来,然后在终端上抓取人脸,再把人脸的相应像素块传到语音上,然后在语音上完成人脸的识别。
这个方式的缺点在于:第一,一旦设备离线后,人脸识别就无法进行了;第二,人脸的像素从终端传到语音上存在一定的网络传输延时,从而会影响实时性的识别。
所以我们比较倾向的方案是把整个人脸识别的流程全部放在终端上。而这样做其实是有非常大的难度,为了达到这个目标,我们进行了两方面的探索:
1)第一,进行模型的压缩。我们把每个流程的模型都进行最大幅度的压缩,这样就节省了计算的资源。
2)第二,改进算法。我们把其中的模块进行合并,然后用深度学习做端到端的识别训练。这也是深度学习的一个非常大的优势,它可以做端到端的识别训练,减少算法模块,从而提高算法运行效率。但是这种方案对算法研发的要求非常高,需要花非常多的研发力量去完成这件事情。
2.场景数据的搜集。我们能搜集到的机器人场景的数据其实是非常非常有限的,因为机器人是一个新兴领域,大家也是刚开始将机器人跟视觉、人脸识别一系列功能相结合,也没有形成数据反馈的渠道,所以我们手上能够收集到的机器人的数据非常有限。而机器人的场景又有它自身的特点,包括机器人个子比较矮,它看人的角度可能是仰视的,或者机器人的距离变化会比较大,机器人的摄像头,它自身的清晰度等,以及机器人应用场景的光线,都会有影响。
那我们进行深度学习算法的研发,包括应用,也是有一套反馈的流程和机制,来保证它的算法效果不断的提升。我们会先应用通用数据去训练出模型,然后去部署模型,这是第一步。第二步是通过模块去收集一系列的脱敏数据。第三步是我们用这些数据去做模型训练升级,然后把升级后的模型又重新部署到设备上,再进行一系列的迭代。
在机器人的应用领域,我们设计的模式其实是离线运行——在线做数据的收集和更新模型。什么意思?就是说我们保证整个人脸识别的过程能够在脱离网络的情况下也能完整的运行。同时在设备连上网时,我们会上传脱敏的数据,会同时把更新后的模型下载到本地部署,这样就能够完成整个数据收集的流程和模型的迭代。
模型的迭代和数据的搜集,其实对深度学习算法的性能提高是非常重要的。举个例子,在2015年,互联网金融行业,人脸识别的进展是非常非常惊人的。我们就是在互联网金融领域训练人脸识别的模型,在不到一年的时间里,我们的识别率从十万分之一降低到了千万分之一。为什么能够取得这么大的提升?主要得益于我们通过业务搜集到了上亿的人脸脱敏数据,再利用这些数据去训练模型。那么在这样的数据量下,我们会发现模型效果有惊人的提升。
同时场景数据的收集对于我们的模型压缩也是非常重要的。比如说如果机器人工作在光照非常好的环境中,模型是不需要对特别暗的光线去做适应的,因而模型的复杂度要求就大大降低。同时我们也可以通过压缩的方式去除掉模型中的信息,有针对性地搜集场景数据可以使我们的模型算法在特定场景中达到最优,同时效率也达到最优。
问题5:机器人的传感器由于体型的物理限制,天然要分布在传输距离比较远的各部分,有行业人士认为,将算力由集中处理分散到各传感器前端去处理是未来的趋势,您怎样看待这一观点?
张伟:我比较赞同这个观点。深度学习放到传感器前端是一个趋势,它的优点有二:
1.更加方便。部署起来复杂度比较小,使用起来也很简单,不依赖于网络去做这样的事情。刚刚也举了人脸识别的例子去说明这样一个趋势。
2.可以去重心化。如果一个传感器前端损坏,并不会影响其它传感器的前端,各个传感器之间相互会比较独立,这样更便于维护、增加或减少传感器。
需要补充的是,对于机器人领域,我认为不仅仅是要在前端去处理这样的信息和这种视频流,而且我们要把处理之后的结构化信息聚合到语音云上。比如说巡逻机器人,它可以在前端去处理视频流,检测到人脸,然后识别人脸ID,再检测到人体,人的结构信息提取出来后,再变成结构化的信息,然后统一上传到服务器。然后在服务器上便于监控和处理,同时把视频流的信息结构化之后,还可以避免大量的传输视频图片,从而减轻传输的压力。同时这种巡逻机器人,将来还有可能跟安防摄像头进行打通,实现整个小区的监控一体化。
另外一个例子是迎宾机器人,我们在前端进行人脸检测、人脸跟踪、人脸识别,然后同时进行人脸去重和人数统计,把统计到的VIP信息、访客统计信息传输到云上,我们可以在云上进行远程的服务管理和定制化的广告投放。
所以,把计算分散到传感器前端是一个趋势,它的挑战在什么地方?主要是计算性能,我们把一系列的深度学习算法放到前端去,需要有比较好性能的传感器,将来可能会用深度学习的芯片。目前来说人脸的识别可以放到前端去,将来想把更复杂的任务,比如说人体识别、物体识别等等都放到前端去,这个是非常依赖于传感器计算性能的提升。
自由答疑环节精彩问答摘录
Q1:张老师,当前人脸检测,关键点,以及追踪最好的算法分别是什么?
张伟:其实看人脸检测,关于脸以及追踪这些最好的算法,我们可以去看最近的比如说各个比赛的榜单上面排名前几的算法。比如说检测的话,其实现在主流的都是基于这种RCN的框架,那么基于这样的框架的话,大家不仅仅会去做各种性能的提升,而且也会去考虑去做一些这种加速,比如像YOLO算法。
Q2:如何看人工大脑?国内有公司做了个人工脑。
张伟:关于人工大脑其实目前深度学习的算法大都还是基于这种监督的数据,那么其实他能学习到的东西也是比较确定性的东西,所以其实个人觉得人工智能其实离这种真正的人的这种智能还是有一定的差距。
Q3:能否讲讲深度学习专用芯片以及FPGA技术作为深度学习加速器?
张伟:关于深度学习芯片和FPGA技术作为深度学习加速器,确实我不是这方面的,这方面不是我的专长,其实我对这方面了解比较有限,从我们算法研发的角度来说,其实我了解大部分这种深度学习的专用芯片以及FPGA技术,它其实都是基于这种类似于开源的这种框架去研发的,那么对于我们来说我们更希望说它能够开放底层的这种模块,让我们能够在它的基础上去实现我们自己的这种网络结构和这种算法。
Q4:深度学习训练出来的大量数据那是不是需要有很高效的数据库来管理才能提高查找速度?对于单机版的要求是不是太高了?
张伟:如果是做人脸识别的话,我们需要存储的是把人脸图像转化为深度学习的特征,每个特征其实是非常小的。百万的人脸数据其实需要的存储量也是非常小的,我们存储这样的特征可以用比较高效的数据库,也可以用这种普通的文件存储的方式。
Q5:深度学习主要工作就是调参数?
张伟:其实深度学习的主要工作不仅仅是调参数,我们做深度学习的研究跟做传统的算法研究也是比较类似的。最重要的是说理解算法工作机制,然后能够设计算法、修改算法、发现算法不工作的情况,然后能够解决算法不工作的问题。如果仅仅是调参数的话,那其实把深度学习完全当做一个黑箱也很难,最大限度地发挥深度学习算法的威力。
Q6:你觉得深度学习技术在投资领域会有什么应用,或者说您觉得最大的可能应用是什么?
张伟:深度学习应用在投资领域可能会有多方面的应用,一方面是从股票价格的时间信号里面去自动提取这种特征;另外一方面应用深度学习的技术去进行新闻分析,然后从新闻中提取和投资有关的信息,我觉得这两点可能是深度学习可能会在投资领域的应用。
Q7:深度学习能否用于量化投资?能否用于金融是市场?能否预测股票或期货的涨跌?
张伟:深度学习能否预测股票和期货的涨跌,这个我觉得没有做实验,其实是没有发言权的,我觉得从理论上来说它可以做这件事情,但是它能否真正去实现盈利的话,那得靠实践去检验。
Q8:深度学习未来3到5年实现的目标是什么?
张伟:深度学习未来三到五年的目标,其实现在深度学习的趋势是进行无监督的学习。因为在真实的世界中获取标准数据,其实是非常难和非常消耗时间和金钱的。无监督的数据在真实世界中是非常容易搜集的,目前一个比较大的趋势是会通过,比如说对抗,甚至是网络,去实现无监督的学习,或者是通过增强学习去实现更有效的监督式学习。
Q9:针对一个具体应用学习时,用多少层网络,每层多少节点,有没有好的方法,还是靠多测试?如何判断性能达到极限了?
张伟:针对具体应用进行学习时,其实有一些经验的东西在里面。我们一般是用一个比较复杂的网络在这个应用上去达到它的最好水平,然后以这个水平作为一个baseline,然后针对我们具体的应用的这种环境的限制去减小我们的网络,然后达到跟baseline比较接近,但是计算的效率会大大提升。如何判断性能达到极限?其实是主要是通过观察训练和测试的准确度,以及收敛的速度等等。
Q10:深度学习会形成新模式的算法吗?
张伟:深度学习其实可以在数据的驱动下从数据中学习到新的有用的特征和模式,但是就是说它还是局限在深度学习的算法框架里。目前的深度学习它无法超越这个任务,它能够在任务的框架内能够学习到一些之前没有见到过的图像的知识等等。
Q11:用来训练的数据源一般是通过哪些方面去获取?
张伟:训练的数据源有多种途径,包括从互联网上获得的数据,包括我们和业务伙伴合作获得的数据等等,包括我们自有的这种云平台搜集到的数据等等。我们也会组织一些这种数据的采集。
Q12:目前谷歌推出的TENSER FLOW平台是不是可以取代公司自建的计算集群?
张伟:现在开源的一些深度学习的框架,比如说TENSER FLOW等,虽然能够非常大地促进深度学习的进展,但是其实它并没有开源一些最核心的地方,比如说多机训练。而我们的计算集群,不仅仅是说能够让多GPU一起进行训练,同时我们有复杂的任务排队和调度系统,能够让很多不同的人,同时来使用GPU集群,达到GPU利用率的最大化。这个是TENSER FLOW能够替代的,我相信谷歌内部其实也是有类似的系统,但是它并不会开源出来。
Q13:深度学习是不是无所不能?
张伟:其实刚刚也提到,深度学习它其实离人的智能还是有一定差距的,它只能用来解决特定的任务来替代部分的重复的人的劳动。所以目前的人工智能最大的意义在于它可以替代繁重的人类劳动,能够让我们真正解放出来。然后再去研究怎么去把人工智能变得更好,然后去改进人工智能的算法。