[Android][TensorFlow Lite]GPUを使って高速化する

ML Model Binding(モデルバインディング)でGPUを使う方法は、「GPU上のTensorFlowLite 」には書かれていません。
メタデータを使用してモデルインターフェイスを生成する」に書かれています。

ML Model BindingでGPUを使う場合は、以下のようにします。

build.gradle での宣言(モデルインポート時に組み込まれています。)

    //tensorflow
    implementation 'org.tensorflow:tensorflow-lite-support:0.1.0-rc1'
    implementation 'org.tensorflow:tensorflow-lite-metadata:0.1.0-rc1'
    implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
    implementation 'org.tensorflow:tensorflow-lite:2.3.0'

コード上の宣言

//GPUを使うための処理
val compatList = CompatibilityList()

val options = if(compatList.isDelegateSupportedOnThisDevice) {
    // GPUが使用可能なら GPU delegateを追加する
    Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
    // GPUが使用不可なら、4スレッドで動かす
    Model.Options.Builder().setNumThreads(4).build()
}

val model = ConvertedModel.newInstance(requireContext(), options)

val imageProcessor = ImageProcessor.Builder()
        .add(ResizeOp(256, 256, ResizeOp.ResizeMethod.BILINEAR))
        .build()

// 入力を作成する
var selfieImage = TensorImage(DataType.FLOAT32)
selfieImage.load(bitmap)
selfieImage = imageProcessor.process(selfieImage);

// モデルを実行し、出力を得る
val outputs = model.process(selfieImage)
val animeImage = outputs.genderSwapImageMToFAsTensorImage
val animeImageBitmap = animeImage.bitmap

// モデルをクローズする
model.close()

GPUを使う設定にするだけで、実行時間が1/3~1/2になります。

0 件のコメント :

コメントを投稿