03-3258-1238
03-3258-1238平日9:00 ~ 18:00(土日祝日除く)
外観検査の現場では、人手による目視検査が主観や作業者の疲労に左右されやすく、異常の見逃しや誤検出が課題となっています。こうした背景から、AIを活用した異常検出技術が注目を集めており、なかでも「正常画像のみで学習できる」PatchCoreは、高精度かつ導入のしやすさから有力な選択肢として期待されています。
しかし、実際の現場には限られたスペースや既存設備との干渉を避けなければならないといった物理的制約が存在し、こうした環境では大型の撮像装置や複雑な機器の導入が困難な場合も少なくありません。特に、微細な部品や複雑形状のワークを対象とする検査では、高画質を維持しつつ狭所に設置できる小型カメラの活用が不可欠です。
このような現場課題を背景に、当社ではOptikron社製の小型ながら高性能なカメラとPatchCoreを組み合わせた異常検出ソリューションをご紹介いたします。
PatchCoreは少量の正常画像のみを学習し、異常箇所を自動で検出・可視化する教師なし異常検出アルゴリズムです。 特徴: ・正常品画像のみで訓練可能 ・不良データ不要で学習負担が少ない ・高精度なヒートマップによる異常部位の可視化 ・軽量かつ高速な推論処理
Optikron社の小型カメラ(Smart M)は、狭い空間や部品が入り組んだ機器に内蔵できるサイズでありながら、HD画質の実現が可能です。USBインターフェースを持つすべてのOptikronのマイクロカメラは、UVCデバイスで特殊なドライバーは必要ありません。 今回は、このOptikron社の超小型カメラモジュールを使ってマドラーの異常検出を行いました。PatchCoreによる異常検出の精度は、入力画像の解像度・照明条件・安定性に大きく依存します。そのため、小型でありながら高画質・高解像度を実現できるOptikron社の超小型カメラは最適なハードウエアといえます。
小型カメラ:84-0000-01 環境:python : 3.11 実行環境 : CPU環境
学習
CNNによる特徴抽出; Locally aware patch features Patchcoreにおける学習では、正常画像のみを用います。今回は、下記のようにマドラーの表面をOptikron社の小型カメラモジュールで撮影し、“正常な状態の特徴”を学習します。PatchCoreでは、ImageNetと呼ばれるデータセットで学習済みのCNNモデルを用いて画像から特徴ベクトルを獲得しています。
コアセットの選択;Coreset-reduced patch-feature memory bank 学習ではその特徴を全部保存しておくには、テストデータを評価するために必要な推論時間が長くなったり、保存するためのメモリの容量が増大するといった問題が生じます。コアセット選択(Core-set selection)という方法で、必要な特徴だけをメモリバンクに残します。これは、なるべく“多様な正常パターン”を残すことで、異常と正常をうまく区別できるようにするためです。
推論
異常スコア計算;Anomaly Detection with PatchCore このメモリバンクを用いて、判別したい画像(テストデータ)の異常度を算出します。 新しく撮った画像の特徴ベクトルと、メモリバンク内のものとを最近傍距離(Nearest Neighbor Distance)で比較し、“どれだけ正常データから離れているか”を見て、スコア化します。また正常画像のバリエーションをしっかり含めておくこと、あと撮影条件が学習時と推論時で揃っていることが非常に重要です。ブレや照明ムラがあると、PatchCoreは“異常”と誤検出することがあります。
検証結果
下記の通り、不具合のあるマドラー(汚れが付着したもの・折れているもの)を用意し、ヒートマップによる異常部位の可視化を行いました。
実際に作成したコードは下記よりダウンロード可能です。
PatchCoreのコードを無料でご提供!画像データがあれば実際に体験していただくことが可能です。
無料PatchCoreを体験する
各ファイルの説明は下記になります。
・params.py 学習推論ファイルに対して使用するパラメーターがまとまっています。
・train.py まず、上記のコードファイルで学習をおこないます。これを実行すると、npy_data・weightsのディレクトリに学習データが保存されます。
・inference.py 次に上記のコードファイルで推論を行います。 指定したデータセットディレクトリ内の推論用画像に対して、推論を実行し結果を表示します。
・dataset.py データセットの処理を実装します。データセットが格納させれてるディレクトリ名を指定してあげることで、学習・推論用画像をそれぞれ224*224にリサイズして取得できます。 バックボーンを変更する際はそれに合わせてSIZEを変更する必要があります。
・anomaly_detector.py params.pyで設定した任意の閾値で画像を異常判定し結果を出力します。
・patchcore.py PatchCoreの実装コードになります。
小型ながら高性能なOptikron社のカメラとPatchCoreを組み合わせた異常検出ソリューションにより、マドラーの折れた箇所、汚れた箇所の異常を検知することができました。これを応用し、これまでには解決できなかった狭い箇所での検査、少ないサンプルでの学習に役立ていただければと思います。
USBケーブルの延長方法
ハイスピードカメラとは
v4l2でカメラパラメータを確認
USBカメラの「ゲイン」設定
カメラの必要な画角
KLV大学マシンビジョンコース