アダコテック技術ブログ

株式会社アダコテックの技術ブログです。

HLACを試してみた:メッシュシートの外観検査!

メッシュシートの画像

世界一やさしいHLAC入門(間違い探し編)では、HLAC(Higher-order Local AutoCollelation ; 高次局所自己相関)の技術をご紹介しました。下記3つのポイントご理解いただけたのではないでしょうか。

  • 自己相関とは自身の中の一部の要素(データの関係性)を数値化する事
  • あらゆる要素の集まりは『認識』に対する優れた特性を持つ
  • HLACは画像内のさまざまな要素をカウントすることで特徴量へ変換する

まだの方は世界一やさしいHLAC入門(間違い探し編)で分かりやすくご紹介していますので是非ご参照ください。 techblog.adacotech.co.jp

さて、今回はアダコテックで提供している HLAC技術を活用した良品学習での異常検知モデル作成サービス AdaInspector Cloud を用い身近な工業製品 メッシュシート を例に外観検査への適用についてご説明したいと思います。

メッシュシート?

メッシュといえば何を思い浮かべますか?
メッシュとは網目構造のことを指し、電車の網棚、スポーツウェアの裏地、飛散防止の網入りガラス、ハンモック、防虫網、ガーゼ、ザル、粉ふるいなど日常的に見かけるものと思います。

今回はDIYショップなどで市販されている はさみで切れるステンレス製メッシュシート(30メッシュ) を用意しました。
メッシュは単位としても用いられ、(1メッシュ)=(1インチ;25.4 mm 当たりの網目の数)でその目の粗密を表しています。つまり 30メッシュは 0.98 mm 角の細かい格子が規則的に並んでいる構造 です。

データセットの内容

画像サイズは 2448 x 2048 ピクセル。メッシュシートを台上にできるだけ平坦に置き真上から撮像しました。
ミリ単位での厳密な位置合わせは実際の検査シーンでは困難であることが多いため、手動で大体シートを縦横まっすぐにおいた程度で設置のばらつきを再現しました。

例:メッシュシートのNG画像(左)とOK画像(右)

  • 学習用画像 OK画像:100枚
  • バリデーション用画像 OK画像:10枚、NG画像:5枚
  • テスト用画像 OK画像:202枚、NG画像:109枚

※ 今回用いた AdaInspector Cloud は良品学習でのモデル作成サービスのため良品画像が100枚あれば学習モデルの作成には十分です。これに加えてバリデーション(モデルの最適化やしきい値の確認)のために一定数のOK,NG画像のご用意が必要となります。
※ OK/NGは人の目で見てラベル付けしました。

画像検査(ルールベース)でメッシュシートの外観検査は難しい

このメッシュシートですが規則的な構造であるためAIでなくてもルールベースの画像解析ソフトウェア、ブロブ解析などによって対応できるのではと思われる方もいらっしゃるかもしれません。しかし最終的に明暗で二値化しピクセル単位のカウントに落としこんでルールをもとに良否判定するという機構においてどんなルールにするべきかを検討していただくと、その制約の多さ、難易度の高さに気づかれるかと思います。

今回の欠陥検出の方策をルールベースのソフトウェアで立てるとすると、レシピ作成には下記のような課題が生じます。

① 画像全域を使用した一意のレシピ設定ができない

まず最初の問題は画像全域で一つのレシピでの対応が困難であることです。これは実際の撮像における周辺光量の変化やレンズディストーションによるものです。レンズディストーションとはレンズを通すことによる歪みのことで今回のような細かいテクスチャではその影響が顕著です。

レンズディストーションの影響(画像の左上角部と中心部の拡大画像)

実物は撮影範囲全域で均等な網目であっても、画像上は上図のように網目が周辺部で中心部に比較して小さい、もしくは、歪んで写ってしまいます。解析の際、同一ロジックで対応できず中心部・四隅・周辺部などで細かく切り分けて設定する必要があります。

② 欠陥による変化が小さくて測れない

次に単純な構造なので変化を認識して寸法検査すればよいのでは?を検討してみましょう。

欠陥による変化が小さくて測れない

