pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument

问题描述

该报错来自tensorrt官方给的例子:yolov3_onnx。
按照README.md指引,运行python2 yolov3_to_onnx.py成功,但运行python3 onnx_to_tensorrt.py时报如下错误:

xiaor@xiaor-desktop:/usr/src/tensorrt/samples/python/yolov3_onnx$ sudo python3 onnx_to_tensorrt.py
Reading engine from file yolov3.trt
Running inference on image dog.jpg...
Traceback (most recent call last):
  File "onnx_to_tensorrt.py", line 179, in <module>
    main()
  File "onnx_to_tensorrt.py", line 156, in main
    trt_outputs = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream)
  File "/usr/src/tensorrt/samples/python/yolov3_onnx/../common.py", line 143, in do_inference
    [cuda.memcpy_htod_async(inp.device, inp.host, stream) for inp in inputs]
  File "/usr/src/tensorrt/samples/python/yolov3_onnx/../common.py", line 143, in <listcomp>
    [cuda.memcpy_htod_async(inp.device, inp.host, stream) for inp in inputs]
pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument

解决过程

网上很多文章(比如这篇)给出的原因是:

tensorrt推理引擎输入推理数据的维度不对,请仔细检查输入数据的类型和维度信息是否正确!!!

但对新手如我并不太友好,怎么检查?类型和维度信息具体指什么?这些都没清楚。一个月过去了,我三天打鱼两天晒网地去学了一些相关的内容,再次尝试解决这个问题,算是成功了吧(至少不报这个错了)。

解决方法

yolov3_to_onnx.py这份文件里会需要下载一份名为yolov3.cfg的文件,估计链接被墙了我是自己找资源下载了放到文件夹下的。打开这个.cfg文件,看看输入的长宽数据(大概在第8、9行的样子),我的是320×320(不出意外大家的应该都一样)。
在这里插入图片描述
再打开onnx_to_tensorrt.py,找到input_resolution_yolov3_HW这个参数定义,原本是(608,608)(忘记是不是自己一个月前乱改的了,反正不是这个数也你不用慌hhhhh) ,我把它改成和我cfg文件一致的(320,320).在这里插入图片描述
再次运行python3 onnx_to_tensorrt.py,这一行不报错啦~ 虽然后面还有错误,一步步来吧害= =
在这里插入图片描述


更新于半小时后,小伙伴们我太激动了啊啊啊啊!上面那张图片的错误也解决了,运行成功!原地起飞!!!需要出这个reshape错误的解决方法的可以私聊我或者评论~ (感觉我这么一会儿就能解决的话大家也可以解决的亚子)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值