ADFIで異物混入検査AIを作成する

# はじめに
本記事では、[ノーコードAI開発プラットフォーム ADFI（アドファイ）](https://adfi.jp/ja/ai/)を使って異物混入検査AIを作成する手順を解説します。
この手順では、学習データと評価データに、ADFIのWebサイトで公開しているサンプル用データセットを利用しています。

実際に商用利用するAIを開発する場合は、ご自身でご用意した画像を学習データ・評価データとしてご使用ください。

## 異物混入検査AI
カメラ画像中の対象物に対して異物の混入有無を判定するAIです。
サンプル用データセットでは「コーヒー豆」に異物が混入しているかを判定します。学習させていない（学習データに含まれていない）未知の異物に対しても検知可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/360e56ae-0235-3b98-8acb-4f6eaebbdb12.png)


# 異物混入検査AIの作成手順
## 1. プロジェクトの作成
 - 「ADFI異常検知」のプロジェクトを作成してください。初めてADFIを利用する場合は、[こちらの手順](https://qiita.com/karakurai_rena/items/5f3c5ee32fb58854b9a7)を参考にしてアカウントとプロジェクトを作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/4345256f-8d03-45e9-6ef1-1b8b2a6d4502.png)


## 2. データセットの作成
 - プロジェクト詳細画面では、プロジェクトメンバーの追加やデータセットを作成することができます。中段左側「DML」の「データセットを新規作成」ボタンを押してください。
   - 今回のサンプルデータセットではAIアルゴリズムに「DML」アルゴリズムを使用します。異物混入検査には「DML」または「高解像度DML」のAIアルゴリズムが適しています。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/fb1058d8-9d80-f0d4-1a93-5dd65cbcb97b.png)

 - 作成したいAIモデル名を入力して「作成」を押してください。

## 3. 学習データ・評価データの用意
 - 左メニュー「サンプルデータセット」を押して、AIモデルの学習・評価に使う画像をダウンロードします。（自分で学習・評価に使う画像を持っている場合は、ダウンロード不要です。）

 - [ADFI公式サイトのダウンロードページ](https://adfi.jp/ja/download/)から異常検知用のサンプルデータセット「Coffee beans」をダウンロードします。ダウンロードしたら圧縮ファイルを展開してください。

## 4. 画像の登録
データセット詳細画面では、AIの学習画像や評価画像を登録して、AIモデルの作成や性能検証を行うことができます。まずは、学習画像と評価画像をアップロードして登録します。

### 4-1. 学習画像のアップロード
 - 「学習画像（正常）」ボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/dfb68b41-ea5d-97c5-d434-4a095efcb615.png)

 - 先ほど展開したサンプル画像データセットのtrainフォルダ内にあるgoodフォルダ( Coffee_beans ->  train -> good )を開きます。
 - goodフォルダ内の全ての画像を選択して、「開く」ボタンを押します。
   - Windowsの場合、「Ctrl」ボタン+「A」ボタンで全部を一括で選択できます。

 - 画像のアップロード完了後、データセット詳細画面の下部に、登録された画像のリストが表示されます。任意の画像情報の左側のアイコンを押してください。登録された画像を確認することができます。
   - 登録された画像が表示されます。右下の「閉じる」を押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/5021e00c-878c-790b-3110-112141e05156.png)

 - 次に、学習用の異常画像を登録します。「学習画像（異常）」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/9f4f012b-f13a-2973-35dc-4fce35f9429f.png)

 - サンプル画像データセットのtrainフォルダ内にあるchocolateフォルダ( Coffee_beans ->  train -> chocolate )を開きます。
 - chocolateフォルダ内の全ての画像を選択して、「開く」ボタンを押します。
   - Windowsの場合、「Ctrl」ボタン+「A」ボタンで全部を一括で選択できます。
 - アップロード完了後、画像リストに異常画像が追加されています。学習用の異常画像は、画像中の異常領域を指定する必要があります。画像情報の右側の「異常領域の選択」ボタンを押してください。
   - 異常領域を指定していない異常画像は、AIの学習に使用されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/83ef69c9-d4e1-5fdb-2d95-eaf0ae588edc.png)

 - 画像中の異常領域を指定します。異常な箇所が含まれる領域を選択してクリックしてください。選択した領域は緑色に表示されます。
  - 異常な箇所が複数の領域に存在する場合は、最も特徴的な異常箇所を１つ選んでください。
  - 「高解像度DML」アルゴリズムの場合は、複数の異常箇所を選択可能です。
 - 選択後、左上の「保存」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/9e8ee670-054a-da11-5926-581f1f4343f7.png)

 - 異常領域を指定した画像情報の右側にチェックマークが表示されます。各画像情報に対して同様の操作を繰り返し、全ての「異常領域の選択」ボタンをチェックマークの表示に変えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/0b12d289-f64f-8aee-19a3-e45a046b9007.png)


