マルチモーダル機械学習の利用方法
はじめに
MAGELLAN BLOCKS(BLOCKS)の機械学習は、マルチモーダルにも対応しています(2019 年 9 月 25 日以降)。
マルチモーダルとは、異なる種類のデータの中から特徴を見つけ出す機械学習の手法です。BLOCKS のマルチモーダルでは、数値と画像をひとまとまりにしたデータから特徴を見つけ出します。
例として、降水量を予測することを考えてみます。各地にある気象観測所のセンサーから、気温・日照時間・湿度・気圧・風向・風速などの数値情報を取得し、これらのデータの傾向から降水量が予測できるものとします。これに、気象衛星からの雲の画像を組み合わせて見たらどうでしょうか。より精度の高い降水量の予測ができるのではないでしょうか。

このように、BLOCKS 機械学習のマルチモーダル機能を使うと、従来の数値だけの分類や回帰に比べて、画像情報を加えることでより高い精度がだせるケースも多々あるでしょう。また、画像だけでは判断が難しかったケースへの応用にも期待が持てます。
error_outline 本マルチモーダル機能はベータ版です。正式版リリース後、本マルチモーダル機能は利用できなくなる可能性があります。ご注意ください。正式版リリース後は、正式版のマルチモーダル機能をご利用ください。
また、ベータ版での提供となるため、一部の機能が正常に動作しない可能性があります。機能改善や不具合などのフィードバックは、「お問い合わせ」ページにて情報提供をお願いします。フィードバックの内容は MAGELLAN BLOCKS の品質向上のために利用いたします。
利用例
このドキュメントでは、気象衛星からの雲の画像と気象観測所の気象データの組み合わせから降水量を予測するケースを通して、BLOCKS 機械学習のマルチモーダル機能の使い方を解説します。
実際のデータを使っての解説ではないため、試しながら読み進めることはできませんが、BLOCKS 機械学習の要点はしっかり押さえてあります。
この解説を読むことで、以下のことが期待できます。
- BLOCKS 機械学習の基本が理解できる
- マルチモーダル機械学習の使い方が理解できる
- 自社の抱える課題に即適用(応用)できる
それでは、BLOCKS の機械学習の基本とマルチモーダルの利用例を見ていきましょう。
BLOCKS 機械学習の基本
まず、BLOCKS の機械学習の基本を理解しましょう。
BLOCKS の機械学習は、学習と予測の 2 つのステップで構成されます。

学習のステップでは、モデルジェネレーターを使って、CSV 形式のファイルで準備された大量の学習データから特徴を見つけます。
学習データは、問題と答えの組み合わせで準備します。今回のケースでは、気象衛星の雲の画像と気象観測所の気象データから、降水量を判断したいわけです。このため問題は、過去の気象データから「雲の画像と気象データ」を準備します。また回答は、「1 時間後の降水量」を準備します。

BLOCKS では、問題のことを「因子」、答えを「結果となる値」と呼びます。また、学習して得た成果を「モデル」と呼びます。
予測のステップでは、フローデザイナーの予測フローを使って、最新の気象衛星からの雲の画像と気象情報から学習結果のモデルを使って、1 時間後の降水量を導き出します。

