Tive uma discussão interessante com base em um projeto em que estávamos trabalhando: por que usar um sistema de inspeção visual da CNN sobre um algoritmo de correspondência de modelos?
Antecedentes: eu tinha mostrado uma demonstração de um sistema simples de visão da CNN (webcam + laptop) que detectava se um determinado tipo de objeto estava "quebrado" / com defeito ou não - nesse caso, uma placa de circuito impresso. No meu modelo da CNN foram mostrados exemplos de placas de circuito apropriadas e quebradas (cerca de 100 imagens de cada) em um fundo estático. Nosso modelo usou as primeiras camadas conv / maxpool de VGG16 pré-treinado (na imagenet) e, em seguida, adicionamos mais convs / pools treináveis, com algumas densidades, levando a uma saída vetorial codificada a quente com dim-3 para classificação : (is_empty, has_good_product, has_defective_product).
O modelo treinou com bastante facilidade e alcançou 99% de validação sem problemas; também treinamos com vários aprimoramentos de dados, pois sabemos que nosso conjunto de dados era pequeno. Na prática, funcionou cerca de 9 vezes em 10, mas algumas traduções / rotações aleatórias da mesma placa de circuito ocasionalmente a colocavam na classe oposta. Talvez o aumento mais agressivo dos dados tivesse ajudado. Enfim, para um projeto conceitual de protótipo, ficamos felizes.
Agora estávamos apresentando a outro engenheiro e seu colega, e ele levantou o argumento de que as NNs são um exagero para isso, deveria apenas usar a correspondência de modelos, por que alguém gostaria de fazer CNNs?
Não tivemos uma ótima resposta para explicar por que nossa abordagem poderia ser melhor em determinadas aplicações (por exemplo, outras partes a serem inspecionadas). Alguns pontos que levantamos:
1) Mais robusto para invariâncias (por exemplo, aumento de dados)
2) Pode fazer aprendizado on-line para melhorar o sistema (por exemplo, humanos podem dizer ao software quais exemplos estão errados)
3) Não há necessidade de definir limites, como nos algoritmos clássicos de visão computacional. O que vocês acham, há mais vantagens para um sistema CNN para esse tipo de tarefa de inspeção? Em que casos seria melhor que a correspondência de modelos?
Mais algumas idéias aleatórias sobre quando NNs profundos podem ser a tecnologia para o trabalho: para sistemas que exigem detecção de profundidade 3D como parte da entrada ou qualquer tipo de objeto que possa ser deformado / esticado / esmagado, mas ainda seja "bom" e não defeituoso (por exemplo, um bicho de pelúcia, fios, etc). Curioso para ouvir seus pensamentos :)
Respostas:
O engenheiro em questão que propôs métodos tradicionais de CV para sua aplicação simplesmente o fez por hábito. O uso da correspondência de modelos está extremamente desatualizado e mostrou um desempenho muito ruim. No entanto, acho que uma CNN é um exagero, dependendo do tamanho do seu conjunto de dados.
Como funciona a correspondência de modelos?
A correspondência de modelo desliza uma janela na sua imagem que fornecerá uma correspondência percentual com o modelo. Se a porcentagem de correspondência estiver acima de um determinado limite predefinido, será considerado uma correspondência. Por exemplo, se você tem uma imagem de um cachorro e deseja determinar se há um cachorro na imagem, deslize um modelo de cachorro em toda a área da imagem e verifique se há uma correspondência percentual suficientemente grande. Isso provavelmente resultará em um desempenho muito ruim, pois exige que o modelo se sobreponha à imagem de forma idêntica . Qual é a probabilidade disso na prática? Não é muito alto.
O único momento em que a correspondência de modelos é uma técnica suficiente é se você souber exatamente o que está procurando e tiver certeza de que ela aparecerá quase de forma idêntica em todos os exemplos de uma determinada classe.
Por que usar o aprendizado de máquina?
As técnicas de aprendizado de máquina não são rígidas. Diferentemente do que o stmax disse, as CNNs são capazes de generalizar muito bem um conjunto de dados . É por isso que eles são tão poderosos. Usando o exemplo do cão, a CNN não precisa ver uma imagem de todos os cães existentes para entender o que constitui um cão. Você pode mostrar talvez 1000 imagens de uma pesquisa no Google e, em seguida, o algoritmo será capaz de detectar que seu cachorro é de fato um cachorro. O fato de os algoritmos de aprendizado de máquina generalizarem muito bem é a razão pela qual eles substituíram todas as técnicas antigas de CV. Agora, o problema é a quantidade de dados que você precisa para treinar uma CNN. Eles são extremamente intensivos em dados .
Não acho que 100 pontos de dados sejam suficientes para treinar uma CNN robusta. Devido à profunda complexidade do modelo, a fim de limitar o viés, você precisa aumentar seu número de exemplos. Normalmente, sugiro 100 exemplos para cada recurso de modelos profundos e 10 exemplos para cada recurso de modelos rasos. Realmente tudo depende do seu espaço de recursos.
O que eu sugiro.
O que você realmente está fazendo é a detecção de anomalias . Você tem muitos exemplos que serão apresentados de PCBs que estão em boa forma. Você deseja detectar aqueles que estão quebrados. Assim, tentaria alguns métodos de detecção de anomalias. Eles são muito mais simples de implementar e você pode obter bons resultados usando modelos rasos, especialmente em conjuntos de dados inclinados (1 classe está super representada).
fonte
A resposta depende da tarefa. A correspondência de modelos pode funcionar para algumas tarefas, mas não para todas. As CNNs potencialmente podem generalizar para entradas invisíveis que não correspondem a nenhum dos seus modelos, portanto, podem generalizar melhor.
Mas se as CNNs vencerão a correspondência de modelos dependerá da tarefa específica e do que especificamente você está tentando alcançar. Esta é uma ciência empírica; em última análise, a maneira como você descobre o que funciona melhor é tentar os dois - ou aprender com outras pessoas que os experimentaram (por exemplo, lendo a literatura). Não acho que você encontre alguma teoria ou taxonomia que substitua a avaliação empírica em dados do mundo real.
fonte
Um problema que você pode encontrar com um NN (e outros métodos de classificação) é que, como você só mostrou certos defeitos, ele pode não saber como reagir a defeitos completamente novos / ainda não vistos, que podem aparecer no futuro.
Você deseja que o NN aprenda "qualquer coisa que não pareça uma placa de circuito impresso com defeito é uma placa de circuito impresso com defeito". Mas e se ele aprendeu "qualquer coisa que não se pareça com um PCB com defeito é um PCB sem defeito"?
Você pode tentar modificar algumas imagens de PCBs com defeito adicionando uma pequena mancha branca (ou outra pequena perturbação) em locais aleatórios e fazer com que a rede neural classifique essas imagens modificadas. Definitivamente deveria classificá-los como defeituosos, certo? Mas provavelmente sentirá falta de alguns (ou muitos), porque nunca viu tais defeitos antes.
Para detectar defeitos completamente novos, os métodos de detecção de anomalias / classificadores de uma classe podem ser mais .. confiáveis, porque devem pegar qualquer coisa que nunca foi vista antes.
Como o DW disse, você precisará experimentar os dois métodos e descobrir qual deles funciona melhor. Apenas certifique-se de ter um conjunto de testes realmente bom que também contém defeitos completamente novos!
fonte