### 4-2. 評価画像のアップロード
 - AIの性能検証に使用する正常画像を登録します。「評価画像（正常）」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/194d83ad-5ff3-a8b2-f9ed-0d911d676a8b.png)

 - サンプル画像データセットのtestフォルダ内にあるgoodフォルダ( Coffee_beans ->  test -> good )を開きます。
 - goodフォルダ内の全ての画像を選択して、「開く」ボタンを押します。
   - Windowsの場合、「Ctrl」ボタン+「A」ボタンで全部を一括で選択できます。
 - アップロード完了後、画像リストに性能検証用の正常画像が追加されています。

 - 最後に、AIの性能検証に使用する異常画像を登録します。「評価画像（異常）」ボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/95a15c3a-1a31-4243-1f39-ffc8d921eb31.png)

 - サンプル画像データセットのtestフォルダ内にあるcandyフォルダ( Coffee_beans ->  test -> candy)を開きます。
   - 今回、学習用の異常画像にはcandyは含まれていませんが、ADFIは学習させていない異常でも検出することができます。
 - candyフォルダ内の全ての画像を選択して、「開く」ボタンを押します。
 - candyの異常画像のアップロード完了後、画像リストに性能検証用の異常画像が追加されています。さらに、性能検証用の異常画像（chocolate）を追加します。もう一度「評価画像（異常）」ボタンを押してください。

 - サンプル画像データセットのtestフォルダ内にあるchocolateフォルダ( Coffee_beans ->  test -> chocolate)を開きます。
 - chocolateフォルダ内の全ての画像を選択して、「開く」ボタンを押します。

 - chocolateの異常画像のアップロード完了後、画像リストに性能検証用の異常画像が追加されています。
 - 「学習データ」「評価データ」の数を確認してください。AIの学習用と性能検証用に登録された画像数を表しています。画像の登録は完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/1ebf5aa8-7afb-11c7-f4a9-b426a2ec2080.png)

## 5. AIモデルの学習
 - 「AIモデル作成」ボタンを押してください。AIの学習が開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/e5f9efeb-8a91-0cad-b562-f8065bfc08d3.png)

 - AIの学習が開始されると、「AIモデルステータス」に「学習実行中 (Preparing to train)」と表示されます。
   - しばらくすると、「学習実行中 (14. 15%)」のように学習の進捗が表示されます。
 - AIの学習が完了するまで待ちます。
   - AIの学習時間は学習用画像の数によって変わります。サンプルデータセットでは約1時間で学習が完了します。
   - 万が一、数時間経っても進捗が止まっている場合は、「AIモデル削除」を押してから、再度「AIモデル作成」を押してください。

 - AIの学習が完了すると「AIモデルステータス」に「AIモデル作成済み」と表示されます。これでAIモデルが作成されました。
   - AIモデルの作成完了するとメールで知らせてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/ceb0b9f3-7e4f-7583-9fab-6692a77d41f2.png)