学習データの準備
「BLOCKS 機械学習の基本」で述べたとおり、学習には大量の学習データが必要です。なおかつ CSV 形式のファイルで、「因子」・「結果となる値」の組み合わせでデータを準備する必要があります。
「因子」内のデータの順序性は問いませんが、「因子」・「結果となる値」は、「因子」→「結果となる値」の順でなければなりません(要は「結果となる値」が最終列)。
また、データはすべて Google Cloud Storage(GCS)上に準備する必要があります。
今回準備する学習データの形式は、以下のとおりとします。これをコンマ区切りの CSV ファイル(BOM なし・UTF-8)で準備します。
- 気象衛星からの雲の画像(画像ファイルへのパス)
- 気温
- 気圧
- 風向
- 風速
- 1 時間後の降水量
なお画像データは、GCS へ配置し、その配置場所へのパス(GCS URL)を画像情報のデータとして準備します。例えば、ci18092513.jpg という気象衛星からの雲の画像ファイルがあるとします。この画像ファイルを GCS の sample-us-central1-data バケット上に配置した場合は、gs://example-us-central1-data/ci18092513.jpg という画像ファイルへの GCS URL がデータとなります。
info_outline バケットは、GCS 上にデータを配置するための特有な場所です。GCS に配置するデータは、すべてこのバケット内に格納します。
info_outline GCS URL は、GCS に配置したデータの場所を指し示す記法です。GCS URL は必ず gs:// で始まり、これが GCS であることを意味します。続いて、データが配置されているバケット名とデータ名を記載します。バケットとデータの間は / で区切ります。
具体的なデータの例は、以下のとおりです(一部抜粋)。
gs://example-us-central1-data/ci18082712.jpg,24.4,1009.6,南南東,1.5,14.5 gs://example-us-central1-data/ci18082713.jpg,24.1,1008.5,南東,3.3,2 gs://example-us-central1-data/ci18082714.jpg,24.9,1007.4,南東,3.5,2 gs://example-us-central1-data/ci18082715.jpg,24.7,1007.2,東南東,2,10 gs://example-us-central1-data/ci18082716.jpg,24.2,1007.5,北北西,2.1,15
データはコンマ区切りで、気象衛星からの雲の画像(GCS URL)・気温・気圧・風向・風速・1 時間後の降水量の順に並べています。
この CSV 形式のデータと画像ファイルを GCS へアップロードします。これには、BLOCKS サポートツールの GCS Explorer を使用すると便利です。GCS Explorer を使ったファイルのアップロード方法は、「GCS へファイルやフォルダーをアップロードする方法」を参照願います。
info_outline GCS Explorer のマルチモーダル用のデータ作成機能を使うと、このデータ作成が容易になります。詳しくは、GCS Explorer 機能紹介ドキュメントの「DataEditor テーブルに列追加」の章を参照願います。
これで学習データの準備は完了です。
学習のための準備
続いて、学習のための準備をします。
学習は、モデルジェネレーターを使いますが、あらかじめどのようなデータを学習するのかを設定しておく必要があります。このためには、今回学習するための専用のモデルジェネレーターを作成します。モデルジェネレーターの作成は、ウィザード形式のため案内に沿って入力をしていくだけの簡単操作です。
おおまかな流れは以下のとおりです。

モデルジェネレーターの利用を開始すると、どのタイプのモデルジェネレーターを作成するか尋ねてきます。今回は、降水量という数値の大小に意味のある予測を行うので、数値回帰タイプを選択します。

続いて、専用のモデルジェネレーターに名前を付けます(例:降水量の予測
)。

最後に、準備した学習データの形式について設定します。
[項目を追加する]ボタンをクリックして、項目名・型・型別設定を項目数分、設定していくだけです。設定する内容は、以下のとおりです。
項目名 | 型 | 型別指定 |
---|---|---|
weather_satellite_images | 画像 URL | |
temperature | 数値型 | 次元数:1 |
barometric_pressure | 数値型 | 次元数:1 |
wind_direction | 文字列列挙型 | キーワードリスト:北,北北東,北東,東北東,東,東南東,南東,南南東,南,南南西,南西,西南西,西,西北西,北西,北北西 |
wind_speed | 数値型 | 次元数:1 |
info_outline マルチモーダルで画像データを指定するときは、型に[画像 URL]を選択します。なおかつ、画像データは GCS にアップロードし、その画像への GCS URL をデータとして設定することになります。
これで学習のための準備は完了です。
学習
学習は、先ほど作成したモデルジェネレーターの画面から行います。

モデルジェネレーターでは、学習のことを「トレーニング」と呼びます。この画面で、[トレーニング開始]ボタンをクリックすると、トレーニングを開始するための情報を設定する画面が表示されます。

ここでトレーニングの名称と、GCS に配置した学習データの CSV ファイルを指定して、トレーニングを開始します。

トレーニングは、数時間かかります。

トレーニングに成功すると、トレーニングのステータスが[成功]に変わり、誤差に数値が表示されます。
このトレーニングのモデルを予測で使用するためには、このトレーニングのモデルを予測で使用することを明示する必要があります。モデルジェネレーターでは、この行為を「適用」と呼びます。

