Toybrick

pb 轉 rknn 失敗

nijiwu

注册会员

积分
95
楼主
发表于 2020-3-30 15:50:50    查看: 7913|回复: 2 | [复制链接]    打印 | 只看该作者
我的環境 macOS                10.12.6
Python                3.6.8
rknn-toolkit          1.3.0

tensorflow           1.13.1


範例可以成功執行
tensorflow\ssd_mobilenet_v1\ssd.py

我建立一個pb,希望可以轉成rknn,但是在load_tensorflow 便失敗了。
這個pb 有用過Tensorflow for Android上執行是沒有問題的

以下是錯誤訊息以及py,請問我哪裏有疏忽了??

Instructions for updating:
Use tf.compat.v1.graph_util.extract_sub_graph
Warning: Axis pre-condition checking find multiple axis from (1, 1, 1, 128) to [  1 128]
Warning: Axis pre-condition checking find multiple axis from (1, 1, 1, 128) to [  1 128]
W Network may not support batch > 1 !
E Unknow layer "tensorarraygatherv3"
W ----------------Warning(1)----------------
E Try match TensorArrayGatherV3 map_1/TensorArrayStack/TensorArrayGatherV3 failed, catch exception!
E Catch exception when loading tensorflow model: ./gender.pb!
E Traceback (most recent call last):
E   File "rknn/base/RKNNlib/converter/convert_tf.py", line 643, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
E   File "rknn/base/RKNNlib/RKNNnet.py", line 189, in rknn.base.RKNNlib.RKNNnet.RKNNNet.new_layer
E   File "/Users/will/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rknn/base/RKNNlib/RKNNlog.py", line 327, in e
E     raise ValueError(msg)
E ValueError: Unknow layer "tensorarraygatherv3"
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 303, in rknn.api.rknn_base.RKNNBase.load_tensorflow
E   File "rknn/base/RKNNlib/converter/convert_tf.py", line 742, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
E   File "/Users/will/.pyenv/versions/3.6.8/lib/python3.6/site-packages/rknn/base/RKNNlib/RKNNlog.py", line 327, in e
E     raise ValueError(msg)
E ValueError: Try match TensorArrayGatherV3 map_1/TensorArrayStack/TensorArrayGatherV3 failed, catch exception!
--------------> Loading model done  -1





# Create RKNN object
rknn = RKNN()

# Config for Model Input PreProcess
rknn.config(channel_mean_value='0 0 0 1', reorder_channel='2 1 0')
# 我input的value是 BGR [0~255]

# Load TensorFlow Model
print('--> Loading model')
ret = rknn.load_tensorflow(tf_pb='./gender.pb',
                     inputs=['input_image'],
                     outputs=['output_gender', 'output_age'],
                     input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
print('--------------> Loading model done ', ret)



回复

使用道具 举报

jefferyzhang

版主

积分
13580
沙发
发表于 2020-3-30 16:58:36 | 只看该作者
单从log上看,是 E Unknow layer "tensorarraygatherv3"  这个OP不支持。

这个问题很微妙,我自己遇到过这类问题,可能性和解决方法大概有以下几种:

1. 一种是用了keras.backend.set_learning_phase(0)在session创建之前,然后freeze pb,就饶过了这个op
2. 一种是尝试降低了tf的版本,因为TensorArrayGatherV3这个op不支持,但是TensorArrayGatherV2、TensorArrayGatherV1可能是支持的
3. 如果你是在尝试faster/mask r-cnn,这个op绕不过去,tf版本无法使用,可以尝试更换框架,用caffe的模型或者onnx的模型试试
4. 没有其他办法的时候,只能尝试自定义OP,可以参看我们的自定义OP文档自己实现这个op
回复

使用道具 举报

nijiwu

注册会员

积分
95
板凳
 楼主| 发表于 2020-3-30 18:06:11 | 只看该作者
jefferyzhang 发表于 2020-3-30 16:58
单从log上看,是 E Unknow layer "tensorarraygatherv3"  这个OP不支持。

这个问题很微妙,我自己遇到过这 ...

好的謝謝~ 我先試試看。。
回复

使用道具 举报

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

本版积分规则

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


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