高精度な画像検査AIを作るポイント

2024/07/04

当社では、これまで多くの製造業のお客様と対話をしてまいりました。画像検査AIを導入するうえで最も重要視されているのが「AIの精度」です。今回は、当社のこれまでの多数の実績から、AIの精度向上のポイントについてご紹介します。

AIの精度の定義

一言に、「AIの精度」といっても、その指標は多岐にわたります。ただ、製造現場で重要となるのはいかに「不良品を見逃さないか?」になります。ですので、ここでは、精度=正解率と定義させていただきます。

精度向上のポイント

AIの精度を上げるには主として、データの「質」と「量」が重要になります。AIの学習には、膨大なデータが必要とよく言われます。それも確かではありますが、一方でデータそのものの「質」が悪いと高い精度のAIを作るのは難しいのが現状です。また、やや専門的な話になりますが、モデルの選定やパラメータ等の調整も関係します。
以下では、精度向上にかかわるあらゆるポイントについて解説していきます。

① 良質な画像準備

良質な画像とは、不良箇所が大きく鮮明に写っている画像です。ぶれないように、定点から、できるだけ検査対象に近づけて撮影しましょう。細い線傷など、見えづらい不良を検査する際は、照明の活用も検討しましょう。下記のOK、NGパターンを参考にしてみてください。

② 十分な画像枚数の確保

上述のとおり、AIの学習データは、一般的により多い方が望ましいです。検査員の方と同程度の精度を求める際、目安として、不良パターンごとに100枚程度用意できるのが理想です。もし、画像収集に苦戦する際は、上下左右回転や画像生成AIによる画像かさましを検討しましょう。

参考:画像生成AIを用いた不良品画像の作成

③ 正確なアノテーション

画像データに正確なラベルを付けることは、モデルの学習にとって非常に重要です。ラベルの付け方に正解はありませんが、モデルごとに統一することが大切です。例えば、下記の黒点のラベルの付け方も、人によって差が出ることがあります。どちらが良いかは求めるアウトプットによって異なりますが、少なくともAパターン、Bパターンどちらか一方に統一することが望ましいです。また、不良なのか許容範囲なのか素人では判断が難しいケースも少なくありません。アノテーションの定義が曖昧であったり、ミスがあったりすると、AIの精度に少なからず影響を与えてしまいます。アノテーション業務は可能な限り現場に精通した専門家が担うのが理想です。

④ 適切なモデルの選択と微調整

物体検出を例にとるとYOLO、Faster R-CNN、EfficientDet、RetinaNet、DETRなど様々なアーキテクチャがあります。これらのアーキテクチャは様々なベンチマークで優れた性能を示しています。

  • YOLO

    YOLOは非常に高速な物体検出アルゴリズムの一つです。従来のCNN(畳み込みニューラルネットワーク)による物体検出アルゴリズムでは、画像に写っている物体の種類と位置を順番に予測する必要がありました。YOLOでは画像中の物体の内容と位置を同時に予測することで、高速に検出が可能です。現在までに、改良を重ねた様々なYOLOシリーズが提案されています。

  • Faster R-CNN

    Faster R-CNNは2015年にMicrosoftが発表したアルゴリズムです。RPN (Region Proposal Network) と呼ばれるネットワークを用いて、物体の候補領域を効率的に計算することで、高速に物体検出を行うことができます。

  • EfficientDet

    EfficientDetは、高精度な画像識別ネットワークとして知られる、EfficientNetを基にした物体検出アーキテクチャです。また、複合スケーリングという手法を用いてモデルを最適化し、少ない計算量で高精度な判定が可能となりました。

  • RetinaNet
    RetinaNetは、2017年に発表されたアルゴリズムです。従来の物体検出アルゴリズムでは、データ数の多い簡単な物体ほど学習時の影響が強くなるという課題がありました。これに対して、RetinaNetはFocal Lossと呼ばれる損失関数を導入することで、データが少なく複雑な対象に焦点を当てた学習を可能としています。これにより、小さな物体や難易度の高い物体の検出精度が向上しました。

  • DETR (DEtection TRansformer)
    DETRは、トランスフォーマーモデルを物体検出に応用したアーキテクチャです。DETRでは、物体検出だけでなく、セグメンテーションが一つの統合されたフレームワーク内で同時に行われます。これにより、複雑なシーンや多様な物体の検出に対しても優れた性能を発揮します。

転移学習を利用して、ImageNetなどの大規模データセットで事前学習されたモデルを微調整します。これにより、限られたデータでも高性能を達成できます。

