神戸のデータ活用塾!KDL Data Blog

KDLが誇るデータ活用のプロフェッショナル達が書き連ねるブログです。

Azure Custom Visionで異常検知!

株式会社神戸デジタル・ラボ DataIntelligenceチームの原口です。

今回はMVTec社のデータセットとAzure Custom Visionを用いて異常検知に取り組みます!


異常検知とAIの関係性については、以下の記事をご覧ください。 kdl-di.hatenablog.com

Azure Custom Visionとは?

今回利用する、Azure Custom Visionとはどういったものでしょうか?

Azure Custom Visionを一言でいうと、「プログラミングを一切せずにAIを作成出来る魔法のようなサービス」です。

こちらの記事を見てもわかる通り、一般的にAIを作成するためには高度なAI作成の知識と技力術とプログラミングスキルが要求されます。

そのため、今までは「ちょっとAIを試してみたいな」や「これってAIでできるんだろうか」などのアイデアを思いついても、専門の人材がいないと簡単に試すことができませんでした。

Azure Custom VisionはこのようなAIについての高度な知識や技術力・プログラミングスキルがなくとも、「とりあえずAIを作ってみる」ということが可能です。

もちろんAIについての知識があるほうが良いですが、自分たちで「試してみる」ところから始めることで、プロジェクトやDX推進の機動力を高めることができます。

Azure Custom VisionはMiscrosoft EdgeやSafariなどのWebブラウザ上で動作し、操作は主にマウスで行います。そのため高度なプログラミングや知識も必要とせず、AIの作成を試すことができます!

利用イメージ

今回はAzure Custom Visionを利用して、異常検知に取り組みます!

データの準備

まずは異常検知を試すためのデータを準備します。

MVTec社のサイトにアクセスし、「Capsule」をクリックしてデータをダウンロードします。

MVTec社のWebページからデータをダウンロードする

ダウンロードが完了後、データの展開を行います。

ダウンロードしたデータは「.tar.xz」という拡張子がついていて、zipと同じく圧縮されたファイルです。Windowsを利用している場合、「7-zip」というアプリケーションを利用することで展開できます。

macOSやLinuxの場合は次のコマンドで展開することができます。

$xz -dv capsule.tar.xz
$tar xfv capsule.tar

展開した「capsule」フォルダ内が図と同じであれば展開完了です!続いてこれらのデータを学習用・検証用データに分割しましょう!

capsuleフォルダ内の構成

学習用・検証用データについて詳しく知りたい方は以下の記事をご覧ください。

kdl-di.hatenablog.com

まず「学習用」「検証用」フォルダを作成し、その中に「good」「bad」フォルダを作成します。

各フォルダの構成図

続いて各フォルダに画像を割り振ります。割り振りは以下を確認しながら行ってください!

画像の場所 利用する画像 配置場所
capsule/test/crack 000.png ~ 009.png 学習用/bad
010.png ~ 019.png 検証用/bad
capsule/test/faulty_imprint 000.png ~ 009.png 学習用/bad
010.png ~ 019.png 検証用/bad
capsule/test/poke 000.png ~ 009.png 学習用/bad
010.png ~ 019.png 検証用/bad
capsule/test/scratch 000.png ~ 009.png 学習用/bad
010.png ~ 019.png 検証用/bad
capsule/test/squeeze 000.png ~ 009.png 学習用/bad
010.png ~ 019.png 検証用/bad
capsule/train/good 000.png ~ 049.png 学習用/good
050.png ~ 099.png 検証用/good

割り振りが終わればデータの準備は完了です!

Microsoft Azure Portalにアクセスする

Azure Custom Visionを利用するためには、まずMicrosoft Azureのサービスを使うためのポータルサイト「Azure Portal」にアクセスする必要があります。まずはここからAzure Portalへアクセスしましょう!

アクセスすると、下図の画面が表示されます。Microsoftアカウントをお持ちでない方は「無料アカウント」を、すでにお持ちの方は「サインイン」を選択してログインしてください。

