JavaでONNXモデルをAndroid上で推論する方法【ONNX Runtime Mobile活用】

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アプリを構築できます。今後は 画像認識・自然言語処理 の用途にも応用が広がります。

タイトルとURLをコピーしました