その1 生成AIにる3D合成の調査
従来AIと生成AIの比較及び事務業務以外への生成AIの応用について検討しようと思いました。昭和の技術者としては、生成AIを技術分野で活用できないかと考え、まず試してみようと思いました。以下の3つの分野で従来AIとの比較検討を行いました。
①フォグラメトリにより数枚の写真から特徴点を抽出し3Dに合成する従来手法と生成AIをベースにする3D合成(Hunyuan3D)の比較
②AutoEncoderを使った正常学習を金属表面欠陥の検出に応用する従来手法を、VLM (Visual Langake Model)により正常画像(欠陥なし)と異常画像(欠陥あり)を読ませ比較
③画像生成AI(Stable_diffusion)によるYOLOV5等の従来画像AIの学習画像の生成検討
まず、3D合成について比較を行いました。従来AIではフォトグラメトリという手法を使い複数枚の画像から特徴点を抽出し3Dに合成します。以下はその手法の概要です。

この手法を、アボカドの欠陥画像(欠陥検出位置に青色のBOX表示)120度毎に撮影した3枚の画像に適用しました。

特徴点の抽出数が少なく上手く合成できません。特徴点の操作範囲(マッチング探索距離)を拡大して再度挑戦しました。点群数は増加しましたが立体的な合成は上手く行きませんでした。アボカドの赤外画像は色や濃淡に乏しく特徴点抽出が難しいと思われます。

そこで、「pinokio」で紹介した3D生成AI「Hunyuan3D-2.0」を使用してみました。画像サンプルは、先ほどフォトグラメトリで使用した欠陥表示してない赤外画像を3枚使って3D合成を行いました。結果を示します。それらしく合成できることが判りました。
もう少し突っ込んで調べてみることにしました。

3面画像サイズが同じになるように、120度毎に撮影のできるターンテーブルを使用してアボカドの3面画像を撮影し3D合成しました。3D合成の精度評価として3Dビューアで、元画像と同じ位置に合わせた画像を使って比較しました。形状は再現されていますが、後ろ側が黒っぽくなっています。

緑っぽい若いアボカドも3D合成してみました。形状は再現されていますが、コントラストは背面側がやや黒っぽくなっています。また丸いシールは再現されていますが褐変点は正確に反映されていません。

欠陥検出箇所(青いBOX)を含んだ画像を使って3D合成した結果を示します。青いBOXがあると無い場合に比べコントラストは尽きませんが、背面に羽を背負っています。また、欠陥BOXの数や形は反映されていません。

同じく、欠陥が少ない若いアボカドの場合です。形状は正確に反映されていますが、シールの背面は顔?のようなものを合成しているように思います。

生成AIの3D合成ツール「Hunyuan3D-2.0」を使用し、数枚の赤外画像から3Dでアボカド内部情報が把握できるかを検討することにしました。3D合成には2つの要素“Structure Generation”と“Texture Synthesis”があります。今回アボカドの120度x3枚の写真からほぼ正確に“Structure Generation”ができることが判りました。この応用として写真合成したアボカドの3D形状を3Dプリンターで出力することができます。一方で、内部欠陥(褐変等)の全体把握には向いていないことが判りました。生成AIの”Texture Synthesis”機能が暴走(AIの想像力が暴走)して、まともな欠陥マップを作れないことが判りました。生成AIは、計数や精度を求めるアプリケーションには向かないと思われます。
その2 画像生成AIの応用(異常検出)
画像異常検出手法の比較として、AutoEncoderとVLM(Visual Language Model)の比較を行いました。この時点ではVRAMのサイズがMax16GBという制約があり「llama3.2-vision」を使用しました。6月20日現在ではVRAM24GBに増強し「gemma3:27b」が使用できる環境にあります。(結果については別途アップデートする必要があるかもしれません) まず、従来AIで行われていた良品学習の分野について以下の図で説明します。画像AIの主な用途は画像分類とOK/NG判定です。AutoEncoderはOK/NG判定と画像のどこが異常なのかヒートマップを表示させることができます。生成AIでマルチモーダルモデル(Visual Language Model)である「llama3.2-vision」にOK画像とNG画像を見せてどこがNG(異常)なのか答えてもらい、「AutoEncoder」と比較します。

「AutoEncoder」については、以下のサイトで勉強できます。

今回の試験に使う画像はシートベルトの金属バックルの画像です。詳しくは、欠陥検査技術の動向と金属欠陥検出試験報告 | TWINKLE TECを参考にしてください。まず正常画像を3枚を使って良品学習を行いました。

良品学習したモデルを使って、金属表面に打痕(黒点)のある画像を解析すると、ヒートマップではバックル左側の金属部状に赤丸が見られます。

マルチモーダル生成AI「llama3.2-vision」に、まず良品画像を見せて何の写真なのかを説明してもらいました。全体の形状については理解したようです。

次に、不良品画像をアップロードして、前にアップロードした良品画像と比較してもらうように指示しましたが、前のことは覚えてないようです。そこで、1枚ずつではなく2枚を同時にアップロードするとエラーとなりました。バッファが不足するのでしょうか。
対症療法として、OK画像とNG画像を1枚に纏めて比較するように変更しました。

llama3.2-visionは全体形状の比較に目が行っているようで、金属表面の微細な欠陥は見えてないようです。見えているのかを確認するため「不良品の画像に黒点はありますか?」という質問をしてみました。やはり見えてないようです。

