5 fasi per creare e sviluppare reti neurali di deep learning

Uso del deep learning per semplificare e accelerare l'implementazione della machine vision.

Introduzione

Il detto “un'immagine vale più di mille parole” non è mai stato così vero nel settore della machine vision come lo è oggi. Con il deep learning, migliaia, perfino milioni di righe di codice possono essere sostituiti da una semplice rete neurale addestrata con immagini e pochissima codifica.

L'ottima notizia è che il deep learning non è più un metodo disponibile solo ai ricercatori o a persone altamente specializzate e/o con budget notevoli. Oggi, molti strumenti sono gratuiti, i tutorial sono facili da trovare, il costo dell'hardware è basso e perfino i dati di addestramento sono disponibili a titolo gratuito. Questo presenta delle opportunità ma anche delle minacce, costituite dai nuovi protagonisti che nascono per danneggiare nomi noti e stimolare l'innovazione. Inoltre fornisce opportunità per i propri sistemi di machine vision di fare cose che prima erano impensabili, per esempio il deep learning può essere utilizzato per riconoscere anomalie impreviste, il che è solitamente molto difficile o quasi impossibile da fare con la codifica tradizionale.

Un notevole vantaggio dell'installazione delle reti neurali di deep learning è che consentono di prendere decisioni complesse al margine con hardware minimo e potenza di elaborazione molto ridotta; questo è possibile grazie ai sistemi basati su ARM o FPGA a basso costo e le nuove telecamere per inferenza come la FLIR Firefly DL.

In questo articolo, si imparerà:

  • Il glossario di base utilizzato nel deep learning
  • I tipi di attività di machine vision per cui è più idoneo il deep learning
  • Le 5 fasi per sviluppare e installare una rete neurale per l'inferenza al margine
  • Gli strumenti e i framework disponibili per iniziare
  • Consigli per rendere più semplice il processo
  • Potenziali limiti del deep learning da considerare

Che cos'è il deep learning: le nozioni di base

Il deep learning è un sottoinsieme del machine learning ispirato al funzionamento del cervello umano. Ciò che rende il deep learning “profondo" è il fatto che vi sono più "livelli" di neuroni di vari pesi che aiutano una rete neurale a prendere le proprie decisioni. Il deep learning può essere suddiviso in due fasi: addestramento e inferenza.

Durante la fase di addestramento, viene definito il numero di neuroni e i livelli che comprenderà la rete neurale e la si espone ai dati di addestramento etichettati. Con questi dati, la rete neurale apprende da sola che cosa è "giusto" o "sbagliato". Per esempio, se si sta valutando della frutta, si mostreranno alla rete neurale immagini dei frutti etichettate con "Grado A", "Grado B", "Grado C" e così via. La rete neurale quindi calcola le proprietà di ciascun grado, come dimensione, forma, colore, uniformità del colore e così via. Non è necessario definire manualmente queste caratteristiche né programmare che cosa è troppo grande o troppo piccolo, la rete neurale si addestra da sola. Una volta che è terminata la fase di addestramento, il risultato è una rete neurale addestrata.

Il processo di valutazione di nuove immagini utilizzando una rete neurale per prendere delle decisioni è detto inferenza. Quando le viene presentata una nuova immagine, la rete neurale addestrata fornirà un'inferenza (cioè una risposta): come "Grado A con il 95% di confidenza".

5 fasi per sviluppare un'applicazione di deep learning

Lo sviluppo di un'applicazione di deep learning in linea di massima include 5 fasi. Segue una descrizione dettagliata di ciascuna fase:

Fase 1] Identificare la funzione di deep learning appropriata

Nel mondo del deep learning, le attività sono classificate in varie funzioni. Quelle che secondo noi sono comuni per la machine vision sono:

Classificazione

La prima applicazione di deep learning, nonché la più basica, è la classificazione. La procedura implica l'ordinamento delle immagini in varie classi e il loro raggruppamento in base a proprietà comuni. Per esempio, è possibile utilizzare la classificazione per separare una parte difettosa da una funzionante su una linea produttiva per il controllo qualità o durante la conduzione di ispezioni di un saldatore per schede a circuito stampato, come illustrato nella Fig.1 che segue (utilizzando una fotocamera per inferenza FLIR Firefly DL).

flir-firefly-pcb_solder_inspection.jpg

Fig.1. Classificazione utilizzata per identificare i saldatori difettosi utilizzando una FLIR Firefly DL.

RILEVAZIONE E LOCALIZZAZIONE

