3D-CT画像とAIセグメンテーションによる樹脂部品の内部空洞検出

3D-CT×AIセグメンテーション|樹脂部品の「見えない空洞」を捉えるデータ処理戦略

約16分で読めます
文字サイズ:
3D-CT×AIセグメンテーション|樹脂部品の「見えない空洞」を捉えるデータ処理戦略
目次

この記事の要点

  • 3D-CT画像で樹脂部品の内部構造を詳細に可視化します。
  • AIセグメンテーションにより、内部空洞を自動的かつ高精度に検出します。
  • 従来の2D検査では困難だった微細な三次元欠陥の特定を可能にします。

製造現場におけるAI検査システムの構築において、近年「見たいもの」の難易度が上がっている傾向があります。かつては表面のキズや異物が中心でしたが、最近では「複雑な形状をした樹脂部品の内部にある、微細な空洞(ボイド)を見つけたい」というニーズが増加しています。

EV(電気自動車)化に伴う部品の軽量化や電装化で、樹脂成形品の重要性は増しています。しかし、その内部品質を保証するのは容易ではありません。従来の2D X線検査では部品の重なりが邪魔をして見えにくく、破壊検査では全数保証ができません。

そこで注目されているのが、産業用3D-CT(Computed Tomography)とAI(セマンティックセグメンテーション)の組み合わせです。

「3D-CTはデータが重すぎて、全数検査のタクトタイムに間に合わないのではないか?」「AIに学習させるための3Dアノテーションは、工数がかかりすぎるのではないか?」といった懸念も聞かれます。数年前までは課題でしたが、アルゴリズムの進化と計算資源(GPU)の向上により、これらの課題は技術的に解決可能な段階に入っています。

今回は、3D-CTデータを活用した樹脂部品の内部空洞検出について、アルゴリズムの原理から実装までのプロセスを段階的に紐解き、精度と推論速度のトレードオフを考慮しながら技術的なポイントを解説します。

なぜ2D検査では不十分なのか:樹脂成形における3D解析の必然性

コストのかかる3D-CT検査に踏み切る必要性について、技術的な側面から整理します。多くの現場担当者が2D X線検査装置の限界に直面していますが、その本質的な原因は「情報の次元圧縮」による損失にあります。

複雑形状部品における死角の問題

2D X線検査は、立体物を一方向から透過した「影絵」を見る技術です。単純な平板形状であれば問題ありませんが、コネクタやセンサーハウジングのような複雑な樹脂成形品では、リブ、ボス、壁面などが重なり合います。

この「重なり」が問題となります。例えば、厚みのあるリブの裏側に小さなボイドが隠れていた場合、2D画像上ではリブの影とボイドの影が重なり、コントラスト差として現れません。構造的にX線が通りにくい厚肉部では、正常な構造なのか欠陥なのか判別が難しくなります。

3D-CTであれば、対象物をボクセル(Voxel:3次元ピクセル)として再構成するため、任意の断面を切り出して観察できます。構造的な重なりをデジタルの力で解消できます。

ボイド(気泡)と密度変化の識別難易度

樹脂部品特有の難しさとして、「低コントラスト」が挙げられます。金属部品の中にある空洞なら、金属と空気の密度差が大きいのでX線画像でもはっきりと映ります。しかし、樹脂と空気の密度差は金属に比べて小さく、得られる画像のコントラストは非常に低くなります。

さらに、樹脂成形時の「密度ムラ」も考慮が必要です。ウェルドライン付近や肉厚変化部では、欠陥ではないのに局所的に密度が低い箇所が発生することがあります。2D画像では、これがボイドなのか、単なる密度のゆらぎなのかを区別するのは困難です。

3Dデータであれば、欠陥の「形状」を立体的に捉えることができます。ボイドは球形やラグビーボール状であることが多く、密度ムラは不定形に広がっていることが多い。この「立体的形状特徴」は、AIが得意とする識別要素になります。

ルールベース処理の限界とAIの優位性

従来の画像処理(ルールベース)では、「輝度が〇〇以下の画素が△△個以上連結していたらNG」といった閾値設定で判定していました。しかし、コントラストが低くノイズも多いCT画像では、単純な閾値処理だけでは誤検出が多発します。

ノイズを除去しようと平滑化フィルタを強くかければ、微細なボイドまで消えてしまう可能性があります。逆に感度を上げれば、樹脂のフィラー(充填剤)やガラス繊維をボイドと誤認してしまう可能性があります。パラメータ調整が難しい状況です。

