Open1

RKNN-Toolkit2でMobileNet ONNXモデル変換

nnn112358nnn112358

RKNN-Toolkit2を使用したMobileNet ONNXモデル変換ガイド

主要ポイント

  • RKNN-Toolkit2を使用してMobileNetのONNXモデルを変換するには、PCにツールキットをインストールし、Pythonスクリプトを使用してモデルをRKNN形式に変換します。
  • 手順は複雑で、公式ドキュメントや例を参照する必要がありますが、一般的なプロセスは以下の通りです:ツールキットのインストール、ONNXモデルの読み込み、設定の調整、変換の実行、RKNNモデルの保存。
  • 具体的な方法はバージョンによって異なる可能性があるため、最新のドキュメントを確認することをお勧めします。

インストールと準備

まず、PCにRKNN-Toolkit2をインストールする必要があります。以下の手順を実行してください:

  1. GitHubからリポジトリをクローンします:airockchip/rknn-toolkit2
  2. 必要に応じてAnacondaをインストールし、Python環境を設定します(例:Python 3.8)。
  3. リポジトリ内のパッケージをpipでインストールします(例:pip install ./packages/rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl)。
  4. 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インストール)、および関連する例やイシューを参照しました。

詳細なインストール手順

  1. リポジトリのクローン

    git clone https://github.com/airockchip/rknn-toolkit2.git
    git clone https://github.com/airockchip/rknn_model_zoo.git
    
  2. Anacondaのインストール(オプション)

    • Anacondaがインストールされていない場合、公式サイトからダウンロード。
    • 環境を作成:conda create -n rknn python=3.8.2
    • 環境をアクティブ化:conda activate rknn
  3. 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
    
  4. インストールを確認

    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のリポジトリ)です。

変換プロセスの詳細ステップ

  1. RKNNオブジェクトの作成

    from rknn import RKNN
    rknn = RKNN()
    
  2. ONNXモデルの読み込み

    rknn.load_onnx(model_path)  # model_pathはONNXファイルのパス
    
  3. 設定の調整

    rknn.config(inputs=[{'shape': [1, 3, 224, 224]}], outputs=[{'shape': [1, 1000]}])
    
    • MobileNetの入力は通常[1, 3, 224, 224](バッチサイズ1、RGBチャンネル3、224x224ピクセル)
    • 出力は[1, 1000](1000クラスの分類スコア)
  4. モデルのビルド

    rknn.build(do_quantization=True)  # 量子化を有効にし、NPUでの効率的な推論を可能に
    
  5. RKNNモデルの保存

    rknn.export_rknn(output_path)  # output_pathは保存先
    

考察と限界

  • 具体的なメソッド名(load_onnxconfigbuildexport_rknn)はバージョンによって異なる可能性があります。
  • MobileNetの入力出力形状は例として224x224を使用しましたが、実際のモデルバージョン(v1、v2など)によって異なる場合があります。
  • RKNN-Toolkit2には、RK1808/RV1109/RV1126/RK3399Proなどの古いプラットフォーム向けの別バージョン(airockchip/rknn-toolkit)が存在し、互換性に注意が必要です。

主要引用