加速一倍!百度大脑FaceID人脸识别模型是这样做量化的
随着 FaceID 人脸识别技术在手机、IoT 等设备的普及,受能耗和设备体积的限制,端上硬件的计算性能和存储能力相对较弱,这给端上人脸识别带来了新的挑战——需要更小更快更强的模型。
为了实现 FaceID 人脸识别技术在移动端上更快更准的运行,量化就成为一个重要手段。量化简单来说,就是用更低比特数据代替原浮点数据,已达到缩小模型的过程。其最核心的挑战,是如何在减少模型数据位宽的同时,保证人脸识别的准确率。为了解决人脸识别速度和精度的平衡问题,就需要考虑整个人脸识别过程中的诸多因素,接下来依次阐述人脸模型量化的好处、使用传统量化面临的问题、百度 FaceID 人脸识别模型量化技术/量化收益、以及对不同芯片的支持情况等。
人脸模型量化的好处
人脸模型量化,是将以往用 32/64bit 表达的浮点数,用 8/16bit 甚至 1bit、2bit 等占用较少内存空间的形式进行存储。
量化之后的好处是:
-
减少模型体积。降低模型存储空间需求,使模型更容易在端上部署。
-
压缩成本。降低端设备内存带宽,及数据访问功耗,使得设备运维成本降低。
-
加速计算。针对支持SIMD(单指令流多数据流)的设备,以128-bit 寄存器为例,单个指令可以同时运算4个32位单精度浮点,或8个16位整型,亦或16个8位整型。显然8位整型数在 SIMD 的加持下,运算速率要更快。在大部分 ARM 芯片上可以实现40%到一倍的加速。
人脸模型使用传统量化面临的问题:精度受损
传统的人脸识别模型量化映射方式,是将32bit 浮点数转换成8bit 整数,转换过程分为三种方式:
-
非饱和方式:将模型中浮点数正负绝对值的最大值映射到整数的最大最小值。
-
饱和方式:先计算模型中浮点数的阈值,然后将浮点数的正负阈值映射到整数的最大最小值。
-
仿射方式:将模型中浮点数的最大最小值映射到整数的最大最小值。
▲ 红色代表非饱和方式
黄色代表饱和方式,绿色代表仿射方式
那么,使用传统的量化方式,对人脸识别模型进行量化时,无论哪种映射方式,都会受到离群点、float 参数分布不均匀的影响,造成量化后识别精度损失增加。如图,由于左侧的离群点,使得量化的范围更大,让量化后的右侧数值点变的过度密集,增大了量化损失。
百度大脑 FaceID 人脸识别模型量化原理
针对人脸识别模型量化过程中的精度损失情况,百度 FaceID 团队通过对量化技术的研究总结,发现模型量化主要包括两个部分,一是对权重 Weight 量化,一是针对激活值 Activation 量化。同时对两部分进行量化,才能获得最大的计算效率收益。
针对模型权重 Weight 量化,百度 FaceID 人脸识别技术研究人员在做模型训练的时候,加入了网络正则化等手段,实现了让权重分布更紧凑,减少了离群点、不均匀分布等情况的发生。
针对激活值 Activation 量化,百度研究人员采用了一种全新的量化方法,在量化激活值之前,去掉一些离群点来降低模型量化带来的精度损失。百度提出截断式的激活函数,该截断的上界,即 α 是可学习的参数,这保证了每层能够通过训练学习到不一样的量化范围,最大程度降低量化带来的舍入误差。
如上图,百度 FaceID 人脸识别模型的量化的方法是,不断裁剪激活值范围,使得激活值分布收窄,从而降低量化映射损失。具体量化公式如下:
通过对激活数值做裁剪,从而减少激活分布中的离群点,使量化模型能够得到一个更合理的量化 scale,降低量化损失。
百度大脑 FaceID 人脸识别模型量化收益
人脸识别模型作为 FaceID 端人脸识别技术中体积最大、模型最耗时、对结果影响最直接的模块,如何有效的对模型进行加速的同时保证模型精度不变显得至关重要。结合百度自研的量化技术及 PaddleLite 预测库加速,我们实现了在 RK3288 ARM 芯片上有一倍的加速,同时可以保持模型精度不变。
百度大脑 FaceID 人脸识别模型量化技术对不同芯片的支持
百度 FaceID 人脸识别量化技术不仅在 ARM 系列芯片上验证有效,在不同 NPU 芯片上也取得了不俗效果。其中针对目前常用海思3559、RV1109 两款芯片做了量化前后速度及精度对比。在不同芯片上,量化技术都能在速度及精度上取得最佳平衡,实现精度几乎不降的同时加速1倍左右。针对不同芯片做了不同模型适配,目前已支持17款芯片 SDK 专项适配,助力不同客户业务开发需求落地。
推荐阅读:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
DevOps 调查第十年,如何借助工具实现落地?
日前,基础设施自动化服务商Puppet发布了2021年DevOps调查报告。这已经是该系列报告发布的第十年,报告显示,在超过2,650 名 IT、开发和信息安全专业人士之中,有83%的IT决策者表示,他们的组织正在进行DevOps实践,以通过更优质的软件、更快的交付、更安全的系统以及系统的理论体系,来释放更高的业务价值。 DevOps,即Development(开发人员) 和Operations(运维人员)的组合词。 这是一种重视软件开发人员和运维人员之间沟通合作的开发模式,是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。关于对DevOps的理解,有许多不同答案。亚马逊云科技曾总结称,DevOps集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。 DevOps模式 传统的软件开发流程被称为瀑布模型,分为开发、测试、部署三个阶段。软件开发人员先是用数周或数月的时间编程,然后将代码交给测试团队,最后将发布版本交给运维团队部署维护。 现在,随着软...
- 下一篇
深入解析基于 Flutter 的 Web 渲染引擎「北海 Kraken 」技术原理
写在前面 大家好,我是染陌,这是我在 全球开源技术峰会 GOTC 上的一个 topic ——《基于 Flutter 的 Web 渲染引擎「北海 Kraken」》。我主要从技术角度来分享 Kraken 的一些实现原理以及关键的技术特性,现在整理成文字版分享给大家。 Kraken Github:https://github.com/openkraken/kraken Kraken 官网:https://openkraken.com/ 北海的技术背景 说到北海的技术背景就不得不提及跨端技术的演进,很多同学应该都比较熟悉跨端技术的历程了,我还是简单讲一些。 我们知道,浏览器是最成熟的天然跨平台方案。早在 PC 时代,浏览器已经成为了互联网的入口,大家都会习惯性通过浏览器来进行网页的浏览以汲取各种信息,当时我们把这种上网的方式叫做“冲浪”。然而到了移动时代,浏览器在移动设备上并没有一个抢眼的表现,反之因为内存大、弱网环境白屏久、传感器能力缺失(标准跟进慢)等问题使各种质疑不绝。 为了弥补上述浏览器在移动端的一些不足,出现了 Hybrid 技术,在 Web 之上通过容器的能力实现一些非标准化的超集...
相关文章
文章评论
共有0条评论来说两句吧...