本工程基于VGG16 Refindet SSD进行目标检测,在没有使用TensorRT库的时,测试没帧图片所需时间130ms(从读入原始图片到测试出最终的结果)。使用半精度(FP16:float16)每帧图片的测试时间降到50~60ms;使用单精度(FP32:float32)每帧图片给的测试时间降到80~90ms。
使用TensorRT提速时如何操作?
首先平台支持半精度计算,这个如何判断?
在TensorRT的示例代码中有这样一行代码:
bool useFp16 = builder->platformHasFastFp16();
若返回的是false,则平台不支持FP16计算;若返回是true,则平台支持FP16计算;
其实最终决定是否能进行FP16计算的因素是你的平台使用的集成显卡(igpu),还是独立显卡(dgpu),只有集成显卡才支持FP16计算(参考:https://github.com/dusty-nv/jetson-inference/issues/134);
如果代码返回是false,强制进行FP16计算,并不能提速;
现将设置精度计算的几行重点代码摘录如下:
bool useFp16 = builder->platformHasFastFp16();
DataType modelDataType = useFp16 ? DataType::kHALF : DataType::kFLOAT;
const IBlobNameToTensor* blobNameToTensor = parser->parse(deployFile.c_str(),
modelFile.c_str(),
*network,
modelDataType);
。。。 。。。(省略)
if(useFp16)
{
builder->setHalf2Mode(true);
}
参考:
https://blog.youkuaiyun.com/dark5669/article/details/79976015
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#mixed_precision(中的2.4.1节)
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#deploy_embed(中的2.5.2节)