ailia SDK

あらゆるバインディングの中核となる ONNX 推論 API です。

はじめに

プラットフォームを選び、最初の推論を動かすまでの手順を確認してください。

1

インストール

ailia の Python パッケージを PyPI からインストールします。Python 3.6 以降が必要です。

pip3 install ailia
PyPI で見る
2

サンプルを実行

ailia-models には 400 種類以上のすぐに実行できる推論スクリプトが含まれています。一度クローンして共通の依存をインストールしたあと、各モデルのフォルダへ cd して実行するだけです。-v 0 で Web カメラ入力、-i image.png で静止画、フラグを省略すると同梱のデモ入力が使われます。リポジトリ直下の python3 launcher.py を起動すると、すべてのモデルを GUI で参照できます。

git clone https://github.com/ailia-ai/ailia-models.git
cd ailia-models
pip3 install -r requirements.txt
cd object_detection/yolox
python3 yolox.py -v 0
サンプルリポジトリ (400+ models)

動作環境

ailia SDK はデスクトップ、モバイル、組み込みなど幅広いプラットフォームと GPU バックエンドで動作します。

対応 OS

  • Windows 10 / 11
  • macOS 11 以降
  • Linux (Ubuntu 20.04 以降)
  • iOS 13+
  • Android 7+
  • Jetson / Raspberry Pi

言語

  • Python 3.6 以降
  • C++17
  • C# / Unity 2021.3.10f1 以降
  • Kotlin / Java (JNI)
  • Dart / Flutter 3.19+

GPU アクセラレーション

  • NVIDIA CUDA
  • Apple Metal
  • Vulkan (クロスプラットフォーム)
  • Intel MKL
  • NNAPI 経由の NPU (Android)

モデル形式

  • ONNX (主要形式)
  • TFLite (ailia TFLite Runtime 経由)
  • GGUF (ailia LLM 経由)
  • PyTorch / TensorFlow / Keras から変換

プロジェクトで API を使う

ONNX モデルを読み込み推論を実行する最小サンプル。

import ailia
import numpy as np

# stream=None lets ailia derive the graph from the .onnx file
net = ailia.Net(stream=None, weight="model.onnx")

input_tensor = np.zeros((1, 3, 224, 224), dtype=np.float32)
output = net.run(input_tensor)
print(output[0].shape)

プラットフォーム別 API リファレンス

よくある質問

ailia SDK を初めて使う方からよく寄せられる質問です。

ailia SDK に含まれる API はどの範囲ですか?

ailia SDK に同梱: ONNX 推論 API (ailia) を中核に、画像分類向けの Classification、物体検出向けの Detector、骨格検出向けの PoseEstimation といった高レベルラッパー、および音声処理ユーティリティの ailia Audio が含まれます。

サプリメンタルライブラリ (別パッケージ): ailia Tokenizerailia Speechailia Voiceailia Tracker はサプリメンタルライブラリとして個別に提供しています。

評価ライセンスと製品ライセンスはどう違いますか?

評価ライセンスは Python / Unity / Flutter / JNI では実行時に自動でダウンロードされ、C++ では 1 か月有効です。開発・評価用に限ります。

商用リリース・再配布・長期利用には製品ライセンスを申し込んでください。詳細は ailia ライセンス規約 を参照してください。

CPU / GPU はどう切り替えますか?

ailia.Net()env_id を渡します。利用可能な環境 (CPU / CUDA / Metal / Vulkan / MKL) は ailia.get_environment_list() で取得できます。

デフォルトでは ailia がプラットフォーム上で最速の環境を自動選択します。

CUDA を使用するには CUDA Toolkit と cuDNN のインストールが必要です。詳しい手順は CUDA Toolkit / cuDNN インストールガイド を参照してください。

Vulkan を使用するには Vulkan セットアップガイド を参照してください。

ダウンロードしたモデルファイルはどこに保存されますか?

ailia-models のサンプルスクリプトは初回実行時に .onnx.onnx.prototxt をモデルディレクトリへダウンロードし、2 回目以降はキャッシュを再利用します。

ailia Speech と ailia Voice では ./models/ にダウンロードされます。initialize_model(model_path=...) で変更できます。

ailia SDK はオフラインで動作しますか?

はい、初回実行後はオフラインで動作します。評価ライセンスと自動ダウンロードされるモデルは初回のみインターネット接続が必要で、キャッシュされた後はオフラインで推論できます。

C++ ではバインディングリポジトリの download_license.py でライセンスを 1 度だけ取得します。

PyTorch や TensorFlow のモデルを ailia 向け ONNX に変換するには?

各フレームワーク標準のツール (torch.onnx.exporttf2onnx など) で ONNX に書き出し、ailia SDK 同梱のスクリプトで対応する .onnx.prototxt を生成してください。