左図のように網目がもっと粗い場合は画像の縦線横線からベースラインを補完した直線をきれいに引くことができ、欠陥による屈曲との違いは明らかです。エッジ抽出→寸法検査などによりどの程度曲がっているかを測ることが可能です。
しかし右図のように網目が細かい場合は (欠陥による変化)<(格子状のベースライン自体の持つ歪み)になりロジックの設定が極めて困難となります。ぱっと見た感じは直線に見えてもレンズディストーションの影響で縦横のラインは湾曲しているうえに、歪んでいないはずの部分も網目ごとによく見ると傾きが違っていて欠陥による歪みなのか、もともと正常でもっているばらつきなのか分からないということが問題を難しくしています。

③ 画像全域で黒ブロブが一体になっている問題

ブロブ解析することを考えます。大きめの穴あき欠陥だけであれば、背景の白ブロブに着目し面積から判定することできそうです。しかし、網目の歪みや撚れの欠陥領域を捉えたい場合には正常な部分でも大きさにばらつきがあるので単純に白ブロブの大きさの下限を決めて判定するというのは困難です。

ここで黒ブロブに着目したいところですが二値化した際に画像全域で黒ブロブが一体となって存在しているため元画像のままで黒ブロブの解析ができないことに気づきます。

画像全域で黒ブロブが一体になって存在

一般的なぼかし/コントラスト強調/エッジ抽出などのフィルタでは対応が難しそうなので、手段として画像フィルタを利用して変化点をとらえることで対応するという手法があるのですがこれもまた別の問題が生じます。

④ 画像フィルタで変化点抽出による解析も難しい

NG画像の中で網目の歪みが生じている欠陥を有する画像に対して変化点を抽出した例を示します。

変化点の抽出

抽出結果(右図)をブロブ解析するようなロジックで適切なしきい値が決められれば、歪みを判定できる見込みが出てきます。
ただし試行錯誤により何とかある程度ブロブ解析で対応できるようになった場合、今回のようなコントラストがはっきりとした大量の繰り返しパターンに変化点を抽出するフィルタを用いたロジックを適用すると変化点も大量に発生しやすくなり今度は処理時間が大量にかかる問題を引き起こします。

上記のような問題がありルールベースのソフトウェアをメッシュシートの外観検査に適用するのは難しいことがお分かりいただけたのではないでしょうか。

そこでHLACの出番です!

HLACは局所的に同じ形状特徴をもつものを同じと認識し、間違い探しに用いることができるというご紹介をしました。こういう繰り返しパターンで形は近似しているがばらつきがあり、その中で特異な形状特徴をしめす部分を異常として検知する外観検査に適用してみたいと思います。

AdaInspector Cloudの設定;学習画像とバリデーション画像

AdaInspector Cloudはアダコテックが提供するHLAC特徴量を用いた異常検知AIのモデルを作成することができるサービスです。 主に画像による外観検査に用いられます。
ログイン(ユーザーアカウントが必要です)しデータセットのフォルダーを作成。データセットの画像を各フォルダにアップロードします。

メニューとフォルダ

今回は全域を対象とするで領域指定は何も登録しませんでした。 バリデーションのNG画像は下図のように5画像6か所の穴あき部分とその周辺部の網目の乱れをNGとしてアノテーションしました。

バリデーションNG画像とアノテーション領域

データセットのアップロードが終わったらメニュに戻り、モデル作成に移ります。今回は自動学習を選択し設定したデータセットを読みこんで学習を実施しました。

自動学習ではモデルの作成だけでなく最適な前処理フィルターの選定や、HLAC特徴量を抽出する際のパッチサイズ、相関幅、そのパッチをどの程度のずらして特徴量を抽出するのかというシフト幅などのパラメータの組み合わせ探索が実施されます。HLACは高次”局所”自己相関でありこれを適用するには適切な”局所”を定義することが必要ですが、自動最適化で知識がなくてもモデルの構築が可能となります。

学習最適化フロー

今回は全体が同じような大きさのパターンであるためパッチ共通学習を使用しています。結果として選ばれた条件、学習データのヒストグラムは下のようになりました。

選択された条件と学習データのヒストグラム

テスト実行と検査の結果

テスト用の画像に対して今回作成したモデルによるOK/NG判定を行いました。結果を示します。

テスト結果とヒストグラム表示-テストデータ

画像とヒートマップ表示の例

テスト画像の元画像と、異常値の大小でヒートマップ表示した画像を示します。
OK画像でも部分的に水色になっているところがあることが分かります。しきい値は超えない範囲の異常値で正常のばらつきによるものです。NG画像については明らかに穴の開いている部分や網目の歪んでいる部分に反応して高い異常値となり黄、赤色を示しています。

