从大家的提问中学习: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动态输入的模型。