AI画像生成のInpaint技術による学習データ拡張: 異常検知のための新アプローチ

こんにちは、Insigt Edgeで働いているデータサイエンティストの藤村です。 画像認識モデル開発に携わっています。

今回は、画像上の異常検知において一般的な問題である学習データ不足に着目し、その解決方法としての画像生成AI活用について解説します。

異常検知の現場課題とその重要性

品質管理における製品の微細なキズや欠陥の検出は非常に重要です。これらを解決する手段の1つとして画像認識による欠陥の異常検知がよく使われます。しかしながら、これらの欠陥は非常に稀であるため、「異常あり」の画像データを十分に集めることは一大課題となっています。具体的な例としては:

  • 自動車製造:ラインでの塗装の不具合や組立のズレ。
  • 電子機器の組み立て:微細な接続エラーや部品の不良。
  • 農業:作物の病気や害虫による損傷。
  • 公共インフラ:線路の点検での微細な亀裂や異物の発見。
  • 航空機メンテナンス:機体表面の微小な損傷やひび割れ。

これらの例では、異常が極めて稀であるにもかかわらず、多様なデータセットが機械学習モデルの訓練に必要です。特に、線路点検などの公共インフラの安全管理では、稀な異常の正確な検出が事故防止に直結します。

画像生成AIのInpaint技術

Inpaint技術は、画像の一部分だけを変更・修正するためのAI技術です。これにより、元の画像の大枠を維持しつつ、必要な部分のみの変更が可能です。特に、Stable Diffusionを用いたInpaint技術は、従来の手法と比較して、異常や変更点を文章で具体的に定義することにより、AIがより精度の高い画像を生成できる点が特徴的です。

Inpaintに必要な要素は以下の通りです。

  • 元の画像:変更する前の基本画像。
  • マスク画像:変更したい箇所を塗りつぶした画像。
  • 変更後のプロンプト:変更を指示するテキスト。

以下の生成例は、Hugging Faceで公開されています

元画像

マスク画像

プロンプト

a tiger sitting on a park bench  

Inpaintされた画像

出展:Hugging Face

この技術により、少量の現実データから多様な学習データの生成が期待できます。

異常画像生成への応用

この技術を異常検知に応用することで以下のメリットが得られます。

  • 既存の正常な画像に人工的に「異常」を挿入:実際には存在しない欠陥を持つ画像の生成。
  • 迅速かつコスト効率的なデータセット作成:従来のデータ収集方法よりも効率的。

この技術を用いることで、既存の正常な画像に人工的に「異常」を挿入することで、実際には存在しない欠陥を疑似的に生成できます。これにより、機械学習モデルのための豊富なデータセットが容易に作成可能となります。

異常画像生成の自動化プロセス

「Stable Diffusion Web UI」や「Adobe Firefly」といったGUIベースの生成ツールもありますが、今回は異常検知を認識させるための学習データ生成が目的なので大量生成できる仕組みが必要です。

Stable Diffusion XLを用いた異常画像生成のプロセスは以下の通りです:

  1. 異常が発生する可能性のあるピクセルエリアの特定:製品の特性や過去のデータに基づく。
  2. Stable Diffusion XLを用いた異常画像の大量生成:異常をランダムな位置に生成し、複数のプロンプトを用いて大量に生成。

サンプルコード

以下は、スマートフォン画面に傷がある異常を生成する例です。

以下のサンプルコードは、Stable Diffusion XLを用いた異常画像生成のプロセスを示しています。

from diffusers import StableDiffusionInpaintPipeline
import torch
from PIL import Image, ImageDraw

# モデルの初期化
pipe = AutoPipelineForInpaint.from_pretrained(
    "diffusers/stable-diffusion-xl-1.0-Inpaint-0.1", torch_dtype=torch.float16, variant="fp16").to("cuda")

# マスク画像の準備
mask_image = Image.new('RGB', (640, 640), color='black')
draw = ImageDraw.Draw(mask_image)
mask_size = 400
top_left_corner = (110, 110)
bottom_right_corner = (top_left_corner[0] + mask_size, top_left_corner[1] + mask_size)
draw.rectangle([top_left_corner, bottom_right_corner], fill='white')


# 異常の種類を定義
anomalies = [
    "a crack in the smartphone screen", 
     ...
]

# 画像の生成
for anomaly in anomalies:
    inpainted_image = pipe(
        prompt=prompt, image=original_image, mask_image=mask_image,
        num_inference_steps=20,
        strength=0.99,
        guidance_scale=10,
    ).images[0]
    inpainted_image.save(f'path/to/inpainted_image_{anomaly}.jpg')

このコードを通じて、特定の異常をシミュレートし、モデルの訓練に役立つ画像を生成できました。

結論:技術の価値と今後の可能性

Stable Diffusion XLのInpaint機能により、異常検知のための学習データ不足という問題に効果的に対処できます。これは品質管理の精度を高め、多くの産業に適用可能です。また画像生成は、異常検知以外にも、新製品のデザインやシミュレーション、エンターテイメント産業など、さまざまな分野での応用が期待されています。今後の動向にも注目していきたいです。