詳しい手順は モデル変換チュートリアル を参照してください。

prototxt は必要ですか?

ONNX モデルを直接読み込む場合 (たとえば ailia.Net(stream=None, weight="model.onnx")) は prototxt は不要です。ailia-models では Netron での可視化を高速化するために prototxt を同梱していますが、お客様自身のモデルを使う場合は prototxt なしで動作します。

複数の入出力テンソルはどのように扱いますか?

Python API では net.run() の引数に名前→numpy 配列の dict を渡すと複数入力を扱えます。同様に複数出力もリストで返ります。

C API の ailiaPredict は 1 入力 1 出力です。複数の入出力テンソルを扱う場合は、ailiaSetInputBlobData で各入力 blob にデータを書き込み、ailiaUpdate で推論を実行し、ailiaGetBlobData で各出力 blob の結果を取り出します。各 blob インデックスは ailiaFindBlobIndexByName で取得できます。

データ型 (datatype) はどう扱いますか?

入出力テンソルのバッファは ONNX の datatype に関わらず常に float (FP32) で受け渡しします。内部では ONNX が定義する datatype に応じた処理 (FP16 / INT8 量子化など) が実行されます。各 blob 自身の datatype は ailiaGetBlobDataType で取得できます。

AILIAShape の x / y / z / w は何に対応しますか?

AILIAShape は最大 4 次元までを x / y / z / w + dim で表します。x が最も内側 (innermost、メモリ連続側) の軸、w が最も外側 (outermost) の軸です。たとえば numpy で (batch, channel, height, width) の 4 次元テンソルなら w = batchz = channely = heightx = width が対応します。

有効な軸数は dim フィールドが示します。

  • dim = 0: スカラー (ONNX の rank-0 テンソル)
  • dim = 1: x のみ
  • dim = 2: xy
  • dim = 3: x / y / z
  • dim = 4: x / y / z / w

5 次元以上のテンソルは AILIAShape では表現できないため、ailiaSetInputShapeND / ailiaGetOutputShapeND (および ailiaGetInputDim / ailiaGetOutputDim) で unsigned int* 配列として直接形状を扱ってください。

AILIA_STATUS_UNSETTLED_SHAPE が発生します

dynamic shape (動的形状) でエクスポートされた ONNX モデルでは、入力形状を確定するまでエンジンは shape を解決できません。ailiaSetInputShape (5 次元以上は ailiaSetInputShapeND) を呼び出さずに推論や ailiaGetOutputShape を実行すると AILIA_STATUS_UNSETTLED_SHAPE (-18) が返ります。

Python: net.run() 内部で入力配列の shape から自動的に ailiaSetInputShape を呼び出すため、利用者の追加対応は不要です。

C / C# (Unity) / Kotlin (JNI) / Dart (Flutter): 推論前に明示的に ailiaSetInputShape (相当の API) を呼び出して形状を確定させてください。

パフォーマンスを分析するには?

レイヤーごとの処理時間を見られるプロファイラを内蔵しています。

Python: net.set_profile_mode(True) でプロファイルを有効化してから推論し、net.get_summary() でレイヤー単位の処理時間サマリを取得します。

C: ailiaSetProfileMode でプロファイルを有効化してから推論し、ailiaGetSummaryLength でバッファサイズを問い合わせ、ailiaSummary でサマリ文字列を取り出します。

メモリ消費量を抑えるには?

デフォルトは速度優先モードで、中間テンソルをすべてメモリに保持します。中間テンソルの再利用や定数の縮約を有効にすると、ピークメモリを削減できます。

Python: set_memory_mode にビットフラグを渡します。

memory_mode = ailia.get_memory_mode(
    reduce_constant=True,
    ignore_input_with_initializer=True,
    reduce_interstage=False,
    reuse_interstage=True,
)
net.set_memory_mode(memory_mode)

C: 同等の制御は ailiaSetMemoryMode で行えます。AILIA_MEMORY_REDUCE_CONSTANT / AILIA_MEMORY_REUSE_INTERSTAGE などのフラグを OR 結合して渡してください。

サポートはどこで受けられますか?

サンプルリポジトリのバグ報告や質問は該当の GitHub リポジトリで Issue を立ててください。SDK ライセンスや商用に関するお問い合わせは ailia Inc. までご連絡ください。

資料

リリース履歴

バージョンごとの変更点と背景を解説したリリース記事です。

関連記事

ailia SDK のインストール方法やバインディングの使い方です。

ailia SDK のインストール方法
tech.ailia.ai
Flutter pubspec からインストール可能に
tech.ailia.ai
Unity Package Manager からインストール可能に
tech.ailia.ai
評価版が pip 経由でインストール可能に
tech.ailia.ai
ailia SDK を Rust から使用する
tech.ailia.ai