Toybrick

标题: 模型推理结果全是 0 [打印本页]

作者: qliu    时间: 2019-11-30 14:02
标题: 模型推理结果全是 0
把一个 tensorflow 模型转成 rknn 后(没有开启量化),在 rk3399pro 上 inference,输出的向量全是 0,这个可能是什么原因?

作者: jefferyzhang    时间: 2019-11-30 19:09
一样debug,把输出层一层一层往回设置,找到和转换前输出一样的层,然后就知道是哪一层op造成输出错误。
然后可以报bug给我们。
作者: qliu    时间: 2019-12-1 14:40
我在调试之前报的不能转换的模型(见 http://t.rock-chips.com/forum.php?mod=viewthread&tid=1094&extra=page%3D2&page=1)。我通过 netron 打开 tensorflow 的模型,选取不同的节点作为 output,来比较 tensorflow 和 rk1808 的 inference 输出结果。在绿色圈的位置,tf 和 rk 的输出还是一样的,但是在红色圈的位置上,rk 输出的全是 0,跟 tf 不一致。所以我想出问题的应该是两个红叉处或者是红圈处。希望你们能看下哪些 op 有问题,能否给写修改网络的建议?

作者: jefferyzhang    时间: 2019-12-2 09:52
你的这个transpose节点没有上节点?他是一个input么?如果是的话你没给他一个输入,岂不是进来数据就全0了?
作者: qliu    时间: 2019-12-2 10:31
jefferyzhang 发表于 2019-12-2 09:52
你的这个transpose节点没有上节点?他是一个input么?如果是的话你没给他一个输入,岂不是进来数据就全0了 ...

这个 transpose 的输入是两个常量
作者: jefferyzhang    时间: 2019-12-2 10:59
qliu 发表于 2019-12-2 10:31
这个 transpose 的输入是两个常量

常量的话要看你freeze了没有,没有freeze的你也是要作为模型输入给进去的,没给就是0或者不可预估的数。。。
作者: qliu    时间: 2019-12-2 11:09
jefferyzhang 发表于 2019-12-2 10:59
常量的话要看你freeze了没有,没有freeze的你也是要作为模型输入给进去的,没给就是0或者不可预估的数。 ...

是 freeze 过的啊,在 netron 里面看到的是常量。

作者: qliu    时间: 2019-12-2 19:50
问题解决了,MatMul 这个地方应该是对应于一个 Dense 操作,我们换成了一个 1 x 1 的 convolution 就对了:

outputs = Dense(n_classes, activation='softmax', name='out')(c9)
换成了
outputs = Conv2D(n_classes, (1, 1), activation='softmax', name='out')(c9)
作者: hzxuguozhi    时间: 2019-12-11 11:07
受教了,pytorch训练的模型 需要onnx再转换的吧。。。




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