0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android強化月間 - Androidアプリ開発の知見を共有しよう -

pytorch mobileのHelloWorldサンプルを動かす

Last updated at Posted at 2023-10-02

今回はこちらのpytorch_mobileのandroidデモを動かしてみたので,備忘録として実行方法を載せておく.基本はREADMEを読んで,その通りに実行すれば良いのだが,コードの変更や,環境の依存性があるため,誰かの役に立つ可能性があると思われるため,メモを残す.

実行端末情報

  • Xiaomi 11T Pro
  • MIUI バージョン 14.04
  • Android 13 TKQ 1.220829

gradleビルドパッケージについて

gradleで指定したパッケージを更新したいが,jcenter()が閉鎖済みであり,これの変更が必要.
jcenterをmavenに変更.あまり最新版のgradleにしすぎるとエラーを吐くようになるため適当に更新.今回は,ビルドツールの4.2.0あたりが最善だった.

gradleのパッケージの対応バージョンは下記で閲覧することができる.mavenの公式だと思うが,非常に助かる.
https://mvnrepository.com/artifact/com.android.tools.build/gradle?repo=google

  • build.gradle(HelloWorldApp)
build.gradle
buildscript {
    repositories {
        google()
        //jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
        // classpath 'com.android.tools.build:gradle:8.1.1'
        // classpath 'com.android.tools.build:gradle:3.5.0'

    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

gradle自身もアップデートする

gradleが古いと下記のようなエラーを吐くことがある.

Minimum supported Gradle version is 8.0. Current version is 5.6.4.

更新はgradle-wrapper.propatiesを書き換え

gradle-wrapper.propaties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip

端末環境の依存性について

実行端末情報に記載の通り,今回はandroid 12以上のものを対象にする.
構成を変更しているうちに,手元の環境のbuildToolsVersionが破損したのか,バージョン29.0.2では,環境が壊れていますといった旨のエラーで動かなかったため,30.02にアップデートしておいた.
android_pytorchについては,mavenのページからバージョンを参照して適当なバージョンをダウンロードする.
android_torchvisionについては,バージョン10あたり(?)からtorchvision_liteにしなければ,duplicate_classエラーで失敗する.後のyoloのtorchscriptの実行環境とandroid_pytorchの依存性ははっきり言ってわからない.どこかにバージョン対応のリストがあるのだろうか.

  • build.gradle(App)
build.gradle
apply plugin: 'com.android.application'

android {
    // compileSdkVersion 28
    compileSdkVersion 31
    // buildToolsVersion "29.0.2"
    buildToolsVersion '30.0.2'
    defaultConfig {
        applicationId "org.pytorch.helloworld"
        // minSdkVersion 21
        minSdkVersion 26
        // targetSdkVersion 28
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"

    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.1.0'
    // implementation 'org.pytorch:pytorch_android_lite:1.9.0'
    implementation 'org.pytorch:pytorch_android_lite:1.11'
    // implementation 'org.pytorch:pytorch_android_torchvision:1.9.0'
    implementation 'org.pytorch:pytorch_android_torchvision_lite:1.11'
}

android上のexportエラーについて

android 12周辺からexportを明言するように要求された.
AndroidMainifest.xmlにのactivityに1行を足すことでこれを解決した.

  • AndroidMainifest.xml
AndroidMainifest.xml
       <activity
            android:name=".MainActivity"
            android:exported = "true"  # ここを追加
            >
            <in...

ptファイルの作成について

trace_model.pyの実行のために,python環境を用意する.環境は,手元にあった
pytorch/pytorch:1.9.1-cuda11.1-cudnn8-develを使用してビルドした(GPUは使用しない).docker上でpip listしたtorch関連の主なライブラリのバージョンは以下の通り.

torch                  1.10.0
torchelastic           0.2.0
torchtext              0.11.0
torchvision            0.11.1

ビルドに成功すると,下記のような画像と,分析結果が表示される
image.png

仕組み

モバイルデバイスでの実行は,モデルをファイルにしてそれをデバイス側に読み込ませて推論を実行する.
今回は拡張子pt(ptl)で出力しており,その保存はsave_for_lite_interpreter()で保存している.通常のsaveではなく,軽量化が実行されていることがミソである.その後にandroid側のModuleクラスに読み込ませることで,デバイス上で推論が可能になるようだ.
image.png

疑問

ptlファイル側とandroid側ライブラリのバージョンの依存性について有るのか無いのかイマイチわからない.このあたりの依存性について調べてみたが,有益な対照表は見つからなかった.
参考情報として,他のサンプルプロジェクトには依存関係が書いてある(Object Ditection等)

PyTorch 1.10.0 および torchvision 0.11.1 (オプション)
Python 3.8 (オプション)
Android Pytorch ライブラリ pytorch_android_lite:1.10.0、pytorch_android_torchvision_lite:1.10.0
Android Studio 4.0.1以降

NEXT: pytorch mobileのObject Ditectionサンプルを動かす

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?