Su una linea di produzione l’accuratezza di un classificatore di difetti dipende più dalla qualità delle etichette e dalla stabilità del setup ottico che dalla scelta dell’algoritmo. È una conclusione che non piace a chi cerca il modello migliore, ma torna fuori ogni volta che si porta un prototipo dal banco al controllo in linea.
Contesto e problema
Il controllo qualità automatico per immagine non è una novità: i sistemi di machine vision a regole esistono da decenni e funzionano bene quando il difetto ha una forma definita — un foro che manca, una quota fuori tolleranza. Le cose si complicano quando il difetto è statistico — una rigatura, una variazione di tessitura, un’inclusione — e cambia aspetto al variare dell’illuminazione, della posizione del pezzo, dell’usura dell’utensile. Lì una soglia fissa produce o troppi falsi allarmi o troppi sfuggiti.
Con l’apprendimento il problema cambia natura: invece di scrivere a mano la regola di accettazione, si raccoglie un insieme di immagini etichettate — conforme o non conforme, all’occorrenza distinte per tipo di difetto — e si addestra un classificatore. Il guadagno è concreto quando la variabilità del difetto è ampia, ma il costo si sposta: non più ingegnerizzare la regola, bensì costruire e mantenere il dataset.
Architettura
Una pipeline tipica oggi, nel 2014, ha tre stadi distinti.
Estrazione di feature. Dall’immagine grezza si calcolano descrittori che riassumono tessitura, bordi e statistiche locali. I più usati restano i Local Binary Patterns per la tessitura, i descrittori di Haralick sulla matrice di co-occorrenza dei livelli di grigio, gli istogrammi di gradienti orientati (HOG) di Dalal e Triggs per le strutture di bordo, e i descrittori SIFT di Lowe quando serve invarianza a scala e rotazione. La scelta delle feature è già conoscenza di dominio: per una rigatura conta la direzione del gradiente; per un’inclusione, la statistica locale di intensità.
Classificazione. Sulle feature si addestra un modello supervisionato. Due famiglie coprono quasi tutti i casi industriali del periodo: le Support Vector Machine con kernel RBF e i Random Forest di Breiman, robusti al rumore nelle feature e con una misura di importanza delle variabili utile a capire quali descrittori contano davvero. Entrambi si trovano in strumenti maturi: scikit-learn 0.14 (agosto 2013) per il prototipo in Python, OpenCV 2.4 per l’estrazione di feature e per il deployment in C++ sulla cella.
Decisione e soglia. L’uscita del classificatore è una probabilità, non un verdetto. La soglia di accettazione è un parametro di processo a sé, da tarare sul costo asimmetrico degli errori: in molti contesti uno sfuggito — un difetto classificato conforme — costa ordini di grandezza più di un falso allarme, e la soglia va spostata di conseguenza.
Le reti neurali convoluzionali profonde hanno dato risultati notevoli sul riconoscimento di immagini generiche — il sistema di Krizhevsky, Sutskever e Hinton ha vinto ILSVRC 2012 portando l’errore top-5 dal 26% al 15%, e i vincitori di ILSVRC 2013 sono scesi sotto il 12%. Ma quei risultati poggiano su milioni di immagini etichettate. Su una linea che produce qualche decina di scarti veri al giorno, mettere insieme un dataset di quella scala non è praticabile, e la pipeline feature più classificatore resta la scelta sensata.
Il punto critico
L’errore che si ripete è prendere l’accuratezza misurata in validazione per la prestazione attesa in linea. Tre fattori la erodono in modo sistematico.
Il primo è lo squilibrio delle classi: i pezzi conformi sono la stragrande maggioranza, e un classificatore che li predice quasi sempre tocca un’accuratezza altissima senza rilevare niente. La metrica giusta non è l’accuratezza ma la coppia precisione e richiamo sulla classe difetto, letta su una matrice di confusione esplicita.
Il secondo è il leakage tra training e test: se le immagini dello stesso lotto, dello stesso pezzo o della stessa sessione di acquisizione finiscono sia in addestramento sia in validazione, il modello impara a memoria condizioni contingenti — un riflesso, una sfumatura di sfondo — e la stima diventa ottimistica. La separazione va fatta per unità fisica e per sessione, non per singola immagine.
Il terzo è lo scostamento del dominio: l’illuminazione cambia, l’ottica si sporca, il fornitore del grezzo varia, l’utensile si usura. Le feature calcolate su quelle immagini si spostano, e un modello addestrato sul setup di tre mesi prima si degrada senza che nei log compaia un solo errore. Serve monitorare la distribuzione delle feature in esercizio, non solo la metrica una tantum del collaudo.
Implicazioni
In pratica il modello è la parte più piccola del sistema. Il grosso dell’investimento sta nel sottosistema di acquisizione — illuminazione controllata e ripetibile, fissaggio del pezzo, calibrazione — e nel processo di etichettatura, che vuole un operatore competente e un criterio di accettazione scritto e condiviso. Quando due ispettori etichettano lo stesso pezzo in modo diverso, nessun algoritmo recupera quell’incoerenza: la lascia come rumore irriducibile nel limite di Bayes.
Lo stesso vale per i modelli predittivi sui parametri di processo. Correlare temperatura, pressione e velocità con la qualità del prodotto finito si può fare, ma una correlazione su dati osservativi non è un controllo: un parametro può essere associato allo scarto perché è la spia di una causa comune, non perché agirci sopra riduca lo scarto. La distinzione tra associazione e leva d’intervento va tenuta esplicita prima di portare un modello in produzione. Sulle due direttrici — rilevamento difetti per analisi visiva e modelli predittivi sui parametri di processo — noze raccoglie l’esperienza in un insight dedicato: https://www.noze.it/insights/ml-industria/.
Limiti
Un classificatore addestrato riconosce solo i difetti presenti nel dataset. Un modo di guasto nuovo — una contaminazione mai vista, un difetto che arriva con un cambio di fornitore — non viene segnalato come anomalo: finisce nella classe più vicina, spesso “conforme”. I metodi di rilevamento di novità o di one-class classification limano in parte il problema, ma con tassi di falso allarme che in linea si tollerano a fatica.
Resta poi la spiegabilità. Un Random Forest dà l’importanza delle feature; una SVM con kernel no. Dove uno scarto sbagliato apre contestazioni o costi di rilavorazione, poter motivare una classificazione — quale regione dell’immagine, quale descrittore — è un requisito vero e proprio, da valutare quando si sceglie il modello, non dopo.
- https://www.cs.toronto.edu/~kriz/imagenet_classification_with_deep_convolutional.pdf
- https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf
- https://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf
- https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf
- https://scikit-learn.org/stable/whats_new/v0.14.html
- https://docs.opencv.org/2.4/
Immagine di copertina: Telecamera industriale di machine vision IDS uEye con connessione USB, vista ravvicinata del corpo macchina e dell’attacco obiettivo — foto di Lg123456, CC BY-SA 4.0 — https://commons.wikimedia.org/wiki/File:Ids-machine-vision-cameras-usb2-2004.jpg