1382|2

413

帖子

2

TA的资源

纯净的硅(初级)

【AI挑战营第二站】MNIST转RKNN格式并算法工程化部署打包成SDK [复制链接]

1 RKNN简述

    RKNN内部逻辑应该是纯数理原理,对于开发者来说,简单理解,就是压缩深度学习的模型,并剪裁后,适配到开发板。这个过程并不容易,需要强大的开发工具支持,并且,必然会遇到各种兼容问题。

    解决的方法就是设置一个虚拟环境,如果搞砸了直接重新删除,再来一次。本帖子所花时间远大于第一站。

2 安装环境

   首先还是要创建虚拟环境,这里没有用conda,那个太大了,用venv就足够的。

python -m venv mnist

    然后就是直接下载开发代码库,需要两个,使用git命令就好了

git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1

 

Screenshot from 2024-05-10 12-01-28.png
 
然后,进去第一个库中,找到适合python版本的先安装关联的库,这时候要进入虚拟环境,在ubuntu中用source 命令
Screenshot from 2024-05-10 12-06-34.png
Screenshot from 2024-05-10 14-53-41.png
 
这个时间相当的长,问什么呢?打开文件就知道了,
# base deps
protobuf==3.20.3

# utils
psutil>=5.9.0
ruamel.yaml>=0.17.21
scipy>=1.9.3
tqdm>=4.64.1
opencv-python>=4.5.5.64
fast-histogram>=0.11

# base
onnx==1.14.1
onnxoptimizer==0.3.8
onnxruntime==1.16.0
torch>=1.13.1,<=2.1.0
tensorflow==2.8.0

其中torch最新版本已经2.3.0了,因为没有测试过,所以不要追求新鲜感了,然后安装对应的wheel库,这次就非常快了

 
Screenshot from 2024-05-10 14-54-46.png
Screenshot from 2024-05-10 14-54-56.png
成功安装。
3 转换RKNN并打包SDK
事先采用jupyter试了一下,还是没有调试好环境变量,所以没有启动成功,这个代码简单,就直接在python的交互页面就可以完成,主要可以参考以下代码。
import sys

from rknn.api import RKNN

DATASET_PATH = '../../../datasets/COCO/coco_subset_20.txt'
DEFAULT_RKNN_PATH = '../model/yolov5.rknn'
DEFAULT_QUANT = True

def parse_arg():
    if len(sys.argv) < 3:
        print("Usage: python3 {} onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0]))
        print("       platform choose from [rk3562,rk3566,rk3568,rk3588,rk1808,rv1109,rv1126]")
        print("       dtype choose from [i8, fp] for [rk3562,rk3566,rk3568,rk3588]")
        print("       dtype choose from [u8, fp] for [rk1808,rv1109,rv1126]")
        exit(1)

    model_path = sys.argv[1]
    platform = sys.argv[2]

    do_quant = DEFAULT_QUANT
    if len(sys.argv) > 3:
        model_type = sys.argv[3]
        if model_type not in ['i8', 'u8', 'fp']:
            print("ERROR: Invalid model type: {}".format(model_type))
            exit(1)
        elif model_type in ['i8', 'u8']:
            do_quant = True
        else:
            do_quant = False

    if len(sys.argv) > 4:
        output_path = sys.argv[4]
    else:
        output_path = DEFAULT_RKNN_PATH

    return model_path, platform, do_quant, output_path

if __name__ == '__main__':
    model_path, platform, do_quant, output_path = parse_arg()

    # Create RKNN object
    rknn = RKNN(verbose=False)

    # Pre-process config
    print('--> Config model')
    rknn.config(mean_values=[[0, 0, 0]], std_values=[
                    [255, 255, 255]], target_platform=platform)
    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=do_quant, 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()

 

如下图,输出rknn的转换模型了
Screenshot from 2024-05-10 15-24-15.png
参见附件
opt_model_rk3588.rknn (2.34 MB, 下载次数: 0)

最新回复

load_onnx,看来也是用onnx做交换了。   详情 回复 发表于 2024-5-11 17:26

回复
举报

7002

帖子

18

TA的资源

五彩晶圆(中级)

load_onnx,看来也是用onnx做交换了。

点评

是的,都是先弄成onnx,这个比较方便了。    详情 回复 发表于 2024-5-16 09:22
个人签名

默认摸鱼,再摸鱼。2022、9、28


回复

413

帖子

2

TA的资源

纯净的硅(初级)

freebsder 发表于 2024-5-11 17:26 load_onnx,看来也是用onnx做交换了。

是的,都是先弄成onnx,这个比较方便了。

 


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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表