Met de opkomst van metaal 3D-printtechnologie is de behoefte aan nauwkeurige kwaliteitscontrole essentieel geworden, vooral bij toepassingen waar structurele integriteit cruciaal is.
Computertomografie (CT) of Xray CT scanning biedt een krachtige methode om interne structuren van geprinte objecten in hoge resolutie te visualiseren. In deze case lichten we toe hoe deep learning wordt ingezet om CT-scans van metaal 3D-geprinte onderdelen automatisch te analyseren, met als doel het in kaart brengen van porositeiten.
Het product: een 3D geprinte manifold
Het product dat we hebben gescand is een 3D-geprinte manifold, bedoeld voor toepassingen in de halfgeleiderindustrie. Deze manifold is vervaardigd uit een titanium-gebaseerde legering en heeft een nominale wanddikte van slechts 0,5 mm. De combinatie van het materiaal en de dunne wandstructuur maakt dit tot een uitdagend object om nauwkeurig te inspecteren, zeker wanneer het aankomt op het detecteren van interne porositeiten.


Resultaat van de CT scan
Aangezien de productspecificaties vereisen dat porositeiten van 0,1 mm of groter worden gedetecteerd, scannen we dit onderdeel standaard met een resolutie van ongeveer 30 µm (voxelgrootte). Hieronder is een CT-slice weergegeven waarop meerdere porositeiten zichtbaar zijn, evenals een dichter deeltje of inclusie.

Zeker in de beginfase van een deep learning-traject maken we graag een scan met hogere resolutie van een beperkte zone. Dit helpt om een duidelijk en gedetailleerd inzicht te krijgen in de aard en vorm van de aanwezige defecten. Op de volgende CT-slice is dit goed te zien: de porositeiten worden met meer scherpte weergegeven, en bovendien wordt een tweede inclusie zichtbaar die eerder onopgemerkt bleef.

Wanneer we op dezelfde resolutie van 8 µm niet één enkele slice analyseren, maar een zogenaamde minimum intensity projection uitvoeren over een zone van 1 mm dik, ontstaat het volgende beeld. In deze visualisatie worden alle minimale voxelwaarden binnen die diepte weergegeven, waardoor porositeiten in deze zone duidelijk naar voren komen. Opvallend is dat de dichtere inclusies in dit beeld niet zichtbaar zijn, aangezien deze techniek zich specifiek richt op het weergeven van de laagste dichtheden — typisch geassocieerd met porositeiten.
Hetzelfde zouden we uiteraard ook kunnen doen met een maximum intensity projection, om alle inclusies in deze zone te visualiseren.
Op dit beeld is duidelijk te zien dat de grotere porositeiten zich voornamelijk in het midden van het materiaal bevinden. Rondom de buitencontour van het product verschijnt een fijnere structuur van zeer kleine porositeiten, als een soort sliert die de rand volgt. Dit heeft hoogst waarschijnlijk te maken met het printproces en hoe de laser de verschillende lagen opbouwt.

Diezelfde minimum intensity projection over een zone van 1 mm ziet er op de originele 30 µm scan als volgt uit.

Traditionele manieren van inspectie
Manuele inspectie
Een veelgebruikte traditionele werkwijze is het manueel doorlopen van de CT-slices, waarbij de operator visueel op zoek gaat naar defecten en deze markeert zodra ze worden waargenomen. Deze methode is sterk afhankelijk van de ervaring en aandacht van de operator, en kan bovendien tijdrovend en foutgevoelig zijn — zeker bij grote datasets of subtiele porositeiten.
In het geval van deze manifold, met een lengte van 166 mm, betekent een scanresolutie van 30 µm dat er maar liefst 5.533 slice-beelden gegenereerd worden. Om al deze beelden manueel door te nemen en defecten te detecteren, is bijzonder tijdsintensief. Bovendien betreft het hier enkel doorsnedes in het horizontale z-vlak. Aangezien sommige porositeiten langwerpig zijn en zich in complexe vormen door het materiaal verspreiden, zou men idealiter ook in andere richtingen (bijvoorbeeld volgens x en y) moeten kijken om een volledig en accuraat beeld te krijgen. Dit maakt de manuele inspectie nog arbeidsintensiever en verhoogt het risico op gemiste defecten.


Rule-based segmentation
Voor het automatisch detecteren van porositeiten in CT-data werd traditioneel vaak gebruikgemaakt van rule-based segmentation. Hierbij worden vaste drempelwaarden en logische regels toegepast, zoals intensiteitsgrenzen (grijstinten), vormcriteria of volumelimieten om poriën te onderscheiden van het basismateriaal. Hoewel deze methode in eenvoudige gevallen redelijk kan werken, is ze gevoelig voor ruis, variaties in materiaaldichtheid en artefacten in de scan. Bovendien vergt het afstellen van de juiste parameters vaak veel handmatig werk en is het resultaat sterk afhankelijk van de gekozen instellingen. In complexe of fijnmazige structuren, zoals bij 3D-geprinte onderdelen, schiet deze aanpak dan ook vaak tekort in vergelijking met deep learning-methodes.

