网上找了篇文章,用tensorrt自带转换工具trtexec转成engine格式的方法,网址如下:
https://www.cnblogs.com/xiaoxiaomajinjiebiji/p/14451398.html
文章中举例的转换指令为:
/usr/src/tensorrt/bin/trtexec --uff=/home/model/model.uff --uffInput=input_1,1,3,224,224 --output=softmax/Softmax --saveEngine=/home/model/model.engine --outputIOFormats=fp32:chw --buildOnly --useCudaGraph
其中--uffInput后面跟的是模型输入节点名称和训练模型的图像尺寸,但是中间多了个1不知道是啥意思
--output为模型的输出节点名称
--outputIOFormats=fp32:chw中fp32为模型的精度,chw为模型输出的格式
所以根据上述指令说明,再按我的模型,我的转换指令:
trtexec --uff=REF-DEFECT_1-200-200__0810005631.uff --uffInput=InputNode,1,200,200 --output=score --saveEngine=REF-DEFECT_1-200-200__0810005631.engine --outputIOFormats=fp16:chw --buildOnly --useCudaGraph
其中为提高推理速度,模型输出精度我改成了fp16,测试了下,发现预测结果不正确
后面改成fp32,预测结果正确
最终正确转换指令为:
trtexec --uff=REF-DEFECT_1-200-200__0810005631.uff --uffInput=InputNode,1,200,200 --output=score --saveEngine=REF-DEFECT_1-200-200__0810005631.engine --outputIOFormats=fp32:chw --buildOnly --useCudaGraph
tensorrt版本为:TensorRT-8.0.3.4.Windows10.x86_64.cuda-11.3.cudnn8.2