Toybrick

标题: RK3399Pro入门教程(4)从Tensorflow.Keras到RKNN [打印本页]

作者: jefferyzhang    时间: 2019-2-18 16:42
标题: RK3399Pro入门教程(4)从Tensorflow.Keras到RKNN
本帖最后由 jefferyzhang 于 2021-1-9 22:56 编辑

[attach]111[/attach]
(仅适用于rknn-toolkit < 1.6, 后续版本已支持直接从H5转rknn)
tensorflow从1.11开始就推荐使用更高层的Keras API建立模型,代码确实也简洁了不少,但是Keras默认保存的H5格式的模型文件,当前版本的rknn-toolkit(0.9.8)暂时还不支持转换,好在tensorflow还一直保留着他们自己的pb模型格式文件(配置+权重)。

我们直接从Tensorflow官网首页的教程Mnist入手,大概简单说明下如何从Tensorflow.Keras搭建训练模型,然后转RKNN进行使用。


1. import


这是我们要用到的几个模块:
  1. import tensorflow as tf
  2. from tensorflow.python.framework import graph_util
复制代码


2. 建立Keras模型和训练


我们用Tensorflow的官网首页代码,为了保存模型,需要一点小修改:
  1. mnist = tf.keras.datasets.mnist
  2.     (x_train, y_train), (x_test, y_test) = mnist.load_data()
  3.     x_train, x_test = x_train / 255.0, x_test / 255.0

  4.     model = tf.keras.Sequential([
  5.     tf.keras.layers.Flatten(input_shape=(28, 28), name="input28x28"),
  6.     tf.keras.layers.Dense(512, activation=tf.nn.relu),
  7.     tf.keras.layers.Dropout(0.2),
  8.     tf.keras.layers.Dense(10, activation=tf.nn.softmax, name="output")
  9.     ])

  10.     model.compile(optimizer='adam',
  11.                   loss='sparse_categorical_crossentropy',
  12.                   metrics=['accuracy'])
复制代码
  1. model.fit(x_train, y_train, epochs=5) # train
复制代码

其中:
a. 输入层需要明确指定input_shape, 因为是mnist数据,所以他的输入都是28x28大小的单通道灰度图,指定input_shape=(28, 28),为了后面方便操作,我们显式的给他赋予一个name="input28x28", 注意,赋值给rknn的不是这个名字,而是model.input.op.name打印出来的名字
b. 输出层我们也显式赋予一个name="output",注意,赋值给rknn的不是这个名字,而是model.output.op.name打印出来的名字
c. model.compile配置了训练细节,然后model.fit就可以直接开始训练了。


3. 保存模型


如果是保存H5格式模型,直接使用model.save就可以保存了。
  1. model.save("./mnist.h5")
复制代码


但是因为RKNN暂时还不支持H5格式,我们需要把它存成tensorflow的pb格式模型
  1. tf.keras.backend.set_learning_phase(0)
  2. session = tf.keras.backend.get_session()   # 获取Keras的session

  3. print('input is :', model.input.op.name)      # 注意,RKNN传递的input name是这里打印出来的名字
  4. print('output is:', model.output.op.name)   # 注意,RKNN传递的output name是这里打印出来的名字

  5. graph = session.graph
  6. with graph.as_default():
  7. output_names = [model.output.op.name]
  8. print('output_names:', output_names)

  9. constant_graph = graph_util.convert_variables_to_constants(session, session.graph_def, output_names)  #转换成运算图

  10. with tf.gfile.GFile('./model.pb', mode='wb') as f:
  11.     f.write(constant_graph.SerializeToString())   # 写pb文件
复制代码
也就是多了几行代码而已,还是非常简单的。


4. 用tensorboard或者Netron来查看建立的模型(可选过程)


这时候就可以使用tensorboard来查看这个pb文件的图了,先把上头的constant_graph写成log
  1. writer = tf.summary.FileWriter('./log', constant_graph)
  2.         writer.close()
复制代码
然后用tensorboard命令来查看:
  1. >  tensorboard --logdir=./log
复制代码
就可以看到刚建立的的tensor图了。
[attach]102[/attach]

可以看到我们自己定义的输入和输出层名字。这里我们更推荐开源软件Netron来直接查看PB或者H5格式的模型。


