Toybrick

标题: 1.3.2 版本, pytorch的 ReLU6 op 不支持 [打印本页]

作者: kkkaaa    时间: 2020-5-13 14:46
标题: 1.3.2 版本, pytorch的 ReLU6 op 不支持
试了模型只有一个 nn.ReLU6() op, pytorch -> rknn, 报错如下:
WARNING: Token 'COMMENT' defined, but not used
WARNING: There is 1 unused token
E Catch exception when loading pytorch model: little_model_func_conv.pt!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 611, in rknn.api.rknn_base.RKNNBase.load_pytorch
E   File "rknn/base/RKNNlib/app/importer/import_pytorch.py", line 97, in rknn.base.RKNNlib.app.importer.import_pytorch.ImportPytorch.run
E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 570, in rknn.base.RKNNlib.converter.convert_pytorch.convert_pytorch.__init__
E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 654, in rknn.base.RKNNlib.converter.convert_pytorch.convert_pytorch.model_simplify
E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 113, in rknn.base.RKNNlib.converter.convert_pytorch.torch_inference_engine.shape_pick
E   File "rknn/base/RKNNlib/converter/convert_pytorch.py", line 148, in rknn.base.RKNNlib.converter.convert_pytorch.torch_inference_engine.__ir_shape_inference
E KeyError: 'aten::hardtanh'


nn.ReLU6 继承自Hardtanh.

pytorch -> onnx -> rknn 应该支持,但是这条路线有别的问题




作者: jefferyzhang    时间: 2020-5-13 14:51
这种一般都是后缀版本号造成不支持。nn.ReLU 和 ReLU6有啥区别么?可以换么?
作者: kkkaaa    时间: 2020-5-13 15:03
jefferyzhang 发表于 2020-5-13 14:51
这种一般都是后缀版本号造成不支持。nn.ReLU 和 ReLU6有啥区别么?可以换么? ...

的确可以替换,可以绕过这个问题

现实一点的问题是,使用 relu6 训练好了一个模型, 模型有5个输出,通过 pytorch -> onnx -> rknn 转换,
- 如果保持使用 relu6, torch 和 rknn 模型推理结果基本一致
- 如果用 relu 替换 relu6,  torch 和 rknn 模型推理结果对比,有一个输出的 cos 距离很小,剩下的4个输出差距都很大,而且 rknn 的这4个输出都是0

当然这完全是另外一个问题了。。。为了不去探索这个问题(百思不得其解中)的原因才希望 relu6 能被支持

作者: jefferyzhang    时间: 2020-5-13 15:11
kkkaaa 发表于 2020-5-13 15:03
的确可以替换,可以绕过这个问题

现实一点的问题是,使用 relu6 训练好了一个模型, 模型有5个输出,通过 ...

我没研究过pytorch,不太懂他的relu6和relu有啥区别。。
换relu后最好还是要重新训练下。
你说的结果精度误差,是可以通过混合量化来解决的,这个不是问题。
作者: kkkaaa    时间: 2020-5-13 15:15
jefferyzhang 发表于 2020-5-13 15:11
我没研究过pytorch,不太懂他的relu6和relu有啥区别。。
换relu后最好还是要重新训练下。
你说的结果精度 ...

换了 relu 重新训练的确就可以完全 walk around 了~理论上讲

但是精度误差是在没做量化的情况下得到的,所以觉得有点迷 <--- 当然这完全是另一个问题,只是我还没有完全把问题 reduce down 到一个点上,所以有点不安,毕竟训练一次也得一天时间。。

作者: jefferyzhang    时间: 2020-5-13 15:30
确实是个问题。。
我这里只能给NPU部门报这个op,他们支持起来最快最快也得下个版本才能搞完,时间上会更久。
建议你同一个模型可以用TF试试,毕竟pytorch刚开始支持。。
作者: kkkaaa    时间: 2020-5-13 17:50
jefferyzhang 发表于 2020-5-13 15:30
确实是个问题。。
我这里只能给NPU部门报这个op,他们支持起来最快最快也得下个版本才能搞完,时间上会更久 ...

TF 不太熟
作者: leok    时间: 2020-5-14 09:01
kkkaaa 发表于 2020-5-13 17:50
TF 不太熟

relu6相对relu是有截断。需要重训练。
作者: jefferyzhang    时间: 2020-5-25 20:03
NPU Team回复:

该OP已经在下一个版本支持,请等待下一个版本发布




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