乾明 发自 凹非寺
量子位 出品 | 公众号 QbitAI
哪里不懂,直接拿着手机对准哪里就行了。
比如柜子里的化妆品,到底哪个是哪个?对着扫一下就行了:
这是百度App中的黑科技,也是百度秀出的AI技术新高度。
在一年一度的百度AI开发者大会上,百度高级副总裁、移动生态事业群组总经理沈抖拿着手机,打开百度App做了这样一个演示。
无需任何其他操作,只需要移动手机,就能实时呈现手机镜头中多个化妆品信息。随着手机移动,镜头中的画面发生变化,百度App中呈现出来的内容也会实时发生变化。
演示结束之后,沈抖介绍称,这一功能名为动态多目标识别,它能够在100ms以内识别物体,8ms内做出物体位置追踪更新,已经超过了人类。
围绕着这项技术,百度也有相应移动生态作为支持。
百度App这一功能,不仅能够实时动态识别多个目标,还可以快捷找同款、比价格、看评价。喜欢的话,也能直接下单。
在识别的范围上,沈抖也给出了一个数字:
400亿的训练数据,能识别超过1000万种物品,能够支持超过30+识别场景。
只需打开百度App,点击搜索框右侧的相机按钮,选择“自动拍”即可体验。
比如,能够扫人脸测面相运势:
也能扫红酒查酒庄年份:
还能扫题目搜答案看解析、翻译文字识别文字、扫菜品/食材看热量知功效做法、明星看八卦追行程、 扫汽车了解型号价格等等。
此外,也具备文字/图书/海报/药品/货币/电影等多品类的认知能力。可以说是居家必备神器。
如今,在动态多目标识别技术的加持下,体验再度进化——能够同时识别多个物体,货架上的零食,摆在桌子上的日用品,化妆品等等,都可以Hold住。
百度是怎么实现的呢?
从部署到实现,需要解决五大挑战
人工智能技术发展到今天,想要实现多目标识别并不难,但想在手机App上实现动态实时地多目标识别任务,百度需要解决五大方面的挑战。
第一个挑战:在手机App上部署复杂的深度学习模型。
手机本身计算资源十分有限,想要完成多目标识别任务,需要对模型进行压缩优化,来适应设备状况。
沈抖介绍称,百度App实现这一功能,靠的是飞桨移动端部署库。
这是一个百度深度学习平台飞桨的子集,针对移动端场景做了很多的优化。比如:
框架体积缩小至300K;通过汇编指令级速度的优化,在保持低功耗的情况下实现了高性能;框架还支持8种软硬件平台,能够实现在移动端的跨平台覆盖。
在动态多目标识别整个功能上,沈抖表示,把原来云端200多层的视觉算法模型优化到10几层,实现100ms以内识别物体,8ms内做出物体位置追踪更新。
相比之下,人类肉眼识别物体,一般需要170ms到400ms,追踪物体刷新需要40ms左右,这意味着其识别速度已经超过了人眼。
他说,飞桨移动端部署库还在百度地图、百度网盘和自动驾驶等产品大规模使用。于此来看,百度的移动端产品的AI化,也正在全面铺开。
剩下的四个挑战,都是部署的技术——动态多目标识别——本身固有的挑战。
动态多目标识别,需要实时动态运算目标识别模型,在出现变化(移动手机/出现新的物体)的情况下,快速给出反馈。
第二个挑战:在快速、连续稳定的发现新物体的同时,构建新物体和老物体的对应关系。
具体到技术上,有两个问题要解决,一是保证单帧图像的物体检测的性能,二是保证连续帧图像物体检测的稳定性。
单帧物体检测的性能中包含准确率、召回率和检测速度。当前较好的模型,在实现这一任务时都用了非常深的CNN,导致推理过程耗时很长。比如Faster-RCNN,就算用了英伟达Tesla P4 GPU,推断还耗时在200到300ms左右。
针对这一挑战,百度基于飞桨构建轻量级的MobileNet网络,对基础模型进行压缩,提升了预测速度。根据官方数据,最终实现手机端单帧多目标检测耗时60ms以内, 主要物体检测准确率和召回率均在95%以上。
另外,由于深度CNN对图像微小变化泛化能力较差,导致连续帧图像物体检测不稳定,从而导致相关模型在连续发现物体的效果方面与人眼能力相差甚远。
最近几年,学术界开始提出解决方案,比如基于序列的模型,借助多帧信息提升后续的物体检测稳定性。但序列模型计算需求过大, 基本无法在终端上使用。
在这些基础上,百度给出了解决方案:
在实时连续帧数据上,用跟踪完成短时的物体状态保持,并在视野物体发生变化时,在检测模型中融合跟踪算法的输出,给出最终的稳定的连续帧物体检测结果。
不仅能够在移动端使用,效果也非常好。官方数据,最终帧错误率从16.7%降低到2%。
这一方案也被百度申请了专利。
第三个挑战:使反馈信息和放置在真实世界中一样稳定。
也就是说,用户在使用动态多模态识别功能的时候不能感受到卡顿。想要达到这种效果,要求投影的计算性能至少要达到或超过24FPS,即人眼感知频率。
而且,想保持相对位置不变,要求跟踪算法在帧间位置累积偏差控制在3pixel/60帧之内。百度,采用的是SLAM(Simultaneous Localization and Mapping)技术解决上述问题。
这一技术的主要应用场景是机器人在未知的环境中移动,通过对环境的观测确定自身的运动轨迹,同时构建出环境三维地图。
迁移到手机摄像头场景中,是为了实现对物体的极小偏移误差跟踪。实现方式是这样的:
通过手机有限的移动,来定位手机并构建出环境三维地图,将虚拟信息放置在指定的3D坐标上。
在SLAM技术的支持上,百度也采用了VIO(Visual Inertial odometry)方案,并精简后端优化的过程。目标是减少计算量的同时,解决其在优化过程中过滤特征点导致特征点不稳定的情况等等。
为了保持技术实现的稳定性, 也针对手机摄像头的场景进行了深入优化。
第四个挑战:从粗粒度理解和细粒度认知两个层面,实现对视觉信号的多层认知。
识别一个物体时,人类的普遍认知方式是先有初步理解,比如是前方有一辆车。然后是深入认知,比如这辆车是一辆宝马320。
放到机器中也一样,分为粗粒度理解和细粒度认知两个环节。
初步理解阶段,语义粒度比较粗,一般要求毫秒级完成。百度的方案,是通过集成自主研发的移动端深度学习预测框架,在终端完成多种深度学习模型的推断过程来实现这一环节。
他们介绍称,训练模型的数据集来自数千段手机拍摄视频以及一些开源数据集(ImageNet、OpenImage等),一共整理构建了涵盖办公、家庭生活、商场、超市、户外园区和街道等主要场景的300+标签分类标签体系,物体局部图达到百万级。
为了适应移动端部署要求,他们选择了基于MobileNet+分层损失实现多任务模型训练。最终,在初步阶段分类的准确率达到92%、覆盖率80%,在引入模型压缩之后,单图预测耗时仅需40ms。
在具体认知阶段,语义粒度细,要求在秒级别内完成,整体上是一套复杂的云端系统。他们介绍称,这一系统中,包含了百万级别大规模细粒度分类模型,在动物、植物、汽车等类别认知准确率达到90%以上。
再结合ANN最近邻向量检索构建的视觉检索技术,支持相似图、同款商品、名人脸等检索功能,在相同检索时间下,准确和召回率远超Facebook开源Faiss系统。
第五个挑战:在不同场景和行为模式下,要实现发现、跟踪和多层认知等三个环节无缝衔接。
技术能力达到之后,在实现的层面上还需要考虑诸多因素,比如判断用户注意力、注意力集中时的选帧算法、跟踪和检测算法的调度切换策略等等,来提升用户体验。
在注意力判断方面,因为手机端的惯性传感器(IMU)测量单元误差较大,只用来判断剧烈加速运动。
百度采取了结合IMU和视觉特征的方法,利用连续视觉画面计算的位移和尺度变化特征来捕捉微小运动下的变化。
在选帧算法上,百度则是通过采集模拟用户在不同场景注意力变化的情况,并依靠人工标准构建最佳帧训练数据集,通过CNN模型拟合人工标注的过程,选取最佳帧输入到后续计算过程。
背后的原因在于,决定物体发现效果的往往都是触发检测时的第一帧图像质量,这往往会受到光照、清晰度、物体位置等噪声影响而变差。
为了节省计算量,调度算法会实时跟踪算法状态、注意力判断策略的输出,及时调整连续帧检测模型的计算。
通过这些精细组合的调度算法,百度称动态多目标识别的耗电量被控制在了2%/10min以内,满足了可移动端部署对能耗的要求。
正是基于上述的四个方面技术的结合,动态多目标识别技术在百度App中得以实现。
结合百度智能小程序等移动生态中的配套服务,形成了百度独特的AI落地路径。
百度移动生态靠AI形成差异化
如此应用和能力,一方面是百度在移动领域技术变革的直接展示。
怎样用AI来提升用户体验?这一技术就提供了一个范例。
另一方面,在很多人都认为移动领域竞争早已结束的时候,AI技术也在给百度移动生态带来差异化竞争优势。
移动领域的竞争再度拉开序幕,将会比以往更加有“技术含量”,谁能有AI,谁能用好AI,才有可能成为最后的赢家。
此外,DuerOS和Apollo等AI带来的新业务,很容易被大家看到AI技术进展。
但应用于百度App这样的AI技术——比如动态多目标识别,不易被感知,想要落到手机终端,做成一个对用户有用的功能,难度同样很高,挑战不小。
百度能够将其集成App中,带来更加直观的体验,也能从中窥见其多年来在AI领域的积累。
而且,这样的AI技术会对用户体验和生活,带来颠覆性改变。
如果还有人问百度AI变革如何开始,答案是早已开始,比如打开百度App就能体验。
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态