Rete convoluzionale per la classificazione, estremamente sensibile all'illuminazione


8

Ho addestrato una rete convoluzionale per classificare le immagini di un componente meccanico come buone o difettose. Sebbene la precisione del test fosse elevata, mi sono reso conto che il modello ha funzionato male su immagini con illuminazione leggermente diversa.

Le caratteristiche che sto cercando di rilevare sono sottili e l'illuminazione sembra far scattare il modello nel chiamare molti falsi negativi. La maggior parte, se non tutti, dei dati di addestramento e test provengono da immagini che sono state riprese con illuminazione diffusa. Le nuove immagini su cui ho provato la modella sono state scattate con luci focalizzate.

Sperando che l'equalizzazione dell'istogramma ( CLAHE ) potesse aiutare, ho fatto l'equalizzazione sulle immagini prima di inviarla al modello, l'ho fatto sia per l'allenamento che per i dati dei test. Il problema allora era che la precisione era alta, ma il modello sembrava aver appreso qualche altra correlazione tra le immagini e le etichette. Dopo l'equalizzazione, tutto nell'immagine si distingue, i difetti diventano ancora più sottili e difficili da rilevare anche per l'occhio umano.

La previsione del modello è cambiata anche quando lo stesso componente è stato girato con la stessa illuminazione ma con la luce con orientamenti diversi. Quindi la mia domanda è: cosa posso fare, alla fine dei dati o con il modello, in modo che diventi robusto per i cambiamenti nell'illuminazione (o lo stesso tipo di illuminazione ma i cambiamenti nell'orientamento dell'illuminazione)?


È possibile raccogliere più dati con variazioni nell'illuminazione? La differenza tra illuminazione diffusa e diretta in una scena sarà difficile da simulare o consentire nella pre-elaborazione.
Neil Slater,

@NeilSlater Sì, posso raccogliere più dati. Sono più interessato a rendere il modello robusto ai cambiamenti di illuminazione, in misura ragionevole. Una cosa che ho notato è che la previsione del modello è cambiata anche quando lo stesso componente è stato girato sotto la stessa illuminazione, ma con orientamenti diversi. Rendere il modello robusto a diversi tipi di illuminazione può essere difficile, ci sono tecniche per renderlo robusto a diversi orientamenti della stessa illuminazione?
dpk,

Sottrarre la media dalle immagini aiuta spesso. Inoltre, quanto sono bilanciati i tuoi dati? Se nel set di dati di addestramento l'1% è di classe 1, il modello non imparerà nulla e classificherà tutto come classe 0.
Alex

@Alex Non ho provato la sottrazione media. Grazie per il suggerimento Inoltre, il mio set di dati è ben bilanciato. Ho 2 classi e ogni account rappresenta il 50% dei dati.
dpk,

Risposte:


2

Si chiama overfitting, il tuo modello ha imparato a prevedere le etichette in base a funzionalità che in realtà non sono responsabili di previsioni particolari, quindi quando non vengono presentate non riesce a prevedere correttamente. Sebbene ci siano vari modi per gestire il sovradimensionamento (ad esempio Dropout), ciò che sembra aver bisogno è l'aumento dell'immagine. È un modo semplice ma molto potente per addestrare una solida rete neurale. Per il tuo caso, basta simulare diverse condizioni di illuminazione, ad esempio aumentando / diminuendo i valori dei pixel in modo casuale per i tuoi input per le stesse etichette. È anche pratica comune aggiungere rumore casuale, rotazioni casuali, capovolgere ecc.

Per maggiori informazioni controlla questa risposta stackoverflow.

Inoltre, ho recentemente pubblicato un progetto in cui ho usato varie funzioni di aumento che potresti trovare utili. Vedi: https://github.com/Naurislv/P12.1-Semantic-Segmentation/blob/master/augmentation.py

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.