ディープラーニングによる光学検査の自動化
第 2 章
データの準備
使用するデータは多岐にわたります。複数のソース (センサー、データベース、オーディオファイルなど) から、形式や領域、時間間隔の異なるさまざまなデータを取得します。そして、それらは通常ノイズを含んでいます。
このようなデータすべてを効率よく準備することが重要です。AI システムで使用するには、データのフィルタリング、クリーニング、ラベル付けを行う必要があります。
簡単そうに聞こえますが、実際には難しく手間のかかる作業です。たとえば、次のような課題があります。
- データセットが大きすぎてメモリに読み込めない場合はどうするか。
- ネットワークで出力される結果の精度を高めるには、データをどのように前処理すればいいか。
- すべてのデータに最短でラベル付けするにはどうすればいいか。
- ネットワークを学習させるのに十分なデータがない場合はどうすればいいか。
では、MATLAB を使用して上記の課題に対処する方法について見ていきましょう。
大規模なデータセットには、利用可能なメモリに収まらないファイルや、処理に時間がかかるファイルなどがあります。また、多数の小さなファイルの集合であることもあります。
MATLAB には、大規模なデータセットを処理するためのツールが用意されています。以下はその例です。
データストア - データストアは、すべてのデータをメモリに読み込むのではなく、必要なときにだけデータを読み込みます。データストアは、データへのポインターとして機能します。
tall 配列 - tall 配列では、メモリに収まりきらないほど行数が多い配列に格納された数値データを扱うことができます。
bigimage - bigimage. オブジェクトは、大きな画像を複数の小さなデータブロックの集合として表現します。このデータブロックは、単体で読み込んで処理することができます。
すべての画像がきれいで、鮮明で、そのまま前処理が不要な状態になっているのが理想的ですしかし、そのままの状態のデータが外観検査システムに使用できることは多くありません。照明条件が最適とは限らず、重要な特徴が目立たない場合があります。逆に、ネットワークに必要のない特徴が画像上に散らばっている場合があります。たとえば、半導体の形状や画像は数多くあり、異常の検出は困難です。
データの前処理にかける時間には、意味があります。クリーンで鮮明な画像を使用すると、アルゴリズムの予測精度は劇的に向上するからです。例として、以下のプロットでは、前処理を行った場合と行わなかった場合のネットワークの結果を示しています。
ネットワークを通る画像には、それぞれ、オブジェクトが欠陥品である可能性を表すスコアが割り当てられます。右側の結果は前処理されたデータを示しており、欠陥部品がすべて左側に集まっています。この結果から、画像を前処理することで、より簡単にネットワークで欠陥部品と正常部品を区別できることが分かります。
データと分類の目的に応じて、次の技術のいずれか、またはすべてを使用して画像を前処理することができます
- 位置がずれている画像のレジストレーション - 画像は、すべて一様に整列していると分類しやすくなります。
- 画像の輝度の調整 - 輝度を補正することで、背景との境界がはっきりして分かりやすくなります。
- 画像のセグメンテーション - ごちゃごちゃした背景や細かな金属片、その他の雑然としたものと目的のオブジェクトを分離するための、クラスタリングのような技術を使いましょう。
- 領域解析の実行 - 形状、サイズ、色などで欠陥を定義しましょう。
ディープラーニングを行うには、多くのラベル付きデータが必要です。ラベル付けを徹底して正確に行えば行うほど、ネットワークの性能は向上します。
ラベル付けとは、ネットワークが認識して分類すべきデータのクラスを定義することです。ただし、ラベル付けには非常に時間がかかり、エラーが発生する可能性が高まります。何千もの画像に手作業で境界線を引いたり、画像内の各ピクセルのクラスを定義したりすることを想像していただければ、ご理解いただけるでしょう。
MATLAB では、対話型ツールを使用して、このプロセスの手間のかかる部分を自動化できます。たとえば、次のようなものがあります。
イメージラベラーとビデオラベラー の各アプリは、画像の領域を分類し、ビデオのフレームごとに自動的にその分類を適用します。
信号ラベラーと Audio Labeler の各アプリには、イメージラベラーのように、信号データのラベル付けを高速化する自動ラベリング機能が組み込まれています。
Big Image Labeler アプリでは、大きな画像に対話的にラベル付けすることができます。パッチの抽出や各パッチのラベル付け、画像の再構築をする必要はありません。そのような工程なしで、画像を移動させたり、さまざまな部品にラベル付けしたりすることができます。
精度を高めるため目的や、より広範な信号タイプやシナリオにモデルを適用する目的のために、追加のデータが必要になる場合があります。さらに、別の (おそらくもっと複雑な) モデルを使用する際に、追加のデータやラベルが必要になる場合もあります。
一般的な戦略としては、新しいデータを作成するのではなく、データ拡張によって元のデータセットから追加のデータを生成します。通常、データ拡張は、単純な幾何学変換です。
MATLAB のデータ変換コマンドは、ランダムな変換 (切り取り、回転、サイズ変更、平行移動、反転など) をデータセットに適用します。また、色相やコントラストジッターなどの色変換を行い、データセットを拡張することもできます。
これらのファイルを新しい画像として書き出し、データセットに追加できます。