Un'altra attività di deep learning ideale per la machine vision è detta rilevazione e localizzazione. Utilizzando questa funzione, è possibile identificare delle caratteristiche in un'immagine e fornire le coordinate del riquadro che la delimita per stabilirne posizione e dimensione. Per esempio, questa funzione può essere utilizzata per rilevare una persona che viola un parametro di sicurezza intorno ai robot su una linea produttiva o identificare una singola parte difettosa su un sistema di convogliamento della linea di assemblaggio/produzione.

Segmentazione

Il terzo tipo di deep learning è la segmentazione, solitamente utilizzata per identificare quali pixel di un'immagine appartengono agli oggetti corrispondenti. La segmentazione è ideale per applicazioni in cui è richiesta la determinazione del contesto di un oggetto e il rapporto tra di essi (per esempio veicolo autonomo / Sistemi di assistenza alla guida avanzati, noti come ADAS).

Fig.2 Rilevazione, localizzazione e segmentazione utilizzate per identificare gli oggetti e la relativa posizione.

Rilevazione anomalia cablaggio

Questo tipo di attività di deep learning può essere utilizzato per identificare le regioni che non corrispondono a uno schema. Un esempio tipico di un'applicazione dove la rilevazione delle anomalie può essere un valore aggiunto sarebbe il controllo delle scorte e la gestione dell'inventario nei supermercati, come illustrato nella Fig. 4. Questa applicazione implica l'utilizzo di una telecamera per inferenza per rilevare ed evidenziare gli scaffali vuoti o che richiederanno a breve un rifornimento, fornendo notifiche in tempo reale e migliorando l'efficienza.

Fase 2] Selezionare il proprio framework

Una volta che è stata determinata la funzione di deep learning che si vuole utilizzare, è necessario un set di strumenti (gli sviluppatori lo chiamano "framework") che meglio si adatti alle proprie esigenze. Questi framework forniranno una selezione di reti neurali di partenza e strumenti per l'addestramento e il test della rete.

Con alcune delle società tecnologie più grandi al mondo che si contengono posizioni dominanti nel settore del deep learning, framework come TensorFlow di Google, Caffe2 di Facebook e OpenVino di Intel (tutti gratuiti) dimostrano il quantum degli investimenti e delle risorse che si riversano nel mercato del deep learning. Dall'altra parte di quello spettro, c'è anche Pytorch, una soluzione open-source che ora fa parte di Facebook. Questi strumenti sono facili da utilizzare e forniscono un'ottima documentazione (inclusi gli esempi), quindi perfino un neofita può addestrare e installare una rete neurale con il minimo sforzo.

Per discutere di tutti i framework disponibili ci vorrebbe un articolo a parte, ma i seguenti punti elencano i principali vantaggi e svantaggi di 3 dei framework più popolari:

Pytorch

  • Facile da usare
  • Utilizzato in molti progetti di ricerca.
  • Non comunemente utilizzato per le installazioni su larga scala.
  • Pienamente supportato solo per Python.

TensorFlow

  • Ampia base di utenti con buona documentazione.
  • Curva di apprendimento superiore rispetto a Pytorch.
  • Offre installazione produttiva scalabile e supporta l'installazione mobile.

Caffe2

  • Leggero, consente un'installazione efficiente.
  • Uno dei framework più longevi (librerie ampiamente supportate per CNN e computer vision).
  • Perfetto per i dispositivi mobili che utilizzano OpenCV.

La rete neurale che si sceglie alla fine dipende dalla complessità dell'attività imminente e dalla velocità con cui deve funzionare l'inferenza. Per es.: si può scegliere una rete neurale con più livelli e più neuroni, ma l'inferenza sarà più lenta. In genere, una rete neurale addestrata richiede una potenza di calcolo ridotta e può fornire risultati in una manciata di millisecondi. Questo consente alle inferenze di deep learning complesse di essere eseguite al margine con schede ARM a bassa potenza o inferenza al margine, con fotocamere per inferenza prodotte appositamente come la FLIR Firefly DL.

Inoltre, anche le aziende con risorse e dipendenti insufficienti per addestrare e implementare una soluzione di deep learning possono fare affidamento su consulenti esterni che possono fornire assistenza durante l'intero ciclo di sviluppo, dalla concettualizzazione all'installazione. Un esempio è Enigma Pattern (https://www.enigmapattern.com).

Fase 3] Preparazione dei dati di addestramento per la rete neurale

A seconda del tipo di dati che si vogliono valutare, sarà necessario un repository di immagini con tutte le caratteristiche che ci si auspica di utilizzare nella propria valutazione, nonché con un'etichettatura appropriata. Per esempio, se la rete neurale dovesse riconoscere un saldatore funzionante da uno difettoso, avrebbe bisogno di centinaia di variazioni di come appare un saldatore funzionante e un set simile di come appare un saldatore difettoso con etichette che li identifichino per quello che sono.

