Toybrick

pytorch 的 nn.Upsample 和 nn.MaxPool2d 是否支持转成 rknn?

kkkaaa

中级会员

积分
203
楼主
发表于 2020-4-23 17:25:53    查看: 30176|回复: 15 | [复制链接]    打印 | 只看该作者
转 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

版主

积分
13580
沙发
发表于 2020-4-23 17:37:53 | 只看该作者
暂不支持,我帮你把这两个OP报给NPU部门问问,他们会按优先级顺序一个个去支持的。
回复

使用道具 举报

kkkaaa

中级会员

积分
203
板凳
 楼主| 发表于 2020-4-23 17:41:35 | 只看该作者
jefferyzhang 发表于 2020-4-23 17:37
暂不支持,我帮你把这两个OP报给NPU部门问问,他们会按优先级顺序一个个去支持的。 ...

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

我试过转 yolov3, 从 tensorflow 到 rknn, yolov3 里也有 upsample 和 maxpool2d, 现在这两个 op 是支持从 tensorflow 到 rknn 吗?
回复

使用道具 举报

jefferyzhang

版主

积分
13580
地板
发表于 2020-4-23 17:42:29 | 只看该作者
kkkaaa 发表于 2020-4-23 17:41
谢谢,请问,大概什么时候能支持上(挺急的。。)

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

upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说
回复

使用道具 举报

kkkaaa

中级会员

积分
203
5#
 楼主| 发表于 2020-4-23 17:45:24 | 只看该作者
jefferyzhang 发表于 2020-4-23 17:42
upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说

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

另外还是想问一下,tensorflow 中这两个 op 是支持的吗?如果支持我就去改写成 tensorflow
回复

使用道具 举报

jefferyzhang

版主

积分
13580
6#
发表于 2020-4-23 17:47:16 | 只看该作者
kkkaaa 发表于 2020-4-23 17:45
谢谢 我现在用的是 rknn-toolkit 1.3.1b1

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

你可以试试,我没遇到也不是很清楚。
但目前来看tensorflow和caffe支持是比pytorch多的。。
回复

使用道具 举报

kkkaaa

中级会员

积分
203
7#
 楼主| 发表于 2020-4-23 17:48:09 | 只看该作者
jefferyzhang 发表于 2020-4-23 17:47
你可以试试,我没遇到也不是很清楚。
但目前来看tensorflow和caffe支持是比pytorch多的。。 ...

嗯嗯 非常感谢 looking for v1.3.2
回复

使用道具 举报

kkkaaa

中级会员

积分
203
8#
 楼主| 发表于 2020-4-24 19:36:21 | 只看该作者
jefferyzhang 发表于 2020-4-23 17:42
upsample在toolkit1.3.0之后应该就支持了,过几天就会发布1.3.2
onnx那个不好说

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

回复

使用道具 举报

jefferyzhang

版主

积分
13580
9#
发表于 2020-4-24 21:40:12 | 只看该作者
1.3.2正式版在这里:https://github.com/rockchip-linux/rknn-toolkit
其他beta版本有些是根据客户bug临时修改给他们测试的,最终都会合并进正式版里
回复

使用道具 举报

kkkaaa

中级会员

积分
203
10#
 楼主| 发表于 2020-4-29 16:45:52 | 只看该作者
jefferyzhang 发表于 2020-4-24 21:40
1.3.2正式版在这里:https://github.com/rockchip-linux/rknn-toolkit
其他beta版本有些是根据客户bug临时 ...

试了 1.3.2, 好像还是不支持 upsample
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表