pytorch经onnx使用TensorRT部署转换踩坑记录

老版本踩坑

1. Pytorch模型中不能有条件支路
因为Pytorch模型转onnx模型的过程中,需要传给模型一个假的输入,然后做一次前向传播,再根据前向传播的结果来做模型的转换
2. Pytorch中的某些操作在TensorRT中不支持

  • x = x.view(x.size(0), -1)不支持,换成x = x.flatten(1)
  • torch.unsqueeze(x[:, 0], 1)不支持,需要去掉
  • 动态size是不支持的,比如h = x.size()[2],改成具体数值

3. Pytorch中的多卡操作更改了模型名字,转换模型的时候没有导入权重

4. TensortRT找不到ERROR: builtin_op_importers.cpp:727 In function importCast:
取消gpu转模型,用cpu转换可以解决

5.转换注意
Pytorch转libtorch的pt模型,注意加上语句model.eval(),防止后向传播
6. interpolate转onnx

  • pytorch1.1 没问题,tensorrt端使用6也没问题
    b1= interpolate(b1, size=(h, w), mode=“nearest”, align_corners=False)

  • pytorch1.3转换,Assertion failed:
    ctx->tensors().count(inputName),转换模型时换用pip install onnx==1.4.0 with
    pytorch 1.3.1,该错误消失

  • pytorch1.3转换,发现upsample层会多一个constant,转换成功,但是tensorrt端Assertion failed: (nbDims >= 1) && (nbDims <=3)报错,是由于不支持F.interpolate的双线性模式,改为b1= interpolate(b1, size=(h, w),mode=“nearest”)可以工作,但是图片处理结果会影响使用。

  • 上采样转换出错的解答帖 https://github.com/NVIDIA/TensorRT/issues/284

7 莫名问题,可以跑但是序列化存不了
是一些奇怪的问题,有的层可能不支持,然后还没报错,一一排除法

具体算法转换踩坑

按照上述的换了插值,双线性换为nearest

  • opset_version 11,pytorch1.3有Assertion failed: ctx->tensors().count(inputName)
  • pytorch1.1失败,有constant不支持
  • pytorch1.5可以转换,但是报错
  • opset_version=10,pytorch1.3转换后While parsing node number 303 [Resize]:Assertion failed: scales.is_weights() && “Resize scales must be an initializer!”
  • 在上一步基础上把插值全部展开,写为常数,可以看到原来的resize节点,都变为resize 下面写着scales<4>
    详细见 https://github.com/onnx/onnx-tensorrt/issues/361
  • 单输入改为双输入,放在tensorrt里检测到两个输入,同时序列化发生冲突,使用import onnx
>>> model = onnx.load("E:\\RSVP\\model\\hdr\\hdr.onnx")
>>> onnx.checker.check_model(model)

发现pytorch1.3转换的模型报错ValidationError: Node () has input size 5 not in range [min=1, max=1].改换pytorch1.5,同样测试onnxchecker没有报错,尝试pytorch1.5转换
在这里插入图片描述

  • Assertion failed: scales.is_weights() && “Resize scales must be an initializer!”
    在这里插入图片描述

**

tensorrt升级

**
上述环境都是TensorRT6版本,后面升级为7.0
升级到tensorrt7,api区别在于

const auto explicitBatch = 1U << static_cast<uint32_t>(NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);
auto network = SampleUniquePtr<nvinfer1::INetworkDefinition>(builder->createNetworkV2(explicitBatch));
//auto network SampleUniquePtr<nvinfer1::INetworkDefinition>(builder->createNetwork());

目测TensorRT7配置pytorch>1.5版本,目前错误还较少
再也不想这样转模型了,心好累-。-,后面学习一下自定义模型吧,还是这样方便。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
(-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'是一个常见的错误消息,它表示在调用cv2.imshow函数时,图像的宽度或高度小于等于0。这个错误通常是由于图像加载失败或图像的尺寸设置不正确导致的。要解决这个问题,你可以尝试以下几个方法: 1. 确保你的图像路径正确并且图像文件存在。你可以使用绝对路径或相对路径指定图像路径。 2. 检查图像的尺寸是否正确。你可以使用cv2.imread函数加载图像并使用cv2.imshow函数显示图像之前,可以使用cv2.imread函数读取图像,并使用shape属性获取图像的宽度和高度。确保图像的尺寸大于0。 3. 检查图像是否被正确加载。有时候,图像文件可能损坏或格式不受支持,导致加载失败。你可以尝试使用其他图像文件进行测试,或者使用其他图像处理库加载图像。 4. 确保你的OpenCV版本是最新的。有些旧版本的OpenCV在处理图像时可能会出现一些问题。你可以尝试升级到最新版本的OpenCV来解决问题。 综上所述,当出现(-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'错误时,你可以通过检查图像路径、尺寸和文件的正确性,并确保你的OpenCV版本是最新的来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow‘(已解决)](https://blog.csdn.net/qq_41413211/article/details/125245584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [opencv bug 处理](https://download.csdn.net/download/rechard_han/10562169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值