点击头像,立即联系微信客服
       福州牛新牛科技有限公司是一家专业的嵌入式人工智能物联网(Embedded AIoT)产品供应商和技术方案商,同时也是一家集设计、研发、生产和销售于一体的国家级高新技术企业。公司批量供应AI核心板、工控板、AIoT智能网关、AI边缘计算终端等产品,并提供定制开发服务和一站式AIoT解决方案。NNEWN提供免费技术方案咨询和项目评估,有需要的读者可以点击右侧图标跳转到需求提交页面提交您的项目需求:
【AI开发_04】模型转换教程实例
来源: | 作者:nnewn | 发布时间: 2021-08-28 | 2550 次浏览 | 分享到:

rknn_toolkit是作为NNEWN AI硬件平台的开发套件使用的,为开发者提供模型迁移及量化的功能,制作rknn模型,以便在NNEWN AI硬件平台上用npu加速神经网络模型的推理过程。注意此套件不负责训练,且目前只支持在linux平台上的操作。
 下面以yolov3为例,展示rknn模型转换的过程

模型转换

  NNEWN AI硬件平台目前支持.rknn后缀的模型的评估及运行,对于常见的tensorflow、tensroflow lite、caffe、darknet、onnx和Pytorch模型都可以通过我们提供的 toolkit 工具将其转换至 rknn 模型,而对于其他框架训练出来的模型,也可以先将其转至 onnx 模型再转换为 rknn 模型。

  模型转换操作流程如图1所示:


图1 模型转换流程图

注:

  • 以上步骤请按顺序执行。

  • 绿色框步骤表示不在该框架内执行,训练请参考其他文档。

  • 蓝色框标注的步骤导出的RKNN 模型可以通过load_rknn 接口导入并使用。

  • 红色框标注的模型推理、性能评估和内存评估的步骤先后顺序不固定,根据实际使用情况决定。

  • 只有当目标硬件平台是NNEWN AI硬件平台接口获取内存使用情况。

  • API说明文档请参考同目录下 toolkit API说明 页面

Demo示例

  下面以darknet的yolov3模型为例展示如何转换模型:
  (函数的调用规则请参考同级目录下的 toolkit API使用说明文档)

  加载rknn_toolkit函数

  1. from rknn.api import RKNN



  创建RKNN对象

  1. rknn = RKNN()



  加载darknet模型

  1. rknn.load_darknet(model=’./yolov3_416x416.cfg’,weight=’./yolov3.weights’)



  设置输入配置

  1. rknn.config(channel_mean_value=’0 0 0 255’,reorder_channel=’0 1 2’,batch_size=1)

- channel_mean_valie=‘0 0 0 255’ 表示对输入图片做归一化处理,前三位分别表示对应图片的3通道对应减去的像素数值,最后一位表示各通道减去对应像素数值后再除以该位,255在这里表示将像素范围从 0~255 的整数转换到 0~1 之间的浮点数,常见的归一化还有‘128 128 128 128’.- reorder_channel 表示输入的通道顺序,如果是通过 RGB图像训练的,而最终预测时输入的是 BGR格式的图像,则此处的值应改为 ‘2 1 0’- batch_size 表示单次推测的输入个数,一般来说batch_size的调整并不会提高一般模型在NPU上的执行性能,但却会显著增加内存消耗以及增加单帧的延迟。但是对于超小模型,调整batch_size可以降低超小模型在CPU上的消耗,提高平均帧率。(适用于模型太小,CPU的开销大于NPU的开销)



  构建模型

  1. rknn.build(do_quantization=True, dataset=’./dataset_416x416.txt’, pre_compile=True)

- do_quantization 表示是否进行量化,开启后需要比较长的量化时间,根据量化图片的多少及模型的大小,时间在半小时到几小时,量化时请保证系统的运行内存充足,建议16G以上,物理内存不足时可考虑挂载虚拟内存,量化具体细节请参看API说明文档- dataset 输入为一个txt文件的路径,该txt里按格式包含即用于量化的图片,一般来说量化照片越多,效果越精确,详见API说明文档。- pre_compile 表示对模型进行预编译,开启后模型的第一次加载将变快,但是没法在toolkit的模拟器环境下运行。



  输出模型

  1. rknn.export_rknn(‘./yolov3_416x416.rknn’)



  代码清单1 示范了将darknet格式的yolo模型转换成rknn格式的完整流程。

代码清单1 模型转换实例
  1. from PIL import Image
    import numpy as np
    import re
    import math
    import random
    from rknn.api import RKNN

    if name == main‘:
       # Create RKNN object
       rknn = RKNN()

       # Load darknet model
       print(‘—> Loading model’)
       rknn.load_darknet(model=’./yolov3_416x416.cfg’, weight=”./yolov3.weights”)
       print(‘done’)
       rknn.config(channel_mean_value=’0 0 0 255’, reorder_channel=’0 1 2’, batch_size=1)

       # Build model
       print(‘—> Building model’)
       rknn.build(do_quantization=False, dataset=’./quan_pic_dir_list.txt’, pre_compile=False)
       print(‘done’)

       rknn.export_rknn(‘./yolov3_416x416.rknn’)
       exit(0)


Demo文件资料

  Demo文件下载链接,含文件如图2所示。注意该demo应在安装完环境后方可执行。

表2 文件归属表


名称作用功能
quan_pic_dir文件夹,存放量化过程中需要的图片
quan_pic_dir.tar压缩包,包含量化所需图片数据
quan_pic_dir_list.txttxt文档,记录量化图片所在目录,一张图片对应一条词行
results_screenshot_16.10.2019.png图片,检测结果
rknn_picture_416x416.pypython文件,使用rknn模型对416x416的图片进行检测测试
rknn_transform_416x416.pypython文件,将darknet格式的yolo模型转为 rknn格式的yolo模型
yolov3_416x416.cfgdarknet格式的模型配置文件
yolov3_416x416.weightsdarknet格式的模型参数文件
yolov3_416x416.rknnrknn格式的yolo模型
yolov3_416x416_precomplie.rknnrknn格式的yolo模型(带预编译),在核心板上加载模型会更快



  执行模型转换,注意如果开启量化 (do_quantization=True) 则先需要先解压quan_pic_dir文件。模型转换耗费时间较多,不执行量化约10-30分钟完成依机器性能而定,请耐心等待。

  1. python rknn_transform_416x416.py



  运行yolov3_rknn模型

  1. python rknn_picture_416x416.py

  输出结果如图3所示,在显示图片结果的窗口敲任意键退出。


热门文章推荐
热门产品推荐
  • RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    核心板

    0.00

    0.00

  • RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    核心板

    20000.00

    2799.00

  • RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    核心板

    20000.00

    2799.00

  • RK3576核心板 | NXN-CORE-3576-260-5070-V1

    RK3576核心板 | NXN-CORE-3576-260-5070-V1

    核心板

    0.00

    0.00

  • RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    核心板

    0.00

    0.00

  • RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    核心板

    699.00

    699.00

  • 一种多通道视频采集及拼接显示的应用程序

    一种多通道视频采集及拼接显示的应用程序

    应用开发

    20000.00

    2799.00

  • 一种基于RK3588的通用型开发板

    一种基于RK3588的通用型开发板

    产品中心

    20000.00

    2799.00

  • 物联网云平台

    物联网云平台

    应用开发

    0.00

    0.00

Copyright © 2021-2024 福州牛新牛科技有限公司 All rights reserved. |