[RKNN] rknn-toolkit2

rknn-toolkit2에 대한 간단한 설명
RKNNOrange PiEmbeddedAI
avatar
2025.05.09
·
8 min read

Intro

이번 주제는 지난번에 예고한 rknn-toolkit2 이다. rknn-toolkit2는 AI 모델을 RKNPU가 연산 가능하도록 RKNN 형식의 모델로 변환해주는 프레임워크이다.

이번 글에서 rknn-toolkit2를 이용해 모델을 어떻게 rknn 형식으로 변환하는지 알아보자.

Envrionment

rknn-toolkit2를 사용하기 위해서는 몇 가지 제약사항이 존재한다.

  • OS는 리눅스만 지원된다.

  • rknn-toolkit2가 2.3.0 이상일 경우, x86ARM 환경 모두 사용 가능하다.

  • python 3.6 ~ python 3.12까지 지원한다.

  • 다음과 같은 프레임워크에서 변환된 AI 모델만 지원한다.

    • Pytorch, Tensorflow, Tensorflow Lite, ONNX, Caffe, Darknet

Installation

rknn-toolkit2 설치하는 방법은 두 가지이다.

  • pypi를 통한 설치

  • github에서 whl 파일을 다운로드하여 수동 설치

각각의 설치방법에 대해 알아보자.

pypi를 이용한 설치

pypi를 이용한 설치는 간단하다. 아래 명령어만 실행하면 설치가 완료된다.

pip install rknn-toolkit2 -i https://pypi.org/simple

whl 파일을 이용한 설치

whl 파일은 rknn-toolkit2의 packages 디렉토리에 존재하며,
사용 환경(x86 or ARM)과 Python 버전에 따라 설치할 파일이 달라진다.

설치환경이 x86(일반 컴퓨터)이라면, x86_64 디렉토리에 들어가 python 버전에 맞는 txt, whl 파일을 다운받으면 된다. ARM 환경이라면 arm64 디렉토리에 들어가면 된다.

txt 파일은 아래와 같이 구분하여 알맞은 환경을 다운로드 한다.

# basic
requirements_cp{python version}-{rknn version}
# example
requirement_cp310-2.3.2.txt # x86, python 3.10
arm64_requirements_cp310_2.3.2.txt # arm, python 3.10

whl 파일은 아래와 같이 구분하여 알맞은 환경을 다운로드 한다.

# basic
rknn_toolkit2-{rknn version}-cp{python version}-cp{python version}-manylinux_2_17_{PC env}.manylinux2014_{PC env}.whl

# example
rknn_toolkit2-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # x86, python 3.10
rknn_toolkit2-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl # arm, python 3.10

txt, whl 파일을 모두 받았다면, 아래의 명령어를 통해 라이브러리 설치를 시작한다.

# example : x86, python 3.10
# 기본 환경 설치
pip install -r requirement_cp310-2.3.2.txt
# rknn-toolkit2 설치
pip install rknn_toolkit2-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Cmake 설치 문제

rknn-toolkit2를 설치하던 도중 아래와 같은 문제가 발생할 수 있다.

Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
...
          assert CMAKE, 'Could not find "cmake" executable!'
      AssertionError: Could not find "cmake" executable!
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

이는 cmake 프로그램이 설치되지 않아 생긴 문제이다. cmake 설치 후 rknn-toolkit2를 재설치하면 정상적으로 설치가 완료된다.

sudo apt install cmake
pip install rknn-toolkit2 -i https://pypi.org/simple

RKNN 모델 변환 절차

5921

위 이미지는 RKNPU User Guide V2.3.0 중 3.1절 Model Conversion에 존재하는 이미지 이다. rknn 형식의 모델 변환을 위해서는 다음과 같은 절차가 존재한다.

  1. rknn 객체 초기화 (RKNN init)

  2. 변환 구성 설정 (config)

  3. 모델 불러오기 (load_model)

  4. 모델 구축 (build)

  5. rknn 배포 (export_rknn)

  6. rknn release

위 절차를 토대로 코드를 작성하면 어떻게 될까?

Python Code

위의 절차를 토대로 만든 파이썬 예제 코드이다.

from rknn.api import RKNN

ONNX_MODEL = 'model.onnx'
RKNN_MODEL = 'model.rknn'
QUANTIZE_ON = False

if __name__ == '__main__':

    # RKNN init
    rknn = RKNN(verbose=False, verbose_file='./model_build.log')

    # Config
    print('--> Config model')
    rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='RK3588')
    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)
    if ret != 0:
        print('Build model failed!')
        exit(ret)
    print('done')

    # Export RKNN model
    print('--> Export rknn model')
    ret = rknn.export_rknn(RKNN_MODEL)
    if ret != 0:
        print('Export rknn model failed!')
        exit(ret)
    print('done')

    # RKNN release
    rknn.release()

이제 각 함수에 파라미터가 무엇이 있는지 알아보자.

RKNN init

rknn = RKNN(verbose=False, verbose_file='')

Params

Type

설명

verbose

bool

로그 정보 표시 여부

verbose_file

str

로그 정보 저장 파일명

Config

rknn.config(
    mean_values=[[0, 0, 0]], 
    std_values=[[255, 255, 255]], 
    target_platform='RK3588'
)

Params

Type

설명

mean_values

list

입력의 평균값

str_values

list

입력의 정규화된 값

target_platform

str

RKNN 플랫폼 (RK3588, RK2118 등)

이 외에도 quant_img_RGB2BGR, quantized_algorithm, quantized_dtype 등의 추가 파라미터가 있으며, 자세한 내용은 User Guide의 3.1.2 항목을 참고하세요.

Load Model (onnx 기준)

rknn.load_onnx(model='model.onnx')

Params

Type

설명

model

str

onnx 모델 위치

Build

rknn.build(
    do_quantization=False,
    dataset=''
)

Params

Type

설명

do_quantization

bool

모델 양자화 여부 (양자화 : INT8)

dataset

str

양자화 보정에 사용되는 데이터 파일 (형식 : txt 파일)

양자화는 현재 INT8만 지원됩니다. 자세한 내용은 User Guide 6.2.1 항목을 참고하세요.

5922

Export RKNN

rknn.export_rknn(export_path='model.rknn')

Params

Type

설명

export_path

str

rknn 형식 모델 저장명

회고

이번 글에서는 rknn-toolkit2의 기본 사용법과 설치 방법에 대해 정리해 보았다. User Guide의 내용을 많이 작성하고 싶었지만, 아직 직접 실습하지 않은 기능도 많기에 다루지 못한 항목이 많다. 다음에 기회가 된다면 User Guide의 내용을 하나씩 실행해볼까 싶다.

다음에는 변환된 rknn 모델을 실제로 RKNPU에서 실행하는 rknn-toolkit-lite2에 대한 글을 쓰고자 한다.

참고사이트







- 컬렉션 아티클