⑤ ハイパーパラメータの調整

学習率、バッチサイズ、エポック数などのハイパーパラメータを調整します。グリッドサーチ、ランダムサーチ、ベイズ最適化などの手法を使用して、最適な設定を見つけます。

  • グリッドサーチ

    機械学習モデルの最適なハイパーパラメータを探索する手法です。探索するパラメータの候補値を予め決めておき、それらの組み合わせを全て試すことで最適な組み合わせを見つけます。例えば、決定木の深さや学習率のようなパラメータを決める際に使用されます。全ての組み合わせを試すため、計算量が増えることが欠点ですが、探索空間が狭い場合には有効な手法です。

  • ランダムサーチ

    機械学習モデルの最適なハイパーパラメータを探索する手法で、グリッドサーチの代替手法です。探索するパラメータの候補値をランダムに選んで試行し、最適な組み合わせを見つけます。この手法はグリッドサーチよりも効率的で、探索空間が広い場合に有効です。一方で、探索の結果が最適解に近づける確率は低い傾向にあります。ランダムサーチは、モデルのパフォーマンスを改善するためのハイパーパラメータチューニングにおいて広く使用されています。

  • ベイズ最適化

    目的関数の評価を最小限に抑えながら、効率的にハイパーパラメータの最適化を行う手法です。これは確率モデルを使用して、過去の評価結果を基に次に試すべきハイパーパラメータの値を推定します。ベイズ最適化は探索空間を効率的に探索し、特に計算コストが高いハイパーパラメータチューニング問題において有用です。

⑥ 正則化技術の使用

ドロップアウト、L2正則化、バッチ正規化などの手法を用いて、過学習を防止し、モデルの堅牢性を向上させます。

  • ドロップアウト

    深層学習における正則化手法の一つであり、訓練中にランダムにユニット(ニューロン)を無効化することで過学習を防ぐ方法です。これにより、モデルは特定のニューロンに依存せず、より汎化された特徴を学習します。典型的には、ドロップアウトは各学習ステップで一定の確率でニューロンを無効化し、その確率はハイパーパラメータとして設定されます。

  • L2正則化

    機械学習で過学習を抑制するための手法の一つです。コスト関数にネットワークの全パラメータのL2ノルム(各パラメータの二乗和)を加算し、その重みで正則化します。これにより、大きな重みが抑制され、モデルの複雑さが制限されます。L2正則化は過学習を防ぐだけでなく、汎化性能を向上させる効果がありますが、正則化の強さを調整するハイパーパラメータ(正則化係数)の設定が重要です。

  • バッチ正則化

    深層ニューラルネットワークにおける学習安定化手法の一つです。各バッチごとに入力の平均と分散を計算し、その結果を使って入力データを標準化します。これにより、学習プロセスが安定し、収束が速くなる場合があります。また、ミニバッチごとに正規化が行われるため、学習がデータの分布に依存しなくなり、過学習を抑制する効果もあります。バッチ正則化は通常、全結合層や畳み込み層の後に適用され、ニューラルネットワークの性能と収束速度を向上させます。

⑦ アンサンブル法の使用

バギング、ブースティング、スタッキングなどのアンサンブル法を用いて、複数のモデルの予測を組み合わせます。これにより、各モデルの強みを生かし、全体の精度を向上させます。

  • バギング

    統計学や機械学習で使用されるアンサンブル学習の手法の一つです。訓練データからランダムに重複を許してサブセット(ブートストラップサンプル)を作成し、それぞれのサブセットでモデルを学習させます。最終的な予測は、各モデルの予測の平均や多数決で行います。バギングは過学習を減少させ、モデルの安定性と汎化能力を向上させる効果があります。代表的な手法にはランダムフォレストがあり、この手法では決定木をバギングによって組み合わせることで強力な予測モデルを構築します。

  • ブースティング

    弱学習器(たとえば決定木)を組み合わせて強力な予測モデルを構築するアンサンブル学習手法です。訓練データに対して順次学習を行い、前の学習器が誤って分類したデータに重みを付けて次の学習器を訓練します。各学習器は残差を予測するように学習し、最終的な予測は各学習器の加重平均で行います。代表的なアルゴリズムには、AdaBoostやGradient Boostingがあります。ブースティングは高い予測精度を提供し、特に非線形問題や高次元データで強力な性能を発揮します。

  • スタッキング

    複数の異なる予測モデル(ベースモデル)の予測結果を入力として、さらに別のモデル(メタモデル)で最終的な予測を行うアンサンブル学習手法です。通常、訓練データを複数の部分集合に分割し、各部分集合で異なるベースモデルを訓練します。そして、これらのベースモデルの予測を新しい特徴として用いて、メタモデルを訓練します。スタッキングにより、個々のモデルの弱点を補い、より高い予測性能を実現できる場合があります。

