Toybrick

标题: pytorch 的 nn.Upsample 和 nn.MaxPool2d 是否支持转成 rknn? [打印本页]

作者: kkkaaa    时间: 2020-4-23 17:25
标题: pytorch 的 nn.Upsample 和 nn.MaxPool2d 是否支持转成 rknn?
转 pytorch 模型的时候遇到很多错,就把 op 一个一个拿出来试试。遇到 nn.Upsamle 和 nn.MaxPool2d 转换失败。


Upsample 的模型:
  1. from torch import nn
  2. import torch

  3. model_name = "little_model_upsample"
  4. ONNX_MODEL = model_name + '.onnx'
  5. RKNN_MODEL = model_name + '.rknn'


  6. class Identity(nn.Module):
  7.   def __init__(self, ):
  8.     super(Identity, self).__init__()
  9.         
  10.     self.upsample = nn.Upsample(scale_factor=2, mode='nearest')

  11.   def forward(self, x):
  12.         
  13.     x = self.upsample(x)
  14.     return x

复制代码
MaxPool2 的模型
  1. class Identity(nn.Module):
  2.   def __init__(self, ):
  3.     super(Identity, self).__init__()
  4.     self.downsample = nn.MaxPool2d(kernel_size=2)

  5.   def forward(self, x):
  6.     x = self.downsample(x)
  7.     return x
复制代码


nn.Upsample, 试过 pytorch -> onnx -> rknn, pytorch -> rknn, 都失败
pytorch -> onnx -> rknn 的报错
W Not match tensor Upsample_17ut0
E Try match Upsample_17ut0 failed, catch exception!
W ----------------Warning(1)----------------
E Catch exception when loading onnx model: little_model_upsample.onnx!
E Traceback (most recent call last):
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 1071, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.match_paragraph_and_param
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 980, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx._onnx_push_ready_tensor
E TypeError: 'NoneType' object is not iterable
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 513, in rknn.api.rknn_base.RKNNBase.load_onnx
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 1077, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.match_paragraph_and_param
E   File "rknn/api/rknn_log.py", line 312, in rknn.api.rknn_log.RKNNLog.e
E ValueError: Try match Upsample_17ut0 failed, catch exception!


pytorch -> rknn 的报错
--> Building model
W The target_platform is not set in config, using default target platform rk1808.
W Genreate input meta fail, please check model.
W External input meta file "/tmp/tmp854pv7am/little_model_upsample_inputmeta.yml" is not exists.
Traceback (most recent call last):
  File "little_model_upsample_torch_to_rknn.py", line 55, in <module>
    ret = rknn.build(do_quantization=False, dataset='./dataset.txt')
  File "/data01/wens/venv/rknn/lib/python3.6/site-packages/rknn/api/rknn.py", line 240, in build
    ret = self.rknn_base.build(do_quantization=do_quantization, dataset=dataset, pack_vdata=pre_compile, batch_size=rknn_batch_size)
  File "rknn/api/rknn_base.py", line 791, in rknn.api.rknn_base.RKNNBase.build
  File "rknn/api/rknn_base.py", line 2328, in rknn.api.rknn_base.RKNNBase._generate_inputmeta
IndexError: list index out of range


MaxPool2, pytorch -> onnx -> rknn 失败,pytorch -> rknn成功
pytorch -> onnx -> rknn 报错
E Catch exception when loading onnx model: little_model_downsample.onnx!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 524, in rknn.api.rknn_base.RKNNBase.load_onnx
E   File "rknn/base/RKNNlib/switcher/mode_switcher.py", line 325, in rknn.base.RKNNlib.switcher.mode_switcher.C2T_Switcher.switch
E   File "rknn/base/RKNNlib/switcher/mode_switcher.py", line 292, in rknn.base.RKNNlib.switcher.mode_switcher.ModeSwitcher.build_mark
E   File "rknn/base/RKNNlib/switcher/mode_switcher.py", line 276, in rknn.base.RKNNlib.switcher.mode_switcher.ModeSwitcher.set_net_layout
E   File "rknn/base/RKNNlib/core/shape.py", line 35, in rknn.base.RKNNlib.core.shape.Shape.length
E   File "rknn/base/RKNNlib/core/shape.py", line 30, in rknn.base.RKNNlib.core.shape.Shape.dim_num
E TypeError: '>=' not supported between instances of 'list' and 'int'
Load resnet50v2 failed!


谢谢

作者: jefferyzhang    时间: 2020-4-23 17:37
暂不支持,我帮你把这两个OP报给NPU部门问问,他们会按优先级顺序一个个去支持的。
作者: kkkaaa    时间: 2020-4-23 17:41
jefferyzhang 发表于 2020-4-23 17:37
暂不支持,我帮你把这两个OP报给NPU部门问问,他们会按优先级顺序一个个去支持的。 ...