## 6. AIモデルの性能評価
 - AIの作成完了後（「AIモデルステータス」が「 AIモデル作成済み 」の時）は、登録済みの評価画像を使って、AIの性能を検証することができます。
 - まず、「AIモデル設定」タブを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/30dd1f5e-6609-d256-4968-b17b3fb338ca.png)

 - 「AIモデル設定」タブでは、AIの判定しきい値の変更や、評価画像に対する判定スコアのヒストグラムを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/ae816a96-f5c3-b822-2e5f-9421e9fa0bf3.png)

 - 次に「テスト結果」タブを押してください。現在のしきい値（デフォルトのしきい値）でのAIの検証結果の概要が表示されます。
 - 「テスト結果詳細をダウンロード」ボタンを押すと、詳細情報（画像ごとのAIでの判定結果リスト）のCSVファイルをダウンロードすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/65e64a62-ce6a-cc87-f1e4-d3e9d9b349c6.png)

 - 再び「AIモデル設定」タブを押してください。先ほどダウンロードしたCSVファイルや下段のヒストグラムを参考にして、しきい値を任意の値に変更します。２つのしきい値（「メイン」、「サブ」）を設定することができます。
 - 値を入力後、「しきい値を保存」ボタンを押すと、入力した値がしきい値に反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/5c49c974-8449-1a47-afe9-d8544c6be99f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/c63531ef-773a-744f-a2fa-50fadfc86990.png)

 -「テスト結果」タブを押してください。しきい値を変更したため、AIの検証結果が「No data」になっています。右側の「テスト実行」ボタンを押すと、変更後のしきい値で、再度AIの検証が実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/c1970bc8-ebba-7c55-5167-6432e48eb1ff.png)

 - しきい値を変更後のAIの検証結果が表示されます。 異物混入検査では、ROC-AUCと再現率（Recall）が重要です。
   - ROC-AUC：AIの判別性能の値（1.0が最高値）
   - 再現率：評価画像（異常）に対する正解率（1.0の場合、異常の見逃しがゼロ）
 - 右側の「テスト結果詳細をダウンロード」ボタンを押すと、変更後のしきい値のCSVファイルをダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/cba2cd9a-1bba-1669-a40d-97c5c7fa9b48.png)

 - 各画像のヒートマップを表示します。「学習/評価画像」タブで、検証用の異常画像（ 「ForTest」がチェックマーク、かつ、「Label」が「異常」）の左側のアイコンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/de413e76-bbcd-68d0-d499-f2ad381acd26.png)

 - 作成したAIで検査したヒートマップが表示されます。
   - 赤い領域は、注目領域です。AIが異常と判定する際に注目した領域を表しています。
   - 正常画像の場合は、異常箇所が存在しないため、注目領域が集中せずに薄く全体に広がります。
   - 確認後、右下の「閉じる」を押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/747e5231-2731-687a-698f-7e56ed5b2914.png)


## 7. AIモデルのダウンロード
 - 作成したAIモデルは、ご自身のPCやサーバーなどのローカル環境で利用することができます。
 - AIモデル詳細画面で「ローカル実行情報」ボタンを押してください。
 - 「作成したAIモデルをダウンロード」ボタンを押して、AIモデルをダウンロードしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/2324ddae-a280-9eb9-f412-be5d97f6117e.png)


 - ダウンロードしたAIモデルの実行ライセンス情報が表示されます。
 - ライセンスのステータス、ライセンスタイプ、有効期限などを確認できます。
 - ダウンロードしたAIモデルを商用利用する場合は、有料プランにアップグレードして、ライセンスタイプを「定額制ライセンス（自動継続）」または「従量制ライセンス（自動継続）」に変更してください。
   - 有料プランの場合、「無料ライセンス」ボタンを押すことで、ライセンスタイプを変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/d320b8ec-a408-e78b-7ebf-62969a5dfb9d.png)

 - 「AIモデル実行モジュール（Pythonプログラム）をダウンロード」ボタンを押して、モジュールをダウンロードしてください。
 - Pythonプログラム内でこのモジュールを呼び出すことで、ダウンロードしたAIモデルを自分のPCやサーバー等のローカル環境で実行することができます。
   - AIモデルの実行方法は、モジュールフォルダ内のサンプルプログラム（sample.py）を参考にしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/088a8958-a279-1a6a-d2da-8806362beaac.png)


# ADFIの手順解説記事
 - [ADFIで路面検査AIを作成する](https://qiita.com/karakurai_rena/items/5e92743814e05d84c8ad)
 - [ADFIで混雑検知AIを作成する](https://qiita.com/karakurai_rena/items/b931bba9a5a347a460c1)
 - [ADFI初心者向けの手順解説（アカウント新規作成～プロジェクト作成）](https://qiita.com/karakurai_rena/items/5f3c5ee32fb58854b9a7)