Toybrick

标题: 采用RKNN导入用TF生成的.pb文件时,报Unsupported Operation: fileno [打印本页]

作者: keyman_sysu    时间: 2019-4-26 23:22
标题: 采用RKNN导入用TF生成的.pb文件时,报Unsupported Operation: fileno
如题。
导出的.pb文件,确认是OK的,因为在TF环境中重新导入可以正确运行。
也已确认,输入和输出的node name是正确的,与导出时候一致。
但是采用RKNN导入.pb文件时,还是报Unsupported Operation: fileno,哪位大神知道原因啊?可debug的信息太少了。


作者: protossw512    时间: 2019-4-27 08:14
贴下你的log?
rknn不是所有的tf operation都支持的,Unsupported Operation就是告诉你哪个op在你的pb里面但是rknn不支持。
但是fileno这个op我看不太懂是什么。
作者: keyman_sysu    时间: 2019-4-27 15:37
protossw512 发表于 2019-4-27 08:14
贴下你的log?
rknn不是所有的tf operation都支持的,Unsupported Operation就是告诉你哪个op在你的pb里面 ...
  1. rknn = RKNN()
  2. rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')
  3. rknn.load_tensorflow(tf_pb='./test.pb',
  4.                     inputs=['batch:0'],                    
  5.                     outputs=['conv1/bias_add'],
  6.                     input_size_list=[[1248, 384, 3]]
  7.                     )
复制代码

我把层缩减到只到Conv1还是出现下面的错误,应该是之间有啥问题。
  1. UnsupportedOperation                      Traceback (most recent call last)
  2. <ipython-input-6-3d55b93dcd29> in <module>()
  3.       3
  4.       4                     outputs=['conv1/bias_add'],
  5. ----> 5                     input_size_list=[[1248, 384, 3]]
  6.       6                     )

  7. /usr/local/lib/python3.5/dist-packages/rknn/api/rknn.py in load_tensorflow(self, tf_pb, inputs, input_size_list, outputs, predef_file, mean_values, std_values)
  8.      60         ret = self.rknn_base.load_tensorflow(tf_pb=tf_pb, inputs=inputs, input_size_list=input_size_list,
  9.      61                                              outputs=outputs, predef_file=predef_file, mean_values=mean_values,
  10. ---> 62                                              std_values=std_values)
  11.      63         return ret
  12.      64

  13. /usr/local/lib/python3.5/dist-packages/rknn/api/redirect_stdout.cpython-35m-x86_64-linux-gnu.so in rknn.api.redirect_stdout.redirect_stdouter.redirect_stdout.func_wrapper()

  14. /usr/lib/python3.5/contextlib.py in __enter__(self)
  15.      57     def __enter__(self):
  16.      58         try:
  17. ---> 59             return next(self.gen)
  18.      60         except StopIteration:
  19.      61             raise RuntimeError("generator didn't yield") from None

  20. /usr/local/lib/python3.5/dist-packages/rknn/api/redirect_stdout.cpython-35m-x86_64-linux-gnu.so in stdout_redirector()

  21. UnsupportedOperation: fileno
复制代码

作者: zhangzj    时间: 2019-4-28 08:42
不像是op不支持的报错,你把verbose打开,详细过程信息发出来看看
作者: keyman_sysu    时间: 2019-4-28 11:29
zhangzj 发表于 2019-4-28 08:42
不像是op不支持的报错,你把verbose打开,详细过程信息发出来看看
  1. D save dump info to: ./test.log
  2. D import clients finished
  3. E Catch exception when loading tensorflow model: ./test.pb!
  4. T Traceback (most recent call last):
  5. T   File "rknn/api/rknn_base.py", line 132, in rknn.api.rknn_base.RKNNBase.load_tensorflow
  6. T   File "rknn/base/RKNNlib/converter/convert_tf.py", line 95, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.__init__
  7. T   File "rknn/base/RKNNlib/converter/tensorflowloader.py", line 52, in rknn.base.RKNNlib.converter.tensorflowloader.TF_Graph_Preprocess.__init__
  8. T   File "rknn/base/RKNNlib/converter/tensor_util.py", line 6, in rknn.base.RKNNlib.converter.tensor_util.TensorLabelOperator.tensor_label_split
  9. T ValueError: too many values to unpack (expected 2)
复制代码

大神,这是咋回事
作者: keyman_sysu    时间: 2019-4-29 16:58
  1. D Try match BiasAdd conv1/bias_add
  2. I Match convolution_biasadd [['conv1/bias_add', 'conv1/biases', 'conv1/convolution', 'conv1/kernels']] [['BiasAdd', 'Conv', 'C', 'C_1']] to [['convolution']]
  3. D Try match QueueDequeueManyV2 batch
  4. W Not match node batch QueueDequeueManyV2
  5. E Catch exception when loading tensorflow model: ./test.pb!
  6. T Traceback (most recent call last):
  7. T   File "rknn/api/rknn_base.py", line 180, in rknn.api.rknn_base.RKNNBase.load_tensorflow
  8. T   File "rknn/base/RKNNlib/converter/convert_tf.py", line 565, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
  9. T   File "rknn/base/RKNNlib/converter/convert_tf.py", line 464, in rknn.base.RKNNlib.converter.convert_tf.convert_tf._tf_push_ready_node
  10. T TypeError: 'NoneType' object is not iterable
复制代码

重新运行了一下,这个log貌似我第一个节点是batch出了问题,但是feed单张图片是OK的啊,已经跳过了dequeue的node了,这个是直接到conv1的了。
作者: keyman_sysu    时间: 2019-4-30 13:52
找到方法解决:
因为原来的模型,输入的时候没有进placeholder,直接对batch生成的数据卷积的,所以在固话模型的时候,第一个节点就是batch。
然而,RKNN是对batch节点里面的QueueEnqueueManyV2之类的op是不支持的,所以会一直报错。
我记得NCNN对这个op直接是翻译为identity的,没想到RKNN直接不支持。
解决方法是,载入checkpoint后,直接修改conv1的node的input,改为placeholder的输入,再对模型固话转化就可以了。




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