機械学習モデル作成アプリケーション「Lobe」を通じて考える、IoTエンジニアが知っておきたいAI/ML
この記事では、2020/10/26に公開されたMicrosoftの機械学習モデル構築アプリケーション「Lobe」を通じて、IoTエンジニアが知っておきたいAI/MLとの付き合い方を解説します。
筆者のAI/MLに関する知識レベル
先に私の知識レベルを紹介しておくと、AI/MLはド素人です。謙遜でもなく、ド素人です。
2016年にマルレク課外 "ディープラーニング入門6時間集中講義" メモを受けた程度です。
私のAI/MLに対する理解は「結果から逆算してロジックを作り出す仕組み」としています。
Lobeとは
機械学習におけるモデルの作成を容易に行うことができる、PCへインストールするタイプのアプリケーション(ソフトウェア)です。
2018年にMicrosoftが買収した後にパブリックプレビューとして公開されました。
Lobeで何ができるのかについてはLobeの動画を見ていただくのが一番わかりやすいです。全編英語で字幕も英語のみですが、「水を飲んでる/飲んでない」をどのように分類するのかを10分程度で解説されています。
IoTエンジニアとして注目したい点
機械学習におけるラベル付けからトレーニング、評価までを行うことができるのですが、IoTエンジニアとして注目したいのはモデルをTensorFlow、TensorFlow Liteで実行できる形式でエクスポートできることです。
これはLobeで作成したモデルを、Raspberry Pi等のコンピュータやESP32といったマイコン上で実行できることを意味しています。
IoTエンジニアとしては 「データ収集」と「モデル更新」という2点に集中できるメリット があります。
機械学習の "モデル" とは?
ここで1つキーになるのが機械学習におけるモデルです。機械学習はモデルの良し悪しが出力の品質に直結します。
モデル(model)とは?
機械学習において、学習後の具体的な計算式/計算方法を指す。基本的に[入力]→[モデル]→[出力]という関係性がある。
2019年03月09日 05時00分 公開 [一色政彦,デジタルアドバンテージ]
― https://www.atmarkit.co.jp/ait/articles/1901/06/news045.html より
ではこのモデルはどのように作るのかというと、「結果」から逆算して作り出します。
例えば「x=1の時はy=3、 x=2のときはy=5、これを満たす式は?」というクイズのようなものです。ちなみにこの時は y=2x+1
が "モデル" となります。人間ならなんとなく導き出せそうですが、コンピュータは総当たりでこういった式、即ちロジックを探し出していくため、モデルの作成にはコンピューターのパワーが必要となります。
こういった事から私は、結果から逆算してロジックを作り出すのが機械学習で、作り出されたロジックそのものがモデルと考えています。
※ロジック...IF文のかたまりと言ってもいいでしょう。
Lobeで何ができるのか?
画像は「結果」の代表的な例であり、Lobeも画像を対象としているのでそちらで解説していきます。
画像を対象とした機械学習は、以下のような流れとなります。
- 画像を集める
- 画像の中から推論したい対象を切り出す
- 切り出した画像に "ラベル" を付ける (ラベル付け)
- 画像=ラベルの対で "モデル" を作成する (トレーニング)
- 評価を行う
- モデルを使う (推論)
ラベルとは、画像に対する名付けです。Lobeの動画でも「Drink/Not Drink」としている様子があります。
Lobeは3~5の工程ができます。また、1はパソコンのカメラ利用ができることから、簡単に利用できる仕組みも整っています。
一方、2の切り出しは別で行うことになります。例えば「物体の有無」なら物体の位置調整が必要ですし、「集合写真の中から人物を探す」ならば個々の人物の顔を切り出してくるといった工程です。
例として、画像の中央で「有無を学習」させた場合、
以下のように中央から外れて、また、サイズが小さくなったりすると推論できていません。
このように、ある程度は良い感じに推論はしてくれますが、画像は切り出して学習時と同様の位置調整することで精度が上がる事を覚えておきましょう。
画像を切り出す手法
画像を切り出す手法は大きく「カメラ位置による物理/光学的なもの」と「ソフトウェアによる判定」と2つあります。機会があれば解説したいところですが、ここでは列挙のみとしておきます。
- カメラ位置による物理/光学的なもの
- マウンター等の器具による、カメラの取り付け位置の調整
- 拡大、広角(魚眼等)のレンズの利用
- デジタルズーム
- ソフトウェアによる判定
- マーカーによる位置調整 (e.g. ArUco 等がありますが、OpenCVがかなり担ってくれています。)
IoTエンジニアとしては、特に設置時の物理的な作業が必ず付きまとう事を忘れてはいけません。
ちなみに:Lobeは「5枚の画像」で推論を開始可能
Lobeは1つのラベルに対して5枚以上の画像があればトレーニングが開始できます。
例えば物体の有無であれば「有」に5枚、「無」に5枚の計10枚の画像で推論が開始できるという事です。
計10枚でどのくらいの精度なのか、試してみました。
Found! = 5枚、Nothing... = 5枚です。
実際に行ってみたのが以下の通り。左下の緑色が推論結果です。
位置が多少ぶれても、また、方向が変わっても判定できています。
これは「Nothing... ではない」という形での判定だと考えられ、実際、別の物体を置いても「Found!」と判定されることがあります。
カメラや対象物の位置、光量など環境が固定化できるのであれば、かなり少ない画像量でも機械学習による判定ができると思います。
※本ブロックは https://qiita.com/ma2shita/items/f5c4ecd79e44ba41065f から引用
モデルは更新が不可欠
機械学習の話題の一つが精度です。結果からの逆算であるため、十分な結果(データ)を用意しなければモデルが使い物にならないというのは、機械学習における一般論です。
IoTエンジニアとして気にすべきはモデルの精度ではなく、モデルの更新手段です。
例えば製品に機械学習による推論の仕組みを組み込んだ場合を考えてみます。
出荷後にデータサイエンティストが高精度のモデルを作成されたとして、出荷先に赴いてモデルを入れ替えていくというのは、現実的ではありません。
かといって、精度の高いモデルが作成されるまで出荷しないというわけにもいきません。
モデルはロジックと解説しました。IoTエンジニア視点ではモデルはプログラムと同じ扱いとなります。プログラムは通信を利用して入れ替えることが一般的となりました。モデルも同様に、更新できる仕組みを準備することで、出荷後にも成長する製品を送り出すことができます。
一例としてはAWS IoT Greengrassはモデルの更新をサポートしています。
通信を組み込んだ製品
通信を製品に含めることで、モデル更新の方法を確保できます。この時「利用環境に影響されにくい通信」が求められます。例えば現在のWiFiは初期設定が必須となることから、設定を行う・行わないは製品を手にした人に影響されます。また、企業で利用する場合はセキュリティを考慮したネットワーク設定が必要となります。
そこでスマートフォンで利用されるセルラー通信を活用する事で、電源を入れた瞬間から通信が可能な環境を整えることができ、利用環境に影響されにくい通信としてモデルを含めた製品の更新が可能となります。
製品にWiFiとセルラーの両方を装備して普段のデータ通信はWiFiで、アップデートやバックアップからの復元といった通信をセルラーで行うといったハイブリッドな戦略も考えられます。
「成長するハードウェア」鍵となる今後において、通信を組み込んだ製品設計は、今から取り組んでおくべきです。
これからのAI/MLにおけるエコシステム
ここからは筆者の私見で、今後のAI/MLにおけるエコシステムを解説していきます。
1. 推論実行環境のマネージドサービス化
筆者は2016年の講義を受けた際、AI/MLにおける課題を以下のように考えていました。
モデルを「作る人」と「使う人」が、うまく分離できてないところにある
これは、モデルの横展開がし辛い環境を表現したつもりです。もしモデルを"コンパイル後のバイナリ"と置き換えてみれば、AI/MLの開発や実行環境は改善の余地が見えてくると考えています。
一方、LobeはTensorFlow形式でのエクスポートをサポートしています。これは、モデルを作る人(Lobe)と、モデルを使う人(TensorFlow)が分離できたことになります。
今後はより一層、この水平分業化が進むと考えられます。
TensorFlow Servingのように、モデルをAPIサーバとして提供する仕組みは存在しますが、これらがマネージドサービス化していく流れです。推論エンジンだけが動いていて、ZIPで固めたモデルをdeployすればAPIサーバとして動くといったものです。FaaSならぬIFaaS(Inference as a Service)とでも言いましょうか。
既にAmazon SageMakerではTensorFlowモデルを取り込むことができるようで、この流れが加速するとAI/MLの利用も、より身近になると考えられます。
2. 「既存モデルの流用」はベンダー向けの仕組みとして
転移学習という言葉があります。
fine tuning(転移学習)とは?
既に学習済みのモデルを転用して、新たなモデルを生成する方法です。
― https://spjai.com/keras-fine-tuning/
(fine tuningと転移学習は厳密には異なるようです)
モデルをロジックやプログラムだと置き換えれば、流用はできて当然の事でしょう。毎度ゼロからモデルを作るのはナンセンスです。しかし fine tuning や転移学習で調べてみると、まだまだ専門的な知識を必要とされるようです。
GitHubのようにベースとなるモデルのやり取りが行われ、モデル作成がより簡単になるのではないかと考えましたが、ここまで書いていて気になったのがAI/MLにおける「説明責任」です。
アカウンタビリティ(Accountability、説明責任)とは?
簡単に言うと、「AIシステムの挙動に対して、誰が/何が、責任を持つのか」を明らかにすること。
2019年12月05日 05時00分 公開 [一色政彦,デジタルアドバンテージ]
― https://www.atmarkit.co.jp/ait/articles/1912/05/news020.html
何を基に作られたモデルなのかという情報も同時に公開されない限り、結局はゼロから作るということになりそうです。
既存モデルの流用は、GitHubよりもDocker Hubに近い形で、AI/MLのベンダーが楽をするための仕組みとして発展しそうです。
3. エッジコンピューティングの現実性
AI/MLでIoTとなると、「エッジコンピューティング」という単語が必ず出てきます。
推論をハードウェア上で行い、結果のみをやり取りするエッジコンピューティングは3つの利点があります。
- 通信負担の軽減
- 応答速度の向上
- オフライン時の単独稼働
エッジコンピューティングはGPU等の推論環境が話題となりますが、条件も存在します。
- モデルの更新ができる事
- 電力が確保できる事
モデルの更新については前項で解説していますので、そちらをご覧ください。
電力については、GPUを始めとして推論環境全般がハイパフォーマンスなコンピューティングを要求してくる背景があります。電池で駆動させようというのは、かなり技術的なチャレンジとなるでしょう。結果、電力確保が必須という事になります。
こういった事から、エッジコンピューティングはゲートウェイデバイス、もしくは通信入りのハードウェアで実現される技術となるでしょう。
まとめ
Lobeの利用を通じてIoTエンジニアが知っておきたいAI/MLとの付き合い方を解説してきました。
- 機械学習のモデルについて「作る側」と「使う側」と、水平分業化が進んでいる
- IoTエンジニアは「データ収集」と「モデル更新」に集中できるようになる
- データ収集においては、カメラの取り付け作業や画像調整が求められる
- モデルは更新できるべきで、その時用いる通信は利用環境に左右されにくいものを選ぶべき
加えて、これから起こりうることを私見ですが記載しました。
IoTエンジニアとしてAI/MLがこれからも役立て行きたいと思います。
― 松下 "Max"
Discussion