Toybrick

标题: 请问 rknn 是否支持 tanh 激活函数? [打印本页]

作者: Aiden    时间: 2020-6-2 15:45
标题: 请问 rknn 是否支持 tanh 激活函数?
我在导入 pytorch 的模型时,会遇到找不到 aten:tanh 的错误。请问是不是目前还不支持 torch 的 tanh ? 如果转换成其他诸如 tf 的模型的话,有可能支持 tanh 吗?


作者: jefferyzhang    时间: 2020-6-2 15:59
试过rknn-toolkit 1.3.2了么
作者: Aiden    时间: 2020-6-2 16:48
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    时间: 2020-6-2 17:11
Aiden 发表于 2020-6-2 16:48
Hi, 我的试验环境是:

rknn-toolkit           1.3.2

1、首先,在pytorch保存部署模型时,需要调eval,去把模型中变量固化。
2、rknn不是单独的某个op或者activation去支持,内部会进行优化组合,提高效率。
作者: Aiden    时间: 2020-6-2 17:39
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    时间: 2020-6-2 18:12
Aiden 发表于 2020-6-2 17:39
leok, 谢谢回复。

在pytorch-->rknn路走不通的情况下;可以尝试pytorch-->onnx-->rknn。
作者: Aiden    时间: 2020-6-2 20:47
本帖最后由 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




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