tensorrt 低精度推理

x33g5p2x  于2021-12-09 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(551)

tensorrt 使用后,精度可能下降,下降的原因:

1.输入尺寸不一样,

2.rgb bgr模式不对

3.阈值不一样

4.nms阈值不一样。

5.层不一样?

据说TensorRT7实现了尽量低精度运算,还没有使用过。

TensorRT5要设置低精度运算的话,可以设置为Fp16或int8的。

1 Fp16

需要先查询设备是否支持fp16:

bool fp16 = builder->platformHasFastFp16();

返回true了,才能设置引擎以fp16进行推理。

builder->setFp16Mode(true);

2 int8

if (builder->platformHasFastInt8()) { … };

需要先生成int8校准表。怎么生成校准表呢?要通过训练500张左右的图片(最好来自同一个训练集),将网络权重映射到int8的取值范围。

再将int8校准表设置到引擎里。

  builder->setInt8Mode(dataType == DataType::kINT8);

  builder->setInt8Calibrator(calibrator);

原文链接:https://blog.csdn.net/shizao/article/details/103619026

下表列出了TensorRT层和每个层支持的精确模式,转自:

TensorRT层和每个层支持的精度模式 - 今夜无风 - 博客园

TensorRT运行demo程序sample_uff_ssd.exe,发现用fp16精度运行 比 fp32还慢,如下图所示

原因是:根据NVIDIA的说法,支持full-rate FP16 performance 的型号是: Tesla P100, Quadro GP100, and Jetson TX1/TX2。GTX 1050, 1060, 1070, 1080, Pascal Titan X, Titan Xp, Tesla P40等型号,不支持full-rate FP16,所以,在这些型号中使用fp16精度反而比fp32慢。

简单来说就是硬件有没有Native FP16 support,即native FP16 instructions支持。

转自:TensorRT--用fp16精度运行 比 fp32还慢? - 简书

相关文章