agender-mxnet 进行tensorrt部署遇到问题(已解决)

1.首先进行trtexec 进行转换(默认已经安装tensorrt)

首先进行 export PATH=/tensorrt路径/bin:$PATH   #这行防止使用trtexec 指令系统显示找不到指令

trtexec --onnx= 文件.onnx --saveEngine=保持名称.engine --verbose
--onnx=<onnx_file> \						#指定onnx模型文件
        	--minShapes=input:<shape_of_min_batch> \ 	#最小的batchsize x 通道数 x 输入尺寸x x 输入尺寸y
        	--optShapes=input:<shape_of_opt_batch> \  	#最佳输入维度,跟maxShapes一样就好
        	--maxShapes=input:<shape_of_max_batch> \ 	#最大输入维度 
        	--workspace=<size_in_megabytes> \ 			#设置工作空间大小单位是MB(默认为16MB)
        	--saveEngine=<engine_file> \   				#输出engine
        	--fp16   									#除了fp32之外,还启用fp16精度(默认=禁用)
 minShapes、optShapes、maxShapes 这三项是当onnx input输入显示是 batchsize 动态输入时需要指定batchsize大小进行推理。如果是固定输入则不需要这三项。

报错显示
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第1张图片
这里报错查询资料显示:是因为源代码mxnet 网络进行激活层使用函数PRelu激活导致tensorrt不支持该算子操作。如下图所示
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第2张图片
使用netron查看onnx也可知:
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第3张图片
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第4张图片

查询资料

agender-mxnet 进行tensorrt部署遇到问题(已解决)_第5张图片

解决办法1:更改python代码将PRelu替换成Relu。

具体可见该博客
转载:
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第6张图片

解决方法2:未尝试TensorRT5.1.6加速PReLU,更改onnx-tensorrt 注册算子。

详见该博客
https://blog.csdn.net/tfu259/article/details/103520132

解决方法3:TensorRt - caffe中支持prelu

详见该博客
https://blog.csdn.net/qq_35759574/article/details/88415101
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第7张图片

解决方法4:已解决 使用sim_onnx 进行 onnx 简化

从这个界面获取提示,报错是在节点PRelu 节点未定义shape,需要从新指定shape。
显示代码:

import onnx
from onnx import shape_inference

model = r'/home/ying/文档/工作交接/agender_sim.onnx'
#上一步保存好的onnx格式的模型路径
onnx.save(onnx.shape_inference.infer_shapes(onnx.load(model)), model)
#增加节点的shape信息

agender-mxnet 进行tensorrt部署遇到问题(已解决)_第8张图片
这里看到slope 节点 只有1024 一维信息,与输入1x1024x7x7 以及输出 1x1024x7x7 不匹配。需要转换

提示链接
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第9张图片

import onnx
import onnx_graphsurgeon as gs
import numpy as np

graph = gs.import_onnx(onnx.load("/home/ying/文档/工作交接/agender_sim.onnx"))

for node in graph.nodes:
    if node.op == "PRelu":
        # Make the slope tensor broadcastable
        slope_tensor = node.inputs[1]
        slope_tensor.values = np.expand_dims(slope_tensor.values, axis=(0, 2, 3))

onnx.save(gs.export_onnx(graph), "/home/ying/文档/工作交接/agender_fixed.onnx")

这里可能会提示
在这里插入图片描述
可以在 (/home/ying/TensorRT-8.0.1.6)安装tensorrt目录下/ onnx_graphsurgeon/中找到whl文件进行安装。
最后使用netron打开生成onnx文件。
agender-mxnet 进行tensorrt部署遇到问题(已解决)_第10张图片
然后使用该onnx文件转换engine。

./build/parsers/onnx/onnx2trt /home/ying/文档/工作交接/agender_fixed.onnx -o /home/ying/文档/工作交接/agender.engine

agender-mxnet 进行tensorrt部署遇到问题(已解决)_第11张图片

你可能感兴趣的:(自动驾驶,mxnet,深度学习,人工智能)