AI、特にセマンティックセグメンテーション(Semantic Segmentation)技術は、画素単位でのクラス分類を行います。輝度値だけでなく、周囲のテクスチャ、勾配、形状パターンといった特徴量を学習するため、低コントラストな環境下でも、人間に近い判断が可能になります。

3D-CTデータの特性理解と収集戦略

データから仮説を立てて検証するサイクルを回す上で、3D-CT特有の「データ容量」という物理的な制約を考慮した収集戦略が重要になります。

ボクセルデータと解像度のトレードオフ

まず理解すべきはボクセル(Voxel)の概念です。2D画像のピクセルに奥行き情報が加わったものですが、解像度設定が重要です。

例えば、10mm角の部品を10μm(ミクロン)の解像度でスキャンすると、1辺あたり1000ボクセル。全体では $1000 \times 1000 \times 1000 = 10^9$(10億)ボクセルになります。データ形式にもよりますが、数GBの容量になることがあります。

「解像度は高ければ高いほど良い」とは限りません。AIエンジニアの視点では、「検出したい最小欠陥サイズ(ボイド径)を表現できる最低限の解像度」が適切です。一般的に、ボイドを検出するにはその直径に対して最低でも3〜5ボクセル程度の解像度が必要です。例えば、0.1mm(100μm)のボイドを見つけたいなら、解像度は20μm〜30μm程度で十分な場合が多いです。

高解像度なデータは、AIの学習時間を延ばし、推論時のメモリ不足(OOM: Out of Memory)を引き起こす可能性があります。

DICOM形式とTIFFスタックの扱い

医療用CTの流れを汲む検査機では、データ出力形式としてDICOMが使われることが一般的です。しかし、AI開発の現場(Python環境など)では、DICOMはメタデータが複雑で扱いにくいことがあります。

多くの場合、3DデータをZ軸方向の断面画像(スライス画像)の集合体であるTIFFスタックやRAWデータとして扱う方が、OpenCVやPyTorchなどのライブラリとの親和性が高いです。16bit(65536階調)の深度を持つデータの場合、一般的な画像ビューアでは真っ黒に見えることがあるので注意が必要です。AIに入力する際は、このダイナミックレンジをどう正規化するかが精度に影響します。

スキャン時間と画質の相関関係

現場導入時のボトルネックは「スキャン時間」です。高画質なCT画像を得るには、部品をゆっくり回転させながら多くの投影像を撮る必要があり、1個あたり数十分かかることもあります。

インライン検査で許されるタクトタイムは数十秒、長くても数分程度でしょう。スキャン時間を短縮すると、データにはノイズが増え、アーチファクト(偽像)が発生します。

戦略としては、「画質はそこそこで妥協し、AIのロバスト性(頑健性)でカバーする」というアプローチが考えられます。最高画質の綺麗なデータだけでAIを学習させるのではなく、現場運用時の高速スキャン条件(ノイズが乗った状態)のデータを含めて学習させることで、多少画質が悪くても正しくボイドを検知できるモデルを育成します。

AI精度を左右するデータ前処理(クレンジングと強調)

3D-CTデータの特性理解と収集戦略 - Section Image

「Garbage In, Garbage Out(ゴミを入れたらゴミしか出てこない)」というように、3D-CTデータはノイズが多くなりがちです。適切な前処理が重要です。

メタルアーチファクトとビームハードニングの補正

樹脂部品の中に金属端子(インサート成形品など)が含まれている場合、メタルアーチファクトと呼ばれる放射状のノイズが発生します。これがボイドと誤認される原因となります。X線が物体を通過する際にエネルギーの低い成分が吸収され、スペクトルが硬化するビームハードニング現象により、部品の中心部が暗く、外周部が明るく映るカップ状の輝度ムラが生じます。

これらはAI学習前に補正が必要です。ビームハードニングに対しては、単純な輝度補正フィルタや、背景輝度を推定して差し引く処理が有効です。メタルアーチファクトは完全除去が難しいため、アーチファクト部分を「検査対象外領域(Mask)」として除外するか、アーチファクトを含んだデータを「正常」としてAIに学習させる(Negative Sampleとして活用する)戦略をとります。

ノイズ除去フィルタリングの選定

CT画像特有のノイズを除去するために、ガウシアンフィルタなどが使われることがありますが、これはエッジ(境界線)をぼかしてしまうため、微細なボイドが見えなくなるリスクがあります。

