加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

TensorRT如何加速人脸识别

发布时间:2020-06-12 12:53:37 所属栏目:创业 来源:站长网
导读:副标题#e# 为了提高人脸识别的实时性,我们团队将传统的利用神经网络框架推理升级至统一的 TensorRT 加速推理。经实验对比,经 TensorRT FP16 模式推理加速后的人脸识别不仅几乎无损精度,甚至于在部分场景精度有提升,识别速度提升为原来的 2.3 倍。统一加

TensorRT 开发者分别对网络推理过程中涉及的权重 ( weights ) 和激活值 ( activation ) 做了实验,得出对权重做饱和映射相对于不饱和方式并没有精度的提高,而对激活值做饱和映射有明显的精度提升。因此在 TensorRT 中对权重采用的是不饱和映射的方式,对激活值采用的是饱和映射的方式。

那么为什么非饱和映射的方式相对饱和映射有精度的提升?此外非饱和映射中的 T 要如何选取呢?首先来看下图右边所示,该图是 resnet-152 网络模型中间层的激活值统计,横坐标是激活值,纵坐标是统计数量的归一化表示。

TensorRT如何加速人脸识别

可以看到图 4 中白线左边的激活值分布比较的集中重合,而白线(该线对应的就是阈值 T 线)右边,即红色框内的激活值就比较的分散,而且在红色框内的激活值在整个层中所占的比例比较少,因此这部分可以不考虑到映射关系中,如图右边所示。研究发现大部分的网络都具有这种大部分激活值集中,少量激活值分散的特点。

T 值需要满足 FP32 模式到 INT8 模式转换的信息损失最小化,而信息损失可以用 KL 散度(也叫做相对熵)来衡量,即如式(3)所示:

KL_divergence(P, Q) := SUM( P[i] * log( P[i] / Q[i] ), i)   (3)

其中 P,Q 分别表示 FP32 和 INT8 模式下的分布,每一层 tensor 对应的 T 值都是不同的,而确定 T 值的过程被称为校准(Calibration), 如图 5 所示校准的原理图。

TensorRT如何加速人脸识别

首先需要在校准数据集(Calibration Dataset)做 FP32 推理,然后获取每一层激活值的直方图,并用不同的量化阈值生成相应的量化分布。其中量化阈值就如上面的激活值直方图中,等间隔的虚线所对应的激活值就是量化阈值,我们需要的 T 值就是这些虚线中能够使得 KL 散度最小化的激活值。这个校准是需要一些时间的,所以每次进行量化的时候,会将校准得到的 T 值都保存在相应的文件中,待下次进行 FP32 到 INT8 推理模式转换的时候,直接读取保存了每层 T 值的文件,这样可以节省整个流程的时间。

显而易见的是校准数据集(Calibration Dataset)会直接的影响到激活值的分布,进而影响到 T 值的选择。校准数据集要具有代表性、多样性,比如在图像分类应用中,校准数据集的要能够代表所有的分类目标。验证集 (validation dataset) 的子集是比较理想的校准集,当然有人或许会问,把全部的数据用于校准不就可以最好的体现原始数据分布么?但是这样的话也会增加整个流程的时间,而经过研究和实验表明校准集只需要 1000 个样本即可。

TensorRT INT8 量化的性能和精度,图 6 和图 7 来自 Nvidia 官方的 PPT。

TensorRT如何加速人脸识别

TensorRT如何加速人脸识别

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读