Intro
이전 글에는 RKNPU에서 AI 연산을 위해 rknn-toolkit2를 활용하여 AI 모델을 rknn 형식으로 변환하는 방법에 대해 다뤘다. 그렇다면 RKNPU에서 모델을 연산하려면 어떻게 해야할까?
그것은 바로 rknn-toolkit-lite2를 이용하는 것이다. rknn-toolkit-lite2는 rknn 형식으로 변환된 모델을 RKNPU에서 연산을 할 수 있도록 하는 라이브러리다.
이번 글은 rknn-toolkit-lite2를 이용해 rknn 형식의 모델을 추론하여 결과물을 보여주는 간단한 방법에 대해 알아보고자 한다.
Environment
기본적으로 rknn-toolkit-lite2는 RKNPU 환경에서 AI 모델의 추론 연산을 할 수 있도록 도와주는 장치이다. 다시말하면 RKNPU 환경에서만 rknn-toolkit-lite2가 동작할 수 있는 것이다. RKNPU는 Rockchip 사의 RK 시리즈 등과 같은 ARM AP에 탑재되므로 OS 환경도 aarch에 국한되어 있다.
그러므로 rknn-toolkit-lite2를 동작시키기 위한 최소 환경 조건은 아래와 같다.
구분 | 내용 |
Python version | 3.7~3.11 |
OS | Debian 10 / 11 (aarch) |
ℹ Python version 관련
최신 User Guide v2.3.2에는 rknn-toolkit-lite2에서 지원하는 python version이 3.11까지라고 되어있지만, 실제 github에 들어가면 python 3.12 관련 whl도 존재한다. (🔗)
Installation
rknn-toolkit-lite2 설치 방법은 아래와 같다.
python과 pip 설치가 되어있지 않다면 다음 명령어를 통해 설치한다.
# install python3, pip3
sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-pip gcc
# install dependent modules
sudo apt-get install -y python3-opencv python-numpy
python과 pip 설치가 완료됐다면, rknn-toolkit-lite2 관련 whl을 다운받아 pip로 라이브러리를 설치한다. whl 파일은 해당 링크 (🔗)에서 python 버전에 맞는 환경을 다운받고, 아래의 명령어를 입력해 설치를 완료한다.
# basic
pip install rknn_toolkit_lite2-{rknn version}-cp{python version}-cp{python version}-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# example) python 3.10 기준
pip install rknn_toolkit_lite2-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ℹ whl 파일의 python 버전 구분 방법
whl 파일명에서 cp 다음에 적힌 숫자를 보면 알 수 있다.
cp310 : python 3.10 전용 / cp37 : python 3.7 전용
Basic flow chart

위 이미지는 RKNPU User Guide V2.3.2 중 3.4.3절에 존재하는 이미지 이다. rknn-toolkit-lite2를 이용해 모델 추론을 위해서는 이미지의 순서대로 행동해야 한다.
RKNNLite 객체 초기화 (RKNNLite init)
rknn 모델 불러오기 (load_rknn)
RKNNLite 동작 설정 (init runtime)
모델 추론 (inference)
release
Python Code
위의 흐름도를 토대로 간단하게 예제 코드를 작성해 보았다.
import RKNNLite
# RKNN Lite init
rknn_lite = RKNNLite()
# Load rknn model
ret = rknn_lite.load_rknn('path.rknn')
if ret != 0:
print('Load rknn failed')
exit(ret)
# Init runtime environment
ret = rknn_lite.init_runtime(core_mask=RKNNLite.NPU_CORE_AUTO)
if ret != 0:
print('Init runtime environment failed')
exit(ret)
# Inference
img = [...] # example input
outputs = rknn_lite.inference(inputs=[img])
# RKNN Release
rknn_lite.release()
회고
rknn-toolkit-lite2의 간단한 사용 방법에 대해 알아보았다.
rknn 관련 코드들이 쉽게 사용할 수 있게도록 되어있지만,
누군가 rknn을 시도할 때, 하나라도 도움이 됐으면 좋겠다는 마음으로 글을 적어보았다.
나 역시 rknn을 다시 쓸 일 있으면 이 글을 다시 보면서 시도하지 않을까... 생각하며 글을 마친다.
참고사이트
aircokchip/rknn-toolkit2
GitHub - airockchip/rknn-toolkit2Contribute to airockchip/rknn-toolkit2 development by creating an account on GitHub.https://github.com/airockchip/rknn-toolkit2
rknn-toolkit2 User Guide EN v2.3.2
rknn-toolkit2/doc/02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.3.2_EN.pdf at master · airockchip/rknn-toolkit2Contribute to airockchip/rknn-toolkit2 development by creating an account on GitHub.https://github.com/airockchip/rknn-toolkit2/blob/master/doc/02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.3.2_EN.pdf