Toybrick

标题: rk3566 转换facenet失败 [打印本页]

作者: ameRk    时间: 2022-7-15 11:01
标题: rk3566 转换facenet失败
同样的模型,用rknn-toolkit 参照(https://t.rock-chips.com/forum.p ... =facenet&page=1)进行转换,可以正常转换,但是用rknn-toolkit2(rk35666)进行转换,提示如下错误。
该问题是因为 rknn-toolkit2 已经不支持了facenet的模型转换吗?

W __init__: rknn-toolkit2 version: 1.3.0-11912b58
W config: 'target_platform' is None, use rk3566 as default, Please set according to the actual platform!
config done
--> Loading model
W load_tensorflow: inputs name should be a tensor name instead of node name
2022-07-14 16:26:03.647684: I tensorflow/tools/graph_transforms/transform_graph.cc:317] Applying strip_unused_nodes
2022-07-14 16:26:03.787548: I tensorflow/tools/graph_transforms/transform_graph.cc:317] Applying sort_by_execution_order
2022-07-14 16:26:03.867908: I tensorflow/tools/graph_transforms/transform_graph.cc:317] Applying fold_constants
2022-07-14 16:26:04.358690: I tensorflow/tools/graph_transforms/transform_graph.cc:317] Applying fold_batch_norms
2022-07-14 16:26:04.506355: I tensorflow/tools/graph_transforms/transform_graph.cc:317] Applying fold_old_batch_norms
2022-07-14 16:26:05.596624: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA
2022-07-14 16:26:05.620279: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2200000000 Hz
2022-07-14 16:26:05.622388: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x556b7a5042e0 executing computations on platform Host. Devices:
2022-07-14 16:26:05.622431: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): <undefined>, <undefined>
E load_tensorflow: Catch exception when loading tensorflow model: 20180402-114759/20180402-114759.pb!
E load_tensorflow: Traceback (most recent call last):
E load_tensorflow:   File "/home/ame/anaconda3/envs/npu/lib/python3.6/site-packages/tensorflow/python/framework/importer.py", line 427, in import_graph_def
E load_tensorflow:     graph._c_graph, serialized, options)  # pylint: disable=protected-access
E load_tensorflow: tensorflow.python.framework.errors_impl.InvalidArgumentError: Node 'InceptionResnetV1/Bottleneck/BatchNorm/cond_1/AssignMovingAvg_1/Switch' expects to be colocated with unknown node 'InceptionResnetV1/Bottleneck/BatchNorm/moving_variance'
E load_tensorflow: During handling of the above exception, another exception occurred:
E load_tensorflow: Traceback (most recent call last):
E load_tensorflow:   File "rknn/api/rknn_base.py", line 990, in rknn.api.rknn_base.RKNNBase.load_tensorflow
E load_tensorflow:   File "rknn/base/convertor/tensorflow2onnx/tf2onnx/convert.py", line 589, in rknn.base.convertor.tensorflow2onnx.tf2onnx.convert.from_graph_def
E load_tensorflow:   File "rknn/base/convertor/tensorflow2onnx/tf2onnx/convert.py", line 590, in rknn.base.convertor.tensorflow2onnx.tf2onnx.convert.from_graph_def
E load_tensorflow:   File "rknn/base/convertor/tensorflow2onnx/tf2onnx/convert.py", line 591, in rknn.base.convertor.tensorflow2onnx.tf2onnx.convert.from_graph_def
E load_tensorflow:   File "rknn/base/convertor/tensorflow2onnx/tf2onnx/convert.py", line 592, in rknn.base.convertor.tensorflow2onnx.tf2onnx.convert.from_graph_def
E load_tensorflow:   File "/home/ame/anaconda3/envs/npu/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
E load_tensorflow:     return func(*args, **kwargs)
E load_tensorflow:   File "/home/ame/anaconda3/envs/npu/lib/python3.6/site-packages/tensorflow/python/framework/importer.py", line 431, in import_graph_def
E load_tensorflow:     raise ValueError(str(e))
E load_tensorflow: ValueError: Node 'InceptionResnetV1/Bottleneck/BatchNorm/cond_1/AssignMovingAvg_1/Switch' expects to be colocated with unknown node 'InceptionResnetV1/Bottleneck/BatchNorm/moving_variance'
done
--> Building model
E build: The model has not been loaded, please load it first!
done
E export_rknn: RKNN model is None, please load & build model first!


