rknn学习记录

目录

  • 一、docker安装
    • 1、更新软件源
    • 2、安装证书
    • 3、写入软件源信息
    • 4、安装docker
    • 5、启动docker
    • 6、安装工具
    • 7、查看版本
  • 二、安装环境
    • 1、加载镜像
    • 2、运行镜像,映射代码空间
    • 3、常用docker命令
  • 三、模型量化转换
    • 1、修改转换脚本
    • 2、启动docker
    • 3、运行脚本
    • 4、修改生成可执行文件脚本
  • 结语

一、docker安装

可参考 官网

1、更新软件源

apt update
apt-get install ca-certificates curl gnupg lsb-release

2、安装证书

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

3、写入软件源信息

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

4、安装docker

sudo apt-get install docker-ce docker-ce-cli containerd.io

5、启动docker

systemctl start docker

6、安装工具

apt-get -y install apt-transport-https ca-certificates curl software-properties-common

7、查看版本

sudo docker version

二、安装环境

1、加载镜像

docker load --input rknn-toolkit2-1.x.x-cpxx-docker.tar.gz

加载成功后,执行

docker images

看到rknn-toolkit2的镜像

REPOSITORY     TAG     IMAGE ID      CREATED      SIZE
rknn-toolkit2  1.x.x   xxxxxxxxxxxx  1 hours ago  5.34GB

2、运行镜像,映射代码空间

将*/your/rknn-toolkit2-1.x.x/workspace* 映射到 /workspace

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v
/your/rknn-toolkit2-1.x.x/examples:/examples rknn-toolkit2:1.x.x /bin/bash

3、常用docker命令

docker ps -a #查看image
docker start 813850ad0244 #启动
sudo docker exec -it 813850ad0244 bash #进入bash
exit #退出

三、模型量化转换

1、修改转换脚本

from PIL import Image
import numpy as np
# from matplotlib import pyplot as plt

import re
import math
import random

from rknn.api import RKNN

if __name__ == '__main__':
    ONNX_MODEL = 'yolov5s.onnx'
    RKNN_MODEL = 'yolov5s.rknn'
    DATASET = './dataset.txt'
    QUANTIZE_ON = True

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

    # pre-process config
    print('--> config model')
    rknn.config(mean_values=[0.485 * 255, 0.456 * 255, 0.406 * 255], std_values=[0.229 * 255, 0.224 * 255, 0.225 * 255]) 
    # quantized_dtype : 量 化 类 型 , 目 前 支 持 的 量 化 类 型 有 asymmetric_quantized-8 、asymmetric_quantized-16,默认值为 asymmetric_quantized-8。
    print('done')

    # Load onnx model
    print('--> Loading model')
    ret = rknn.load_onnx(model=ONNX_MODEL)# 从当前目录加载模型
    if ret != 0:
        print('Load model failed!')
        exit(ret)
    print('done')

    # Build model
    print('--> Building model')
    ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)# 构建 RKNN 模型,并且做量化
    if ret != 0:
        print('Build model failed!')
        exit(ret)
    print('done')

    # Export RKNN model
    print('--> Export rknn model')
    ret = rknn.export_rknn(RKNN_MODEL)# 将构建好的 RKNN 模型保存到当前路径的 RKNN_MODEL 文件中
    if ret != 0:
        print('Export rknn model failed!')
        exit(ret)
    print('done')
    print(ONNX_MODEL)
    rknn.release()
    exit(0)

2、启动docker

sudo docker ps -a
->CONTAINER ID   IMAGE                      COMMAND       CREATED             STATUS    PORTS     NAMES                  
813850ad0244   rknn-toolkit2:1.3.0-cp36   "/bin/bash"   About a minute ago  Exited (0) 15 seconds ago             nostalgic_austin

sudo docker start 813850ad0244
sudo docker exec -it 813850ad0244 bash
cd workspace/1.3_RKNN/examples/onnx/picodet/

3、运行脚本

python creat_rknn.py

生成文件yolov5s.rknn

4、修改生成可执行文件脚本

set -e

if [ -z ${ANDROID_NDK_PATH} ]
then
  ANDROID_NDK_PATH=/home/zby/env_space/android-ndk-r17c
fi

BUILD_TYPE=Debug

TARGET_SOC="rk356x"

ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )

BUILD_DIR=${ROOT_PWD}/build/build_android_v7a

if [[ ! -d "${BUILD_DIR}" ]]; then
  mkdir -p ${BUILD_DIR}
fi
#arm64-v8a   armeabi-v7a

cd ${BUILD_DIR}
cmake ../.. \
        -DTARGET_SOC=${TARGET_SOC} \
       	-DCMAKE_SYSTEM_NAME=Android \
        -DCMAKE_SYSTEM_VERSION=24 \
        -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
        -DCMAKE_ANDROID_STL_TYPE=c++_static \
        -DCMAKE_ANDROID_NDK=$ANDROID_NDK_PATH \
        -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
make -j4
make install
cd ..

将所有结果存放到了install文件夹

结语

仅记录rknn学习过程。

你可能感兴趣的:(picodet,训练及部署,学习)