AWSの画像認識サービスにRekognitionというものがありますが、昨年はじめくらいから独自の画像認識モデルを作ることのできる「カスタムラベル」というサービスが始まっています。昨年6月に上梓した「使ってわかったAWSのAI」でもカスタムラベルを扱おうと思っていたのですが、執筆当時はまだ出始めで、資料がまだ揃っていなかったりしたので、コラムで少し取り上げる程度に留めたのでした。
それが1年経って、すっかり使いやすくなっています。APIだけでなく、AWSコンソールに使いやすい画面もできているので、かなりオススメです。
料金
Rekognition カスタムラベルの料金は、トレーニングが1時間あたり1USD、推論が1時間あたり4USDです。こうしたSaaSタイプのAIクラウドサービスでは、モデルをデプロイしても実際の推論時間だけ(APIとして待ち受けしている時間全体ではない)の課金なので、比較的安価に使用できるのが良いところです。
また、最初の3か月間は、1か月あたりトレーニングが10時間、推論が4時間の無料枠が提供されているので、まずは試してみて、使えそうなモデルができればそのまま使い続けるといったことができます。
Rekognition カスタムラベルを使い始める
AWSコンソールにログインし、Rekognitionの画面を開くと「カスタムラベル」というメニューがあるので、そちらをクリックします。もしくは、下記のURLを開きます。
このような画面が開きますので「ご利用開始にあたって」ボタンをクリックします。
最初は、Rekognition カスタムラベルで使用するS3バケットの作成を求められるので、そのままバケットを作成します。
プロジェクトの作成とデータの準備
Rekognition カスタムラベルでは、作成したい画像認識モデルごとにプロジェクトを作成します。適当な名前を付けて、プロジェクトを作成すると良いでしょう。(1つのプロジェクト内でデータセットを変えて複数のバリエーションのモデルを作成・管理できます。)
プロジェクトを作成したら、次にデータを準備します。Rekognition カスタムラベルでは、トレーニング用と評価用の2つのデータセットが必要です。データセットのアップロード方法はいくつか準備されていますが、S3を使うのが簡単でしょう。
S3にトレーニング用と評価用の2つのフォルダを作成し、それぞれのフォルダに画像を分類するラベルごとのフォルダを作成します。そのラベルごとのフォルダに画像をアップロードすれば、そのフォルダ名がRekognition カスタムラベルにおけるラベルとして使用されるので、別途アノテーション作業を行う手間を省くことができます。
まず、トレーニングデータをアップロードしたS3バケットのURLを入力すると、下図のような画面になります。「画像が保存されているフォルダに基づいて、画像にラベルを自動的にアタッチします。」というチェックボックスをONにすると、先ほど説明したようにアノテーションが自動的に行われます。
最後に「提出」ボタンをクリックすると、データセットが作成されます。
同様の方法で、テストデータについてもデータセットを作成しておきます。(テストデータを別途準備しなくても、トレーニングデータの20%を自動的にテストデータとして用いる方法もあります。)
モデルのトレーニング
トレーニングデータのデータセットを開くと「モデルをトレーニング」というボタンがありますので、それをクリックします。今回は、S3のフォルダ名を用いてラベル付け(アノテーション)作業が完了している状態ですが、この画面でラベル付けを行うこともできます。
「モデルをトレーニング」ボタンをクリックすると、改めて使用するデータセットの選択画面が表示されます。トレーニングデータセットは、既存のデータセットから選択します。テストセットは、既存のデータセットから選択するか、トレーニングデータセットを自動で分割して使用するかを選択できます。
最後に「トレーニング」ボタンをクリックすると、モデルのトレーニングとテストが行われます。
今回、616枚の画像を用いて3つのラベルに分類するモデルを作成しました。トレーニングにかかった時間はざっと1時間くらい。結構、かかりますね。
モデルの評価
モデルのトレーニングと評価が終わると、下図のような画面を参照できます。
モデル全体における評価と、ラベルごとの評価が表示されます。
今回、トレーニングに616枚、テストに36枚なのでテストデータの割合が低めですが、それはさておき、全体の評価のほかに、ラベルごとの評価も表示されています。
モデルの使用
ここで作成したモデルはAWS CLIやAPI経由で呼び出して、推論を行うことができます。その方法も、同じ画面の下の方にサンプルコード付で説明されているので、簡単に実装することができるでしょう。