作者: jefferyzhang    时间: 2022-7-15 11:17
本帖最后由 jefferyzhang 于 2022-7-15 11:27 编辑

NPU只对op层面做支持,我们不会把市面所有模型都跑一遍。
不支持的op要么换掉,要么自定义,要么拉出来放到rknn外实现。你这个看过去也有可能是版本不匹配,建议你rknn文档先看一遍

作者: ameRk    时间: 2022-7-15 11:20
jefferyzhang 发表于 2022-7-15 11:17
NPU只对op层面做支持,我们不会把市面所有模型都跑一遍。
不支持的op要么换掉,要么自定义,要么拉出来放到 ...

关键是 你这个rknn-toolkit 是支持的啊,怎么到 rknn-toolkit2  反而取消了呢,没有考虑向下兼容吗?
是对 rknn-toolkit2 进行了裁剪吗?
作者: jefferyzhang    时间: 2022-7-15 11:27
ameRk 发表于 2022-7-15 11:20
关键是 你这个rknn-toolkit 是支持的啊,怎么到 rknn-toolkit2  反而取消了呢,没有考虑向下兼容吗?
是对 ...

建议你先把文档看一遍,这个看过去不会支持不了。版本不匹配可能性更大
作者: ameRk    时间: 2022-7-15 11:40
jefferyzhang 发表于 2022-7-15 11:27
建议你先把文档看一遍,这个看过去不会支持不了。版本不匹配可能性更大 ...

版本不匹配,你是只芯片与sdk的版本吗,现在的板子是 rk 3566 ,就是按照你们的文档,要换成  rknn-toolkit2的啊

而且目前都是再ubuntu系统上进行转换的,你说的版本不匹配 指的什么呢,我现在都没有走到推理那一步,现在是转换模型都失败啦,同样的流程,rknn-toolkit (1.7.1)版本是可以转换成功的,rknn-toolkit 2就转换找不到OP
作者: ameRk    时间: 2022-7-15 11:43
jefferyzhang 发表于 2022-7-15 11:27
建议你先把文档看一遍,这个看过去不会支持不了。版本不匹配可能性更大 ...

为了保持一致性,我都是再同一台服务器上搭建的同样的环境(除了你们的转换工具包不一样,其他的依赖库版本都一样的)所以你说的版本不匹配 是指的哪方面的呢
作者: jefferyzhang    时间: 2022-7-15 12:05
你tensorflow什么版本
作者: ameRk    时间: 2022-7-15 12:10
jefferyzhang 发表于 2022-7-15 12:05
你tensorflow什么版本

1.14.0,按照你们的文档安装的版本
作者: jefferyzhang    时间: 2022-7-15 12:14
你模型没开推理模式转的吧?
作者: ameRk    时间: 2022-7-15 12:18
jefferyzhang 发表于 2022-7-15 12:14
你模型没开推理模式转的吧?

没开,因为之前就发现有问题,所以就只进行了模型转换处理
作者: jefferyzhang    时间: 2022-7-15 12:25
ameRk 发表于 2022-7-15 12:18
没开,因为之前就发现有问题,所以就只进行了模型转换处理

不开推理模式freeze的模型rknntoolkit1也是转不过的
作者: ameRk    时间: 2022-7-15 12:31
jefferyzhang 发表于 2022-7-15 12:25
不开推理模式freeze的模型rknntoolkit1也是转不过的

不好意思确认一下,你说的推理模式是指  rknn.build 之后的interface 操作,还是  某个配置项啊,如果是  指interface 的话。我这里确实都没有开,但是rknntoolkit1 确实是转换成功啦。build 是成功的,但是rknntoolkit2 就报第一栏的那种错误
作者: ameRk    时间: 2022-7-15 13:34
jefferyzhang 发表于 2022-7-15 12:25
不开推理模式freeze的模型rknntoolkit1也是转不过的

现在的对比情况,就是两套工具下的转换程序的流程是一致的,rknntoolkit1 没有报错并且有RKNN模型生成,rknntoolkit2 报错啦
作者: jefferyzhang    时间: 2022-7-15 14:40
tensorflow的接口,pytorch也有类似接口,模型在训练模式和推理模式是不一样的
作者: ameRk    时间: 2022-7-15 14:47
jefferyzhang 发表于 2022-7-15 14:40
tensorflow的接口,pytorch也有类似接口,模型在训练模式和推理模式是不一样的 ...