ノンローカルミーンフィルタ(Non-local Means Filter)やバイラテラルフィルタ(Bilateral Filter)は、エッジ情報を保存しながら平滑化を行うため、ボイドの輪郭を維持しつつ、樹脂部分のノイズだけを低減できます。処理時間はかかりますが、3Dデータの品質向上に貢献します。

関心領域(ROI)の抽出と正規化

3Dデータ全体をAIに入力するのは計算リソースの無駄になる可能性があります。部品が存在しない「空気」の領域が大半を占めているからです。

まず、単純な閾値処理で部品の外形を特定し、そのバウンディングボックス(最小包含直方体)でデータをクロップ(切り出し)します。これをROI(Region of Interest)抽出と呼びます。

次に正規化(Normalization)です。CT値(輝度値)は撮影条件によって変動します。データの輝度分布を解析し、平均0、分散1に揃える、あるいは特定のパーセンタイル値(例えば1%〜99%)でクリッピングして0〜1の範囲にスケーリングするといった処理を行うことで、AIモデルは撮影条件の変動に左右されにくい安定した推論が可能になります。

最大の障壁「3Dアノテーション」を効率化する技術選定

最大の障壁「3Dアノテーション」を効率化する技術選定 - Section Image 3

3Dセグメンテーションにおける課題は、教師データ作成(アノテーション)の手間です。数百枚のスライス画像すべてに対し、手作業でボイドを塗りつぶす作業は、大きな負担となります。

スライス単位 vs ボリューム単位のアノテーション

アノテーションには、2Dスライスごとに塗る方法と、3D空間で立体的に塗る方法があります。基本的にはスライス画面を見ながら作業しますが、Z軸方向の連続性を意識する必要があります。

推奨するのは、「飛び飛びのスライスだけ塗って、間を補間する」手法です。例えば、10スライスごとに正解ラベルを作成し、その間の9枚は前後の形状から線形補間(Interpolation)で自動生成します。ボイドのような単純な形状であれば、この方法で工数を削減できます。

半自動アノテーションツールの活用

最近のアノテーションツール(CVAT, ITK-SNAP, 3D Slicerなど)には、支援機能があります。例えば、「ここがボイドだ」と1点クリックするだけで、輝度が類似した周囲の領域を自動で塗り広げてくれる「Region Growing(領域拡張法)」や、大まかな枠を指定するだけで境界をフィットさせる機能です。

さらに進んだアプローチとして、「モデル支援型アノテーション(Model-assisted Annotation)」があります。初期段階で少量のデータを使ってとりあえず精度の低いAIモデルを作り、そのモデルに残りのデータを推論させます。人間はAIが間違えた箇所だけを修正します。これを繰り返すことで、AIの精度向上と共にアノテーション作業が効率化されます。

教師データ作成の品質管理基準

アノテーションは複数人で行うことが多いですが、人によって「どこまでをボイドとするか」の基準が異なることがあります。特に境界部分の数ピクセルのズレが、AIの学習に影響を与える可能性があります。

「アノテーション仕様書」を作成し、「輝度が〇〇以下で、かつ閉じた領域のみを塗る」「アーチファクトは塗らない」といったルールを明文化し、定期的にクロスチェック(互いのデータをレビューし合う)を行うことが重要です。

空洞検出に最適なAIモデルアーキテクチャの比較検討

最大の障壁「3Dアノテーション」を効率化する技術選定 - Section Image

データが準備できたら、AIモデルを選定します。ここでは、精度と計算コストのトレードオフを考慮した3つのアプローチを比較します。

2.5Dアプローチ vs 3D CNN(V-Net/3D U-Net)

  1. 2D CNN(U-Net等): スライス画像を1枚ずつ独立して処理します。フィルターによる局所特徴抽出というCNNの基本構造を活かし、計算は高速でメモリ消費も少ないです。しかし、Z軸方向の情報(ボイドの立体的連続性)を使えないため、単発のノイズをボイドと誤認しやすいことがあります。
  2. 3D CNN(3D U-Net, V-Net): 3次元データをそのまま入力として畳み込み演算を行います。立体的特徴を捉えられるため精度は高いですが、計算量が膨大で、GPUメモリも大量(24GB以上推奨)に消費します。
  3. 2.5Dアプローチ: 現実的な選択肢となることが多いです。例えば、注目しているスライスの「前後数枚」をまとめて入力チャンネルとして扱う方法や、3方向(XY, YZ, ZX平面)からの2D予測結果を統合する方法です。2Dに近い計算コストで、3Dに近い精度を期待できます。

計算コスト(GPUメモリ)と推論速度の比較