Vi sono diverse strade per ottenere un dataset di immagini:

  • Per i casi d'uso più comuni, si potrebbe trovare un dataset pre-etichettato che corrisponde ai requisiti specifici acquistabile online (in molti casi, anche gratuito).
  • La generazione di dati artificiali potrebbe essere un'opzione efficiente per varie applicazioni, specialmente dal momento che l'etichettatura non è richiesta. Aziende come Cvedia, supportate da FLIR (https://www.cvedia.com), impiegano la tecnologia di simulazione e la teoria di computer vision avanzata per creare pacchetti di set di addestramento artificiali ad alta fedeltà. Questi dataset sono commentati e ottimizzati per l'addestramento di algoritmi.
  • Se le prime due opzioni non fossero disponibili, sarebbe necessario prendere le proprie immagini ed etichettarle individualmente. Questo processo è semplificato da diversi strumenti disponibili sul mercato (alcuni strumenti e tecniche per ridurre i tempi di sviluppo saranno discussi brevemente più avanti).

Consigli utili:

Nel processo di creazione del loro codice di deep learning, alcuni sviluppatori mettono a disposizione in open-source la propria soluzione e sono felici di condividerla gratuitamente. Uno strumento di questo tipo particolarmente utile se il dataset non è pre-etichettato è detto LabelImg, uno strumento di annotazione dell'immagine grafica che aiuta a etichettare gli oggetti in riquadri all'interno delle immagini (https://github.com/tzutalin/labelImg). In alternativa, l'intero processo può essere appaltato a una terza parte.

Un altro modo per ridurre la fase di preparazione dei dati implica l'accrescimento di un'immagine in molte immagini diverse, eseguendo su di esse l'elaborazione delle immagini (rotazione, ridimensionamento, allungamento, schiarimento/oscuramento, ecc.). Questo aiuterebbe ad avere più tempo di sviluppo, poiché il processo di cattura dei dati di addestramento ed etichettatura delle immagini può essere assegnato a un principiante.

Inoltre, se si hanno limiti di hardware o preferenze specifici, questo diventa ancora più importante, poiché gli strumenti di deep learning che discuteremo nella prossima sezione supportano una bella serie di hardware e spesso sono non intercambiabili.

Fase 4] Addestrare e convalidare la rete neurale per assicurare l'accuratezza

Dopo aver preparato i dati, sarà necessario addestrare, testare e convalidare l'accuratezza della propria rete neurale. Questa fase implica la configurazione e l'esecuzione degli script sul proprio computer finché il processo di addestramento non fornisce livelli accettabili di accuratezza per il caso d'uso specifico. Una delle best-practice raccomandate è tenere separati dati di addestramento e di test per garantire che i dati di test utilizzati per la propria valutazione non siano utilizzati durante l'addestramento.

Questa procedura può essere accelerata usufruendo del transfer learning: il processo implica l'utilizzo di una rete pre-addestrata e la sua riconversione a un'altra attività. Poiché molti livelli in una rete neurale profonda eseguono l'estrazione delle funzioni, non è necessario riaddestrarli per classificare nuovi oggetti. Pertanto, è possibile applicare tecniche di transfer learning a reti pre-addestrate come punto di partenza e riaddestrare solo alcuni livelli anziché l'intera rete. Framework popolari come Caffe2 e TensorFlow le forniscono a titolo gratuito.

Inoltre, l'aggiunta di nuove funzioni per rilevare una rete neurale già addestrata è facile come aggiungere immagini al set di immagini difettoso e applicare il transfer learning per riaddestrare la rete. Questo è notevolmente più semplice e rapido della programmazione basata su logica, dove è necessario aggiungere la nuova logica al codice, ricompilare ed eseguire assicurandosi che il codice appena aggiunto non introduca errori ingiustificati.

Se non si ha sufficiente esperienza nella codifica per addestrare la propria rete neurale, vi sono diversi software basati su GUI (Interfaccia Utente Grafica) che lavorano con vari framework. Questi strumenti rendono il processo di addestramento e distribuzione molto intuitivo, anche per gli utenti meno esperti. Matrox MIL ne è un esempio dal settore della machine vision.

Fase 5] Installare la rete neurale ed eseguire l'inferenza sui nuovi dati.

L'ultima fase riguarda l'installazione della rete neurale addestrata nell'hardware selezionato per testarne le prestazioni e raccogliere i dati sul campo. Le poche fasi iniziali dell'inferenza dovrebbero essere utilizzate idealmente sul campo per raccogliere ulteriori dati di test che possono essere utilizzati come dati di addestramento per le iterazioni future.

La sezione seguente fornisce un breve riepilogo dei metodi abituali per l'installazione con alcuni vantaggi e svantaggi associati:

