Toybrick

rknn转换时不匹配Rsqrt,不支持吗?

jiajia1990

中级会员

积分
448
发表于 2019-8-29 16:09:03    查看: 6313|回复: 5 | [复制链接]    打印 | 显示全部楼层
本帖最后由 jiajia1990 于 2019-8-29 16:12 编辑

在转换facenet的时候,执行load_model报错,Not match node emmbings/Rsqrt  Rsqrt,不匹配开方节点吗?
回复

使用道具 举报

jefferyzhang

版主

积分
12919
发表于 2019-8-29 19:46:57 | 显示全部楼层
直播教程就有facenet的转换
回复

使用道具 举报

jiajia1990

中级会员

积分
448
 楼主| 发表于 2019-8-29 20:13:50 | 显示全部楼层
jefferyzhang 发表于 2019-8-29 19:46
直播教程就有facenet的转换

嗯,是有转换,但我没看到pb文件,有训练好的pb文件吗?我用的在网上下载的Inception_resnet_v1的pb文件,转换有问题。看直播下的源码好像不全。
回复

使用道具 举报

jefferyzhang

版主

积分
12919
发表于 2019-8-30 08:10:20 | 显示全部楼层
jiajia1990 发表于 2019-8-29 20:13
嗯,是有转换,但我没看到pb文件,有训练好的pb文件吗?我用的在网上下载的Inception_resnet_v1的pb文件, ...

当然没有训练好的,我们又不做训练,只是教程而已。
训练好的直接用官方的就好了。
能不能转换跟训不训练没有关系。
回复

使用道具 举报

jiajia1990

中级会员

积分
448
 楼主| 发表于 2019-8-30 15:02:33 | 显示全部楼层
本帖最后由 jiajia1990 于 2019-8-30 15:12 编辑
jefferyzhang 发表于 2019-8-30 08:10
当然没有训练好的,我们又不做训练,只是教程而已。
训练好的直接用官方的就好了。
能不能转换跟训不训练 ...

我单独把下载的Inception_resnet_v1的pb模型转换时报错的Rsqrt部分摘取出来,编辑如下代码:
def create_two_graph(feed):
     x = tf.placeholder(tf.float32, [None, 128], name="square_input")
     print(x.name)
     y = tf.square(x, name="square")
     y = tf.reduce_sum(y, 1, keep_dims=True, name="sum")
     y = tf.rsqrt(y, name="rsqrt")
     outpout = tf.multiply(x, y)
     print(outpout.name)
     with tf.Session() as sess:
         my_output = sess.run(outpout, feed_dict={x: feed})
         graph_def = tf.get_default_graph().as_graph_def()
         output_graph_def = graph_util.convert_variables_to_constants(sess, graph_def, ["Mul"])
         with tf.gfile.GFile("./square.pb", "wb") as f:
             f.write(output_graph_def.SerializeToString())

生成pb文件后在电脑上试的没有错误,把pb文件拷贝到板子上后,转换代码如下:
from rknn.api import RKNN
INPUT_SIZE =128
if __name__ == '__main__':
     rknn = RKNN()
     rknn.config(channel_mean_value='0 0 0 255')
     print('--> Loading model')
     rknn.load_tensorflow(tf_pb='square.pb', inputs=['square_input'], outputs=['MM
ul'], input_size_list=[[INPUT_SIZE]])
     print('done')
     print('--> Building model')
     rknn.build(do_quantization=False)
     print('done')
     rknn.export_rknn('./square.rknn')
     rknn.release()

转换时还是报Rsqrt相关的错误,显示如下:
--> Loading model
W Not match node rsqrt Rsqrt
E Catch exception when loading tensorflow model: square.pb!
T Traceback (most recent call last):
T   File "rknn/api/rknn_base.py", line 185, in rknn.api.rknn_base.RKNNBase.load_tensorflow
T   File "rknn/base/RKNNlib/converter/convert_tf.py", line 589, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
T   File "rknn/base/RKNNlib/converter/convert_tf.py", line 488, in rknn.base.RKNNlib.converter.convert_tf.convert_tf._tf_push_ready_node
T TypeError: 'NoneType' object is not iterable
done
--> Building model
E Model or data is None, please load model first.
done
E RKNN model data is None, please load model first!
这个Rsqrt的节点,板子不能匹配吗?
回复

使用道具 举报

jefferyzhang

版主

积分
12919
发表于 2019-8-30 16:24:30 | 显示全部楼层
jiajia1990 发表于 2019-8-30 15:02
我单独把下载的Inception_resnet_v1的pb模型转换时报错的Rsqrt部分摘取出来,编辑如下代码:
def create_t ...

嗯,看这个log来说是的。硬件OP如我之前所说,不是独立存在的,这个可能是rsqrt无法和前后op组成硬件op造成的。

解决方案有两种:

1. 换其他的模型文件来转换(有时候pb不行caffe可以识别,有时候又相反)
2. 即将发布的rknn-toolkit支持自定OP,请等两天。
回复

使用道具 举报

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

本版积分规则

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


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