製造ラインのタクトタイムが厳しい場合、フル3DのV-Netでは推論時間が長くなることがあります。その場合、モデルの軽量化や推論プロセスの最適化が必要です。

推論時のみスライディングウィンドウのオーバーラップ率を下げる手法に加え、混合精度推論の活用が極めて重要です。従来から標準的に利用されてきたFP16(16ビット浮動小数点)による高速化に加え、最新のGPUアーキテクチャ(NVIDIA Blackwell世代など)では、FP8FP4といったさらに低いビット数での推論がネイティブサポートされています。

最新のハードウェア環境では、FP8を用いることでFP16と比較して演算スループットとメモリ効率が大幅に向上するケースが報告されています。ただし、これらの低精度推論を最大限活用するには、対応するGPUと、それに最適化されたソフトウェアスタックが必要です。

エッジ推論環境へのデプロイを見据える場合、NVIDIAのTensorRTによるモデル最適化は依然として強力な手段です。また、CUDA環境(バージョン13.1など)の構築においては、NGCコンテナを利用してライブラリとともに環境構築を簡素化する手法が推奨されます。ただし、古いGPUアーキテクチャは最新のCUDAをサポートしていない場合があります。TensorRTの最新機能やCUDAの互換性については、実装前に必ずNVIDIAの公式ドキュメントやリリースノートで最新情報を確認することをお勧めします。

転移学習の適用可能性

医療用CT画像のデータセットで事前学習されたモデル(Pre-trained Model)を、産業用データに転移学習させることも有効です。人体と樹脂部品は異なりますが、「3次元的な構造の中から特定の領域を抽出する」という基本的なフィルタ機能は共通しています。ゼロから学習させるよりも、少ないデータで早く収束する傾向があります。

さらに、NVIDIA TAO Toolkitなどのフレームワークを活用して転移学習を行う場合も、公式ドキュメントに沿って手順を進めることで、効率的にモデルを最適化し、エッジAIハードウェアなどの現場の推論環境へスムーズにデプロイすることが可能です。

導入判断のための評価指標と品質保証プロセス

PoC(概念実証)から本番導入へ進むための評価指標について解説します。「正解率99%」という単一の数値に惑わされず、その中身を解像度高く理解することが重要です。

IoU(Intersection over Union)とDice係数

セグメンテーションの精度評価には、一般的にIoUやDice係数が用いられます。これらは「正解領域(Ground Truth)」と「AIが予測した領域」がピクセル単位でどれくらい重なっているかを示す指標です。

しかし、微細なボイド(気泡)検出においては、これらの指標が極端に低く出がちです。わずかな位置ズレでもIoUは大きく低下するためです。したがって、数値指標だけでなく、実際に検出されたボイドの個数や位置が合っているかという「検出レベル」での評価を併用することを強く推奨します。

過検出(False Positive)と見逃し(False Negative)の制御

製造業の品質保証において、「見逃し(False Negative)」は許容されません。不良品が市場流出することは、ブランド毀損に直結するからです。一方で、「過検出(False Positive)」は、良品を不良と判定してしまうケースですが、これは後工程で人間が再チェックを行えば良品として救済可能です。

したがって、モデルの閾値を調整する際は、再現率(Recall)を優先し、その中で適合率(Precision)をどこまで上げられるかというトレードオフを探ることになります。「疑わしきは検出する」設定にし、過検出率を現場が許容できる範囲(タクトタイムへの影響など)に収めることが、現実的かつ堅実なアプローチです。

運用時のモデル監視と再学習サイクル

導入後も、樹脂のロット変更、成形条件の微調整、X線管球の経年劣化などにより、入力データの傾向が変化する「データドリフト」は避けられません。初期モデルのまま運用を続けると、徐々に精度が劣化するリスクがあります。

運用開始後は、AIの推論結果を継続的にモニタリングする仕組みが必須です。特に、誤判定したデータ(エッジケース)を収集し、正解ラベルを付与してデータセットに追加、そしてモデルを再学習(Fine-tuning)させるサイクルを確立してください。この一連のMLOps(Machine Learning Operations)のプロセスこそが、長期的な品質保証を担保する手段となります。


3D-CTとAIを組み合わせた検査システムは、適切なデータ処理とエンジニアリングを行えば、従来は見えなかった欠陥を可視化する強力な武器になります。

3D-CT×AIセグメンテーション|樹脂部品の「見えない空洞」を捉えるデータ処理戦略 - Conclusion Image

コメント

コメントは1週間で消えます
コメントを読み込み中...