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

TensorRT如何加速人脸识别

发布时间:2020-06-12 11:30:47 所属栏目:创业 来源:站长网
导读:副标题#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如何加速人脸识别

从上面图 6 和图 7 中可以看到经过校准的 INT8 推理相对于 FP32 的推理,准确率(Accuracy)有略微的损失,也可见在部分情况下(图 6 表格中绿色所示)INT8 推理相比 FP32 推理准确率有略微提升。另外可以看见一个趋势,随着 Calibration dataset 中图片数量的增加,INT8 相对于 FP32 的精度损失是在逐渐减小。从 Performance 这张图中可见在不同的推理 Batch Size(注意实际推理的 Batch Size 和 Calibration 过程中的 Batch Size 并不需要保持一致)设定下,INT8 推理相比于 FP32 推理的加速比。图中可见 Batch Size 越大,加速效果越好,在 Batch Size 为 128 的时候,加速比大约在 3.5 倍左右,当然实际的加速比和硬件平台,还有神经网络本身也有关系。除了速度上面的提升以外,低精度推理在存储消耗上相对于 FP32 也有相应的优化,如图 8 所示:

TensorRT如何加速人脸识别

图 8 中,INT8 on P40 即表示在 P40 显卡上进行 INT8 推理,可以看出相比 FP32 推理模式内存占用减少了 3 倍多,而速度提升了 3 倍多。而 FP16 模式也减少了 30% 的内存占用,速度提升了近两倍。

当然,上述的实验对比测试均来自 Nvidia 官方,具体到我们实际的深度学习场景,还需要经过实验进行对比精度的损失以及速度的提升,在第三章中,将会概述我们团队利用 TensorRT 加速人脸识别的实验流程以及效果,还有在实施中遇到的一些问题和解决方法。

② 神经网络优化

TensorRT 除了通过支持 FP16 和 INT8 这两种低精度模式的推理来提升速度以外,其在底层会根据 GPU 特性对神经网络进行相应的重构和优化。首先是其会删除一些并没有使用输出的层,以避免不必要的计算。然后会对神经网络中一些可以合并的运算进行合并,例如在图 9 所示的原始网络,TensorRT 会将其中的 conv、bias、relu 这三个层融合在一个层中,即图 10 所示的 CBR 层,这个合并操作也被成为垂直层融合。进一步的还有水平层融合,即如图 10 到图 11 的过程,将处于同一水平层级的 1x1CBR 融合到一起。

TensorRT如何加速人脸识别

TensorRT如何加速人脸识别

TensorRT如何加速人脸识别

2、Inference Server

Inference Server 是一类为机器学习模型提供一站式管理、推理服务、集成等功能的高性能模型服务系统。以下简要介绍几种常见的 Inference Server。

① TensorFlow Serving

(编辑:核心网)

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

热点阅读