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支持。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/jacke121/article/details/121813731
内容来源于网络,如有侵权,请联系作者删除!