Deep learning
Deep learning is in essentie een vorm van geautomatiseerde patroonherkenning — iets waar wij als mensen van nature ook sterk in zijn. Wanneer je als operator door een CT-scan scrolt, kun je vaak intuïtief en snel aanduiden wat een porositeit is en wat niet. Het grote verschil zit echter in de hoeveelheid informatie die een deep learning model kan verwerken. Waar wij als mens beperkt zijn tot het interpreteren van beelden zoals ze op een scherm worden weergegeven — typisch in 8-bit resolutie met maximaal 256 grijstinten — werkt een deep learning model rechtstreeks op de ruwe 16-bit data van de scan. Dat komt neer op maar liefst 65.536 verschillende grijswaarden. Ter vergelijking: een mens kan gemiddeld slechts zo’n 60 grijstinten van elkaar onderscheiden. Dankzij die hogere informatiegraad kan een model subtiele verschillen detecteren die voor het menselijk oog onzichtbaar blijven, wat resulteert in een nauwkeurigere en objectievere analyse.
De eerste stap in het proces is het opstellen van een geschikte trainingsdataset. Hiervoor selecteren we kleine subvolumes uit goedgekozen zones binnen de scan. Hoewel dit met één scan kan, is het aanbevolen om data uit meerdere scans of producten te gebruiken om de robuustheid van het model te vergroten. Vervolgens vindt de annotatie plaats: het nauwkeurig labelen van porositeitszones, handmatig of semi-automatisch. Deze stap is van cruciaal belang – de nauwkeurigheid van de ground truth data bepaalt in grote mate de kwaliteit van het uiteindelijke model.
Om de dataset verder te verrijken en het model te helpen generaliseren, passen we data-augmentatie toe. Daarna volgen de gebruikelijke stappen in het machine learning-traject: trainen, evalueren en iteratief verbeteren. Tot slot is cross-validation essentieel om overfitting te vermijden en de generaliseerbaarheid van het model te beoordelen. In het bijzonder is het belangrijk om de resultaten op de eerste scans nauwgezet te controleren, zodat eventuele fouten vroegtijdig worden opgespoord en gecorrigeerd.


Trainingsdataset
Een typische trainingsdataset, opgebouwd uit één enkel product, ziet eruit zoals weergegeven in de afbeelding. Hierin worden meerdere subvolumes geselecteerd uit verschillende zones van het onderdeel. Bij het samenstellen van deze dataset streven we naar een zo groot mogelijke variatie: regio’s met duidelijk aanwezige porositeiten, maar ook zones die enkel ruis bevatten of volledig defectvrij zijn. Het is cruciaal om dit soort “negatieve voorbeelden” op te nemen, zodat het deep learning model leert onderscheid te maken tussen echte defecten en onschadelijke artefacten of beeldruis. Door deze gebalanceerde aanpak verhoogt de nauwkeurigheid en betrouwbaarheid van het model aanzienlijk.

Annotatie van de ground truth data
Een cruciale stap in het deep learning-traject is de annotatie van de ground truth data. Dit houdt in dat porositeiten in de trainingsbeelden zorgvuldig worden gelabeld, zoals geïllustreerd in de afbeelding: links het originele beeld, rechts hetzelfde beeld met in rood gemarkeerde poriën. Het is van groot belang dat deze labeling zeer nauwkeurig gebeurt. Zelfs het wel of niet selecteren van een enkele voxel kan het verschil maken. Hoe preciezer deze annotaties worden uitgevoerd, hoe beter het model leert om echte porositeiten te onderscheiden van ruis of andere structuren. Deze stap vormt de basis voor de ‘waarheid’ waarmee het model zichzelf traint en wordt daarom terecht beschouwd als één van de meest bepalende factoren voor de uiteindelijke accuraatheid.

Resultaat van de automatische detectie
Hieronder is het resultaat te zien van automatische porositeitsdetectie uitgevoerd op een CT-scan met een voxelresolutie van 30 µm. Om de nauwkeurigheid van deze detectie te controleren, werd het resultaat geprojecteerd als overlay op een hogere resolutie scan met een voxelgrootte van 8 µm. Hieruit blijkt dat het model in staat is om de meeste porositeiten correct te identificeren, al blijven sommige kleinere poriën — die wél zichtbaar zijn in de hogere resolutie — ongedetecteerd. Dit is een logisch gevolg van de beperkte resolutie van de oorspronkelijke dataset waarop het model getraind is. Daarnaast valt op dat het model geen inclusies detecteert. Dit is te verklaren doordat het uitsluitend getraind werd op porositeiten. In principe kunnen inclusies echter ook worden meegenomen in de detectie, mits er voldoende representatieve trainingsdata beschikbaar zijn waarin deze afwijkingen correct zijn geannoteerd.

Bij het inzoomen op de rand van het onderdeel zien we dat porositeiten op enige afstand van de rand goed worden gedetecteerd, maar dat kleine defecten vlak bij de rand vaak gemist worden. Ze verdwijnen in de gradiëntzone van de rand, waar het contrast vervaagt. Op de hoge resolutie scan (4 µm voxelgrootte) wordt het defect duidelijk zichtbaar, wat aantoont hoe belangrijk resolutie is bij het inspecteren van randzones.
