ディープ・ラーニングを使った画像データの異常検知・キズ検知
この画像にはキズがあるのですがわかりますか?
右の画像はキズの色を白くしたものです。
AI はこのキズを検知できるでしょうか?
AI を応用したサンプルプログラムを作ってみました。
画像からの異常検知に対する AI 活用の期待
- 様々な分野で、撮影した画像内のキズや淀み、ムラを検出することで異常を検知しています。
- 医療でのレントゲン撮影、エコー撮影から異常の有無と位置を 検知
- 製品外観検査におけるキズや色むらの検知
- 建造物の経年劣化に伴うひび割れの検知
- ・・・・
- 撮影機器の技術進歩により、小型化、高解像度化、撮影範囲の拡大、撮影時間の短時間化が図られ、担当現場からより精度の高い問題検出と効率化・高速化が求められています。
- そこで注目されているのが AI・DL(Deep Learning)を使った異常検知システムです。
「AI を使ってどのような異常(サイズ、形状、画像の色素グレード)を検出できるのか?分からない」という声を聴きます。
- 技術現場から離れておられる経営者・管理者の方々向けに、AI によってどのような異常が検出できるのかということを俯瞰的にご理解いただくため、AI 技術そのものには深入りしないサンプルモデルとデータを作りました。
AI モデル概要
サンプル画像データ
- 画像
- 対象画像のサイズは、512 × 512 ドット
- グレースケール画像。画像基準値 : 中間値 : 0.5 (0 : 黒 ~ 1.0 : 白)
- 画像単位の作成の考え方
- 同じ環境で撮影しても1枚1枚微妙に違いがあります。
- この違いを標準偏差 σ =0.01 (1%) に従う正規分布で、画像毎に基準値を決めています。
- 具体的には、各画像の基準値が 0.49 ~ 0.51 にある割合が約 67 %、0.48 ~ 0.52 の範囲にある割合が 95 %です
- 画像内のドット作成の考え方
- 1画像内の各ドットも細かくは画素値が異なっています。
- 車の外装や半導体ウェーハーの表面のような場合は、画像内のドットの画素値のばらつきは小さいでしょう。逆にコンクリート表面のキズ検索では画像内のドットの画素値は、ザラザラのためバラツキは大きいでしょう
- 上記画像単位の基準値に対して、標準偏差 σ = 0.005 (0.5%) としています。各画像はかなり均質な色合いとしています。
サンプル画像データの例
AI モデルの概要 - CNN/VAE 手法
- CNN (Convolutional Neural Network)は、画像データを対象とするニューラル・ネットワークで、「畳み込み」という処理で画像の特徴を抽出します。この畳み込み処理を多段(Deep)にすることによってより詳細な画像の特徴を抽出していきます。
- CNN を前提としながら、VAE という手法を使って、高次元の画像データを、その近傍性を維持しながら 2次元に圧縮します。
- VAE で 2次元に圧縮されたデータの分布に対して多次元確率を求め、この確率を異常画像の判定に使います。
AI モデルとデータ
CNN/VAE が学習する画像は 512 × 512 ドット画像ではなく、64 ×64 ドット画像です。このことにより、学習時間の短縮を図っています。
このモデルに、512 × 512 ドット画像に適用する場合、その画像を縦・横 64 ドットに分割し(縦・横 8 個ずつ)、64 個に分割した各画像を CNN/VAE で 2次元化し、異常判定を行います。
このことにより、画像の中の異常有無の判定だけでなく、64 ドット区画単位で異常の位置を知ることができます。
学習データの内容は、前ページの画像生成の考え方に基づいて作成しますので、正常データです。したがって、CNN/VAE で 2次元化された正常データの分布から、正常データの発生確率を求め、それよりも小さな発生確率のデータを異常と判断します。
今回の学習データ数は 5,000 枚(64 x 64ドット)です。
学習データの 2次元分布
正常データですが、画像ごとの違い、画像内の各ドットをランダムに作っているため、下図のような分布になっています。
正常・異常判定の考え方 – 新たな正常画像の場合
正常・異常判定の考え方 – 画像にムラをつけた場合
テスト・評価
テストデータの作成
- 512 × 512 ドットの正常画像を生成し、正方形形状・線状形状に対してグレー度合いを組み合わせたものをキズ・異常個所としてランダムに位置を決めて付加する。
- グレー度 : (-0.2, -0.15, -0.1, 0.1, 0.15, 0.2) 画像の基準値に対してこの割合のグレー度を与える。6 パターン
- 形状
- 正方形 : ((5, 5), (7, 7), (10, 10), (15, 15), (20, 20)) 5 パターン
- 線形状 : ((2, 40), (2, 50), (2, 70), (2, 100), (3, 30), (3, 50), (3, 70), (4, 40), (4, 50), (4,60)) # 10 パターン
(2, 40)は、縦 : 2 ドット、横 : 40ドットを表す。上記横線状系に対し、縦線状系を入れ、全 20 パターン
- 異常画像数 : 150 (グレー度 : 5 x 25 (正方形 + 線状))
- 加えて正常画像を 850 生成
- 合計 : テスト用画像 1,000(異常 : 150、正常 : 850)
テスト用異常画像のサンプル
150 の異常画像(512 x 512 ドット)のうち 12枚をサンプル画像としてプロットしました。
目視で分かるものもありますが、位置を示されても分からないようなキズが多いですね。
精度評価の方法と評価指標
「正常か?」、「異常か?」という 2 つのケースに分類する問題を「 2値分類問題」と呼んでいます。
AI モデルのテスト評価では、まず、次のようなマトリックスに結果を埋めます。このマトリックスを「混同行列」と言います。
そして、混同行列の値からいくつかの精度指標で評価します
正解率(accuracy):全データのうち異常を異常と予測したデータ数と正常を正常と予測したデータ数の割合 $\frac{a_n+n_n}{全データ}$
再現率(recall) :実際に異常のデータのうち異常と予測したデータの割合 $\frac{a_a}{a_a+a_n}$
適合率(precision) :異常と予測したデータのうち実際に異常のデータの割合 $\frac{a_a}{a_a+n_a}$
F-値(F-value) :再現率と適合率の調和平均再現率を高めるため a_a を多めに予測すると適合率も上がる。こういったことを打ち消す狙いがある $\frac{2\times precision \times racall}{precision + reacll}$
AI モデルによる判定結果
データ : 最初の 150枚は異常画像、以降 850 枚は正常画像。計 : 1,000 枚
サンプルプログラムの出力
Process time : 0:00:37.161954 Average process time : 0:00:00.03716 1 画像当たり 37mSec
n_n : 847 n_a : 3 a_n : 3 a_a : 147
accuracy : 0.994 recall : 0.98 precision : 0.98 f_value : 0.98
異常を正常と誤判定した画像
画像番号、(キズの形状、グレー度合い)
19 ((30, 3), -0.2)
41 ((50, 2), -0.15)
71 ((70, 3), -0.1)
正常を異常と誤判定した画像
245
702 800
異常を検知できなかった画像
異常を正常と誤判定した画像 : 19 ((30, 3), -0.2), 41 ((50, 2), -0.15), 71 ((70, 3), -0.1)
キズのサイズが 2 ドット、3 ドットと小さなものを検知できていない。サイズとグレー度の組合せも関係しているか。
しかし、全部で 150 枚の異常画像のほとんどの異常が検知できているので、同様サイズのもののほとんどは検知できている。
異常を異常として検知できた画像 – サンプル : 10枚
異常を検知した 64 ドット区画を囲っています。
最後に
- 様々な分野で画像から異常を検出することが行われています。
- 医療でのレントゲン撮影、エコー撮影など
- 車の塗装や半導体ウェハーの洗浄などの外観検査
- 建造物の老朽化に伴うひび割れの検出
- 撮影装置の技術の向上により、小型軽量化、高解像度化、撮影範囲の広範囲化、撮影時間の短時間化・動画化が進み、より短時間に精度の高い異常検知技術が求められています。
- このブログ、サンプルプログラム・データは特定の分野の課題への対応として作成したものではありません。
- AI といった特定の技術分野に詳しくない経営者・管理者の方々に、AI で具体的にどのように実現するのかを理解いただき、自社の問題について AI の適用検討の端緒となることを期待して作成したものです。「具体的に検討してみようか・・」ということであれば、個別の要件をお聞きし、実証検討(PoC)手順・ゴールの設定などをご提案いたします。