⑧ 高度なトレーニング技術

学習率スケジューリング、勾配クリッピング、混合精度トレーニングなどの手法を使用して、トレーニングの安定性と効率を向上させます。

  • 学習率スケジューリング

    深層学習において学習率を訓練の進行に応じて動的に変化させる手法です。初期の高い学習率で訓練を始め、訓練の進行に伴い学習率を減少させることで、最適解に収束しやすくします。一般的な手法には、ステップごとに学習率を減衰させるステップ減衰、損失関数の変化に応じて学習率を調整する余弦減衰などがあります。適切な学習率スケジューリングは、収束速度や最終的な性能に大きな影響を与えるため、調整が重要です。

  • 勾配クリッピング

    深層学習において勾配爆発を防ぐための手法です。勾配があらかじめ指定した閾値を超える場合、それを閾値内に収めます。これにより、数値的な不安定性を軽減し、訓練中のモデルの安定性と収束性を向上させます。一般的には、勾配ベクトル全体または各パラメータごとにクリッピングが行われます。

  • 混合精度トレーニング

    計算効率を向上させるために浮動小数点演算を16ビット精度(半精度)で行う手法です。これにより、GPUメモリ使用量を削減し、計算速度を高めます。通常、モデルの一部は16ビットで計算し、勾配累積時に32ビット精度に変換します。これにより、大規模で複雑なモデルの訓練が可能となりますが、数値の安定性には注意が必要です。

異なる損失関数や最適化手法を試して、特定のタスクに最適な組み合わせを見つけます。

⑨ 評価と改善の継続

クロスバリデーションを用いてモデルを徹底的に評価します。これにより、未知のデータに対するモデルの一般化能力を理解します。

新しいデータでモデルを定期的に更新し、最新の情報に基づいた再学習を行います。

⑩ 最新の研究とツールの活用

最新の研究論文や業界の進展に常に目を光らせ、新しい手法やアルゴリズムを取り入れます。最新のデータセットやベンチマークを活用してモデル性能を向上させます。

最先端のモデルやトレーニング技術を効率的に実装するためのフレームワークやライブラリを活用します。

⑪ 本番環境での監視と適応

モデルをデプロイした後、実際の環境での性能を継続的に監視します。フィードバックループを利用して問題を特定・修正し、新しいデータや変化する条件に基づいてモデルを更新します。

実例

上記のポイントの中でも、とりわけ重要となるデータの「質」と「量」について、実際に当社でギアの欠陥検出AIをいくつか作成し、対照実験をしてみました。

実験内容

撮影環境

ギアを治具で固定し、真上に照明、斜めにカメラを設置します。

撮影対象

検査対象には、外径約φ40mmのベベルギア2個を使用します。

https://jp.misumi-ec.com/vona2/detail/221000021794/?ProductCode=B1SU40*8

撮影方法

傷のついた歯と正常な歯をそれぞれ、傷が明確に見える照明条件と、傷の見え方が曖昧な暗めの照明条件とで撮影します。

傷のある歯をアノテーションして学習します。傷のない画像も学習データに含めます。

学習枚数内訳

・学習データ多い 400枚(傷画像200枚, 正常画像200枚)

・学習データ少ない 200枚(傷画像100枚, 正常画像100枚)

結果

あくまで一例にはなりますが、予想通り、データの質が良く、量が多いモデルの精度が一番高いという結果になりました。

▼学習データのうち、15%をテストデータとして判定した場合のmAP (mean Average Precision)

傷明確

傷曖昧

学習データ多い

84.22

78.40

学習データ少ない

73.57

43.33

まとめ

今回は精度の高い画像検査AIを作成するポイントについてご紹介しました。高精度なAIモデルを作るには、データが鍵となります。データを収集する初期の段階からその質に気を配りつつ、できるだけたくさんのデータを学習させましょう。そして、定期的にモデルの再学習を行い、常に高精度なAIを運用できるような状態を目指しましょう。

非エンジニアでも簡単

画像認識AIの
開発・実装・運用を
実現できる
ノーコードAI
プラットフォーム