rockchip-linux / rknn-toolkit2

BSD 3-Clause "New" or "Revised" License
828 stars 151 forks source link

请问有sface转Rknn3588的例子吗?使用opencv zoo的开源模型测试 #288

Closed ouxiand closed 4 months ago

ouxiand commented 4 months ago

请问有sface的onnx文件转Rknn3588例子吗?使用opencv zoo的开源模型测试,具体如下: onnx来源:https://github.com/opencv/opencv_zoo/blob/main/models/face_recognition_sface/face_recognition_sface_2021dec.onnx 测试图片:112*112尺寸的图片

转换脚本如下:

import cv2 import numpy as np import time

from rknn.api import RKNN import os import torch

import decimal decimal.getcontext().prec=10

np.set_printoptions(threshold=np.inf) np.set_printoptions(formatter={'float': '{: 0.10f}'.format})

def cos_sim(a, b): a_norm = np.linalg.norm(a) b_norm = np.linalg.norm(b) cos = np.dot(a,b)/(a_norm * b_norm) return cos

if name == 'main':

platform = 'rk3588'
Width = 112
Height = 112
datestr =time.strftime('%Y%m%d%H%M')
MODEL_PATH_NAME = 'face_recognition_sface_2021dec'
NEED_BUILD_MODEL = True

# Create RKNN object
rknn = RKNN()

#OUT_DIR = "rknn_models"
MODEL_PATH = './{}.onnx'.format(MODEL_PATH_NAME)
RKNN_MODEL_PATH = './{}_{}_{}.rknn'.format(MODEL_PATH_NAME,datestr,platform)
if NEED_BUILD_MODEL:
    DATASET = './dataset.txt'

    rknn.config(mean_values=[[127.5, 127.5, 127.5]], std_values=[[127.5, 127.5, 127.5]], target_platform=platform)
    # Load model
    print('--> Loading model')
    ret = rknn.load_onnx(model=MODEL_PATH)
    if ret != 0:
        print('load model failed!')
        exit(ret)
    print('done')

    # Build model
    print('--> Building model')
    ret = rknn.build(do_quantization=False, dataset=DATASET)
    if ret != 0:
        print('build model failed.')
        exit(ret)
    print('done')

    # Export rknn model
    print('--> Export RKNN model: {}'.format(RKNN_MODEL_PATH))
    ret = rknn.export_rknn(RKNN_MODEL_PATH)
    if ret != 0:
        print('Export rknn model failed.')
        exit(ret)

    # Init runtime environment
    print('--> Init runtime environment')
    ret = rknn.init_runtime()
    if ret != 0:
        print('Init runtime environment failed!')
        exit(ret)

    # 测试效果如下
    img = cv2.imread("./sface1.jpg")
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

    img = np.expand_dims(img,axis=0)  

    # Inference
    print('--> Running model')
    output1 = rknn.inference(inputs=[img],data_format='nhwc')[0]
    print(output1)

    img = cv2.imread("./sface2.jpg")
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img = np.expand_dims(img,axis=0) 
    print('--> Running model')
    output2 = rknn.inference(inputs=[img],data_format='nhwc')[0]
    print(output2)

    print(cos_sim(output1[0],output2[0]))

    rknn.release()
    print('done')
else:
    ret = rknn.load_rknn(RKNN_MODEL_PATH)

rknn.release()

上面脚本转换可以转出rknn文件,但是结果是有问题,所有图片结果都是0.99,明细不对,请问各位有对应解决方法?

ouxiand commented 4 months ago

onnx来源:https://github.com/opencv/opencv_zoo/blob/main/models/face_recognition_sface/ ,然后下载face_recognition_sface_2021dec.onnx