AI挑战营(进阶) 四:onnx2rknn流程简析
[复制链接]
上节我们已经得到了retinaface和arcface的onnx模型本节,接下来终于进入到本次挑战最重要的环节。我们将onnx转换为可以在rv1106的npu上运行的rknn模型
首先我们可以在luckfox官方的仓库下找到luckfox官方提供的环境包: 。
部署rknn环境先前也有了很多教程,但是建议还是按照luckfox教程里的来。建议使用官方的这个库,里面的rknpu版本为1.6.2,而官方的为2.3.0。至少我在使用官方的rknpu转换到板端运行的时候会报版本不兼容的错误。使用官方的版本和转换脚本就不会。
按照 官方教程指引找到转换脚本,官方有提供retinaface的转换脚本及模型,retinaface直接按照官方的教程转换即可。
得到模型后我们也可以使用第一节提到的rkmpi例程测试一下我们的模型。
至于arcface模型,官方只提供了facenet模型的例程,所以我们需要修改一下covert.py
#convert.py
import sys
from rknn.api import RKNN
if __name__ == '__main__':
model_path = "../model/w600k_mbf.onnx"
dataset_path = "../dataset/dataset.txt"
output_path = "./arcface.rknn"
model_type = "arcface"
# Create RKNN object
rknn = RKNN(verbose=False)
# Pre-process config
print('--> Config model')
if model_type == 'Retinaface':
rknn.config(mean_values=[[104, 117, 123]], std_values=[[1, 1, 1]], target_platform='rv1103',
quantized_algorithm="normal", quant_img_RGB2BGR=True,optimization_level=0)
print("Use retinaface mode")
elif model_type == 'arcface':
rknn.config(mean_values=[[127.5, 127.5, 127.5]], std_values=[[127.5, 127.5, 127.5]], target_platform='rv1103')
print('done')
# 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=True, dataset=dataset_path)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn(output_path)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# Release
rknn.release()
后期再看看需不需要加入板端推理和精度分析的内容。
至此我们就已经在luckfox 上成功的部署了自己的转换的模型,下一节我们会基于官方的例程修改得到一个可以注册并识别多张人脸的例程。
|