5. 转换成RKNN



然后就可以通过RKNN-toolkit转换啦,当然这里要先准备一张训练的图,把图的路径放入dataset.txt文件里,用于rknn量化(定点转换、优化等过程)
  1. # coding=utf-8
  2. from rknn.api import RKNN

  3. if __name__ == '__main__':

  4.     # Create RKNN object
  5.     rknn = RKNN(verbose=True)

  6.     # pre-process config
  7.     print('--> config model')
  8.     rknn.config(channel_mean_value='0 0 0 255')  # 因为是灰度图,不需要设置reorder_channel进行通道转换
  9.     print('done')

  10.     # Load tensorflow model
  11.     print('--> Loading model')
  12.     ret = rknn.load_tensorflow(
  13.         tf_pb='./model.pb',
  14.         inputs=['input28x28_input'],  # 注意,这里的input名字来自于模型转换时候打印出来的mode.input.op.name
  15.         outputs=['output/Softmax'],   # 注意,这里的output名字来自于模型转换时候打印出来的mode.output.op.name
  16.         input_size_list=[[28, 28]])
  17.     if ret != 0:
  18.         print('Load mtcnn failed! Ret = {}'.format(ret))
  19.         exit(ret)
  20.     print('done')

  21.     # Build model
  22.     print('--> Building model')
  23.     ret = rknn.build(do_quantization=True, dataset='./dataset.txt')  # 量化模型
  24.     if ret != 0:
  25.         print('Build model failed!')
  26.         exit(ret)
  27.     print('done')

  28.     # Export rknn model
  29.     print('--> Export RKNN model')
  30.     ret = rknn.export_rknn('./model.rknn')  # 保存成rknn模型文件
  31.     if ret != 0:
  32.         print('Export rknn failed!')
  33.         exit(ret)
  34.     print('done')


  35.     rknn.release()
复制代码

到这里就可以输出rknn模型用于npu运行了。




作者: samtu    时间: 2019-5-4 13:41
我想问一下,这个模型的训练也可以在3399PRO上面来做吗,会不会太慢,
作者: jefferyzhang    时间: 2019-5-5 18:05
本帖最后由 jefferyzhang 于 2020-11-10 18:02 编辑
samtu 发表于 2019-5-4 13:41
我想问一下,这个模型的训练也可以在3399PRO上面来做吗,会不会太慢,

不能的 ,我们4块titanV跑了一晚上收敛都不是特别理想,在3399上用cpu做那基本不可能。。。
PS:
本回复当时回复的是FaceNet在3399Pro上训练无法实现,该教学模型是可以在3399上CPU训练的


作者: keyman_sysu    时间: 2019-5-14 12:33
我发现就算输出是7*7*128的digits,RKNN输出也是一维的6272的digits。那么channel_first是否意味着我要先reshape成为128*7*7,然后再transpose成为7*7*128啊?
作者: samtu    时间: 2019-5-14 16:34
jefferyzhang 发表于 2019-5-5 18:05
不能的 ,我们4块titanV跑了一晚上收敛都不是特别理想,在3399上用cpu做那基本不可能。。。 ...

楼主,我还有一个问题,为什么要用RKNN来转换呢,难道直接用TENSORFLOW 不行吗,还是转换后才可以用到你们的NPU,
作者: samtu    时间: 2019-5-14 21:06
4块titanV,10万块,利器.,
作者: jefferyzhang    时间: 2019-5-15 10:42
samtu 发表于 2019-5-14 21:06
4块titanV,10万块,利器.,

近些年更好的人脸检测论文应该是arcface, 收敛和分类应该是优秀的
作者: jefferyzhang    时间: 2019-5-15 10:50
samtu 发表于 2019-5-14 16:34
楼主,我还有一个问题,为什么要用RKNN来转换呢,难道直接用TENSORFLOW 不行吗,还是转换后才可以用到你 ...

