Table of Contents
Introduzione: Perché l'apprendimento profondo per la classificazione delle immagini?
La classificazione delle immagini, il compito di assegnare un’etichetta ad un’immagine di un insieme predefinito di categorie, è diventata una pietra angolare della moderna visione del computer. Dalla diagnosi medica alla guida autonoma, la classificazione accurata spinge innumerevoli applicazioni nel mondo reale. L’apprendimento profondo, in particolare le reti neurali convoluzionali (CNN), ha notevolmente migliorato l’accuratezza della classificazione, spesso superando le prestazioni di livello umano sui set di dati di riferimento.
MATLAB è da tempo un favorito tra ingegneri e scienziati per il calcolo numerico e la prototipazione. Il Deep Learning Toolbox estende questa capacità con strati pre-costruiti, funzioni di formazione e accelerazione hardware senza soluzione di continuità. Se sei uno studente che esplora reti neurali o un professionista che distribuisce un classificatore in tempo reale, la toolbox offre un flusso di lavoro strutturato che copre la preparazione dei dati, la progettazione dei modelli, la formazione, la formazione, la formazione, la valutazione e la distribuzione.
Panoramica della scatola degli strumenti di apprendimento profonda
Il Deep Learning Toolbox (ex Neural Network Toolbox) offre un insieme completo di funzioni e applicazioni per la progettazione, la formazione e la simulazione di reti neurali profonde.
- Reti neurali convoluzionali (CNNs) per l'immagine e i dati spaziali.
- Rete neurali ricorrenti (RNNs)[] e LSTM per la sequenza e i dati della serie temporale.
- Reti di trasmissione] per attività di elaborazione e visione del linguaggio naturale.
- Reti avversarie generose (GAN) per la generazione di immagini.
La cassetta degli strumenti si integra con l’ecosistema più ampio di MATLAB, tra cui la casella degli strumenti di elaborazione delle immagini, la casella degli strumenti di visione del computer e la casella di strumenti di calcolo parallela, che consente soluzioni end-to-end.
- Modelli pre-trained[[] come AlexNet, VGG-16/19, GoogLeNet, ResNet, Inception, e EfficientNet, che possono essere utilizzati per l'apprendimento trasferimento o l'estrazione di funzionalità.
- Aggravimento dei dati[] attraverso l'oggetto , permettendo trasformazioni on-the-fly come rotazione, scaling, traduzione e riflessione per ingrandire artificialmente i set di formazione e ridurre il sovraccarico.
- Differenza automatica[[] e supporto GPU utilizzando Parallel Computing Toolbox e MATLAB integrato ] per una formazione più rapida.
- Strumenti di visualizzazione[[]] come e ] per ispezionare architetture di strati, mappe di attivazione e progressi di formazione.
- Opzioni di distribuzione[[]] inclusi la generazione di codice, l'esportazione a TensorFlow o ONNX, e l'integrazione diretta con hardware incorporato tramite MATLAB Coder.
Comprendere reti neurali convoluzionali per la classificazione delle immagini
Al centro della maggior parte dei sistemi di classificazione delle immagini si trova una CNN. Queste reti imparano caratteristiche gerarchiche: i primi strati rilevano bordi e texture, gli strati intermedi riconoscono forme e parti, e strati più profondi identificano gli oggetti.
Perché utilizzare MATLAB per CNN Design?
Rispetto ai quadri come TensorFlow o PyTorch, MATLAB offre diversi vantaggi unici:
- L'ambiente interattivo[: L'app permette la costruzione di reti drag-and-drop, ideale per principianti o prototipazioni rapide.
- Debug integrato[[]: È possibile passare attraverso iterazioni di formazione e ispezionare le attivazioni a qualsiasi livello, semplificando la diagnosi del modello.
- Efficienza della memoria[: MATLAB gestisce automaticamente la memoria della GPU, evitando errori comuni fuori memoria che affliggono la codifica manuale.
- Crediti in tracciatori metrici[[]: La formazione registra automaticamente l'accuratezza, la perdita e le metriche di validazione, che possono essere tracciate in tempo reale.
Preparazione dei dati: La Fondazione di un Classificatore di successo
Non importa quanto sofisticato il modello, i dati poveri porta a prestazioni scadenti. MATLAB fornisce diverse utility per gestire i dataset delle immagini in modo efficiente.
Usare
La funzione è il modo standard per caricare grandi collezioni di immagini. Etichetta automaticamente le immagini in base ai nomi delle cartelle, supporta la divisione in formazione, validazione e set di test, e può leggere le immagini dal disco in batch per evitare il sovraflusso della memoria.
imds = imageDatastore('path/to/images', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[imdsTrain, imdsValidation, imdsTest] = splitEachLabel(imds, 0.7, 0.15, 'randomized');
Data Augmentation con
Per migliorare la generalizzazione, soprattutto con dati limitati, è possibile applicare trasformazioni casuali durante l’allenamento.
- Rotazione casuale (0-360 gradi)
- Riflessioni orizzontali/verticali casuali
- Ridimensionamento casuale e traduzione
- Regolazioni di taglio e contrasto
Queste trasformazioni sono applicate sul volo, il che significa che il modello vede un'immagine leggermente diversa ogni epoca senza memorizzare più copie sul disco, riducendo in modo significativo la sovraccarica e migliorando la robustezza.
Gestione di Datasets imbalanced
MATLAB offre livelli di classificazione ponderati ([) e può calcolare i pesi di classe automaticamente dalle frequenze impostate di allenamento. In alternativa, è possibile sovrasamplare le classi minoritarie utilizzando un datastore personalizzato o la proprietà dell'opzione di formazione ].
Trasferimento di apprendimento: Accelerare lo sviluppo con i modelli pre-trained
L'apprendimento trasferimento sfrutta un modello pre-qualificato su un grande dataset (ad esempio ImageNet) e lo perfeziona per un nuovo compito. MATLAB rende questo processo eccezionalmente semplice.
Caricamento di una rete pre-trained
Usa o , [, ecc Queste funzioni scaricano il modello automaticamente se non già presente sul disco. Le reti vengono restituite come oggetto o ], preservando pesi e struttura a strati.
Modifica della rete per un'attività personalizzata
Gli strati finali di una rete pre-trained sono progettati per la classificazione ImageNet di 1000 classi. Per adattarlo al numero di classi (ad esempio, 5), si sostituisce lo strato completamente collegato e lo strato di classificazione:
lgraph = layerGraph(net);
newLayers = [
fullyConnectedLayer(numClasses, 'Name', 'fc_new', 'WeightLearnRateFactor', 10, 'BiasLearnRateFactor', 10)
softmaxLayer('Name', 'softmax_new')
classificationLayer('Name', 'classoutput_new')
];
lgraph = replaceLayer(lgraph, 'fc1000', newLayers(1));
lgraph = replaceLayer(lgraph, 'fc1000_softmax', newLayers(2));
lgraph = replaceLayer(lgraph, 'ClassificationLayer_fc1000', newLayers(3));
Estrazione di funzionalità e di fine-turning
Due strategie comuni:
- Estrazione della temperatura[[]: congelare i livelli iniziali (impostare il loro tasso di apprendimento a 0) e formare solo i nuovi livelli di classificazione.
- Fine-tuning[[]: Allena tutti gli strati con un piccolo tasso di apprendimento. Meglio quando il nuovo set di dati è più grande o significativamente diverso da ImageNet. MATLAB ti permette di impostare i fattori di frequenza di apprendimento per strato (come mostrato sopra) per controllare quanto ogni strato si adatta.
Consigli pratici per l'apprendimento trasferimento in MATLAB
- Ridimensionare sempre le immagini alle dimensioni di input previste dalla rete pre-trained (ad esempio, 224x224 per ResNet).
- Utilizzare i dati di validazione per monitorare per il sovraccarico; se la validazione altipiani di precisione presto, ridurre il numero di epoche di formazione.
- Esperimenti con diverse architetture pre-trainate. Modelli più leggeri come MobileNet sono più veloci ma meno accurati; modelli più profondi come ResNet-152 offrono una maggiore precisione a un costo computazionale.
Allenamento del Classificatore: Opzioni, Hyperparametri e Monitoraggio
Una volta che la rete è definita e i dati sono preparati, si chiama con il datastore, il grafico a livello e le opzioni di formazione.
Configurazione delle opzioni di formazione
La funzione consente di controllare virtualmente ogni aspetto della formazione:
- Solver[[]: 'sgdm' ( discesa a gradiente tocastico con slancio), 'adam', o 'rmsprop'. Adamo spesso converge più velocemente per la messa a punto.
- InitialLearnRate[: Tipicamente 1e-4 per la regolazione fine, 1e-3 per l'allenamento da zero.
- MiniBatchSize[: dipende dalla memoria della GPU; i valori comuni sono 32, 64, o 128.
- MaxEpochs[]: Numero di passaggi completi attraverso i dati di formazione. Inizia con 10-20 per la messa a punto.
- ValidationData[]: Fornire un datastore di convalida per monitorare le prestazioni ogni epoca.
- ValidationFrequency[[]: Quante iterazioni tra i controlli di convalida.
- Plots[: 'training-progress' per vedere grafici vivi di accuratezza e perdita.
- LearnRateSchedule[[[]]: Gettare il tasso di apprendimento dopo un certo numero di epoche (ad esempio, 'colpevole').
- L2Regularization[[]: Decadimento del peso per evitare l'overfitting (default 1e-4).
Monitoraggio del progresso della formazione
Se la precisione di convalida smette di migliorare mentre continua la precisione di allenamento, il modello è troppo rigido, con l'aggiunta di dropout, la riduzione della dimensione della rete, o l'utilizzo di una maggiore ingrandimento. La cassetta degli strumenti registra anche informazioni di formazione in una struttura che può essere analizzata in seguito.
Precopizione e Checkpoint
Mentre non integrato direttamente, è possibile implementare la fermata anticipata utilizzando la proprietà [ delle opzioni di formazione. In alternativa, utilizzare l'opzione per salvare reti intermedie ogni numero fisso di epoche, assicurando che non si perde il progresso.
Valutazione delle prestazioni del modello
Dopo l'allenamento, è necessario verificare che il modello generalizzi bene per non vedere i dati. MATLAB fornisce diversi strumenti di valutazione.
Immagini di prova di classificazione
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = sum(YPred == YTest) / numel(YTest);
Confusione Matrix e Per-Class Metrics
Usa per visualizzare dove il modello fa errori. Per precisione, richiamo e F1-score, utilizzare:
confMat = confusionmat(YTest, YPred);
Quindi calcola le metriche manualmente o usa l'uscita [ con l'opzione per ottenere i punteggi di previsione per l'analisi ROC.
ROC e AUC
Per la classificazione binaria o uno-vs-all scenari, è possibile tracciare le curve di funzionamento del ricevitore (ROC) utilizzando [. Questo è particolarmente importante nella imaging medico dove la regolazione della soglia conta.
Distribuzione: Prendere il Modello alla Produzione
La forza di MATLAB si estende oltre la prototipazione, offre molteplici percorsi per implementare modelli formati in applicazioni reali.
Esportazione ad altri Quadri
- TensorFlow/Keras[]: Usa [] per esportare in formato ONNX, quindi convertiti in TensorFlow.
- PyTorch[: percorso di esportazione simile ONNX.
MATLAB Coder e GPU Coder
Genera codice C/C++ standalone dalla tua rete addestrata utilizzando MATLAB Coder. Questo è l'ideale per incorporare i classificatori in sistemi desktop o incorporati senza richiedere un runtime MATLAB. GPU Coder genera codice CUDA per GPU NVIDIA GPUs, consentendo l'inferenza in tempo reale al bordo.
MATLAB Compiler e Production Server
MATLAB Production Server consente di implementare modelli come API RESTful che possono essere consumate da applicazioni web, applicazioni mobili o software enterprise.
Distribuzione di hardware incorporato
Con il supporto di Deep Learning Toolbox per ARM Cortex-A e NVIDIA Jetson, è possibile implementare reti ottimizzate direttamente per sistemi incorporati. La funzione ] può generare codice ottimizzato per hardware che si adatta agli ambienti con risorse.
Applicazioni reali e studi di casi
Gli ingegneri e i ricercatori hanno utilizzato la casella Deep Learning Toolbox di MATLAB per la classificazione delle immagini in numerosi domini:
- Imaging medico[: Raggi al petto di classificazione per la rilevazione della polmonite, immagini di fondo retinico per il grading della retinopatia diabetica e diapositive istopatiche per la diagnosi del cancro.
- Autonoma guida[[]]: Riconoscendo segnali stradali, pedoni e marcature a corsia utilizzando reti mobili impiegate su sistemi incorporati del veicolo.
- L'agricoltura[]: Identificare le malattie vegetali da immagini fogliari, smistare i frutti per maturazione.
- Manufacturing[[]: ispezione visiva per difetti sulle linee di assemblaggio, spesso con inferenza in tempo reale utilizzando GPU Coder.
- Sicurezza[]: Riconoscimento facciale e rilevamento degli oggetti nel video di sorveglianza.
Per esempi concreti, vedere ]Il tutorial ufficiale di apprendimento del trasferimento di MATLAB[ e questo articolo sull'apprendimento profondo nella imaging medicale[.
Confronta MATLAB con altri framework di apprendimento profondo
Mentre MATLAB non è open source, la sua catena di strumenti offre un’integrazione senza pari per gli ingegneri che già lavorano nell’ecosistema MATLAB. Per le squadre che richiedono soluzioni open source gratuite, TensorFlow o PyTorch potrebbero essere preferite.
- Ease of use[]: Non c'è bisogno di gestire ambienti Python, conflitti di versione, o inferno di dipendenza.
- Integrazione di Simulink[[]: Per la modellazione a livello di sistema, è possibile incorporare blocchi di apprendimento profondi in simulazioni più grandi.
- Il segnale e l'elaborazione delle immagini[[[]: Le fasi di preelaborazione possono essere scritte nella stessa lingua senza importare librerie aggiuntive.
Per i progetti in cui la collaborazione con utenti non-MATLAB è fondamentale, l'esportazione verso ONNX garantisce l'interoperabilità. Per saperne di più sull'esportazione di ONNX qui.
Pitfalls comune e come evitare di loro
- Input size mismatch[[[]: verificare sempre che lo strato di input corrisponda alle dimensioni delle immagini.
- Overfitting[[]: Aumentare l'aumento, aggiungere strati di dropout, ridurre la capacità di rete, o utilizzare una più forte regolarizzazione.
- Slow training[]: Assicuratevi di avere una GPU compatibile e che MATLAB lo sta usando (controllare con ).
- Esiti di memoria[]: Ridurre le dimensioni del mini-batch o utilizzare [] array per i set di dati fuori memoria.
- Ignorando lo squilibrio di classe[[: Controllare sempre la distribuzione delle etichette; utilizzare la perdita ponderata o oversampling.
Argomenti avanzati: Loops e ricerca su misura
Per i ricercatori che spingono all'avanguardia, MATLAB supporta i loop di formazione personalizzati utilizzando oggetti e differenziazione automatica . È possibile implementare nuovi strati, funzioni di perdita o procedure di formazione (ad esempio, meta-learning, formazione avversaria). La documentazione sui loop di formazione personalizzati fornisce esempi.
Conclusioni
Il Deep Learning Toolbox di MATLAB offre un ambiente potente e facile da usare per affrontare i problemi di classificazione delle immagini. Dall’apprendimento diretto dei trasferimenti alle architetture personalizzate, la cassetta degli strumenti semplifica ogni passo mantenendo la flessibilità necessaria per applicazioni avanzate. La sua integrazione con l’ecosistema più ampio di MATLAB, combinato con molteplici opzioni di distribuzione, consente di sfruttare al meglio la ricerca accademica e l’implementazione industriale.