Rede convolucional de classificação, extremamente sensível à iluminação

8

Treinei uma rede convolucional para classificar as imagens de um componente mecânico como boas ou defeituosas. Embora a precisão do teste fosse alta, percebi que o modelo tinha um desempenho ruim em imagens com iluminação ligeiramente diferente.

Os recursos que estou tentando detectar são sutis, e a iluminação parece fazer com que o modelo chame muitos negativos negativos. A maioria, se não todos, dos dados de treinamento e teste vieram de imagens gravadas sob iluminação difusa. As novas imagens em que experimentei o modelo foram fotografadas com luzes focadas.

Na esperança de que a equalização do histograma ( CLAHE ) ajudasse, eu fiz a equalização das imagens antes de alimentá-la com o modelo, fiz isso para treinamento e também para dados de teste. O problema então era que a precisão era alta, mas o modelo parecia ter aprendido alguma outra correlação entre as imagens e os rótulos. Após a equalização, tudo na imagem se destaca, os defeitos se tornam ainda mais sutis e difíceis de detectar, mesmo para o olho humano.

A previsão do modelo mudou mesmo quando o mesmo componente foi fotografado com a mesma iluminação, mas com a luz em orientações diferentes. Portanto, minha pergunta é: o que posso fazer, no final dos dados ou com o modelo, para que se torne robusto às mudanças na iluminação (ou ao mesmo tipo de iluminação, mas que mude a orientação da iluminação)?

dpk
fonte
É possível coletar mais dados com variações na iluminação? A diferença entre iluminação difusa e direta em uma cena será difícil de simular ou permitir no pré-processamento.
Neil Slater
@NeilSlater Sim, eu posso coletar mais dados. Estou mais interessado em tornar o modelo robusto às mudanças de iluminação, em uma extensão razoável. Uma coisa que notei foi que, a previsão do modelo mudou mesmo quando o mesmo componente foi fotografado sob a mesma iluminação, mas com orientações diferentes. Tornar o modelo robusto para diferentes tipos de iluminação pode ser difícil. Existem técnicas para torná-lo robusto para diferentes orientações da mesma iluminação?
dpk 3/09/17
Subtrair a média das imagens geralmente ajuda. Além disso, quão bem seus dados são balanceados? Se no conjunto de dados de treinamento 1% é de classe 1, o modelo não vai aprender anytjing e classificar tudo como classe 0.
Alex
@ Alex Eu não tentei subtração significa. Obrigado pela sugestão. Além disso, meu conjunto de dados é bem equilibrado. Eu tenho 2 classes e cada uma delas representa 50% dos dados.
DPK

Respostas:

2

Isso é chamado de super adaptação, seu modelo aprendeu a prever rótulos com base em recursos que não são realmente responsáveis ​​por previsões específicas; portanto, quando não são apresentados, ele não consegue prever corretamente. Embora existam várias maneiras de lidar com o ajuste excessivo (por exemplo, desistência), o que você parece precisar é de aumento de imagem. É uma maneira simples, mas muito poderosa, de treinar uma rede neural robusta. Para o seu caso - apenas simule diferentes condições de iluminação, por exemplo, aumentando / diminuindo os valores de pixel aleatoriamente para suas entradas para as mesmas etiquetas. Também é prática comum adicionar ruído aleatório, rotações aleatórias, virar etc.

Para mais informações, verifique esta resposta do stackoverflow.

Além disso, publiquei recentemente um projeto em que usei várias funções de aumento que você pode achar úteis. Consulte: https://github.com/Naurislv/P12.1-Semantic-Segmentation/blob/master/augmentation.py

Nauris Dorbe
fonte