Toybrick

1.3.2 版本, pytorch的 ReLU6 op 不支持

kkkaaa

中级会员

积分
203
楼主
发表于 2020-5-13 14:46:30    查看: 6651|回复: 8 | [复制链接]    打印 | 只看该作者
试了模型只有一个 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

版主

积分
12940
沙发
发表于 2020-5-13 14:51:33 | 只看该作者
这种一般都是后缀版本号造成不支持。nn.ReLU 和 ReLU6有啥区别么?可以换么?
回复

使用道具 举报

kkkaaa

中级会员

积分
203
板凳
 楼主| 发表于 2020-5-13 15:03:52 | 只看该作者
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

版主

积分
12940
地板
发表于 2020-5-13 15:11:31 | 只看该作者
kkkaaa 发表于 2020-5-13 15:03
的确可以替换,可以绕过这个问题

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

我没研究过pytorch,不太懂他的relu6和relu有啥区别。。
换relu后最好还是要重新训练下。
你说的结果精度误差,是可以通过混合量化来解决的,这个不是问题。
回复

使用道具 举报

kkkaaa

中级会员

积分
203
5#
 楼主| 发表于 2020-5-13 15:15:19 | 只看该作者
jefferyzhang 发表于 2020-5-13 15:11
我没研究过pytorch,不太懂他的relu6和relu有啥区别。。
换relu后最好还是要重新训练下。
你说的结果精度 ...

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

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

使用道具 举报

jefferyzhang

版主

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

使用道具 举报

kkkaaa

中级会员

积分
203
7#
 楼主| 发表于 2020-5-13 17:50:06 | 只看该作者
jefferyzhang 发表于 2020-5-13 15:30
确实是个问题。。
我这里只能给NPU部门报这个op,他们支持起来最快最快也得下个版本才能搞完,时间上会更久 ...

TF 不太熟
回复

使用道具 举报

leok

版主

积分
894
8#
发表于 2020-5-14 09:01:59 | 只看该作者

relu6相对relu是有截断。需要重训练。
回复

使用道具 举报

jefferyzhang

版主

积分
12940
9#
发表于 2020-5-25 20:03:44 | 只看该作者
NPU Team回复:

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

使用道具 举报

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

本版积分规则

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


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