全体形状に違いしか比較してないようなので、だめ押しで表面が梨地のNG画像を使って比較してみました。やはり形状の違いだけを答えてきます。金蔵表面状態の違いすら認識してないようです。

AutoEncoderを使った正常学習を金属表面欠陥の検出に応用する従来手法を、VLM (Visual Langake Model)により正常画像(欠陥なし)と異常画像(欠陥あり)を読ませ比較することで検出可能かを調べました。VLMはllama3.2-visionをローカル環境で使用しました。結果としてはVLMは欠陥検出に向かないことが判りました。

追加情報です。「llama3.2-vision」より数倍賢い「gemma3:27b」を使用して金属表面の欠陥を検出できるかを調べてみました。欠陥を検出してくれているようです。別機会に報告します。
その3 画像生成AIの応用調査(不良品画像の生成)
異常分類(画像分類)の学習モデルを作る場合、良品画像と同じボリュームで不良品画像が必要です。また、AutoEncorderのように良不良を判定するのではなく、不良モードが複数存在する場合は、各不良モードで同程度のボリュームが必要です。一方で、不良品発生率は極めて低く、必要な不良画像を得るためには時間とコストが掛かります。
不良画像をCGで合成するアプローチを2016年に行った経験があります。半導体の外観検査不良は、実不良率がppmオーダーのため、実際の不良画像を得る場合、100万個生産して数個現れるというレベルです。製品によっては、学習画像を得るために数年かかる場合もあります。不良分類は実用的ではありませんでした。AutoEncorderによる良品学習で不良だけを判定する手法が向いていると思いますが、打痕などの3Dデータを活用してCG合成をすることで、任意の場所に欠陥をCGで合成することができます。これも一つの解決策でしたが、インターフェース2025年3月号で生成AIで欠陥画像を生成する記事が掲載されました。今回、追試することにしました。

インターフェース2025年3月号では、道路のひび割れ画像を生成AI(satbel_diffusion)で生成し従来の画像AIの学習データに使用するという記事が掲載されています。学習データでは特に異常画像が必要で、実際の画像を集めることは非常に困難です。

CGを使って、異常画像や不良品画像を作るビジネスも数年前には存在しました。これらのビジネスも画像生成AIによって取って代わられる可能性があります。

画像AI(yoloV5)でカスタムモデルを作る手順について説明します。何分類するかを決め各分類カテゴリごとに少なくとも100枚の欠陥画像を準備します。yoloの場合は、物体検出と分類を同時に行うことができるため、1枚の画像に複数の欠陥があるような場合、クリッピングして同じ画像から複数枚の欠陥画像を取り出すことができます。下の例では、6枚の画像を1枚にまとめた画像内の欠陥をクリッピングしていきます。

カスタム学習モデルが出来ると、それを使った推論を行います。モデルの精度を確認するため、学習に使った元画像から欠陥を検出します。下の画像が検出結果です。「D」と赤枠示した領域に欠陥が検出されていることが判ります。今回は、打痕欠陥を学習させています。詳しくは 欠陥検査技術の動向と金属欠陥検出試験報告 | TWINKLE TECを参照してください。

今回、生成AIで欠陥画像を作った時に、従来画像AIの分類モデルで正常に検出されるのかを試すため簡単なGUIプログラムを作りました。画像生成AI「stable_diffusion」が生成したバックル金属表面の打痕欠陥を欠陥として従来AIが検出できるかを試すための準備です。

欠陥画像の生成は「stable_diffusin」のimg2imgモードを使います。元画像に良品画像を使用しプロンプトで元画像に欠陥を追加するように指示します。指示(プロンプト)は「The input image is a metallic buckle measuring 80mm x 80mm, and of a condition without any metal defects.
Please composite surface dents and scratches caused by metal colliding onto this initial image without transform original image.
The location of the dents should be anywhere on the metal part. The number of dents will be between 1 and 5.」です。5分で100枚の画像をバッチ処理で生成しました。

生成した画像の詳細を示します。金属表面には欠陥が付加されていますが、金属フレームの形状は変えないでと指示しているのに微妙に変形したものを生成しています。

金属表面の欠陥画像が、従来AIモデルで検出できるか検証しました。結果、出来ることが判りました。また、yoloのような検出と分類を同時に行う画像AIではフレームの形は欠陥学習に影響がないことから、有力なツールになると思います。検出結果を示します。

生成AIでは、主に金属表面に打痕などの欠陥を生成するように指示しました。画像AIとして欠陥分類などが得意なyolov5で良品/不良品のリアル画像各70枚の画像を学習したモデルを使用して、生成AIの不良品画像を解析したところ金属表面欠陥を検出することができ、不良品生成には適していると思われます。もう一つの画像AIとしてAuto Encorderによる良品学習から異常個所をHeatmapで表示する場合は、製品の形状変形に敏感になり、細部の欠陥の検出にはあまり適してないようです。

生成した画像には形状が変形したものが数多く見られましたが、金属表面欠陥は生成されていました。yolov5の欠陥学習では欠陥部のみをピックアップし学習するため、生成で形状が変形した画像でも金属欠陥を検出することができました。一方で、AutoEncorderによる良品学習から異常個所を検出場合は、生成AIによる形状変形の影響が大きくローカルな金属表面欠陥検出は難しいことが判りました。YoloのようなDetectorモードの画像AIの欠陥分類学習では、元画像から欠陥部位をクロップし学習するため、製品の変形影響は少ないと思われます。従ってsatble_diffusionで生成した欠陥画像は利用できると思います。