無料アカウントかサインインをクリック

ログインが完了後、Azure Portalの「サインイン」ボタンをクリックするとAzure Portalの画面が表示されます!下図の画面が表示されれば準備OKです!

Azure Portal画面

Azure Custom Visionの準備

続いてAzure Custom Visionを利用するための準備を行います。

先ほどのAzure Portal画面の上方にある検索欄に「custom vision」と入力し、検索します。

Custom Visionを検索

検索結果に表れている「Custom Vision」を選択します。すると下図の画面が現れるので、中央にある「Custom Visionの作成」をクリックします。

Custom Visionの作成

するとCustom Visionの設定画面が表示されます。下図に従って設定しましょう!

AI作成のセッティング

ここで各項目について説明します。

作成オプション

作成オプションではCustom Visionが何をするかを選択することができます。学習のみの場合は「トレーニング」を、予測のみの場合は「予測」を、両方を行いたい場合は「両方」を選択して下さい。

プロジェクトの詳細

プロジェクトの詳細ではサブスクリプションとリソースグループを選択することができます。

サブスクリプションはどこに課金するか?を指定できます。課金先が複数ある場合は対象のサブスクリプションを設定してください。

リソースグループは各サービスのリソースを保存する場所を指します。すでに存在しているリソースグループを利用する場合はそちらを選択してください。

インスタンスの詳細

インスタンスの詳細ではリージョンと名前を選択できます。

リージョンはどの国・地域でこのサービスを使いたいかを指定します。基本的に日本でサービスを提供したい場合は、「Japan」がついているものを選択することをお勧めします。

リージョンでアメリカなどを選択した場合、物理的な距離がかなりあるためデータ転送が遅くなってしまう問題が発生します。また支払いもドルになるため、そのタイミングでの為替に影響される点もあります。

さらに適応される法律もリージョンごとに影響を受けます。日本ではOKなデータも海外ではNGの場合があります。

上記の理由から、海外のリージョンを利用する場合は注意が必要です!

名前はインスタンスに対して命名することができます。

トレーニングリソース・予測リソース

ここでは各リソースの価格レベルを選択することができます。無料(F0)は一つのサブスクリプションに対して一つしか作成できないので注意が必要。

設定が完了すると、画面最下部にある「確認と作成」をクリックし、Custom Visionの作成を完了します。

Custom Visionの作成完了

その後「リソースに移動」をクリックし、「Custom Visionポータル」からAzure Custom Visionのサイトに移動します。

Azure Custom Visionのサイトに移動

Azure Custom Visionの利用

Projectの作成

いよいよAzure Custom Visionを利用するときが来ました!まずはCustom Visionポータルサイトの「SIGN IN」をクリックし、サインインします。

Custom Visionポータルサイト

するとプロジェクト画面が表示されるので、「New Project」を選択しましょう。「New Project」を選択すると下図の画面が表示されます。下図を参考に設定しましょう!

AIモデルの設定画面

ここで選択できる項目について説明します。


Project Types

Project Typesは「Classification」と「Object Detection」の二種類が存在します。Classificationは画像分類を、Object Detectionは物体検出を表しています。

画像から正常・異常を分類できるAIを構築したい場合はClassificationを選択します。

画像から異常があった場合に異常個所まで特定したい場合はObject Detectionを選択します。

今回は正常・異常を分類したいので「Classification」を選択しました。


Classification Types

Project Typesを「Classification」にすると、Classification Typesで分類方法を選択できます。「Multilabel」は一つの画像に複数のラベルを割り当てます。一方で「Multiclass」は一つの画像に一つのラベルを割り当てます。 一般的に用いられるのは「Multiclass」なので、今回は「Multiclass」を選択しました。

ラベル付けの説明


Domains

