Utilizzando un classificatore CNN pre-addestrato e applicarlo su un set di dati di immagini diverso


11

Come ottimizzeresti un pre-addestrato neural network per applicarlo a un problema separato? Aggiungeresti solo più livelli al modello pre-addestrato e lo testeresti sul tuo set di dati?

Ad esempio, se il compito fosse quello di utilizzare una CNN per classificare i gruppi di sfondi , sono sicuro che non avrebbe funzionato classificare direttamente una rete pre-addestrata addestrata su immagini di cani e gatti, anche se entrambi sono classificatori di immagini.

Risposte:


15

Leggi - Quando l'apprendimento del trasferimento è svantaggioso? (Grazie a @media) (mi sembra molto informativo, quindi aggiunto qui per rendere completa questa risposta ...)

Rispondi alla tua domanda .. (inizia qui)

Transfer Learning è quello che stai cercando ..

  • Quando ci viene assegnato un compito di Deep Learning, ad esempio, che prevede l'addestramento di una rete neurale convoluzionale (Covnet) su un set di dati di immagini, il nostro primo istinto sarebbe quello di addestrare la rete da zero. Tuttavia, in pratica, le reti neurali profonde come Covnet hanno un numero enorme di parametri, spesso nel raggio di milioni. L'addestramento di una Covnet su un set di dati di piccole dimensioni (uno inferiore al numero di parametri) influisce notevolmente sulla capacità di generalizzazione della Covnet, causando spesso un overfitting.

  • Pertanto, più spesso in pratica, si potrebbero mettere a punto reti esistenti addestrate su un set di dati di grandi dimensioni come ImageNet (immagini con etichetta 1.2M) continuando ad addestrarlo (ovvero eseguendo back-propagation) sul set di dati più piccolo che abbiamo. A condizione che il nostro set di dati non sia radicalmente diverso nel contesto del set di dati originale (ad es. ImageNet), il modello pre-addestrato avrà già acquisito funzionalità rilevanti per il nostro problema di classificazione.

Quando ottimizzare i modelli?

  • In generale, se il nostro set di dati non è drasticamente diverso nel contesto del set di dati su cui viene addestrato il modello pre-addestrato, dovremmo procedere alla messa a punto. Una rete pre-formata su un set di dati ampio e diversificato come ImageNet cattura funzionalità universali come curve e bordi nei suoi primi livelli, che sono pertinenti e utili per la maggior parte dei problemi di classificazione.

  • Naturalmente, se il nostro set di dati rappresenta un dominio molto specifico, ad esempio immagini mediche o caratteri scritti a mano cinesi, e non è possibile trovare reti pre-addestrate su tale dominio, dovremmo quindi considerare di addestrare la rete da zero.

  • Un'altra preoccupazione è che se il nostro set di dati è piccolo, la messa a punto della rete pre-addestrata su un set di dati piccolo potrebbe portare a un overfitting, specialmente se gli ultimi pochi strati della rete sono completamente collegati, come nel caso della rete VGG. Parlando della mia esperienza, se disponiamo di alcune migliaia di campioni non elaborati, con le comuni strategie di aumento dei dati implementate (traduzione, rotazione, rotazione, ecc.), La regolazione fine di solito ci porterà a un risultato migliore.

  • Se il nostro set di dati è veramente piccolo, diciamo meno di mille campioni, un approccio migliore è quello di prendere l'output del livello intermedio prima dei livelli completamente collegati come caratteristiche (caratteristiche del collo di bottiglia) e formare un classificatore lineare (ad esempio SVM) sopra esso. SVM è particolarmente abile nel tracciare limiti di decisione su un piccolo set di dati.

Tecniche di fine tuning

Di seguito sono riportate alcune linee guida generali per l'implementazione di fine tuning:

  • La pratica comune è di troncare l'ultimo strato (strato di softmax) della rete pre-allenata e sostituirlo con il nostro nuovo livello di softmax che sono rilevanti per il nostro problema. Ad esempio, la rete pre-addestrata su ImageNet viene fornita con un layer softmax con 1000 categorie.

  • Se il nostro compito è una classificazione in 10 categorie, il nuovo livello softmax della rete sarà di 10 categorie anziché 1000 categorie. Quindi eseguiamo la propagazione sulla rete per ottimizzare i pesi pre-allenati. Assicurarsi che venga eseguita la convalida incrociata in modo che la rete sia in grado di generalizzare bene.

  • Utilizzare un tasso di apprendimento più piccolo per addestrare la rete. Dato che prevediamo che i pesi pre-allenati siano già abbastanza buoni rispetto ai pesi inizializzati casualmente, non vogliamo distorcerli troppo rapidamente e troppo. Una pratica comune è quella di rendere il tasso di apprendimento iniziale 10 volte inferiore a quello utilizzato per l'allenamento scratch.

  • È anche una pratica comune congelare i pesi dei primi strati della rete pre-allenata. Questo perché i primi pochi livelli acquisiscono caratteristiche universali come curve e spigoli che sono rilevanti anche per il nostro nuovo problema. Vogliamo mantenere intatti quei pesi. Invece, faremo in modo che la rete si concentri sull'apprendimento delle funzionalità specifiche del set di dati nei livelli successivi.

In questo caso è necessario addestrarli di nuovo come se non sbagli, quindi gli sfondi non sono una classe di modelli Image-net .. Non sarà difficile costruire un modello da zero per farlo (preferibilmente uno più superficiale lo farà anche qui ..)

La fonte della mia risposta è la traduzione da questi incredibili corsi ..

Per ulteriori letture,


Se stai solo eseguendo l'estrazione delle funzionalità, come nel caso della non regolazione fine di nessuno dei livelli. C'è un motivo per sostituire l'ultimo strato denso con un classificatore lineare? Perché non tenerlo come un nuovo strato denso e riqualificarlo mantenendo congelati tutti gli strati inferiori? È solo perché allenare un classificatore lineare sarà più veloce dell'allenamento di un nuovo livello denso?
CMCDragonkai,

1
Per l'estrazione di feature, non è necessario aggiungere layer ma pochi layer come Pooling e Shape ridimensionamento vengono aggiunti per abbinare le attenuazioni e possibilmente ridurre i valori intermedi; Sicuramente è più veloce addestrare un modello lineare rispetto a un NN, ma puoi provare entrambi e vedere quale funziona meglio per il tuo caso d'uso; Sbloccare l'ultimo strato denso e riqualificarlo con alcuni livelli aggiuntivi per far fronte al tuo problema è una pratica comune
Aditya
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.