画像認識の機械学習を、無料で誰でも簡単に作れる「Microsoft Lobe」:簡単に試せるAI・機械学習
画像分類を行う機械学習モデルを「無料」で作成できるLobe。その機能と特徴を作業手順の流れで一通り解説。知識ゼロでもGUI操作で簡単に機械学習できるLobeを体感してみよう。
AIや機械学習といえば、大学レベルの数学/統計学に加えて、データサイエンス/機械学習の基礎知識をまずは学ぶ必要がある、と一般的には考えられているだろう。しかしその認識は本当だろうか。筆者は、一部の場面では間違いになりつつあるのではないかと考えている。というのも、ディープラーニング界わいの一部の技術はもはや「枯れた技術」となりつつあり、コモディティ化(=一部の人しか買えない高付加価値の商品が、誰でも買える一般的な商品になること)が進んできているからだ。
確かに画像生成や自然言語処理はまだまだ研究段階にある(と筆者は考えている)が、特に画像認識といった一部の技術は、特定タスクにおいて人間レベルの精度を超えて数年がたつ状況であり、社会で実用可能なレベルの技術が既に確立しているといえるだろう。そういった枯れた技術は、クラウド上のAPIだけでなくさまざまな形で、一般エンジニアや消費者に提供され始めているのだ。
本連載では、そのような前提知識が不要で誰でも簡単に使えるAIや機械学習を紹介していく。もし必要な前提知識がある場合は、各回の冒頭で明示することにする。
今回は、マイクロソフトが新たにベータ版として公開した「Lobe」(ローブ)という機械学習ツールを紹介する。「機械学習」と聞くだけで難しく感じてしまうかもしれないが、このツールは「前提知識不要」をうたっている。なおかつ「無料」である。学習済みのモデルをエクスポートして自由に運用できるので、「画像認識を自前で作りたい」「カスタマイズしたい」という人にお勧めしたい。「いやいやTensorFlowやPyTorchを使って自分で作るから要らない」「クラウドAPIで十分」という人にも、このような手軽な手段があることを知っておいて損はないので、ぜひ本稿にチラッと目と通していただけるとうれしい。
本稿では、現状のLobeの主要なポイントをまとめる。筆者自身が、Lobeの全容を把握するために時間をかけて調べた。その内容をできるだけ多く盛り込み、しかも分かりやすく伝えたいという思いで執筆した。なお、前提知識は不要ではあるものの、連載『機械学習&ディープラーニング入門(概要編)』を一読しておくと、さらに内容が理解しやすいのではないかと思う。
それでは早速、本題に入ろう。※本稿は2020年11月16日時点のベータ版の情報であり、今後、機能が大きく変わる可能性もあるので、その点はご了承いただきたい。
※2020/12/10追記: Lobeに「Webカメラの選択」「出力形式としてTensorFlow.jsとONNXが追加」「GPUを使ったトレーニングに対応」「全面的なパフォーマンスの改善」という4つの新機能が追加されました。
Microsoft Lobeとは何か?
Lobeとは、無料で機械学習が行える、Windows PCやMac上で動作するデスクトップアプリケーションである(図1)。Linuxには対応していない。
主にマウスによるGUI操作で、手順を上から実行していくだけで機械学習が実現できるため、機械学習の知識は不要とされている。Lobeは、機械学習のベストプラクティス(=上述の「枯れた技術」)に従って、機械学習モデルを自動的に構築しトレーニング(=訓練)する機能を持つ。Lobeの目標/コンセプトとして、
機械学習のアイデアをプロトタイプから製品へとつなげるのに必要なもの全て提供する
が掲げられている。現状(2020年11月16日時点のベータ版)では問題種別として、
- 画像分類(Image classification)
のみに対応しているが、「今後の将来的なバージョンでは、より多くの問題種別に対応する」とされており、オブジェクトの境界ボックスを示す物体検知機能と、それに基づくデータ分類機能の追加が近日中に予定されているようである。
機械学習モデルや、データとして使う画像は、ローカルのコンピューター上に保持される仕様である。具体的には、
- Windows: %appdata%\lobe\projects
- macOS: ~/Library/Application Support/lobe/projects
といったディレクトリ内に、プロジェクトごとのフォルダーが保持される(ちなみに将来的なバージョンでは、プロジェクトファイルはより明示的に管理できるようになるとのこと)。つまり、マイクロソフトやLobeが見えるクラウド上にアップロードされることはないため、機密性の高い機械学習プロジェクトであったり、クラウドに費用をかけずに進めたい機械学習プロジェクトであったりする場合は、Lobeは非常に有力な候補になるのではないだろうか。
機械学習用の画像データセットの作成や、自動的な学習、学習結果の確認と、学習済みモデルのエクスポートと実用まで、ほとんどがGUI操作で簡単に行えるのがLobeの最大の特長だ(と筆者は考える)。実際にどのような使い勝手なのか、実際の試用例を通して紹介していく。
Lobeを試してみよう
まずはインストールである。といっても難しくはない。
Lobeのインストール
Windows OSやmacOS上で下記のリンク先を開き、[Download]ボタンをクリックしてインストーラーをダウンロードする。
ちなみに、サイトやアプリケーションは英語になっているが、サイトやドキュメントはWebブラウザの翻訳機能などを使えば問題ないだろう。アプリケーションも簡単な英単語のみなので何とかなるのではないかと思う。マイクロソフト製なので、いずれきちんとした日本語対応が行われるものと期待している。
次にインストーラーを実行する*1。詳細な手順説明は割愛する。筆者が試した限りでは、ベータ版であることが示された画面で「ライセンスの同意」が(図2)、次に「クラッシュの分析レポートを送信して改善に協力するか」が聞かれ、最後の画面で[Get Started]ボタンをクリックするとアプリケーションが起動した。
*1 一般的なWindows PCやMacであれば問題なくインストールして使えるはずだが、コンピューターが古いなどスペック面に不安がある場合は、「システム要件」を確認してほしい。
Lobeのプロジェクト画面
Lobeアプリケーションが起動すると、新規プロジェクトが作成された状態で表示される(図3)。
図3の赤枠で示したように(※専門用語は後述の手順の中で説明)、
1. [Label](ラベル): 画像データセットを準備し、ラベルを付与する
2. [Train](トレーニング): モデルをトレーニング(=訓練)する
3. [Results]&[Evaluate](トレーニング結果と性能評価): モデルのパフォーマンス(=性能、精度)が十分か確認する
4. [Play](実行): 学習済みモデルを試す
という作業手順で機械学習を行う。これは一般的な機械学習の手順と同じである。最後に、
5. [Export](エクスポート): 学習済みモデルを実運用する
という手順が加わる。以上の5つの手順を順に見ていく。
問題種別は「画像分類」である。今回は、「5種類の紅茶ティーバッグを分類する」という「画像分類」問題を扱うこととする。
1. [Label](ラベル)
ラベル(Label)とは、各データ(今回は「画像」)に付与された正解となる情報(今回は「分類名」)のことである。また、ラベル情報だけをまとめたものは、学習させる「教師」の役割であるため教師データ(examples)と呼ぶこともある。
データセット(Dataset)とは、ラベルを含むデータ群のことである。データセットの準備では、既存のものを使うか、新規のものを作成するかが考えられる。
Lobeでは、画像データセットの準備とラベル付け(Labeling)の手段として下記の3種類が用意されている。いずれの手段も、[Label]ページの右上にある[Import]ボタンから選択できる(図4)。
- [Images](画像): 既存の画像ファイル群を選択してインポートし、後から手動でラベルを付ける
- [Camera](カメラ): コンピューターに接続されたWebカメラを使用して画像データをラベル付きで作成する
- [Dataset](データセット): 既存の画像ファイル群をラベル付きでインポートする
[Images](画像)
後述の[Dataset]の方が便利なのでお勧めしない。
[Camera](カメラ)
Webカメラ(Webcam)のビデオストリームを新規の画像データセットとして取り込むのであれば、[Camera]がお勧めである。特に手で持てるWebカメラ(図5)がコンピューター上に接続されている場合は便利だ*2。
*2 複数台のWebカメラが接続されている場合、使用するWebカメラをLobeアプリケーションで指定する機能は現時点では搭載されておらず、使わないWebカメラをいったんOSレベルで無効にする必要がある。なお、Lobeのドキュメントには「デフォルトのWebカメラ」と記載されているが、筆者が調べた限り、WindowsやmacOSにはそのような概念がない、もしくはそれを指定する箇所が存在しなかった。
操作は簡単だ。Webカメラで対象を映した状態で、[○](カメラ)ボタンを長押しするとバースト(=連写)撮影できる。顔撮影なら顔の向きを変えたり表情を変えたり、物体撮影ならカメラをずらしたりしてさまざまなバリエーションの画像をできるだけ多く撮影する。
目安は、ラベルごとに100枚〜1000枚。Lobeは最低限、ラベルごとに5枚以上の画像データを必要とする。なお基本的に、ラベルごとに撮影枚数をそろえた方がよい。例えば100枚ずつなど。ラベルごとにデータ数のバランスが取れていない不均衡なデータの場合、データ数が多いラベルは予測しやすく、少ないラベルは無視しやすいバイアスがかかってしまうためだ。
注意点として、Lobe(ベータ版)では2つ〜5つの分類ラベルにしか対応していない。つまり6つ以上の画像分類は行えない。
データ「枚数」の調整は、前掲の図6の左側に表示される数値を見ながら行うが、長押しで調整するのは意外に難しい。作り過ぎた場合は、図7のようにして選別しながら不要枚数分を削除すればよい。
[Dataset](データセット)
さて一方、既存の画像ファイル群をデータセットとしてインポートするのであれば、[Dataset]がお勧めである。例えば「Darjeeling」という名前でフォルダーを作り、その中に該当する画像ファイル群を入れる。そのフォルダー名がラベル名(この例では「Darjeeling」)として使われることになる。あとは、上記の[Dataset]でそのフォルダーを指定して、その次に表示されるダイアログで[Label Using Folder Name](フォルダー名を使ったラベル付け)にチェックを入れて[Import](インポート)ボタンをクリックすればよい。必要なラベルの分だけ同じ操作を繰り返す。
サポートしている画像フォーマットはJPEG/PNG/BMP/WebPだ。
注意点として、どのインポート方法の場合も、Lobeは自動的に拡大縮小しながら画像の中央を正方形にトリミングすることを意識した方がよい。よって、できるだけ対象の物体(Objects)は画像中央に収める必要がある。なお撮影時には、さまざまな背景や、照明、ズームを試すことで、画像のバリエーションをできるだけ増やすとよりよい。
ちなみにLobeは、実際の画像データのノイズをモデルに反映するために、1枚の画像から5つのバリエーションが暗黙的に作成される、とのことである。バリエーション作成では、下記のような要素がランダムに変化/調整される。このようにデータを増やす機械学習のテクニックは、データ拡張(Data augmentation)と呼ばれる。
- 色相(Hue、色合い)
- 彩度(Saturation、鮮やかさ)
- 明度(Brightness、色の明るさ)
- コントラスト(Contrast)
- 回転(Rotation)
- ズーム(Zoom)
- JPEGエンコーディングノイズ(JPEG encoding noise)
2. [Train](トレーニング)
機械学習では、モデルをトレーニング(=訓練)することで、データセットからパターン(=その中身はニューラルネットワークという手法で表現する数式の各パラメーター値)を自動的に学習する。トレーニングは、前掲の図6でも示した通り自動的に開始されるので操作は一切不要だ。トレーニングにどれくらいの時間がかかるかはケース・バイ・ケースで、数分のこともあれば、数日のこともある。今回の5ラベル×100画像データの場合は、10分程度で完了した。
学習が完了すると、図9のように[Train]タブの左にチェックマークが付き、[Train]ページには正解率とその例や、不正率とその例が表示される。
モデルの最適化
前掲の図9を見ると、今回は99%の正解と、申し分がない精度といえるかもしれない。場合によっては、もっと精度を上げたいということもあるだろう。トレーニング結果が芳しくない場合は、モデルを最適化すること(=Lobeの用語では、時間をかけて徹底的にトレーニングすること)もできる。具体的には図10のように、左上のメニューボタンから[Optimizing Model]を選択し、それにより表示されるダイアログで[Optimize]ボタンをクリックするだけである。
これにより追加のトレーニングが実施される。ただし完了までに先ほどよりも時間がかかる。筆者の例では40分程度と4倍の時間がかかった。
モデルアーキテクチャーの選択
Lobeの画像分類では、下記の2種類の一般的な機械学習手法(アーキテクチャー)が使用できる。いずれもニューラルネットワーク(ディープラーニング)の一手法である。どちらも、ImageNetデータセットから事前にトレーニングされた重みを使用した転移学習(Transfer Learning:ある特定領域で学習済みのモデルに追加学習させることでカスタマイズし、別の領域に適応させる技術)となっている。
- [Optimize for Accuracy](精度優先): ResNet-50 V2(デフォルト)
- [Optimize for Speed](速度優先): MobileNet V2
通常は「ResNet-50 V2」でよい(※画像分類の場合。問題種別に応じて最適なモデルアーキテクチャーが自動選択される、とのこと)。運用先がエッジデバイス(Raspberry Piなど)やモバイルデバイス(iPhoneなど)の場合は、メモリ使用量がより少ない小さなモデルアーキテクチャーである「MobileNet V2」を選択すればよい。切り替えは、図11のように、左上のメニューボタンから[Project Settings]を選択し、それにより表示されるダイアログで[Optimize for Speed]にチェックを入れるだけだ。
ただし、この設定を切り替えると[Reset Training]ダイアログが表示され、そこで[Reset Training]ボタンをクリックすると、再トレーニングがすぐに開始されることになるので注意してほしい。以前のモデルを残して起きたい場合は、事前にプロジェクトを複製しておくことをお勧めする。
プロジェクトの複製について
プロジェクトを複製する場合には、現在開いているプロジェクトウィンドウを(上部の[×]ボタンで)閉じて、Lobeのプロジェクト選択画面を表示する(図12)。複製したいプロジェクト項目上で右クリックメニューを出して、[Duplicate](複製)を選択すればよい。
再び、先ほどのプロジェクトを開くには、プロジェクト項目をクリックするだけだ。
3. [Results]&[Evaluate](トレーニング結果と性能評価)
以上でモデルのトレーニングが完了した。そのようなモデルを学習済みモデル(Trained Model)と呼ぶ。「学習済みモデルは99%の正解率を出しているからそのまま運用」というわけにはいかない。訓練用のデータだけでなく、精度検証用のデータ(本稿では「テスト画像群」と呼ぶ)に対しても同様の正解率が出せるかを検証する必要があるからだ。なおLobeでは、
Copyright© Digital Advantage Corp. All Rights Reserved.