ヘッダー

モバイルアプリの ML の扱い方

はじめに

最近では Machine Learning(以下ML)分野の発展が目覚ましく、特に画像分野への応用では認識精度や認識できる種別数は大きく向上しています。
では、これらのモバイルアプリに組み込みたいという時にどうすれば良いのか、モバイルアプリエンジニアはどういう点を意識すればいいのかということについて画像分野への適応を例に自分なりにまとめてみました。

ツール・ライブラリ選定

iOS では CoreML や CreateML が用意されており、CoreML の既存技術を用いることでアプリエンジニアは ML をどう応用すれば良いかという点に集中できます。CreateML を用いることで比較的簡単に学習も行えるので、iOS での ML の応用はそんなにハードルは高くないという印象です。

Android では Firebase の MLKit または TensorFlow Lite を用いることになると思います。学習を PC で行い、学習したものをモバイルアプリで使用するといった流れになると思います。

モデルの変換

ML において学習でパラメータが決まっているものをモデルと言うことがあります。モバイルアプリではこの学習済みのモデルを組み込み、画像、音声などを入力し、出力されたものを結果として受け取るというのがざっくりした流れです。

まず、学習はどう行うのかという点ですが、なるべく手軽に行いたいのか、ガッツリカスタマイズして行いたいのかで使うものが変わってくるかと思います。

前者では iOS 限定ならば、CreateML で十分こと足りるかと思います。それ以外にも Google から AutoML や Firebase の MLKit の方でも簡単に学習できる環境が用意されているようです。

後者では TensorFlow や Keras、PyTorch など ML 系のライブラリを用いて、学習するコードを書いて学習させる方法です。例えば、ある画像に写ってる物体を認識させたいといった場合、前者は認識させたい画像を用意して、ドラッグ&ドロップするだけで学習が始まります。後者は画像の読み込みから学習アルゴリズムの構築、学習などすべてコーディングする必要があります。

前者はお手軽な反面、任意の手法が選べない、パラメータ調節が柔軟にできないことがあります。後者はこの逆になります。なので、どちらの方法が良いというのは無いと思います。

学習を終えた後、CreateML ならば .mlmodel、TensorFlow なら .tf、Keras なら .h という学習済みモデルファイルが出来上がります。これらをモバイルアプリに組み込むことになります。.mlmodel を iOS で扱うのであれば、CoreML で扱えるので何も変換する必要はありません。逆に .mlmodel を Tensorflow で使いたいという場合は変換が必要です。.h を Tensorflow で使用する場合も同様です。

入力と出力

モバイルアプリに ML を組み込む場合に意識すべき部分は入力と出力の形式です。

例えば、画像認識を例に出すと入力は 1 x Width x Height x Channel であることが多く、出力は識別数の長さを持った1次元配列で一要素がその物体であると予測されるスコアという形式が多い印象です。

物体検出では入力形式は認識の時とそんなに相違はなく、概ね指定する Width と Height が異なるぐらいかと思います。しかし、出力形式が採用する手法によって異なりますので、それぞれに応じた出力形式の定義が必要になります。

出力データ変換

アプリにこれらを組み込む際には画像を手法による入力形式にあわせ、モデルに入力し、出力された形式のデータを変換するといった作業が必要になります。画像認識では、そのままスコアが1次元配列で出力されることが多いのでその中から高いものだけを抽出することで結果を得ることができます。物体検出では出力されたデータからどこに(rect_x, rect_y, rect_width, rect_height)何があるか(label)といったデータに変換する必要があります。

よって、アプリに ML を組み込む際に注目するのは手法内部のアルゴリズムよりかは入力と出力の形式です。(もちろん、内部の手法を理解しているとよりいいですが…)

既に学習済みのものを提供している、CoreML や MLKit では出力結果が変換済みであるため、アプリ側では特に変換する必要がない場合があります。特に変換が必要なのは独自で学習したモデルを使用する場合、必要になるケースが多いです。

変換結果の利用

画像認識や物体検出であれば、出力をわかりやすいデータに変換した後は、画像や動画の上に描画して表示するとより結果がわかりやすくなります。もちろん、WebAPI のパラメータとして活用し、さらにアプリを拡張していくといったことにも応用できるでしょう。

まとめ

モバイルアプリに ML を組み込む際に注意すべきは、内部アルゴリズムというよりかは入力と出力の形式です。逆を言えば、入力と出力さえ合っていれば、ML をいう巨人の力を利用できるわけです。


この記事が気に入ったらサポートをしてみませんか?