ADFIで商品の有無検査AIを作成する

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

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

## 有無検査AI
カメラ画像中の対象物の存在有無を判定するAIです。
サンプル用データセットでは「卵の存在有無」（パック内の正しい位置に卵が存在するか）を判定します。学習データは正常（正しい位置に卵が存在する）画像のみでAIを作成可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/42140a5f-d01f-1a78-caa2-7152b039c68b.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. データセットの作成
 - プロジェクト詳細画面では、プロジェクトメンバーの追加やデータセットを作成することができます。中段中央「PCA-MSPC」の「データセットを新規作成」ボタンを押してください。
   - 今回のサンプルデータセットではAIアルゴリズムに「PCA-MSPC」アルゴリズムを使用します。有無検査や位置ズレ検査には「PCA-MSPC」のAIアルゴリズムが適しています。なお、「PCA-MSPC」では画像中における検査対象物の位置が固定されている必要があります。

![project_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/ab33ac41-52d6-9029-59ad-791bc30c7b68.png)


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

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

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

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

### 4-1. 学習画像のアップロード
 - 「学習画像（正常）」ボタンを押してください。

![dataset_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/7f2613f3-b8f8-a2ce-bc43-81cf91c3fb6f.png)

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

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

![dataset2_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/9eca0ce0-1392-4e62-385d-a4a3e295c9df.png)

![dataset2_egg_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/04c79a2b-6587-5148-c4a4-869d053bde7f.png)



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

![dataset3_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/77a22bb3-9a27-d6c0-b5c2-ddb34ced4eed.png)


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

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

![dataset4_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/eb281c4f-15b3-074e-dda5-923f806cf03a.png)

 - サンプル画像データセットのtestフォルダ内にあるngフォルダ( Egg_presence_check ->  test -> ng)を開きます。
 - ngフォルダ内の全ての画像を選択して、「開く」ボタンを押します。
 - アップロード完了後、画像リストに性能検証用の異常画像が追加されています。

 - 「学習データ」「評価データ」の数を確認してください。AIの学習用と性能検証用に登録された画像数を表しています。画像の登録は完了です。

![dataset5_0_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/a669ce74-9969-0c63-0ccb-710cc639d4ac.png)


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

![dataset5_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/a5912596-0b66-10b1-ab23-5ed14d137717.png)


 - AIの学習が開始されると、「AIモデルステータス」に「学習実行中」と表示されます。
 - AIの学習が完了するまで待ちます。
   - AIの学習時間は学習用画像の数によって変わります。サンプルデータセットでは約30秒で学習が完了します。
   - 万が一、10分以上経っても「AIモデルステータス」が変化しない場合は、「AIモデル削除」を押してから、再度「AIモデル作成」を押してください。
 - AIの学習が完了すると「AIモデルステータス」に「AIモデル作成済み」と表示されます。これでAIモデルが作成されました。

![dataset7_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/b06c2f83-1f1f-7b5c-22da-096e909c2925.png)


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

![dataset_8_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/0f1bcd94-4880-34f9-a7a1-e3039d266563.png)


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

![dataset_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/6e838d07-fb5d-2895-d216-c171a166b56b.png)


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

![dataset_10_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/e41fd9f4-1f66-3f67-69f6-d12b1e5c0fd7.png)


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

![dataset_11_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/bfb86bbe-a85f-36a8-8bec-cfc87565cfa7.png)

![dataset_12_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/3156543d-ab51-6a7f-b285-5b7e3d6d6e3e.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の検証が実行されます。

![dataset_13_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/f2aa9ac0-7c18-e42c-1d2d-70b4faf40664.png)


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

![dataset_14_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/68d7c8f8-0459-bbab-174a-aba99b9bd776.png)


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

![dataset_15_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/9d94c072-06c5-b9e0-3e32-c90aa7dc261e.png)


 - 作成したAIで検査したヒートマップが表示されます。
   - 画像を16分割した各領域の判定結果を３段階の色「灰色（正常）　＜　オレンジ色　＜　赤色（異常）」で表現しています。
   - 赤い領域が全くない画像は、画像に対するAIの判定結果が「正常」となります。
   - 確認後、右下の「閉じる」を押してください。

![dataset_16_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/7eb7e375-9a7c-1619-5360-c4476c6257d4.png)



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

![dataset_17_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/0a098e1c-5042-e922-8092-40d01b748f8b.png)


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

![dataset_18_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/833c3108-9a0f-bc42-8c27-263d4dd4fad1.png)


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

![dataset_19_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117462/e0f692b3-1653-18c8-a974-1ac8374818d5.png)


# ADFIの手順解説記事
 - [ADFIで異物混入検査AIを作成する](https://qiita.com/karakurai_rena/items/45e14891148caff83192)
 - [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)