La Computer Vision ha fatto passi da gigante negli ultimi 8 anni, ottenendo performance che solo pochi anni prima sarebbero state inimmaginabili. Il merito di questi avanzamenti va attribuito all’utilizzo di GPU e a nuove strutture di rete dette Convoluzionali, a cui son poi seguite una serie di strutture sempre più complesse.
Ciò che spesso viene sottovalutato nell’analizzare l’evoluzione della Computer Vision è la quantità di dati a disposizione: negli ultimi anni il numero di immagini è cresciuto a dismisura, portando ad avere una enorme mole di dati visuale (si pensi ai vari social network o anche solo al fatto che gli smartphone han più telecamere che tasti…). Questa enorme mole di dati ha permesso di creare reti con sempre più parametri, evitando il problema dell’overfitting. Si parla di overfitting nel momento in cui l’algortimo di machine learning ha “memorizzato” la soluzione agli esempi che gli sono stati forniti, ma non ha veramente “compreso” i concetti utili a risolvere il problema: l’algoritmo non è quindi in grado di generalizzare e rispondere correttamente a fronte di nuovi stimoli, simili ma diversi rispetto a quelli sui quali è stato istruito.
Se all’interno di un’immagine le classi generiche (persone, automobili, animali…) possono essere identificate alla perfezione da queste nuove reti, le applicazioni industriali della computer vision rappresentano una sfida maggiore, richiedendo di norma l’acquisizione di quante più immagini possibili.
Facciamo un esempio: se dovessimo classificare un determinato manufatto prodotto da una azienda, per essere sicuri di identificarlo dovremmo richiedere di avere almeno 200/300 immagini di quel manufatto in diverse condizioni di luce, posa e punti di vista. Questo numero, benché sia già ridotto grazie all’uso del transfer learning (di cui parleremo in un post successivo), è comunque parecchio elevato, soprattutto se consideriamo che abitualmente un’azienda produce articoli diversi per forma, dimensione,
Una delle soluzioni che stiamo adottando in AISent per ridurre il numero di dati richiesto e ottenere una soluzione di computer vision affidabile a livello industriale è quella di utilizzare i dati sintetici. Per dati sintetici si intendono dei dati simulati, generati al computer, che risultano quindi avere un costo molto ridotto. Questo approccio ci permette, a partire da modelli 3D dei prodotti o dei pezzi usati in una azienda di andare a fare object detection e segmentation; e, soprattutto, ci permettono di identificare la presenza di difetti utilizzando pochissime immagini.
Sfruttando dei motori grafici 3D, creati per sviluppare videogiochi, si possono creare dataset con 10/15 mila immagini, con le etichette già assegnate per risolvere problemi di classificazione, object detection, segmentazione, etc. La generazione richiede all’incirca un paio di ore – a fronte di giorni, se non di settimane, nel caso di immagini reali.
La domanda è quindi, abbiamo quindi risolto l’annoso problema della mancanza di dati per l’utilizzo intensivo delle tecniche di deep learning in ambito manifatturiero? Purtroppo no, dal momento che sono necessari alcuni accorgimenti per poter adattare un dataset sintetico a dati reali.
Attualmente in AISent sono due le tecniche usate per risolvere il problema detto di
Con l’approccio della Domain Randomization si cerca di generalizzare il più possibile il dominio dei dati sintetici, nella speranza che esso vada a contenere anche il dominio dei dati reali. L’idea è quindi di creare un dataset con il dominio più ampio possibile, randomizzando tutte le possibili condizioni al contorno.
Prendendo spunto dal paper che ha introdotto la tecnica, se dovessimo lavorare su un detector di automobili, partendo solo da 3D, per usare la tecnica della Domain Randomization dovremmo cambiare alcuni aspetti della scena come:
L’approccio quindi, come mostrato nella seguente figura va a creare un dataset che ha ben poco a che vedere con la realtà.