上記❶→❷→❸の手順で本番用に適用すると、予測ができるようになります。
info_outline 適用対象について詳しくは、モデルジェネレーターヘルプの「トレーニングを一覧する」のアクションの項を参照してください。
以上で、学習の完了です。
予測データの準備
続いて、予測データを準備します。
ファイルの形式は、学習時と同様にコンマ区切りの CSV ファイル(BOM なし・UTF-8)です。ただしデータの内容には、「結果となる値」は不要です。また、予測用データには、行毎の各データを特定するためのキーとなる列や各列がどのような値かを示すヘッダーも必要です。
以下は、予測データの例です。
key,weather_satellite_images,temperature,barometric_pressure,wind_direction,wind_speed 2019-09-19 13:00,gs://magellan-iot-sample-us-central1-data/ci19091913.jpg,28.4,1010.9,北,8.4
- 1 行目がヘッダーです。
- キーとなる列の列名は、
key
でなければなりません。 - その他の列名は、モデルジェネレーター作成時に定義したデータの項目名と一致しなければなりません。
- この例では、キー・気温・気圧・風向・風速の順に並べています。
予測は、フローデザイナーのフローを使って行います。機械学習の予測フローに関しては、フローテンプレート作成機能を使うと、いくつかの質問項目に答えるだけで簡単にフローを作ることができます。
現時点では、マルチモーダルのフローテンプレート作成機能による予測は、予測データが DataEditor か BigQuery 上にあるときのみ可能です。このため、今回は DataEditor を使った例を紹介します。

先ほどの予測データを DataEditor のインポート機能を使って取り込みます。

ここでは、「降水量の予測データ」という名前を付けて予測データを取り込みました。
これで、予測データの準備は完了です。
予測のための準備
続いて予測のための準備として、フローデザイナーのフローテンプレート作成機能を使って、降水量の予測フローを作成します。
おおまかな流れは、以下のとおりです。

フローテンプレート作成機能を起動すると、予測フローのタイプを聞いてきます。ここでは、数値回帰タイプの学習を行ったので、[数値回帰予測]を選択します。

フローに名前を付けます(例:降水量の予測
)。

予測に使用するモデルと予測形式を選択します。予測形式は、現時点ではオンライン予測のみが可能です。

DataEditor へインポートした予測データを指定します。

予測結果を DataEditor へ出力するように設定します。

最後に、[配置]ボタンをクリックして、予測フローを作成します。

これで予測フローの完成です。
予測
最後に、予測フローを実行して、予測結果を確認します。

予測フローのメニューから[フローの実行]をクリックすると、フローが実行されます。
しばらくすると、DataEditor に予測結果が出力されます。

output の列が予測した降水量です。
以上で、予測の実行と予測結果の確認ができました。
まとめ
このようにデータさえ揃えば、マウスをクリックするだけの簡単操作で、BLOCKS の機械学習が利用できます。
問題は、データを揃える作業です。機械学習における作業の約 8 割は、データを収集・加工する部分だとも言われています。また、どのようなデータを揃えるかで、予測精度も大きく変わってきます。これは避けられない問題ですが、BLOCKS を使えば学習と予測にかかるコストが限りなくゼロに近くなるため、試行錯誤によるデータ検証も容易です。
マルチモーダルは、機械学習の予測精度に新しい可能性をもたらしました。今回の例では、気象を例に取りましたが、さまざまな分野での活用も検討可能でしょう。例えば、医療現場の内視鏡画像や超音波画像などの画像と電子カルテを組み合わせた病理診断にも応用できそうです。また、製造や建築などで扱うモノの画像から異常を検知することにも応用できそうです。このように、BLOCKS の機械学習を使えば、自社のさまざまな課題解決に役立てることが可能です。
最後に、BLOCKS のマルチモーダルを利用する際の留意点をまとめておきます。
- マルチモーダルは、モデルジェネレーターの数値分類タイプ・数値回帰タイプで対応
- 学習時の画像形式は、JPEG・PNG・GIF・BMP に対応
予測の場合は、JPEG・PNG・GIF に対応(BMP 非対応) - 画像は内部的に 224 x 224 ピクセルにリサイズされる
このサイズは不変というわけではなく、将来的に変わる可能性あり - 予測時の画像 1 枚あたりの容量は、おおよそ 1.125MB まで
この数値はあくまでも目安であり、実際の容量は若干前後 - 学習時の画像 1 枚あたりの制限は特になし
画像を配置するストレージの容量やトレーニング時のメモリ容量による制限はある(要は極端に大きなサイズの画像だとこれらの要因により学習に失敗する可能性がある) - 予測はオンライン予測のみの対応
現時点では、バッチ予測は未対応