DBNet学习笔记(三)问题与解决

从大家的提问中学习:https://github.com/WenmuZhou/DBNet.pytorch/issues

1、如何把训练好的模型转换为onnx 老是有不支持的操作 #65

把model - head 里面的 DBHead.py 中的upsample的mode换成"nearest"即可

问答里说的是这一句,现在作者的代码里面已经改好了:

module_list = [
                nn.Upsample(scale_factor=2, mode='nearest'),
                nn.Conv2d(in_channels, inter_out_channels, 3, 1, 1, bias=bias)]

其他问题后续补充。

pytorch模型转onnx模型怎样支持尺度缩放。

从大家的提问中学习:https://github.com/ouyanghuiyu/chineseocr_lite/issues/206

是的,torch2onnx 是可以设置动态shape的,但使用onnxsimplifier需要指定input-shape,然受再转ncnn,param里的interp后面就是固定尺寸的缩放,Interp会有3,4参数固定尺寸缩放,然后我改了6个Interp参数,实现了尺寸的动态输出,按照@ zhengqicl 提供的代码也是能够正常推理的,结果也是对的。刚才我试了下,那个网站的直接转换出来后,是没有3,4参数,这是跟我的param的区别,可以直接推断,好用,感谢各位大佬。

 

2、继续训练与微调

3、在win10下,pytorch显存问题

https://github.com/WenmuZhou/DBNet.pytorch

上面的代码,在win10下会报显存不足问题,报错类似下面这样:

RuntimeError: CUDA out of memory. Tried to allocate 564.00 MiB (GPU 0; 7.79 GiB total capacity; 5.79 GiB already allocated; 302.00 MiB free; 5.83 GiB reserved in total by PyTorch)

在网上找到的答案都是:

解决方法:加上with torch.no_grad():

实际上原代码是有这一句的:

然后还有回答是添加:

torch.cuda.empty_cache()

这两种解决方案都是可以解决相应问题的,但是不能解决这个问题。

这个问题的解决办法是,修改icdar2015_resnet18_FPN_DBhead_polyLR.yaml文件,将参数:

num_workers: 6

改为:

num_workers: 0

这样问题就解决了.

具体是从错误提示BrokenPipeError: [Errno 32] Broken pipe” 搜索到的。

4、转libtorch模型动态尺寸问题

resnet18支持动态尺寸,使用不同尺寸作为保存libtorch模型的输入时,保存的模型大小是一样的。使用shufflenet保存的模型,输入尺寸不一致时保存的模型大小也不一样,说明不支持动态尺寸。mobilenetv3还没有测试,估计也有类似问题,待验证。

怀疑是shufflenet和mobilenetv3中有某些操作不支持动态尺寸,将这些操作替换成等价操作就可以转换成支持litorch动态输入的模型。

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值