谢谢,请问,大概什么时候能支持上(挺急的。。

我试过转 yolov3, 从 tensorflow 到 rknn, yolov3 里也有 upsample 和 maxpool2d, 现在这两个 op 是支持从 tensorflow 到 rknn 吗?
作者: jefferyzhang    时间: 2020-4-23 17:42
kkkaaa 发表于 2020-4-23 17:41
谢谢,请问,大概什么时候能支持上(挺急的。。)

我试过转 yolov3, 从 tensorflow 到 r ...

upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说
作者: kkkaaa    时间: 2020-4-23 17:45
jefferyzhang 发表于 2020-4-23 17:42
upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说

谢谢 我现在用的是 rknn-toolkit 1.3.1b1

另外还是想问一下,tensorflow 中这两个 op 是支持的吗?如果支持我就去改写成 tensorflow
作者: jefferyzhang    时间: 2020-4-23 17:47
kkkaaa 发表于 2020-4-23 17:45
谢谢 我现在用的是 rknn-toolkit 1.3.1b1

另外还是想问一下,tensorflow 中这两个 op 是支持的吗?如果 ...

你可以试试,我没遇到也不是很清楚。
但目前来看tensorflow和caffe支持是比pytorch多的。。
作者: kkkaaa    时间: 2020-4-23 17:48
jefferyzhang 发表于 2020-4-23 17:47
你可以试试,我没遇到也不是很清楚。
但目前来看tensorflow和caffe支持是比pytorch多的。。 ...

嗯嗯 非常感谢 looking for v1.3.2
作者: kkkaaa    时间: 2020-4-24 19:36
jefferyzhang 发表于 2020-4-23 17:42
upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说

我在另一个楼里看到了 1.3.3b2 的安装包,试了一下 upsample 还是不行
是不是还会发布新版??


作者: jefferyzhang    时间: 2020-4-24 21:40
1.3.2正式版在这里:https://github.com/rockchip-linux/rknn-toolkit
其他beta版本有些是根据客户bug临时修改给他们测试的,最终都会合并进正式版里
作者: kkkaaa    时间: 2020-4-29 16:45
jefferyzhang 发表于 2020-4-24 21:40
1.3.2正式版在这里:https://github.com/rockchip-linux/rknn-toolkit
其他beta版本有些是根据客户bug临时 ...

试了 1.3.2, 好像还是不支持 upsample
作者: jefferyzhang    时间: 2020-5-9 08:22
本帖最后由 jefferyzhang 于 2020-5-9 11:28 编辑

NPU Team 答复:
请提供下保存下来的pt模型和onnx模型,pytorch版本建议1.2.0,onnx建议1.4.1

updated:
这两个op现在rknn toolkit都是支持的,但是upsample支持的不是很完整,目前只支持resize参数,不支持scale_factor参数,我们会在下一个版本完善对这个OP的支持。
upsample可以参考附件upsample_demo.py的写法来定义网络。maxpool转onnx后也是可以的,写法参考maxpool_demo.py。请确保pytorch版本是1.2.0,onnx版本是1.4.1.
附:以上脚本在RKNN Toolkit 1.3.2上测试。
(250082)[attach]1071[/attach]



(#250082)
作者: 奥古师弟    时间: 2020-6-15 17:45
我也遇到这个问题了,pytorch->onnx>rknn。torch.nn.Upsample报错。请问哪个现在哪个版本支持,如果不支持,我们自己改如何改进。
作者: 奥古师弟    时间: 2020-6-15 22:41
奥古师弟 发表于 2020-6-15 17:45
我也遇到这个问题了,pytorch->onnx>rknn。torch.nn.Upsample报错。请问哪个现在哪个版本支持,如果不支持 ...

之前没看到最新回复。
作者: 奥古师弟    时间: 2020-6-16 11:26
jefferyzhang 发表于 2020-5-9 08:22
NPU Team 答复:
请提供下保存下来的pt模型和onnx模型,pytorch版本建议1.2.0,onnx建议1.4.1

安装要求修改了unsample,但是还是报了这个错误。  pytorch->onnx->rknn.load_onnx()

E Traceback (most recent call last):
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 1071, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.match_paragraph_and_param
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 980, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx._onnx_push_ready_tensor
E TypeError: 'NoneType' object is not iterable
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 513, in rknn.api.rknn_base.RKNNBase.load_onnx
E   File "rknn/base/RKNNlib/converter/convert_onnx.py", line 1077, in rknn.base.RKNNlib.converter.convert_onnx.convert_onnx.match_paragraph_and_param
E   File "rknn/api/rknn_log.py", line 312, in rknn.api.rknn_log.RKNNLog.e
E ValueError: Try match Upsample_270ut0 failed, catch exception!
作者: zjmmm    时间: 2020-7-3 14:10
jefferyzhang 发表于 2020-4-24 21:40
1.3.2正式版在这里:https://github.com/rockchip-linux/rknn-toolkit
其他beta版本有些是根据客户bug临时 ...

您好,我也想问下rknn什么时候支持pytorch的upsample,我这边的pt文件想通过onnx转rknn,最终也是报不支持upsample的错。。。。。
作者: 昆仑    时间: 2020-7-7 19:34
kkkaaa 发表于 2020-4-29 16:45
试了 1.3.2, 好像还是不支持 upsample

请问解决了么?同样问题。。。。




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3