Domainsではモデルの特徴を選ぶことができます。

  • Classification(画像分類)の場合
    • General:幅広い分類タスクで利用可能。何を使えばいいか分からない場合はこれ。
    • General [A1]:データセットが大きい際に推奨される。推論速度はGeneralと同じくらい。
    • General [A2]:General・General [A1]より必要な学習時間も短く高速に推論可能。ほとんどのデータセットはこのモデルでOK!
    • Food:食べ物に特化したモデル。果物・野菜を分類したい場合は選択。
    • Landmarks:ランドマークの認識に特化したモデル。
    • Retail:ショッピングWebサイトの画像に特化したモデル。服を高精度に分類したい場合は選択。
    • ○○[compact]:上記内容をエッジデバイスで実行できるように、コンパクトにしたモデル。モデルをダウンロードすることができる。
  • Object Detection(物体検出)の場合
    • General:幅広い検出タスクで利用可能。何を使えばいいか分からない場合はこれ。
    • General [A1]:データセットが大きい際に推奨される。推論速度はGeneralと同じくらい。
    • Logo:ロゴの検出に特化したモデル。
    • Products on Shelves:棚の上の製品に特化したモデル。
    • ○○[compact]:上記内容をエッジデバイスで実行できるように、コンパクトにしたモデル。モデルをダウンロードすることができる。

今回は特に決まっていないので、良いことづくめのGeneral [A2]を選択しました。

全ての設定を終えたら、「Create Project」をクリックします。以上でAI作成の下準備が完了しました!

画像の追加&ラベル付け

続いてAIの作成に利用する画像の登録をしましょう!

実際に作る前に、もう一度どういったものを作成するかおさらいしておきます。

今回はカプセルの写った画像を読み込ませると、そのカプセルが正常または異常であるかを判断するAIを作ります。そのためにはAIが正常・異常なカプセルがどんなものかAIに教える必要があります。

まずは「データの準備」のチャプターで作成した「good」画像と「bad」画像を読み込ませて、ラベル付けを行っていきましょう!

「Create Project」をクリック後、図のような画面が表示されます。画面左上にある「Add images」をクリックしましょう。

Custom Visionの画面

するとファイル選択のウィンドウが表示されるので学習用フォルダにあるgoodの画像をすべて選択し、「good」というラベル付けをします。(これによって選択した画像は「good」、つまり正常画像であるということをAIに理解させることができます。)

ファイル選択画面

画像を選択すると、ラベルを割り当てる画面に遷移します。下図を参考に、赤枠内に「good」と入力し「Upload 50 files」をクリックしましょう。

ラベル指定画面

「50 images uploads successfully」と表示されると画像のアップロードが完了です。

完了画面

同様の手順で、学習用のbadの画像を「bad」で登録しましょう!

AIを作成

いよいよAIの作成に取り掛かります!Azure Custom Visionのメイン画面右上にある「Train」をクリック、「Quick Training」が選択されていることを確認し「Train」をクリックしてください!

もう一方の「Advanced Training」は長期的な学習を行うタイプです。Quick Trainingと比較して学習時間が延びますが(約一時間)、精度はQuick Trainingより高い精度となることが多いです。

初めてのデータや取り組みの場合は「Quick Training」を行い、精度に伸び悩んだ場合は追加で「Advanced Training」を行うようにすると良いでしょう。

AI作成時の設定

するとIteration1と書かれた画面に移動します。これでAIの作成は完了です!後は作成が終わるのをコーヒーを飲みながら優雅に待ちましょう!(ここでIterationとは学習記録のことを指します。Iteration1は一回目の学習を表しており、学習を複数回行うことで数字が増加したものが保存されていきます。複数回学習を行った際の識別に利用することができます。)

AI作成中

・・・お、AIの作成が完了しました!何やら真ん中に三つのグラフと数値が書いてあります。次は数値の見方について説明します!

AI作成結果

精度評価の見方

Precision・Recall・APの説明に移る前に、どのようにAIがgood・badを認識しているか解説します。

AIの認識過程

