Toybrick

请问 rknn 是否支持 tanh 激活函数?

Aiden

注册会员

积分
88
楼主
发表于 2020-6-2 15:45:57    查看: 6704|回复: 6 | [复制链接]    打印 | 只看该作者
我在导入 pytorch 的模型时,会遇到找不到 aten:tanh 的错误。请问是不是目前还不支持 torch 的 tanh ? 如果转换成其他诸如 tf 的模型的话,有可能支持 tanh 吗?

回复

使用道具 举报

jefferyzhang

版主

积分
12930
沙发
发表于 2020-6-2 15:59:26 | 只看该作者
试过rknn-toolkit 1.3.2了么
回复

使用道具 举报

Aiden

注册会员

积分
88
板凳
 楼主| 发表于 2020-6-2 16:48:34 | 只看该作者
Hi, 我的试验环境是:

rknn-toolkit           1.3.2
torch                  1.2.0

测试代码如下:

  1. import torch
  2. import torch.nn as nn
  3. import numpy as np

  4. model = torch.nn.Tanh()
  5. dummy_input = torch.randn(1, 3, 32, 24)

  6. output = model(dummy_input)
  7. print(output.shape)

  8. traced = torch.jit.trace(model, dummy_input)
  9. traced.save('rknn_pytorch_tanh.pt')

  10. from rknn.api import RKNN
  11. rknn = RKNN(verbose=True)
  12. rknn.config()

  13. rknn.load_pytorch('rknn_pytorch_tanh.pt', input_size_list=[[3, 32, 24]])

复制代码


执行结果是:

  1. ...
  2.   warnings.warn(message)
  3. WARNING: Token 'COMMENT' defined, but not used
  4. WARNING: There is 1 unused token
  5. E Catch exception when loading pytorch model: rknn_pytorch_tanh.pt!
  6. E Traceback (most recent call last):
  7. E   File "rknn/api/rknn_base.py", line 611, in rknn.api.rknn_base.RKNNBase.load_pytorch
  8. E   File "rknn/base/RKNNlib/app/importer/import_pytorch.py", line 97, in rknn.base.RKNNlib.app.importer.import_pytorch.ImportPytorch.run
  9. E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 570, in rknn.base.RKNNlib.converter.convert_pytorch.convert_pytorch.__init__
  10. E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 654, in rknn.base.RKNNlib.converter.convert_pytorch.convert_pytorch.model_simplify
  11. E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 113, in rknn.base.RKNNlib.converter.convert_pytorch.torch_inference_engine.shape_pick
  12. E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 148, in rknn.base.RKNNlib.converter.convert_pytorch.torch_inference_engine.__ir_shape_inference
  13. E KeyError: 'aten::tanh'
复制代码



回复

使用道具 举报

leok

版主

积分
894
地板
发表于 2020-6-2 17:11:57 | 只看该作者
Aiden 发表于 2020-6-2 16:48
Hi, 我的试验环境是:

rknn-toolkit           1.3.2

1、首先,在pytorch保存部署模型时,需要调eval,去把模型中变量固化。
2、rknn不是单独的某个op或者activation去支持,内部会进行优化组合,提高效率。
回复

使用道具 举报

Aiden

注册会员

积分
88
5#
 楼主| 发表于 2020-6-2 17:39:56 | 只看该作者
leok 发表于 2020-6-2 17:11
1、首先,在pytorch保存部署模型时,需要调eval,去把模型中变量固化。
2、rknn不是单独的某个op或者acti ...

leok, 谢谢回复。

1、首先,在pytorch保存部署模型时,需要调eval,去把模型中变量固化。


在实际模型中保存前,我们调用了 eval。但是我觉得 eval 可能与这个问题相关性并不大。因为 tanh 本身也不包含变量。

2、rknn不是单独的某个op或者activation去支持,内部会进行优化组合,提高效率。


我们实际的模型 tanh 之前的确还有其他层。但是rknn似乎也没有对他们进行优化融合。另外,我在测试代码前加了一个 conv2d, 但是结果仍然是相同。


回复

使用道具 举报

leok

版主

积分
894
6#
发表于 2020-6-2 18:12:58 | 只看该作者
Aiden 发表于 2020-6-2 17:39
leok, 谢谢回复。

在pytorch-->rknn路走不通的情况下;可以尝试pytorch-->onnx-->rknn。
回复

使用道具 举报

Aiden

注册会员

积分
88
7#
 楼主| 发表于 2020-6-2 20:47:17 | 只看该作者
本帖最后由 Aiden 于 2020-6-2 20:54 编辑
leok 发表于 2020-6-2 18:12
在pytorch-->rknn路走不通的情况下;可以尝试pytorch-->onnx-->rknn。

我准备使用 sigmoid 来临时代替 tanh,依据是: tanh(x) = 2.0 * sigmoid(2.0 * x) - 1.0


现在这个模型是在 pytorch -> onnx -> rknn 走不通的情况下选择了 pytorch --> rknn。 我觉得接下来可以试一试 pytorch --> onnx --> pb --> rknn
回复

使用道具 举报

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

本版积分规则

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


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