RKNN-Toolkit2でMobileNet ONNXモデル変換

RKNN-Toolkit2を使用したMobileNet ONNXモデル変換ガイド
主要ポイント
- RKNN-Toolkit2を使用してMobileNetのONNXモデルを変換するには、PCにツールキットをインストールし、Pythonスクリプトを使用してモデルをRKNN形式に変換します。
- 手順は複雑で、公式ドキュメントや例を参照する必要がありますが、一般的なプロセスは以下の通りです:ツールキットのインストール、ONNXモデルの読み込み、設定の調整、変換の実行、RKNNモデルの保存。
- 具体的な方法はバージョンによって異なる可能性があるため、最新のドキュメントを確認することをお勧めします。
インストールと準備
まず、PCにRKNN-Toolkit2をインストールする必要があります。以下の手順を実行してください:
- GitHubからリポジトリをクローンします:
airockchip/rknn-toolkit2
- 必要に応じてAnacondaをインストールし、Python環境を設定します(例:Python 3.8)。
- リポジトリ内のパッケージをpipでインストールします(例:
pip install ./packages/rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
)。 - MobileNetのONNXモデルを用意し、ファイルパスを把握しておきます。
変換プロセスの実行
Pythonスクリプトを使用してONNXモデルをRKNN形式に変換します。以下は一般的なサンプルコードです:
from rknn import RKNN
# RKNNオブジェクトを作成
rknn = RKNN()
# ONNXモデルを読み込み
model_path = 'path/to/mobilenet.onnx'
rknn.load_onnx(model_path)
# 入力と出力の設定(必要に応じて)
rknn.config(inputs=[{'shape': [1, 3, 224, 224]}], outputs=[{'shape': [1, 1000]}])
# RKNNモデルをビルド(量子化も可能)
rknn.build(do_quantization=True)
# RKNNモデルを保存
output_path = 'mobilenet.rknn'
rknn.export_rknn(output_path)
このコードは、MobileNetの入力サイズ(例:224x224、3チャンネル)と出力サイズ(例:1000クラス)を設定しています。実際の設定はモデルによって異なる場合があります。
検証とデプロイ
変換後、PC上でRKNN APIを使用してモデルをテストし、正常に動作することを確認します。その後、RKNNモデルをRockchipベースのデバイスに転送し、RKNN RuntimeまたはRKNN Toolkit Lite2を使用して推論を実行します。
詳細な調査ノート
背景と調査方法
RKNN-Toolkit2は、RockchipのNPUハードウェア上でAIモデルを推論するために使用されるツールキットで、ONNXを含む複数のモデル形式をサポートしています。MobileNetは軽量な畳み込みニューラルネットワークで、ONNX形式で提供される場合、RKNN-Toolkit2を使用してRockchipデバイス向けのRKNN形式に変換できます。
調査には、GitHubリポジトリ(airockchip/rknn-toolkit2)、Radxaドキュメント(RKNNインストール)、および関連する例やイシューを参照しました。
詳細なインストール手順
-
リポジトリのクローン:
git clone https://github.com/airockchip/rknn-toolkit2.git git clone https://github.com/airockchip/rknn_model_zoo.git
-
Anacondaのインストール(オプション):
- Anacondaがインストールされていない場合、公式サイトからダウンロード。
- 環境を作成:
conda create -n rknn python=3.8.2
- 環境をアクティブ化:
conda activate rknn
-
RKNN-Toolkit2のインストール:
cd rknn-toolkit2/rknn-toolkit2/packages/x86_64/ pip3 install -r requirements_cp38-2.3.0.txt pip3 install ./rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-
インストールを確認:
python3 >>> from rknn import RKNN
サポートされているOSとPythonバージョン
OS | Python Versions |
---|---|
Ubuntu 18.04 | 3.6, 3.7 |
Ubuntu 20.04 | 3.8, 3.9 |
Ubuntu 22.04 | 3.10, 3.11 |
最新バージョンは1.6.0(rockchip-linuxのリポジトリ)または2.3.0(airockchipのリポジトリ)です。
変換プロセスの詳細ステップ
-
RKNNオブジェクトの作成:
from rknn import RKNN rknn = RKNN()
-
ONNXモデルの読み込み:
rknn.load_onnx(model_path) # model_pathはONNXファイルのパス
-
設定の調整:
rknn.config(inputs=[{'shape': [1, 3, 224, 224]}], outputs=[{'shape': [1, 1000]}])
- MobileNetの入力は通常[1, 3, 224, 224](バッチサイズ1、RGBチャンネル3、224x224ピクセル)
- 出力は[1, 1000](1000クラスの分類スコア)
-
モデルのビルド:
rknn.build(do_quantization=True) # 量子化を有効にし、NPUでの効率的な推論を可能に
-
RKNNモデルの保存:
rknn.export_rknn(output_path) # output_pathは保存先
考察と限界
- 具体的なメソッド名(
load_onnx
、config
、build
、export_rknn
)はバージョンによって異なる可能性があります。 - MobileNetの入力出力形状は例として224x224を使用しましたが、実際のモデルバージョン(v1、v2など)によって異なる場合があります。
- RKNN-Toolkit2には、RK1808/RV1109/RV1126/RK3399Proなどの古いプラットフォーム向けの別バージョン(airockchip/rknn-toolkit)が存在し、互換性に注意が必要です。
主要引用
- airockchip/rknn-toolkit2 GitHubリポジトリ
- https://github.com/airockchip/rknn-toolkit2
- Radxaドキュメント:RKNNインストール
- https://docs.radxa.com/en/rock5/rock5c/app-development/rknn_install
- Radxaドキュメント:RKNNクイックスタート
- https://docs.radxa.com/en/rock5/rock5c/app-development/rknn_quick_start
- RKNPU2_SDKダウンロード
- https://console.zbox.filez.com/l/I00fc3