まずAIに検査画像を入力します。AIは入力された画像に対してあれやこれやと複雑な計算を行い、goodである確率とbadである確率を出力します。最後に結果を閾値で分割します。上の図のように、例えば閾値を0.5に設定したとします。入力画像に対してAIが計算を行った結果、画像が0.7の確率でBad(異常)であると予測した場合、今回は0.5という閾値を超える事で異常とみなすので、この入力画像は「bad(異常である)」と判定されます。

この閾値が0.9であれば入力画像画像は「badではない=正常である」と判断されます。

閾値はAzure Custom Visionの左上にあるスライダーから設定することができます。初期値は50%です。

閾値の設定

AIの認識過程が分かったところで、各指標について説明します。

Precision(適合率)

Precisionは日本語で適合率と言われています。適合率はモデルの正確性を表しており0~1までの値を取ります。適合率が高い(1に近い)モデルは予測した内容がほとんど外れません。 一方で適合率が低い(0に近い)モデルは予測した多くが外れる傾向にあります。

では適合率の計算方法について説明します!

例として以下の表のような結果があったとします。

画像名 No1 No2 No3 No4 No5 No6 No7 No8 No9 No10
予測 good good bad good bad bad bad bad good bad
正解 good good good good good bad bad bad bad bad
判定 TP TP FN TP FN TN TN TN FP TN

ここでTP・TN・FP・FNは以下のように定義されています。

  • TP(True Positive):日本語で真陽性。正解がgoodに対してgoodと予測した回数。大きい方が良い。
  • FP(False Positive):日本語で偽陽性。正解がbadに対してgoodと予測した回数。小さい方が良い。
  • TN(True Negative):日本語で真陰性。正解がbadに対してbadと予測した回数。大きい方が良い。
  • FN(False Negative):日本語で偽陰性。正解がgoodに対してbadと予測した回数。小さい方が良い。

上の表で、No1は予測がgoodに対して正解がgoodなのでTP。逆にNo8は予測がgoodに対して正解がbadなのでFPとなります。

それでは実際に適合率を計算しましょう!

適合率は次の式で定義されています。

適合率の計算方法

この式に当てはめると、上の表の結果は次のようになります。

適合率の計算結果

つまりこの予測AIは「正常であると判断した際に75%で正解する」ということが分かります。

Recall(再現率)

Recallは日本語で再現率と呼ばれています。再現率はモデルの網羅性を表しており0~1までの値を取ります。再現率が高い(1に近い)モデルは予測内容にほとんど漏れがありません。 一方で再現率が低い(0に近い)モデルは予測に漏れが多く生じるようになります。

再現率は次のように定義されます。

再現率の計算方法

この式に当てはめると、上の表の結果は次のようになります。

再現率の計算結果

つまりこの予測AIは「実際の正常の量に対して60%の網羅性がある」ということが分かります。

AP(Average Precision:平均適合率)

AP(Average Precision)は、予測の信頼度を用いた適合率の平均を表しています。APは0~1の値を取り、APが高ければモデルの予測は高精度、低ければ低精度となります。

説明をするために、例として上の表に信頼度を追加します。

画像名 No1 No2 No3 No4 No5 No6 No7 No8 No9 No10
予測 good good bad good bad bad bad bad good bad
信頼度 0.98 0.92 0.88 0.85 0.79 0.77 0.68 0.65 0.58 0.45
正解 good good good good good bad bad bad bad bad
判定 TP TP FN TP FN TN TN TN FP TN

APの計算は以下の流れに沿って行います。

  1. 信頼度が高い順に結果を確認
  2. Precisionの計算は、現時点までのTP・FPで計算
  3. Recallの計算は、全体に対してのTPで計算

この計算をすべての結果に対して繰り返し行っていきます。

上の表を例に計算を確認してみましょう。

まずは信頼度が高いNo1から計算を行っていきます。この場合予測がgood、正解もgoodなのでTPとなります。この段階でのPrecisionは1/1 = 1、Recallは 1/5となります。

続いてNo2。こちらもgoodで正解しているので、Precisionは2/2 = 1、Recallは2/5となります。