Installazione sul cloud

  • Risparmi significativi sul costo dell'hardware
  • Possibilità di scalare rapidamente
  • Possibilità di installare e propagare le modifiche in varie sedi
  • La necessità di una connessione Internet è uno svantaggio importante
  • Latenza superiore rispetto all'installazione edge (dovuta al volume dei trasferimenti dei dati tra l'hardware locale e il cloud)
  • Affidabilità inferiore (i problemi di connessione possono causare interruzioni importanti)

Edge (PC standard)

  • Ideale per applicazioni a prestazioni elevate
  • Altamente personalizzabile (creato con parti pertinenti all'applicazione)
  • Prezzi flessibili (poiché i componenti possono essere selezionati in base all'applicazione)
  • Costo superiore
  • Generalmente, l'ingombro è significativamente superiore

Edge (ARM, FPGA e fotocamere per inferenza come FLIR Firefly DL)

  • Basso consumo energetico
  • Risparmi significativi sull'hardware periferico
  • Elevata affidabilità
  • Ideale per applicazioni che richiedono più fotocamere in un sistema (ciò aiuta a scaricare la richiesta di elaborazione su varie fotocamere).
  • Sicuro (poiché l'hardware può essere isolato dalle altre interferenze)
  • Ideale per applicazioni che richiedono una dimensione compatta
  • Non idoneo per attività impegnative dal punto di vista computazionale
  • La soluzione basata su VPU ha un rapporto prestazioni/potenza superiore rispetto alle soluzioni FPGA
  • La soluzione FPGA ha prestazioni superiori rispetto alla soluzione basata su VPU

Immagine: un esempio di fotocamere per inferenza DL – FLIR Firefly DL

Potenziali limiti del deep learning

Ora che abbiamo fatto una panoramica del processo di sviluppo e installazione, sarebbe idoneo esaminare anche alcuni limiti.

  • Per lo più il deep learning è una scatola nera ed è molto difficile spiegare / capire davvero come la rete neurale arrivi a una determinata decisione. Per alcune applicazioni questo potrebbe essere irrilevante, ma le aziende nel settore medico e sanitario hanno requisiti di documentazione severi per i prodotti che devono essere approvati dall'FDA o dalle sue controparti in altri paesi. Nella maggior parte dei casi è necessario essere pienamente consapevoli di come funziona il proprio software e si è tenuti a documentare l'intero funzionamento nei minimi dettagli.
  • Un altro problema da affrontare durante l'installazione del deep learning è che è molto difficile ottimizzare la propria rete neurale in modo prevedibile. Molte delle reti neurali che oggi vengono addestrate e utilizzate sfruttano il transfer learning per riaddestrare le reti esistenti, mentre è necessaria un'ottimizzazione minima.
  • Perfino gli errori minori nell'etichettatura dei dati di apprendimento, che possono verificarsi piuttosto frequentemente a causa di un errore umano, possono privare la rete neurale dell'accuratezza. Inoltre, è estremamente tedioso eseguire il debug del problema dal momento che potrebbe essere necessario esaminare tutti i dati di addestramento uno per uno per trovare l'etichetta sbagliata.

Oltre a questi limiti, molte applicazioni sono concettualmente più idonee per una soluzione basata su logica. Per esempio, se il problema è ben definito, deterministico e prevedibile, l'utilizzo delle soluzioni basate su logica potrebbe fornire risultati migliori rispetto al deep learning. Esempi tipici includono la lettura dei codici a barre, l'allineamento dei pezzi, misurazioni precise, ecc.

Conclusione

Perfino con i limiti evidenziati in precedenza, i vantaggi potenziali provenienti dal deep learning superano di gran lunga gli aspetti negativi (rapido sviluppo, capacità di risolvere i problemi complessi, facilità di utilizzo e installazione, per nominarne alcuni). Inoltre, nel campo del deep learning vengono fatti continui miglioramenti che superano questi limiti. Per esempio, le mappe di attivazione possono essere utilizzate per controllare visivamente quali pixel nell'immagine sono considerati quando una rete neurale prende una decisione, in modo da comprendere meglio come la rete è arrivata a quella conclusione. Inoltre, con un'adozione maggiore molte aziende oggi sviluppano le proprie reti neurali anziché fare affidamento sul transfer learning, migliorando le prestazioni e personalizzando la soluzione per problemi specifici. Perfino nelle applicazioni che sono idonee per la programmazione basata su logica, il deep learning può assistere la logica sottostante per aumentare l'accuratezza complessiva del sistema. Per concludere, è sempre più semplice e conveniente prepararsi per poter sviluppare il proprio sistema di deep learning: fare clic qui per scoprire come creare un sistema di classificazione DL con meno di $600.

Siamo qui per aiutarti!

Contatta un esperto di telecamere oggi stesso.

Contattaci.

Articoli correlati