哦。但是从我这里的试验结果来看,流程是一样的啊(所以tensorflow那一部分也是没有修改的),唯一不同的就是rknntoolkit1 与rknntoolkit2(还有就是参数不同,参数都是根据你们不同版本的文档修改调整的),所以我现在想确认的是  rknntoolkit2 与rknntoolkit1 的改动有这么大吗,从转换结果来看,rknntoolkit1 是支持该 op的,但rknntoolkit2 却不支持,但是我无法看到你们的内部调用情况,所以需要您帮忙分析一下,是不是由于rknntoolkit1 与rknntoolkit2 的不同导致的,如果是这样的话,我好想其他办法解决这个问题,如果是参数或者函数调用的话,那方便指导一下那些参数有可能导致这些情况不!
作者: jefferyzhang    时间: 2022-7-15 15:03
ameRk 发表于 2022-7-15 14:47
哦。但是从我这里的试验结果来看,流程是一样的啊(所以tensorflow那一部分也是没有修改的),唯一不同的 ...

两个是不同架构的npu,toolkit也是新开发的。
问题我已经反馈上去。
作者: ameRk    时间: 2022-7-15 15:04
jefferyzhang 发表于 2022-7-15 15:03
两个是不同架构的npu,toolkit也是新开发的。
问题我已经反馈上去。

好的,谢谢啦
作者: jefferyzhang    时间: 2022-7-19 17:40
本帖最后由 jefferyzhang 于 2022-7-20 09:43 编辑

请把模型和转换脚本发一下.还有你自己可以试试先转onnx再转rknn能不能转过

作者: ameRk    时间: 2022-9-1 10:36
jefferyzhang 发表于 2022-7-19 17:40
请把模型和转换脚本发一下.还有你自己可以试试先转onnx再转rknn能不能转过
...

rknn-toolkit2 的模型转换如下
import numpy as np

import re
import math
import random
import cv2

from rknn.api import RKNN



if __name__ == '__main__':

    INPUT_SIZE = 160
    rknn = RKNN(verbose=True)

    # Config for Model Input PreProcess
    #rknn.config(channel_mean_value='0 0 0 1', reorder_channel='0 1 2',target_platform=['rv1126'])
    rknn.config(mean_values=[127.5, 127.5, 127.5], std_values=[127.5, 127.5, 127.5])

    #rknn.config(channel_mean_value='0 0 0 1', reorder_channel='0 1 2')
    print('config done')

    # load tensorflow model
    print('--> Loading model')
    #out = 'InceptionResnetV1/Bottleneck/BatchNorm/batchnorm/add_1'
    #out = "InceptionResnetV1/Bottleneck/BatchNorm/cond_1/AssignMovingAvg_1/Switch"
    out = "InceptionResnetV1/Bottleneck/BatchNorm/Reshape_1"
    #out = "embeddings"
    rknn.load_tensorflow(tf_pb='20180402-114759/20180402-114759.pb',
                         #inputs=['input','phase_train'],
                         inputs=['input'],
                         outputs=[out],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
                         #input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3], [1]])   
    print('done')

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

    # Export RKNN Model
    rknn.export_rknn('./facenet_Reshape_1_two.rknn')

    rknn.release()

rknn-toolkit的换换如下
import numpy as np

import re
import math
import random
import cv2

from rknn.api import RKNN



if __name__ == '__main__':

    INPUT_SIZE = 160
    rknn = RKNN(verbose=True)

    # Config for Model Input PreProcess
    #rknn.config(channel_mean_value='0 0 0 1', reorder_channel='0 1 2',target_platform=['rv1126'])
    #rknn.config(mean_values=[127.5, 127.5, 127.5], std_values=[127.5, 127.5, 127.5])

    rknn.config(channel_mean_value='0 0 0 1', reorder_channel='0 1 2')
    print('config done')

    # load tensorflow model
    print('--> Loading model')
    #out = 'InceptionResnetV1/Bottleneck/BatchNorm/batchnorm/add_1'
    #out = "InceptionResnetV1/Bottleneck/BatchNorm/cond_1/AssignMovingAvg_1/Switch"
    out = "InceptionResnetV1/Bottleneck/BatchNorm/Reshape_1"
    #out = "embeddings"
    rknn.load_tensorflow(tf_pb='20180402-114759/20180402-114759.pb',
                         #inputs=['input','phase_train'],
                         inputs=['input'],
                         outputs=[out],
                         input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
    print('done')

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

    # Export RKNN Model
    rknn.export_rknn('./facenet_Reshape_1_two.rknn')

    rknn.release()




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