【機械学習】ADFIを使って30分で異物検出AIを作成する手順【異物検査】

先日、異物検査システム構築案件でADFIを使って異物検出AIを作成した時の手順メモ。

![zu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/2a01e389-05ca-cb95-9efc-8dfd3a403300.png)


# 概要
## 異物混入対策

食品製造現場においては異物混入対策は非常に重要視されています。  
もちろん、食品工場や物流の現場では異物混入を防ぐ様々な対策が導入されていますが、最終的には異物検査（商品に異物が混入していないかのチェック）が必要です。  
異物検査を人間が目視で行うのは大変なので、異物検査システムのニーズは大きいようです。

## 異物検査AI

近年、ディープラーニングなどのAI技術が進展したため、高精度の異物検出AIが作成できるようになってきました。  
今回は、無料で利用できる異常検知AIプラットフォームの[ADFI](https://adfi.jp/ja/)を使って異物検出AIを作成してみたので、その時の手順を掲載します。  
[ADFI](https://adfi.jp/ja/)の詳細については、[以前の記事](https://qiita.com/umapyoi/items/ddd45a47aa79ccbde28b)で紹介しているので、そちらを参照ください。

https://qiita.com/umapyoi/items/ddd45a47aa79ccbde28b

## やりたいこと
 - カメラで撮影した画像の中に、異物が混入しているかどうかを判定するAIを作成する。
 - AIの精度を測定する。


# 手順
異物検出AIの作成手順を記載します。

## 学習データと評価データの準備
まず、異物検査対象の画像を用意します。  
顧客先の画像は掲載できないので、この記事では、ADFIのサイトでダウンロードできるコーヒー豆の[サンプルデータセット](https://adfi.jp/ja/download/)を使います。

[「Coffee beans (22.7MB) 」](https://adfi.jp/ja/download/)をダウンロードして展開します。下記のフォルダ内に画像データが入っています。
 - train：学習データ
   - chocolate：学習用の異常データ。
   - good：学習用の正常データ。
 - test：評価データ
   - candy：評価用の異常データ。
   - chocolate：評価用の異常データ。
   - good：評価用の正常データ。

## ADFIで学習データと評価データをアップロード

(1) ADFIの[WEBサイト](https://adfi.jp/ja/)の右上の「Sigin/Sign Up」から、ADFIにサインインします。  
（初めての時は、アカウントを新規作成して、確認メールのURLをクリック。）

(2)「NEW PROJECT」ボタンで、プロジェクトを新規作成。

(3)「NEW DML DATASET」ボタンで、データセットを新規作成。

![ProjectDetail_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/8a8ed6ca-3b16-358c-4296-8427577c0a50.jpeg)


(4)「Normal Training image」ボタンで、学習用の正常データをアップロードします。

![DatasetDetail_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/fa21a9da-35e7-e291-83cc-3d4646088dcf.jpeg)

train -> goodフォルダ内の画像を全て選択した状態で「開く」ボタンを押し、一括でアップロードします。

![upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/05e0945c-d3fc-bedb-4ba6-6a64bc77532c.png)


(5)「Anomalous Training image」ボタンで、学習用の異常データをアップロードします。
train -> chocolateフォルダ内の全ての画像をアップロードします。

(6)(5)でアップロードした画像の右側の「Select」ボタンを押してから、画像中の異常な箇所を選択して「Save」ボタンを押します。

![select_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/2875f9ed-831c-a7b4-79d0-03e801429d61.jpeg)

![cell_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/631ceb61-2486-3a46-3f7f-b6ce2e216207.jpeg)


(7)「Normal Test image」ボタンで、評価用の正常データをアップロードします。
test -> goodフォルダ内の全ての画像をアップロードします。

(8)「Anomalous Test image」ボタンで、評価用の異常データをアップロードします。
test -> candyフォルダ内の全ての画像と、test -> chocolateフォルダ内の全ての画像をアップロードします。

## 異物検出AIの学習
「Create AI Model」ボタンを押して、学習が終わるまで待ちます。10分くらいです。


## 作成したAIのしきい値設定とテスト
(1)AIの学習が完了したら、「TEST」タブを開いて、評価データに対するテスト結果を確認します。  
精度が100%（1.000）であれば、このままでも問題ありませんが、そうでない場合は、精度が上がるように、しきい値を調整します。

(2)「AI MODEL SETTING」タブを開いて、グラフを確認します。  
グラフを見ながら、任意のしきい値を設定します。

![chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/25737931-ee03-e46a-e044-cc759e7c33ea.png)


（面倒なので）今回は「Set Auto Threshold」ボタンを押して、自動設定します。

![set1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/9921eaa0-bbdf-94b9-9326-53b8aa774b6a.png)


(3)再び「TEST」タブを開いて「Test」ボタンを押し、テスト結果を確認します。
もっと詳しく結果を確認したい場合は、「Download」ボタンを押すと、各評価データ単位での詳細な結果のCSVファイルをダウンロードできます。  

![test4_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/81d77776-3bfb-b7bb-d390-68f83cdafa6a.jpeg)


「Accuracy」が正解率、「Recall」が再現率を表しています。「Recall」が100％（1.000）であれば、（過検出はあっても）異物の見逃しがゼロのAIになります。


## API呼び出しプログラムの設置
作成したAIを自分のPCやシステムで利用する時は、「API」タブにサンプルコードがあるので、それをコピペするだけで、自分で作ったAIを自由に使えます！

![api.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/1d45b3a9-e21e-eb5a-7719-9425af14dfc4.png)



# 所感
30分足らずで、異物検出AIを作成できました！  
しきい値を厳しめに設定しておけば、異物の見逃しゼロを簡単に実現できますね。

# 関連記事
https://qiita.com/umapyoi/items/b5d3c823c0a9f30a5aa4

https://qiita.com/umapyoi/items/eba3842aeab19b62f3a6

https://qiita.com/umapyoi/items/ddd45a47aa79ccbde28b

https://qiita.com/umapyoi/items/aa7c829b4591653f1b50

https://qiita.com/umapyoi/items/ec64142dd3c70e90a9dc

https://qiita.com/umapyoi/items/5a0e21338c64fc7c44e2