AndroidアプリでAIモデルを活用する場面が増えてきました。Pythonで作成した機械学習モデルを ONNX形式に変換 することで、JavaベースのAndroidアプリ上でも推論が可能になります。
本記事では、ONNX Runtime for Mobile を使って、JavaでONNXモデルをAndroid上で推論する手順を解説します。
本記事の内容
- ONNXモデルの準備と変換方法
- Android Studio環境での設定
- JavaコードによるONNX推論処理
- 軽量化のコツ(モバイル最適化)
1. ONNXモデルを準備する
まずはPythonで学習したモデル(例:画像分類モデル)をONNX形式に変換します。
# 例:PyTorchのモデルをONNX形式に変換
import torch
import torchvision.models as models
model = models.resnet18(pretrained=True)
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "resnet18.onnx",
input_names=['input'], output_names=['output'])
2. Android Studioプロジェクトの準備
a. Gradle設定
build.gradle
(アプリモジュール)に以下を追加します
dependencies {
implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.15.1'
}
3. JavaでONNXモデルを読み込み・推論
以下のJavaコードで、画像データを読み込みONNXモデルで推論します。
MainActivity.java(抜粋)
import ai.onnxruntime.*;
import android.graphics.Bitmap;
import java.nio.FloatBuffer;
public class MainActivity extends AppCompatActivity {
private OrtEnvironment env;
private OrtSession session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
env = OrtEnvironment.getEnvironment();
session = env.createSession(getAssets().openFd("resnet18.onnx").getFileDescriptor());
} catch (Exception e) {
e.printStackTrace();
}
}
private float[] runInference(Bitmap bitmap) throws Exception {
float[] inputData = preprocess(bitmap);
OnnxTensor inputTensor = OnnxTensor.createTensor(env, FloatBuffer.wrap(inputData), new long[]{1, 3, 224, 224});
OrtSession.Result result = session.run(Collections.singletonMap("input", inputTensor));
float[][] output = (float[][]) result.get(0).getValue();
return output[0];
}
private float[] preprocess(Bitmap bitmap) {
// Bitmap を 224x224 にリサイズ&正規化
// R,G,B を float 配列に変換(0〜1スケーリング)
return new float[3 * 224 * 224]; // 簡略化
}
}
4. モバイル向け最適化のポイント
- 量子化(quantization) によりモデルを軽量化(PyTorchやONNXで対応可能)
- ONNX Runtime Mobile を使えば、モデルサイズ・起動速度ともに優れる
- 前処理・後処理はJava内で完結させてネットワーク通信を省略
5. 実行結果と注意点
- 初回起動時はモデルロードに時間がかかる場合があります
- Android 端末の CPU・メモリに依存してパフォーマンスが異なる
- ONNXモデルは 変換後にAndroid端末で動作確認 することを推奨
まとめ
項目 | 内容 |
---|---|
利用技術 | ONNX Runtime for Android |
開発言語 | Java |
モデル形式 | .onnx |
対象 | Android端末(モバイル推論) |
JavaでONNXモデルを活用することで、軽量かつオフラインでも動作するAIアプリを構築できます。今後は 画像認識・自然言語処理 の用途にも応用が広がります。