Toybrick

pytorch模型转换问题

jefferyzhang

版主

积分
12953
楼主
发表于 2020-2-14 16:00:02 | 显示全部楼层
看log这里已经报错了,研究下你的模型这里是什么意思:
Syntax error in input! LexToken(NAMED_IDENTIFIER,'None',5,263)
回复

使用道具 举报

jefferyzhang

版主

积分
12953
沙发
发表于 2020-2-14 16:08:56 | 显示全部楼层
NPU部门回复如下:

这个应该是pytorch版本问题。
我们建议pytorch使用1.2.0版本,我们的测试都是基于1.2.0来做的,高版本有可能会出现一些未知的错误。
回复

使用道具 举报

jefferyzhang

版主

积分
12953
板凳
发表于 2020-2-14 16:31:17 | 显示全部楼层
wujialiang 发表于 2020-2-14 16:18
ok,我先试一下。
torchvision的版本呢?

torchvision跟模型无关吧?
回复

使用道具 举报

jefferyzhang

版主

积分
12953
地板
发表于 2020-2-14 17:23:03 | 显示全部楼层
wujialiang 发表于 2020-2-14 17:17
什么时候rknnAPI可以在rk1808上支持c++直接使用pytorch的模型?目前我使用的detectron2训练的mask rcnn  ...

这个你问反了,得去问pytorch官方啥时候支持我们NPU。
我们不可能把全世界框架都改一遍支持我们NPU,然后还得跟着他们更新去更新。。。
回复

使用道具 举报

jefferyzhang

版主

积分
12953
5#
发表于 2020-2-16 19:42:18 | 显示全部楼层
wujialiang 发表于 2020-2-16 17:43
我的意思是,为什么在pc上的rknn-toolkit1.3可以直接支持pytorch或者tensorflow的模型直接载入,然后再rk ...

rknn-toolkit存在的目的就是倒入其他格式模型,转换成rknn。
rknn-toolkit pc版和arm版功能几乎是一样的,开发版上也有rknntoolkit。
rknnapi是c的推理引擎库,相互关系请看基础教程。

能不能转换成功要看不同格式模型的op,op一直在更新,NPU那边也很难做,但是我们开放了自定义OP功能,所有因为op不支持而无法转换的模型都是可以通过你自定义op来实现转换的。具体请参看下文档说明。
回复

使用道具 举报

jefferyzhang

版主

积分
12953
6#
发表于 2020-2-21 08:42:50 | 显示全部楼层
xsky 发表于 2020-2-20 20:43
RKNN v1.3, Pytorch v1.2

只一个FC层,使用.load_pytorch载入也是出现这样的错误,该从哪分析

这个问题我报告给NPU部门了,等他们答复我会回你
回复

使用道具 举报

jefferyzhang

版主

积分
12953
7#
发表于 2020-2-22 16:19:08 | 显示全部楼层

NPU部门回复:
pytorch模型必须继承自torch.nn.Module,1个fc层的pytorch示例可以参考test.py:

  1. import torch

  2. from rknn.api import RKNN

  3. import numpy as np

  4. def export_pytorch_model():

  5.     class MyNet(torch.nn.Module):
  6.         def __init__(self):
  7.             super(MyNet, self).__init__()
  8.             self.fc = torch.nn.Linear(224*224, 10)

  9.         def forward(self, x):
  10.             x = x.view(1,-1)
  11.             return self.fc(x)

  12.     net = MyNet()
  13.     dummy_input = torch.randn([1, 1, 224, 224])

  14.     trace_model = torch.jit.trace(net, dummy_input)
  15.     pt_save_path = './test.pt'
  16.     trace_model.save(pt_save_path)

  17.     return pt_save_path


  18. if __name__ == '__main__':

  19.     pt_model = export_pytorch_model()
  20.     input_size_list = [[1, 224, 224]]

  21.     # Create RKNN object
  22.     rknn = RKNN()

  23.     # pre-process config
  24.     print('--> config model')
  25.     rknn.config(channel_mean_value='0 1', reorder_channel='0 1 2')
  26.     print('done')

  27.     # Load pytorch model
  28.     print('--> Loading model')
  29.     ret = rknn.load_pytorch(model=pt_model, input_size_list=input_size_list)
  30.     if ret != 0:
  31.         print('Load pytorch model failed!')
  32.         exit(ret)
  33.     print('done')

  34.     # Build model
  35.     print('--> Building model')
  36.     ret = rknn.build(do_quantization=False, dataset='./dataset.txt')
  37.     if ret != 0:
  38.         print('Build pytorch failed!')
  39.         exit(ret)
  40.     print('done')

  41.     # Set inputs
  42.     img = np.random.randn(224,224,1).astype(np.float32)

  43.     # init runtime environment
  44.     print('--> Init runtime environment')
  45.     ret = rknn.init_runtime()
  46.     if ret != 0:
  47.         print('Init runtime environment failed')
  48.         exit(ret)
  49.     print('done')

  50.     # Inference
  51.     print('--> Running model')
  52.     outputs = rknn.inference(inputs=[img])
  53.     print('rknn output:')
  54.     print(outputs[0])

  55.     # pytorch inference
  56.     pt_i = np.expand_dims(img, axis=0)
  57.     pt_i = np.transpose(pt_i, [0,3,1,2])
  58.     pt_i = torch.from_numpy(pt_i)
  59.     model = torch.jit.load(pt_model)
  60.     pt_o = model(pt_i).detach().numpy()
  61.     print('pytorch output:')
  62.     print(pt_o)

复制代码

回复

使用道具 举报

jefferyzhang

版主

积分
12953
8#
发表于 2020-4-2 18:02:15 | 显示全部楼层
rlgl 发表于 2020-4-2 17:54
你好,请问rknn_toolkit_v1.3.0支持pytorch中的nn.pixelshuffle()模块吗,我的pytorch模型中包括该模块,r ...

pytorch1.2
如果转换报错,那就是那个op不支持,可以把模型和转换脚本发给我们,
NPU部门是会慢慢去支持的,急的话自己可以写自定义OP来支持的。
详细参看文档
回复

使用道具 举报

jefferyzhang

版主

积分
12953
9#
发表于 2020-4-3 09:27:53 | 显示全部楼层
rlgl 发表于 2020-4-3 09:15
怎么发给你们呢,这个模型的构建代码比较复杂,我今天先自己重新构建下,把代码搞简单点,然后发给您看看 ...

原始模型+你写的转换脚本,打包放到百度网盘,发链接给我
回复

使用道具 举报

jefferyzhang

版主

积分
12953
10#
发表于 2020-4-3 11:57:44 | 显示全部楼层
rlgl 发表于 2020-4-3 11:36
另外,请问有没有文档可以看到现在的rknn_toolkit_v1.3.0支持pytorch的那些模块

没有这样的文档,一直都在更新,不支持的也可以自己写自定义OP来支持,并且pytorch还有subgraph这样的层,没办法写全。。。
回复

使用道具 举报

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

本版积分规则

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


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