しきい値付近の画像とヒートマップ表示

NG画像の誤判定(検出漏れ)が2件ありました。元の画像、ヒートマップを上左図に示します。確認したところOK画像と差のかなり小さいものでした。OK画像の中で異常値の高いものに着目して右側に並べてみると判別は難しかったのではないかと推察されます。もしこの検出漏れをNG判定させるようにしきい値設定を変えると異常値の比較的高いOK画像がNGとして誤判定される過検出が大量発生してしまうため、ここにとどめています。
今回バリデーションNGとして穴空き部分を検出したい異常と定義していること、学習用のOK画像を選定する際に本当にこの程度の歪みすらない画像を選べていたかという点が見直すポイントとして挙げられます。

OK画像の誤判定(過検出)は0件でした。ルールベースの画像処理はどんなに厳密に設定しても(アダコテックの画処理のプロが数時間かけてレシピ設定したとしても)検出漏れが4%程度、過検出10%未満に抑えるところが限界だったことを考えると、AdaInspector CloudでOK画像を学習させることで正常ばらつきを加味して判定できるようにした機械学習は過検出を少なくするのに役立つことが分かります。

実際の検査シーンへの適用においてはこの作成したモデルをDLし検査用のPCで適用します。処理速度の評価のためGPU非搭載の手元のノートPC(CPU: Core i7)にモデル実行用のアプリを用意して確認しました。処理時間はほぼ一定で約 300 msec / image でした。ルールベースでは処理時間がロジックに依存し、差分フィルターをかけた細かいブロブを画像全体でカウントするロジックを入れた場合などに生じる判定までの時間が画像ごとで変化し特に跳ね上がる場合があるというのとは対照的です。

モデル調整の可能性

これで「学習に用いるOK画像を選別しなおしNG画像の誤判定をなくすために頑張ろう!」とデータセット自体を見直すか、「この検出漏れのNGはラベルをOKにしてもいい程度の歪みで、撮りたかった穴あき欠陥はとれているのでよしとしよう」とテスト画像のラベルを付け替え今回のモデルを採用しN増し検証していくという流れになるかというのが一般的でしょうか。

AdaInspector Cloud には 第 三 の 選 択 があります。

前処理プリセットの設定

上に示すのは自動学習の実行画面です。同じデータセットのまま自動学習の設定を変える;完全におまかせ!ではなく画像や見つけたい欠陥に合わせて自動学習時に優先するパラメーターを選択 という方法が可能となっています。これにより検出したい欠陥が強調できるような前処理を優先的に選択するようにした自動学習で味付の異なるモデルの作成ができます。

OK画像の中に含まれる微小な異物の存在
今回作成したモデルで判定(左)とエッジ強調設定のモデルで判定(右)の違い

例えばエッジ強調を優先すると、上図のようにOK画像の中の微小な異物をとらえられるようになったりします。この可能性についてはまた別の機会にご説明できればと思います。

まとめ

HLAC特徴量を用いた異常検知AIの外観検査への適用についてメッシュシートを例にご説明しました。

  • 今回のデータセットではOK画像を学習用とバリデーション用で合わせて110枚、少量のバリデーション用NG画像(5枚/6か所)を用意するだけでOK画像の中の過検出なく107枚のNG画像のどの位置にどのように出るかわからない未知の欠陥を検出しNG判別することができました。
  • OK画像100枚で良品学習させ、レンズディストーションや撮像時の位置のずれ、照明など良品でも実際の撮像時に起こりうるバラツキを織り込むことでロバスト性の高い検査ができることが分かります。
  • ただしOK画像の中にNG画像が混ざっていると判定に悪い影響を与えるため学習用OK画像の選別は慎重に実施する必要があります。この過程でもともとの基準が人の感覚で判断している定量しえない結果を正解とする場合、どうしても人と判断が異なる画像が出てきてしまう可能性があることはご承知おきいただければと思います。
  • 適切なフィルタ選定やパラメーター最適化という計算は処理が膨大になることが予想されますが HLAC特徴量として画像を扱うことで実用的な範囲の計算リソースで適用できるというところもポイントです。

AdaInspector Cloud の詳細は下記にてご案内しています。ご興味ございましたらぜひご参照ください。
adacotech.co.jp

世界一やさしいHLAC入門(間違い探し編)では今回用いた技術HLACを解説しています。
techblog.adacotech.co.jp