あらゆるバインディングの中核となる ONNX 推論 API です。
プラットフォームを選び、最初の推論を動かすまでの手順を確認してください。
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 バックエンドで動作します。
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)
ailia SDK を初めて使う方からよく寄せられる質問です。
ailia SDK に同梱: ONNX 推論 API (ailia) を中核に、画像分類向けの Classification、物体検出向けの Detector、骨格検出向けの PoseEstimation といった高レベルラッパー、および音声処理ユーティリティの ailia Audio が含まれます。
サプリメンタルライブラリ (別パッケージ): ailia Tokenizer、ailia Speech、ailia Voice、ailia Tracker はサプリメンタルライブラリとして個別に提供しています。
評価ライセンスは Python / Unity / Flutter / JNI では実行時に自動でダウンロードされ、C++ では 1 か月有効です。開発・評価用に限ります。
商用リリース・再配布・長期利用には製品ライセンスを申し込んでください。詳細は ailia ライセンス規約 を参照してください。
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=...) で変更できます。
はい、初回実行後はオフラインで動作します。評価ライセンスと自動ダウンロードされるモデルは初回のみインターネット接続が必要で、キャッシュされた後はオフラインで推論できます。
C++ ではバインディングリポジトリの download_license.py でライセンスを 1 度だけ取得します。
各フレームワーク標準のツール (torch.onnx.export や tf2onnx など) で ONNX に書き出し、ailia SDK 同梱のスクリプトで対応する .onnx.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 で取得できます。
入出力テンソルのバッファは ONNX の datatype に関わらず常に float (FP32) で受け渡しします。内部では ONNX が定義する datatype に応じた処理 (FP16 / INT8 量子化など) が実行されます。各 blob 自身の datatype は ailiaGetBlobDataType で取得できます。
AILIAShape は最大 4 次元までを x / y / z / w + dim で表します。x が最も内側 (innermost、メモリ連続側) の軸、w が最も外側 (outermost) の軸です。たとえば numpy で (batch, channel, height, width) の 4 次元テンソルなら w = batch、z = channel、y = height、x = width が対応します。
有効な軸数は dim フィールドが示します。
dim = 0: スカラー (ONNX の rank-0 テンソル)dim = 1: x のみdim = 2: x と ydim = 3: x / y / zdim = 4: x / y / z / w5 次元以上のテンソルは AILIAShape では表現できないため、ailiaSetInputShapeND / ailiaGetOutputShapeND (および ailiaGetInputDim / ailiaGetOutputDim) で unsigned int* 配列として直接形状を扱ってください。
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 のインストール方法やバインディングの使い方です。