No3では予測がbadに対して正解がgoodとFNになってしまいました。この場合はPrecisionは2/2 =1、Recallは2/5となります。

この計算を繰り返した場合の結果は次の表のようになります。

画像名 Precision(適合率) Recall(再現率)
No1 1.000 0.200
No2 1.000 0.400
No3 1.000 0.400
No4 1.000 0.600
No5 1.000 0.600
No6 1.000 0.600
No7 1.000 0.600
No8 1.000 0.600
No9 0.750 0.600
No10 0.750 0.600

グラフにすると次のようになります。

Average Precisionのグラフ

Average Precisionではこの下の面積が精度として計算されます。

上の表の結果は、1.0×0.6 = 0.6がAPということになります。

今回はデータが少ないため、計算がしやすいグラフの形状をしていましたが、実際はもっと複雑な形をしています。

結局のところ数値が表すものは?

ここまで数値の見方を説明しました。しかし、どの数値を見ればAIが精度が高いと言ってよいのでしょうか?答えは用途によって様々です。今回は代表的な例とその際に確認すべき数値をご紹介します。

例1:とにかく取りこぼしを減らしたい

食品の生産ラインにとって異物混入は企業への信頼を損なう大きなリスクです。この場合では「検査の段階で異物と思われるものはすべて再検査する・廃棄する」ことでリスクを低減することができます。 つまり異物を取りこぼさないことが重要となるので、Recall(再現率)を重視したAIモデルの作成が重要となります。

下の図では異物混入を検査するレーンにAIを導入した場合を表しました。従来は、異物混入を防ぐために多くの正常品に対して検査をする必要がありました

一方でAIを導入した生産ラインでは、Recall(再現率)を重視したAIを導入したことで異物混入した製品の取りこぼしが発生しないため、AIが正常と判断したものは再検査する必要がなく、AIが異物混入と判断したもののみ再検査することで異物混入を防ぐことができます。

取りこぼさないためのAI利用

例2:点検効率を上げたい

異常品が一定の割合で発生する場合、確実に異常である品は自動で弾けると大きなコストダウンを達成できます。この場合では「明らかな異常品を確実に弾き、正常品を間違えて弾かない」ということが重要となり、Precision(適合率)を重視したAIモデルの作成が重要となります。

下の図では生産ラインにPrecision(適合率)を重視したAIを導入した場合を示しました。 従来では明らかに異常があるものや微細な異常があるもの、判断が難しいものなど多種多様なものが流れてきており、すべてに対して人間が判断をする必要がありました。

一方でAIを導入した生産ラインでは、Precision(適合率)を重視したAIを導入したことで、AIが異常と判断したものは確実に異常品であるため再検査する必要がなくなり、人間はより判断が難しい製品の検査をじっくり行えるようになります。

明らかな異常を確実に弾くためのAI利用

総合的に評価したい

総合的に評価したい場合はF値(F Score)を算出することをお勧めします。F値は適合率・再現率の調和平均と言われており、次の式で計算することができます。

F値の計算方法

F値は0~1の値を取り、1に近ければ適合率・再現率ともに精度が高く、0に近ければ精度が低いことになります。

どちらの精度を重要視したいか判断に迷う場合は、F値を指標に利用しましょう。

テストをする

最後にテストをしましょう!Azure Custom Visionから右上の「Quick Test」をクリック、下図の「Browse local files」をクリックしテストしたい画像を選択します。この時選択するファイルは「検証用」から選択して下さい。

テスト画面

検査が完了すると、下図のような結果が表示されます。右下に表示されている結果の中の「Probability」の数値が最も高いものが予測結果となります。

今回は両検査画像とも正しく分類できたようです!

検査結果(正常)

検査結果(異常)

まとめ

以上がCustom Visionを利用したAIモデルの作成手順でした!すべてがWebブラウザ上で完結しているので非常に簡単にAI作成ができましたね。

「AI作成は難しいもの」と考えられていますが、こういったツールを使うことで簡単にアイデアを形にできます。

ぜひ参考にしてAIを構築してください!