NPU只能读取rknn格式模型,就跟tf只能读取pb格式一样。需要做一次转换。
作者: samtu    时间: 2019-5-20 22:31
你们自己训练是从头开始吗,还是拿别人的模型(如VGG,RESNET。。。,拆开,再从FC层后面加分类什么之 类的?自己训练,没有什么数据呢,还要自己一个个的标记,
作者: jefferyzhang    时间: 2019-5-21 09:52
samtu 发表于 2019-5-20 22:31
你们自己训练是从头开始吗,还是拿别人的模型(如VGG,RESNET。。。,拆开,再从FC层后面加分类什么之 类的 ...

当然用开源数据集。RK发布的模型有的是rk自己训练,有的是下载预训练模型。
对于产品开发来说,大部分的模型需要重新自己训练
作者: jiajia1990    时间: 2019-7-8 17:18
楼主,有没有讲怎么在开发板上安装tensorflow等环境的,看官方的文档讲的太概括了,不明所以。谢谢楼主
作者: jefferyzhang    时间: 2019-7-9 16:09
jiajia1990 发表于 2019-7-8 17:18
楼主,有没有讲怎么在开发板上安装tensorflow等环境的,看官方的文档讲的太概括了,不明所以。谢谢楼主 ...

看wiki,开发版只能安装我们编译好的tensorflow 1.10版本
作者: Qmax    时间: 2019-7-9 18:05
tflite的量化模型怎么转?
作者: jiajia1990    时间: 2019-7-9 21:55
jefferyzhang 发表于 2019-7-9 16:09
看wiki,开发版只能安装我们编译好的tensorflow 1.10版本

我看wiki给的命令了pip3 install tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl,但没有这个whl的下载啊?
作者: jiajia1990    时间: 2019-7-9 22:36
jefferyzhang 发表于 2019-7-9 16:09
看wiki,开发版只能安装我们编译好的tensorflow 1.10版本

找到了,有个连接需要打开
作者: jefferyzhang    时间: 2019-7-10 16:37
Qmax 发表于 2019-7-9 18:05
tflite的量化模型怎么转?

看wiki,直接转,不需要再次量化
作者: lyc202019    时间: 2019-7-26 11:48
有没有适合PK3399Pro Linux系统安装的tensorflow的安装包?
作者: lyc202019    时间: 2019-7-26 11:49
一直没安装成功
作者: lyc202019    时间: 2019-7-30 15:44
hisping 发表于 2019-7-26 19:45
wiki上下载的rknn-toolkit就包含了tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl,可以直接安装啊 ...

是在固件下载里面吗?
作者: lyc202019    时间: 2019-7-30 15:50
jiajia1990 发表于 2019-7-9 22:36
找到了,有个连接需要打开

在哪里,我还是没找到
作者: lyc202019    时间: 2019-7-30 16:28
lyc202019 发表于 2019-7-30 15:44
是在固件下载里面吗?

[attach]398[/attach]
作者: lyc202019    时间: 2019-7-30 16:48
jiajia1990 发表于 2019-7-9 22:36
找到了,有个连接需要打开

在哪里,我一直没找到
作者: lyc202019    时间: 2019-7-30 17:14
hisping 发表于 2019-7-30 17:09
wiki->人工智能->模型转换 里面有个链接https://eyun.baidu.com/s/3nw94bjV

找到了。谢谢
作者: jiajia1990    时间: 2019-8-15 17:09
jefferyzhang 发表于 2019-5-15 10:50
NPU只能读取rknn格式模型,就跟tf只能读取pb格式一样。需要做一次转换。

楼主你好,我按照这个代码转换为rknn格式的文件后,执行
rknn=RKNN()
rknn.load_rknn("./model.rknn")
rknn.init_runtime()时,初始化环境失败,RKNN_ERR_MODEL_INVALID的错误,我用tf在电脑上训练生成pd后,在板子上转换,执行这个没事。会是哪问题吗?里

作者: jefferyzhang    时间: 2019-8-15 21:08
jiajia1990 发表于 2019-8-15 17:09
楼主你好,我按照这个代码转换为rknn格式的文件后,执行
rknn=RKNN()
rknn.load_rknn("./model.rknn")

toolkit版本要统一,建议全部更新到最新来试
作者: jiajia1990    时间: 2019-8-15 21:25
jefferyzhang 发表于 2019-8-15 21:08
toolkit版本要统一,建议全部更新到最新来试

我安装的TensorFlow版本是tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl,toolkit版本是rknn_toolkit-1.0.0-cp36-cp36m-linux_aarch64.whl的,这样对吧?
作者: jefferyzhang    时间: 2019-8-16 08:07
jiajia1990 发表于 2019-8-15 21:25
我安装的TensorFlow版本是tensorflow-1.10.1-cp36-cp36m-linux_aarch64.whl,toolkit版本是rknn_toolkit- ...

不是,我是指你板子的rknn驱动,rknn tool要和转换用的pc的rknn tool版本号一致
作者: yuys    时间: 2019-10-23 20:16
这个示例,量化模型会报错。
作者: 呱唧    时间: 2020-3-16 10:54
请问一下,有没有用npu跑一些常用模型的性能测试呢?
作者: jefferyzhang    时间: 2020-3-16 12:04
呱唧 发表于 2020-3-16 10:54
请问一下,有没有用npu跑一些常用模型的性能测试呢?

我记得有发布过的,你要找一找,很久了,我手上也找不到了。。。
搜下新闻估计都有。。
作者: xinzhiling111    时间: 2020-11-7 23:33
IndexError: list index out of range

E Catch exception when building RKNN model!
E Traceback (most recent call last):
E   File "/home/zl/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1334, in _do_call
E     return fn(*args)
E   File "/home/zl/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1319, in _run_fn
E     options, feed_dict, fetch_list, target_list, run_metadata)
E   File "/home/zl/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1407, in _call_tf_sessionrun
E     run_metadata)
E tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue '_0_fifo_queue' is closed and has insufficient elements (requested 1, current size 0)
E          [[{{node fifo_queue_Dequeue}} = QueueDequeueV2[component_types=[DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](fifo_queue)]]
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
Ubuntu16.04 pc上运行上面的代码生成模型,然后转换的时候rknn.build的时候提示这个错误,请问是哪的事?
作者: jefferyzhang    时间: 2020-11-10 17:46
xinzhiling111 发表于 2020-11-7 23:33
IndexError: list index out of range

E Catch exception when building RKNN model!

建议加置顶帖官方RKNN群讨论
作者: xinzhiling111    时间: 2020-11-10 18:55
jefferyzhang 发表于 2020-11-10 17:46
建议加置顶帖官方RKNN群讨论

已加,多谢
作者: xinzhiling111    时间: 2020-11-11 12:44
jefferyzhang 发表于 2020-11-10 17:46
建议加置顶帖官方RKNN群讨论

请问能否提供下dataset.txt以及量化用的图片,我这边量化失败,应该是量化用的图片不对。可以的话,帮忙发到邮箱里面:454086991@qq.com
非常感谢!
作者: jefferyzhang    时间: 2020-11-11 15:12
xinzhiling111 发表于 2020-11-11 12:44
请问能否提供下dataset.txt以及量化用的图片,我这边量化失败,应该是量化用的图片不对。可以的话,帮忙 ...

量化图片是你需要真实场景图片,量化过程就是个下采样过程
作者: xinzhiling111    时间: 2020-11-12 09:08
jefferyzhang 发表于 2020-11-11 15:12
量化图片是你需要真实场景图片,量化过程就是个下采样过程

嗯,之前的量化图片是从mnist数据集里面取出来的jpg图片,量化总是失败,后来群里建议jpg改成npy,我试了下,可以转换模型了,但是转换之后,rknn.init_runtime()又崩溃了:
D [print_tensor:136]out(0): id[   8] vtl[1] const[0] shape[ 10               ] fmt[u8 ] qnt[ASM zp=157, scale=32.828148]
D [setup_node:368]Setup node id[3] uid[2] op[SOFTMAX]
D [print_tensor:136]in(0) : id[   8] vtl[1] const[0] shape[ 10               ] fmt[u8 ] qnt[ASM zp=157, scale=32.828148]
D [print_tensor:136]out(0): id[   0] vtl[0] const[0] shape[ 10, 1            ] fmt[f16] qnt[NONE]
D [optimize_node:312]Backward optimize neural network
D [optimize_node:319]Forward optimize neural network
D [rknn_optimize_internal_node:331]Optimize node uid[2] sub_uid[1] op[SOFTMAX_INTERNAL]
I [compute_node:261]Create vx node

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
这个信息发群里也没有人碰到过,提示信息只能看出好像是有地方内存溢出等,但是没法排查了。版主碰到过吗?或者有什么方式进一步排查下吗?
谢谢
作者: 李雪梅    时间: 2020-11-24 14:49
本帖最后由 李雪梅 于 2020-11-24 14:50 编辑

依据转换为RKNN模型代码我的会出现如下报错,请楼主赐教:
xml@xml-vm:~/project/rk3399ProD/RK3399Pro入门教程(4)$ python3 tf_pb-to-rknn.py
--> config model
done
--> Loading model
/home/xml/.local/lib/python3.6/site-packages/onnx_tf/common/__init__.py:87: UserWarning: FrontendHandler.get_outputs_names is deprecated. It will be removed in future release.. Use node.outputs instead.
  warnings.warn(message)
done
--> Building model
W The channel_mean_value filed will not be used in the future!
W The channel_mean_value of input 0 is not support, ignore it!
E Catch exception when building RKNN model!
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "rknn/base/acuitylib/provider/queue_provider.py", line 98, in rknn.base.acuitylib.provider.queue_provider.QueueProvider.run
  File "rknn/base/acuitylib/provider/queue_provider.py", line 102, in rknn.base.acuitylib.provider.queue_provider.QueueProvider.run
  File "rknn/base/acuitylib/provider/text_provider.py", line 46, in rknn.base.acuitylib.provider.text_provider.TextProvider.get_batch
  File "rknn/base/acuitylib/provider/file_path_provider.py", line 98, in rknn.base.acuitylib.provider.file_path_provider.FilePathProvider._data_to_tensor
  File "rknn/base/acuitylib/provider/file_path_provider.py", line 110, in rknn.base.acuitylib.provider.file_path_provider.FilePathProvider._fitting_scale
IndexError: list index out of range

E Traceback (most recent call last):
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1278, in _do_call
E     return fn(*args)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1263, in _run_fn
E     options, feed_dict, fetch_list, target_list, run_metadata)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1350, in _call_tf_sessionrun
E     run_metadata)
E tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue '_0_fifo_queue' is closed and has insufficient elements (requested 1, current size 0)
E          [[Node: fifo_queue_Dequeue = QueueDequeueV2[component_types=[DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](fifo_queue)]]
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 895, in rknn.api.rknn_base.RKNNBase.build
E   File "rknn/api/rknn_base.py", line 1797, in rknn.api.rknn_base.RKNNBase._quantize2
E   File "rknn/base/RKNNlib/app/medusa/quantization.py", line 105, in rknn.base.RKNNlib.app.medusa.quantization.Quantization.run
E   File "rknn/base/RKNNlib/app/medusa/quantization.py", line 44, in rknn.base.RKNNlib.app.medusa.quantization.Quantization._run_quantization
E   File "rknn/base/RKNNlib/app/medusa/workspace.py", line 145, in rknn.base.RKNNlib.app.medusa.workspace.Workspace.run
E   File "rknn/base/RKNNlib/app/medusa/workspace.py", line 126, in rknn.base.RKNNlib.app.medusa.workspace.Workspace._run_iteration
E   File "rknn/base/RKNNlib/RKNN_session.py", line 30, in rknn.base.RKNNlib.RKNN_session.RKNNSession.run
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 877, in run
E     run_metadata_ptr)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1100, in _run
E     feed_dict_tensor, options, run_metadata)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1272, in _do_run
E     run_metadata)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1291, in _do_call
E     raise type(e)(node_def, op, message)
E tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue '_0_fifo_queue' is closed and has insufficient elements (requested 1, current size 0)
E          [[Node: fifo_queue_Dequeue = QueueDequeueV2[component_types=[DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](fifo_queue)]]
E Caused by op 'fifo_queue_Dequeue', defined at:
E   File "tf_pb-to-rknn.py", line 28, in <module>
E     ret = rknn.build(do_quantization=True, dataset='./dataset.txt')  # 量化模型
E   File "/home/xml/.local/lib/python3.6/site-packages/rknn/api/rknn.py", line 249, in build
E     ret = self.rknn_base.build(do_quantization=do_quantization, dataset=dataset, pack_vdata=pre_compile, batch_size=rknn_batch_size)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/ops/data_flow_ops.py", line 433, in dequeue
E     self._queue_ref, self._dtypes, name=name)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_data_flow_ops.py", line 3734, in queue_dequeue_v2
E     timeout_ms=timeout_ms, name=name)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
E     op_def=op_def)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 454, in new_func
E     return func(*args, **kwargs)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3155, in create_op
E     op_def=op_def)
E   File "/home/xml/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1717, in __init__
E     self._traceback = tf_stack.extract_stack()
E OutOfRangeError (see above for traceback): FIFOQueue '_0_fifo_queue' is closed and has insufficient elements (requested 1, current size 0)
E          [[Node: fifo_queue_Dequeue = QueueDequeueV2[component_types=[DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](fifo_queue)]]
Build model failed!
xml@xml-vm:~/project/rk3399ProD/RK3399Pro入门教程(4)$

作者: jefferyzhang    时间: 2020-11-24 14:59
本帖最后由 jefferyzhang 于 2020-11-24 15:03 编辑
李雪梅 发表于 2020-11-24 14:49
依据转换为RKNN模型代码我的会出现如下报错,请楼主赐教:
xml@xml-vm:~/project/rk3399ProD/RK3399Pro入门 ...

tf版本不对把? 自己先调试下吧,就这么几行代码而已。至少得先保证自己写的tensorflow存pb,然后再读出来用tensorflow能推理,然后才有rknn的事儿。。

作者: cfan    时间: 2020-12-16 16:38
请问一下我用TensorFlow生成的PB文件只有一层输出层是为什么?或者可以怎么解决?
作者: 戈好雨    时间: 2021-1-18 15:51
rknn读取pb模型失败 按照教程流程得到pb模型后 转换过程中rknn.load_tensorflow = -1,读取失败使得进程被exit(-1),
tf=1.14
rknn=1.6
os=debian10
python=3.7
报错信息:
--> Loading model
I Start importing tensorflow...
E Catch exception when loading tensorflow model: /home/toybrick/codes/model.pb!
E Traceback (most recent call last):
E   File "rknn/api/rknn_base.py", line 209, in rknn.api.rknn_base.RKNNBase.load_tensorflow
E   File "rknn/base/RKNNlib/RK_nn.py", line 47, in rknn.base.RKNNlib.RK_nn.RKnn.load_tensorflow
E   File "rknn/base/RKNNlib/app/importer/import_tensorflow.py", line 58, in rknn.base.RKNNlib.app.importer.import_tensorflow.Importensorflow.run
E   File "rknn/base/RKNNlib/app/importer/import_tensorflow.py", line 53, in rknn.base.RKNNlib.app.importer.import_tensorflow.Importensorflow.import_tf_ruler_module
E   File "/home/toybrick/.local/lib/python3.7/site-packages/rknn/base/RKNNlib/converter/tfruler/__init__.py", line 2, in <module>
E     from .tf_ruler_generate import r_add_n_template, r_concatv2_template, r_split_template
E ImportError: cannot import name 'r_add_n_template' from 'tfruler.tf_ruler_generate' (/home/toybrick/.local/lib/python3.7/site-packages/rknn/base/RKNNlib/converter/tfruler/tf_ruler_generate.cpython-37m-aarch64-linux-gnu.so)
Load mtcnn failed! Ret = -1
作者: hengshutech    时间: 2021-4-21 17:18
您好,请问model.input.op.name 这里报错'list' object has no attribute 'op',请问为什么,我使用的是Faster RCNN
作者: Bone1    时间: 2021-4-22 12:08
TypeError: Keras symbolic inputs/outputs do not implement `op`. You may be trying to pass Keras symbolic inputs/outputs to a TF API that does not register dispatching, preventing Keras from automatically converting the API call to a lambda layer in the Functional Model.
这个具体是什么问题?
作者: Bone1    时间: 2021-4-23 11:19
hengshutech 发表于 2021-4-21 17:18
您好,请问model.input.op.name 这里报错'list' object has no attribute 'op',请问为什么,我使用的是Fas ...

这个应该是tensorflow版本问题吧
作者: Bone1    时间: 2021-4-23 11:21
output_names = [model.output.op.name]
print('output_names:', output_names)
这个output_names的输出是什么啊?出现这个错误AssertionError: output/Softmax is not in graph




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