Azure Machine Learning デザイナーとは
Azureの提供する機械学習プラットフォームであるAzure Machine Learningでは自動機械学習やGUIベースで機械学習を行える機能、一般的なものとしてJupyter互換のNotebookが提供されています。本記事ではGUIツールであるデザイナーを用いて画像分類(深層学習)のプロセスをどう組んでいくのか、サンプルから深堀する形で確認します。
サンプル
デザイナーを開くとサンプルがいくつか用意されているのですが、Image Classification using DenseNet
を対象とします。
まず、入力となる画像データセットは以下のようなファイル構造になっている必要があります。
Your_image_folder_name/Category_1/xxx.png
Your_image_folder_name/Category_1/xxy.jpg
Your_image_folder_name/Category_1/xxz.jpeg
Your_image_folder_name/Category_2/123.png
Your_image_folder_name/Category_2/nsdf3.png
Your_image_folder_name/Category_2/asd932_.png
このファイル構造を持ったローカルファイルやデータレイクなどのディレクトリをファイルデータセットとしてワークスペースに登録します。ローカルファイルの場合は.zip等の圧縮ファイル推奨。その後、登録したデータセットをキャンバス上に配置。
Convert to Image Directory
と接続します。これはAzure ML上で画像データを扱うためのImageDirectory型への変換のようなものになっています。
次に来ているSplit Image Directory
はデータを分割することができます。サンプルではTraining/Validationデータ:Testデータ=9:1に分割し、Trainingデータ:Validationデータ=9:1に分割しています。ValidationデータとTestデータは混同されがちですが、推論結果を次の学習に反映する際に用いるのがValidationデータ、汎化性能を測るために1度のみ利用する完全な未知データがTestデータというような解釈で良いと思います。
Init Image Transformation
では、画像の前処理としてどのような変換をかけるのか指定します。ここで指定したパラメータを用いて、後のApply Image Transform
を実行します。サンプルでは、ImageDirectory型のデータを分割してから変換を適用しましたが、データ分割前に一括で変換してしまった方がシンプルかもしれません(実行していないので確信は持てませんが)
DenseNet
はTrainするモデルを指定しています。理論的なところはDensely Connected Convolutional Networksをご覧ください。画像データの扱える畳み込みニューラルネットワークの一種です。選択肢としてはResNet
も対応しています。
Train PyTorch Model
は上記のDenseNet
及びResNet
をPyTorch上で学習させるためのモジュールです。エポック数やバッチサイズ、学習率をここで指定します。モジュール名と異なり用途は限られています。データセットが大規模な場合は、GPU型のコンピューティング環境が推奨されるので、ワークスペース上から設定しましょう。各エポックにおける評価のためのValidationデータも入力として必要になってきます。
サンプルの構成には組み込まれていませんが、ハイパーパラメータの調整用のモジュールもあるようです。グリッドサーチ等の設定が可能です。
最後にいつも通り、Score Model
モジュールでTestデータに対して推論を行いモデルの最終的な評価をします。問題なければ推論パイプラインを作成・発行して利用を開始できます。
データのラベル付け
画像分類は教師あり学習に当たります。それゆえ独自の学習データのラベル付けをする際に非常に手間がかかり、これがハードルになってしまうことが多々あります。AzureMLの昨日のアップデートにより、この作業をサポートするGUI機能が追加されました。
ファイルデータセット内の画像に対してラベルを付ける処理がかなり楽になります。ラベル付けの結果はそのままAzure MLデータセットもしくはCOCO形式でエクスポートすることが可能です。学習データ生成から学習までAzureMLワークスペース上でスムーズに連携することが可能です。
画像数が多い場合はある程度手動で分類した後、MLによるラベル付け機能を有効化することでAIを利用することも可能です。
さいごに
自分のデータでやってみてまた躓くポイントがあれば共有したいと思います!