はじめに
今回は人工知能(AI)をサービスとして扱うことのできるAzure AI Servicesから、画像認識サービスであるCustom Visionについて紹介します。
Azure Custom Visionとは
Azure Custom Visionは独自の画像を機械学習によって学習・分析し、画像の分類やオブジェクトの検出のためのパッケージ(モデル)として構築することのできる画像認識サービスです。
サービス名の通り、自身のビジネスに適した画像を使ってモデルをカスタマイズできる点が特徴です。
カスタマイズしたモデルは、小売業や製造業などで企業やブランドのロゴを識別して製品を分類するために利用したり、監視カメラの映像分析で特定のオブジェクトの出現を検知し、異物や異常の検知を行うために利用する等のユースケースでの使用が想定されています。
そのためAzure Custom Visionで作成した画像識別モデルは、前回紹介したComputer Visionの画像分析のカスタムモデルとして活用することができます(Image Analysis 4.0以降のみ対応)。通常Computer VisionではAzureが提供する汎用的なモデルを使って画像分析を行いますが、カスタムモデルを組み合わせることでより精度の高い画像分析ができる可能性があります。
Azure Custom Visionでは主に2つの機能を提供しています。
・画像の分類
画像の分類では、画像の特性に合ったカテゴリーに画像を振り分けることでCustom Visionを学習させ、モデルを構築します。Custom Visionにアップロードした画像にタグを付けることで画像を分類し、機械学習によって繰り返しトレーニングを行うことで分類の精度を上げることができるようになっています。
・オブジェクトの検出
オブジェクトの検出では画像内のある範囲に存在する物体を検出し、その座標を返すことができます。画像の分類では画像全体にタグを付与するのに対して、オブジェクトの検出では画像内の任意の範囲に対してタグを付与することができます。これを応用することで、動画や連続写真などにおいて物体が移動した場合でも物体を追跡することができるようになります。
用途によって画像の分類かオブジェクトの検出どちらかのモデルを構築し、画像を追加することで学習を繰り返させてモデルの精度を向上させていく必要があります。
Custom Visionで画像分類をしてみよう
ここからは実際にCustom Visionを使って独自の画像分類モデルを作成し、画像の分類をしてみましょう。
Custom Visionプロジェクトの作成
まずはCustom Visionのプロジェクトを作成します。Azureポータルにアクセスし、画面上部の検索エリアで「custom」と入力してサービスの一覧に表示される「Custom Vision」を選択します。
Custom Visionの画面が表示されたら、画面左上の「作成」か画面下部の「Custom Visionの作成」ボタンを選択します。
Custom Visionの作成画面が表示されたら、必要な内容を入力します。
「作成オプション」は「両方」を選択します。今回は独自の画像をアップロードしてモデルをトレーニングした後に、そのモデルを使ってテスト画像の分析(予測)を行うため両方のリソースが利用できるようにします。
「サブスクリプション」、「リソースグループ」、「リージョン」は任意のものを選択します。「名前」には任意の名称を入力します。「トレーニング価格レベル」および「予測価格レベル」は無料プランの「Free F0」を選択します。
全ての内容を入力したら、画面下部の「次へ」ボタンを選択します。
次にネットワークタブではCustom Visionリソースのアクセス範囲を設定します。今回は「インターネットを含むすべてのネットワークがこのリソースにアクセスできます。」を選択し、「確認と作成」ボタンを選択します。
入力内容に誤りがないか確認し、「作成」ボタンを選択してCustom Visionリソースの作成を開始します。少し待つとリソースの作成が完了します。
Custom VisionのWebポータルから分類モデルを構築する
Custom Visionリソースが作成できたら、Custom VisionのWebポータルにアクセスし、分類モデルを構築していきます。
作成したCustom Visionリソースの概要メニューにある、Webポータルへのリンクを選択するか、[WebポータルのURLにアクセスします。
Custom VisionのWebポータルが表示されたら、「SIGN IN」ボタンからサインインをします。
Azureポータルにログインしているブラウザでアクセスすると自動的に認証され、先ほど作成したCustom Visionリソースのプロジェクト一覧が表示されます。Custom Visionでは、プロジェクト単位で分類モデルを管理することができます。
現在はまだプロジェクトが存在しないため、「NEW PROJECT」のアイコンからプロジェクトを作成していきます。
アイコンを選択するとプロジェクト作成のダイアログが表示されるので、プロジェクトの詳細を設定していきます。
「Name」にはプロジェクトの名称を、「Description」には任意でプロジェクトの説明を入力します。「Resource」では先ほど作成したCustom Visionのリソースを選択します。
「Project Types」ではプロジェクトの種類を分類かオブジェクトの検出のどちらにするか決定します。今回は分類用プロジェクトを作成するため「Classification」を選択します。
「Classification Types」では分類方法を選択します。「Multilabel」は1つの画像に複数のタグを付与でき、「Multiclass」は1つの画像に1つのタグのみ付与することができます。トレーニングしたい画像の特性に応じてどちらを選択するか決定する必要があります。今回の例では、「Multiclass」の方を選択します。
「Domains」では画像のドメインとしていずれかを選択します。ドメインを適切に選択することで、画像分類の精度を向上させることができます。Custom Visionではよく使用されるシナリオとして「Food(食料)」、「Landmarks(ランドマーク)」、「Retail(小売)」といったドメインが用意されています。これらのシナリオに該当しない場合は、「General(全般)」を使用します。Generalにはバージョン表記無しのものや「A1」や「A2」といった種類が存在します。「A1」は大きなデータセットの処理に適しており、「A2」はGeneralの中で最も高速で動作します。なお、「compact」と付いているドメインはモバイルやIoT機器などのエッジデバイスでのリアルタイム分類を行う際に使用します。
今回はGeneralドメインのうち「General[A2]」を選択します。ここまで入力したら「Create project」ボタンでプロジェクトを作成します。
プロジェクトの作成が完了するとプロジェクトページが表示されます。以降、このページからトレーニングする画像のアップロードやタグ付けなどを行っていきます。
トレーニング画像のアップロードとタグ付け
Custom VisionのWebポータルでプロジェクトが作成できたら、次はトレーニングに使用する画像をアップロードしてタグ付けを行っていきます。プロジェクトページの左上または中央にある「Add images」ボタンを選択します。
ローカルフォルダから画像をアップロードするためのダイアログが表示されるので、使用したい画像を選択していきます。複数選択してアップロードすることも可能です。
なお、アップロードできる画像ファイルは.JPG、.PNG、.BMPのいづれかのフォーマットであり、1つの画像が6MB以下である必要があります。
ここでは植物分類の例として、まず桜の画像を5つアップロードします。
画像を選択すると、画像のプレビューダイアログが表示されます。このダイアログでこれらの画像に共通するタグを設定することができます。「My Tags」の下の入力欄で「桜」と入力してエンターキーを入力すると、タグが作成されて画面下部に表示されます。この状態で「Upload 5 files」ボタンを選択します。
少し待つと画像のアップロードが完了します。同じ手順で別のタグを持つ画像をいくつかアップロードしてみます。
上記画像の例では「桜」のほかに、「チューリップ」、「バラ」、「ヒマワリ」、「草」のタグを持つ画像をそれぞれ5枚ずつアップロードしました。画面左側には登録済みのタグ名とタグに紐づく画像の数が表示されています。この状態で、画面上部にある「Train」ボタンを選択して、モデルのトレーニングを行います。
トレーニングの種類の選択画面が表示されるので、いずれかを選択します。「Advanced Training」ではトレーニングにかける時間を調整することができ、時間を長くかけることでより精度の高いモデルの作成を行うことができます。今回の例では、簡易的なトレーニングを行う「Quick Training」を選択して「Train」ボタンを選択します。
トレーニングを開始すると、トレーニングの進捗画面が表示されます。Custom Visionではトレーニングの実施履歴をイテレーションと呼ばれる単位で管理します。追加で画像をアップロードしたりタグを増やした後で再度トレーニングを実施するとイテレーションが増加します。イテレーションごとにトレーニングの結果や精度は異なるものになるため、ユーザーはどのイテレーションをモデルの公開バージョンとするかを選択できるようになっています。
しばらく待つとトレーニングが完了し、トレーニング結果が表示されます。機械学習のモデル評価に使用される指標であるPrecision、Recall、APが、それぞれタグごとおよび全体平均で表示されています。なお、Precision(適合率・精度)はモデルが予測したデータ群の中に正解データが含まれる割合を示し、Recall(再現率)は実際の正解データ群の中でモデルが正しく予測できた割合を示します。AP(Average Precision:平均適合率)はPrecisionとRecallの両方を総合的に評価する指標で、物体検出においてモデルの性能測定に用いられます。
分類モデルをテストする
モデルのトレーニングまで完了したら、分類モデルが正しく動作するか確認してみましょう。Custom VisionのWebポータルには簡易的なテストツールが付属しているため、そちらを使って動作確認を行います。
Webポータルでトレーニング済みのプロジェクトを表示すると、画面上部の「Quick Test」ボタンが有効になるので選択します。
テスト用のダイアログが表示されるため、ここでテスト用画像をアップロードします。ここではモデルのトレーニングに使用していない画像をアップロードしてテストします。なお、ここでアップロードできる画像は4MB以下である必要があります。
アップロードして少し待つと右下にPrediction(予測)が表示されます。これがトレーニングした分類モデルが分析した結果です。桜の画像をアップロードしたところ、桜としての予測値が98%以上とかなり精度よく分類されています。
他にも、植物以外の画像をアップロードしてテストしてみます。
今度は予測結果にばらつきが出ました。モデルに登録されているタグに関連しない画像の場合であっても、無理矢理タグに紐付けようとするために精度が低くなってしまったようです。
Custom Visionでオブジェクト検出をしてみよう
続いて、オブジェクトの検出も試してみましょう。
オブジェクト検出プロジェクトの作成
先ほど作成した画像分類用のプロジェクトと同じCustom Visionリソースにプロジェクトを作成していきます。Webポータルでプロジェクト一覧画面を表示し、「NEW PROJECT」を選択します。
プロジェクト作成のダイアログが表示されるので、「Name」と「Description」に任意のプロジェクト名とプロジェクトの説明文を入力し、「Resource」で作成したCustom Visionのリソースを選択します。
オブジェクトの検出では「Project Types」で「Object Detection」を選択します。最後に「Dimains」を選択します。画像分類にはないドメインが表示されています。「Logo」は企業ロゴの検出用、「Products on Shelves」は陳列棚にある商品の検出用のドメインとなっています。今回は全般用ドメインのうちより精度の高い「General [A1]」を選択します。
最後に「Create project」ボタンでプロジェクトを作成します。
プロジェクトが作成されたら、学習用の画像のアップロードとタグ付けを行っていきます。
トレーニング画像のアップロードとタグ付け
作成したオブジェクトの検出用プロジェクトを表示し、「Add images」から画像をアップロードしていきます。画像分類用のプロジェクトと同様に、アップロードできる画像サイズは6MBまでとなっています。
まずは鳥類が含まれる画像をアップロードしてみます。オブジェクトの検出プロジェクトでは同じタグを持つ画像が最低でも15枚必要となるため、15枚の画像を選択しています。プレビューを確認し「Upload 15 files」ボタンを選択します。
アップロードされた画像は、はじめはタグ付けがされていない画像として登録されます。プロジェクトの左側メニューの「Tags」という項目で「Untagged」が選択状態となっており、画像の一覧に先ほどアップロードした15枚の画像が表示されています。
ここから各画像内の鳥が映っている範囲を選択してタグ付けを行っていきます。まずは一覧に表示されている画像から左上の画像を選択します。
画像を選択すると「Image Detail」というダイアログが表示されます。画像内の鳥が表示されている範囲にカーソルを合わせると、自動的に範囲選択の四角い枠が表示されるのでクリックします。画像の内容によっては枠が自動的に表示されなかったり異なる範囲が選択される場合があるので、その場合は手動で範囲を調整します。
範囲選択ができると、「Add Region Tag」というタグ入力用のダイアログが表示されるので、ここでタグ名を入力してエンターキーを入力します。 オブジェクトへのタグ付けができると、画像内の範囲選択した箇所と「My Objects」という所にタグ名が表示されます。このようにして画像内のオブジェクトに対してタグを付与していきます。ダイアログ右側にある「>」マークを選択して、次の画像も同様にタグ付けを行っていきます。
複数のオブジェクトが存在する場合は、それぞれ範囲選択してタグ付けを行うことができます。
なお、今回は簡単な例のため1つ画像に1種類のタグのみを付与していますが、複数のオブジェクトに対して異なるタグを付与することも可能です。
すべての鳥類の画像へのタグ付けが完了したら、別の種類の画像もアップロードしていきます。同様の手順で、蝶や蜂の画像をアップロードしてみます。
それぞれ15枚の画像をアップロードしてタグ付けまで完了すると、モデルのトレーニングが可能となります。