Toybrick

很简单的模型rknn.load_tensorflow出错,该怎么升级

liufeng

中级会员

积分
228
楼主
发表于 2020-7-27 17:53:44    查看: 7355|回复: 5 | [复制链接]    打印 | 只看该作者
D:\rknn-toolkit-v1.3.2\examples\tensorflow\ts> cmd /C "C:\Users\liufeng\Anaconda3\envs\RKNN_TOOL\python.exe c:\Users\liufeng\.vscode\extensions\ms-python.python-2020.7.96456\pythonFiles\lib\python\debugpy\launcher 8665
-- d:\rknn-toolkit-v1.3.2\examples\tensorflow\ts\ts.py "
--> Loading model
C:\Users\liufeng\Anaconda3\envs\RKNN_TOOL\lib\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)
'python3' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
E Try match Add add failed, catch exception!
E Catch exception when loading tensorflow model: ./ts.pb!
E Traceback (most recent call last):
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 616, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 380, in rknn.base.RKNNlib.converter.convert_tf.convert_tf._tf_try_match_ruler
E   File "<string>", line 1, in <module>
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 134, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.shape_pick
E   File "rknn\base\RKNNlib\converter\tensorflowloader.py", line 205, in rknn.base.RKNNlib.converter.tensorflowloader.TF_Graph_Preprocess.query_tensors
E   File "rknn\base\RKNNlib\converter\tf_util.py", line 371, in rknn.base.RKNNlib.converter.tf_util.TFProto_Util.query_tensor
E   File "rknn\base\RKNNlib\converter\tf_util.py", line 374, in rknn.base.RKNNlib.converter.tf_util.TFProto_Util.query_tensor
E   File "rknn\base\RKNNlib\converter\tf_util.py", line 407, in rknn.base.RKNNlib.converter.tf_util.TFProto_Util.query_tensor
E   File "C:\Users\liufeng\Anaconda3\envs\RKNN_TOOL\lib\site-packages\tensorflow\python\client\session.py", line 887, in run
E     run_metadata_ptr)
E   File "C:\Users\liufeng\Anaconda3\envs\RKNN_TOOL\lib\site-packages\tensorflow\python\client\session.py", line 1086, in _run
E     str(subfeed_t.get_shape())))
E ValueError: Cannot feed value of shape (1, 1, 1, 1) for Tensor 'input_holder:0', which has shape '(1,)'
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn\api\rknn_base.py", line 331, 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 "rknn\api\rknn_log.py", line 312, in rknn.api.rknn_log.RKNNLog.e
E ValueError: Try match Add add failed, catch exception!

回复

使用道具 举报

liufeng

中级会员

积分
228
沙发
 楼主| 发表于 2020-7-27 17:54:25 | 只看该作者
提示不支持tf.add
回复

使用道具 举报

liufeng

中级会员

积分
228
板凳
 楼主| 发表于 2020-7-27 18:07:41 | 只看该作者
import numpy as np

import re
import math
import random
import cv2

from rknn.api import RKNN

INPUT_SIZE = 1

NUM_RESULTS = 1917
NUM_CLASSES = 91

Y_SCALE = 10.0
X_SCALE = 10.0
H_SCALE = 5.0
W_SCALE = 5.0


def expit(x):
    return 1. / (1. + math.exp(-x))

def unexpit(y):
    return -1.0 * math.log((1.0 / y) - 1.0)

def CalculateOverlap(xmin0, ymin0, xmax0, ymax0, xmin1, ymin1, xmax1, ymax1):
    w = max(0.0, min(xmax0, xmax1) - max(xmin0, xmin1))
    h = max(0.0, min(ymax0, ymax1) - max(ymin0, ymin1))
    i = w * h
    u = (xmax0 - xmin0) * (ymax0 - ymin0) + (xmax1 - xmin1) * (ymax1 - ymin1) - i

    if u <= 0.0:
        return 0.0

    return i / u


def load_box_priors():
    box_priors_ = []
    fp = open('./box_priors.txt', 'r')
    ls = fp.readlines()
    for s in ls:
        aList = re.findall('([-+]?\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?', s)
        for ss in aList:
            aNum = float((ss[0]+ss[2]))
            box_priors_.append(aNum)
    fp.close()

    box_priors = np.array(box_priors_)
    box_priors = box_priors.reshape(4, NUM_RESULTS)

    return box_priors



if __name__ == '__main__':

    # Create RKNN object
    rknn = RKNN()

    '''
    # Config for Model Input PreProcess
    rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
    '''
    # Load TensorFlow Model
    print('--> Loading model')
    rknn.load_tensorflow(tf_pb='./ts.pb',
                         inputs=['input_holder'],
                         outputs=['predictions'],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 1]])
    print('done')

    # Build Model
    print('--> Building model')
    rknn.build(do_quantization=True, dataset='./dataset.txt')
    print('done')

    # Export RKNN Model
    rknn.export_rknn('./ssd_mobilenet_v1_coco.rknn')
回复

使用道具 举报

leok

版主

积分
894
地板
发表于 2020-7-28 08:51:39 | 只看该作者
liufeng 发表于 2020-7-27 18:07
import numpy as np

import re

请参照往期帖子中ssd转换例子,或https://github.com/rockchip-linu ... ree/master/examples 中例子,进行转换节点选择。
回复

使用道具 举报

liufeng

中级会员

积分
228
5#
 楼主| 发表于 2020-7-28 10:59:24 | 只看该作者
leok 发表于 2020-7-28 08:51
请参照往期帖子中ssd转换例子,或https://github.com/rockchip-linux/rknn-toolkit/tree/master/examples ...

好的,谢谢。
我修改了模型,修改输入为通道为3通道的tensor后,再load_tensorflow就成功了,澄清一下可以支持tf.add的操作,其它复杂操作还没测试是否有bug。只是有建议和疑问:
1.rknn只支持固定的3通道tensor,感觉有点限制。
2.如果是支持单通道,rknn需要怎么rknn.config配置。
回复

使用道具 举报

liufeng

中级会员

积分
228
6#
 楼主| 发表于 2020-7-28 11:02:51 | 只看该作者


if __name__ == '__main__':

    # Create RKNN object
    rknn = RKNN()

   
    # Config for Model Input PreProcess
    rknn.config(channel_mean_value='127.5 127.5 127.5 127.5', reorder_channel='0 1 2')
    #rknn.config(channel_mean_value='127.5 127.5', reorder_channel='0')

    # Load TensorFlow Model
    print('--> Loading model')
    rknn.load_tensorflow(tf_pb='./ts.pb',
                         inputs=['input_holder'],
                         outputs=['predictions'],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
    print('done')

这样修改rknn代码,模型代码里输入修改为3通道。成功加载。
回复

使用道具 举报

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

本版积分规则

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


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