LoginSignup
11
19

More than 3 years have passed since last update.

Metric Learningを用いた不均衡画像の異常検知

Last updated at Posted at 2019-09-14

はじめに

目視検査の自動化は多くの企業で取り組まれているのではないかと思います。しかし、不良率が低い場合が多く、不良品画像が思うように集まらないのが実情ではないでしょうか(良品画像と不良品画像の数が不均衡なので、ここでは不均衡画像と呼びます)。このような場合、従来技術では上手く学習させることが困難でしたが、今回Metric Learningを活用して上手く学習することが出来たので、紹介させて頂きます。

Metric Learningとは

下記記事が大変参考になります。

モダンな深層距離学習 (deep metric learning) 手法: SphereFace, CosFace, ArcFace
https://qiita.com/yu4u/items/078054dfb5592cbb80cc

コード

githubに上げました。(コード汚いです、スイマセン)
https://github.com/chocolat-nya/Imbalanced_Image_Anomaly_Detection

精度

実データにつき詳細は伏せさせて頂き、結果だけ載せます。

ケース①

OK画像:2932個(train:test=2345:587)
NG画像:9個(train:test=7:2)

image.png

     予測
   OK NG
正解 OK 587 0
   NG 0 2

上図のように、アウトプットは異常度で出てきます。右から2つがNG画像、その他がOK画像です。
しきい値の引き方に決まりはありませんが、今回はOKテスト画像の異常度の平均+6σとしました。
パーフェクトです。
ヒートマップも出ますが、ここでは割愛します。

ケース②

限界を知るため、NG画像を2枚にしてトライしてみました。
OK画像:2932個(train:test=2345:587)
NG画像:2個(train:test=1:1)
image.png

     予測
   OK NG
正解 OK 587 0
   NG 0 1

一番右がNG画像、その他がOK画像です。しきい値は同じく平均+6σです。
予想に反して分離出来てしまいました。ただ、異常度の開きは小さくなっています。
n増ししたらヤバそうです。やっぱりそこそこのNG数は必要でしょう。

まとめ

Metric Learningを使ったら不均衡画像の異常検知が出来てしまいました。
これはちょっとしたブレークスルーではないでしょうか?

Special Thanks

下記のサイトを参考にさせて頂きました。

DeepAnomalyDetection_benchmark
https://github.com/shinmura0/DeepAnomalyDetection_benchmark

CNNの学習結果を可視化する
https://qiita.com/tom_eng_ltd/items/8d60108b03afe38dff27
⇒Grad-CAM、Grad-CAM++よりも安定してヒートマップが出せます。

EfficientNetを最速で試す方法
https://qiita.com/wakame1367/items/d90fa56bd9d11c4db50e

kerasでScore-CAM実装.Grad-CAMとの比較
https://qiita.com/futakuchi0117/items/95c518254185ec5ea485

言い訳

初めてQiitaに記事を書いたので、非常に見にくいと思います。ゴメンナサイ。

追記

20200511 EfficientNetとScoreCAMを導入しました。

11
19
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19