Toybrick

楼主: wujialiang

pytorch模型转换问题

jefferyzhang

版主

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

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

使用道具 举报

rlgl

注册会员

积分
101
发表于 2020-4-3 11:36:41 | 显示全部楼层
jefferyzhang 发表于 2020-4-2 18:02
pytorch1.2
如果转换报错,那就是那个op不支持,可以把模型和转换脚本发给我们,
NPU部门是会慢慢去支持 ...

另外,请问有没有文档可以看到现在的rknn_toolkit_v1.3.0支持pytorch的那些模块
回复

使用道具 举报

jefferyzhang

版主

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

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

使用道具 举报

rlgl

注册会员

积分
101
发表于 2020-4-3 14:30:05 | 显示全部楼层
jefferyzhang 发表于 2020-4-2 18:02
pytorch1.2
如果转换报错,那就是那个op不支持,可以把模型和转换脚本发给我们,
NPU部门是会慢慢去支持 ...

关于转换pytorch中nn.ConvTranspose2d()模块的bug,rknn和pytorch输出的维度对不上
  1. import numpy as np
  2. from rknn.api import RKNN
  3. import torch


  4. def export_pytorch_model():
  5.         class simplepose(nn.Module):
  6.                 def __init__(self):
  7.                         super(simplepose, self).__init__()
  8.                         self.preact = nn.ConvTranspose2d(3, 64, kernel_size=4,stride=2, padding=1)

  9.                 def forward(self, x):
  10.                         x = self.preact(x)
  11.                         return x

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

  14.         trace_model = torch.jit.trace(net, dummy_input)
  15.         pt_save_path = './simplepose.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 = [[3, 224, 224]]

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

  23.          # pre-process config
  24.          print('--> config model')
  25.          rknn.config(channel_mean_value='0 0 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, 3).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].shape)

  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.shape)

  63.          rknn.release()
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

gyq_

注册会员

积分
76
发表于 2020-4-3 14:42:53 | 显示全部楼层
rlgl 发表于 2020-4-3 14:30
关于转换pytorch中nn.ConvTranspose2d()模块的bug,rknn和pytorch输出的维度对不上

我也遇见了一样的问题,你看http://t.rock-chips.com/forum.ph ... page%3D1&page=2
回复

使用道具 举报

rlgl

注册会员

积分
101
发表于 2020-4-3 15:15:17 | 显示全部楼层
gyq_ 发表于 2020-4-3 14:42
我也遇见了一样的问题,你看http://t.rock-chips.com/forum.php?mod=viewthread&tid=1330&extra=page%3D1 ...

非常感谢,先收藏,我现在先用没pixelshuffle的模型,您那边如果解决了这个问题麻烦告知一下,非常感谢!
回复

使用道具 举报

rlgl

注册会员

积分
101
发表于 2020-4-3 15:32:08 | 显示全部楼层
jefferyzhang 发表于 2020-4-3 11:57
没有这样的文档,一直都在更新,不支持的也可以自己写自定义OP来支持,并且pytorch还有subgraph这样的层 ...

您好,在只使用一个卷积层和bn层的情况下,使用相同的输入,pytorch模型的输出和rknn模型(由pytorch模型转换而来)的输出,差异很大,代码上传到百度云中

链接:https://pan.baidu.com/s/1blN8xltCmt408RBt1QyxpA
密码:fpff


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

gyq_

注册会员

积分
76
发表于 2020-4-3 15:50:23 | 显示全部楼层
rlgl 发表于 2020-4-3 15:15
非常感谢,先收藏,我现在先用没pixelshuffle的模型,您那边如果解决了这个问题麻烦告知一下,非常感谢! ...

版主发了个新版本,我这边可以正常转换了。
回复

使用道具 举报

jefferyzhang

版主

积分
12925
发表于 2020-4-3 16:31:32 | 显示全部楼层
rlgl 发表于 2020-4-3 15:32
您好,在只使用一个卷积层和bn层的情况下,使用相同的输入,pytorch模型的输出和rknn模型(由pytorch模型 ...

你先试下beta7版本,他们同样的问题已经解决了。还有差异最好在不量化时候也测试下

链接:https://pan.baidu.com/s/1DuLeBawfoBP62mu0ADNGAA
提取码:qtys
回复

使用道具 举报

rlgl

注册会员

积分
101
发表于 2020-4-5 15:33:29 | 显示全部楼层
jefferyzhang 发表于 2020-4-3 16:31
你先试下beta7版本,他们同样的问题已经解决了。还有差异最好在不量化时候也测试下

链接:https://pan.ba ...

您好,beta7版本nn.Transpose2d输入输出维度正常。但另一个问题:在使用相同输入情况下,pytorch模型输出和rknn模型输出差异较大,模型为一个卷积层+一个bn层,代码
https://pan.baidu.com/s/1blN8xltCmt408RBt1QyxpA,密码fpff
回复

使用道具 举报

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

本版积分规则

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


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