Algoritmo de reconhecimento de padrões de aprendizado

1. Introdução


Quero apresentar a você o resultado de minhas experiências com algoritmos de reconhecimento de imagem com aprendizado pela primeira vez (o chamado One-Shot Learning). Como resultado dos experimentos, algumas abordagens para a estruturação da imagem foram desenvolvidas e, como resultado, foram incorporadas em vários algoritmos interconectados e em um aplicativo de teste no Android, com o qual você pode verificar a qualidade e o desempenho dos algoritmos.


Meu objetivo era criar um algoritmo com um princípio de trabalho claro, capaz de encontrar dependências abstratas em uma imagem pela primeira vez (para aprender) e mostrar qualidade de reconhecimento aceitável (procurar essas dependências abstratas) nos ciclos de reconhecimento subseqüentes. Ao mesmo tempo, a lógica da tomada de decisão deve ser transparente, passível de análise, mais próxima de um algoritmo linear. Em uma escala condicional em que, em uma extremidade, o cérebro e na outra, uma máquina CNC, ela está muito mais próxima da máquina do que da rede neural.


Por que não uma rede neural?


No momento, as redes neurais reinam em tarefas de reconhecimento, em particular a CNN é um tipo de padrão para reconhecimento de padrões. No entanto, na minha opinião, sua aplicação não é ilimitada e outras abordagens precisam ser buscadas.


Vou apresentar várias razões contra as redes neurais:


  1. Grandes conjuntos de dados são necessários para o treinamento, que pode simplesmente não estar disponível.
  2. Grande poder de aprendizado e ótimo tempo de aprendizado para cada foto
  3. A opacidade do algoritmo, a incapacidade de depurar e influenciar diretamente o resultado. É muito difícil, senão impossível, entender a lógica da distribuição de pesos. Isso é força e fraqueza.

Como isso funciona


A ideia básica é esta: a imagem-amostra deve ser estruturada, ou seja, as informações nele contidas devem ser reduzidas ao mínimo necessário, mas para que o significado não seja perdido. Por exemplo, artistas desenham esboços - em apenas algumas linhas precisas, um artista pode representar o rosto de uma pessoa ou algum objeto e o espectador entenderá o que é retratado. Uma fotografia contém uma matriz de N * M pixels, cada pixel contém alguns bits de informações de cores e, se você imaginar tudo isso na forma de parâmetros de linha, a quantidade de informações diminui acentuadamente e o processamento dessas informações é muito mais simples. O algoritmo deve fazer aproximadamente a mesma coisa. Ele deve destacar os principais detalhes do quadro - aquele que carrega as informações básicas e descartar tudo desnecessário.



O algoritmo encontra a estrutura dos vetores ao longo dos limites dos objetos na amostra e a mesma estrutura na imagem reconhecida.



Para obter um vetor, uma imagem passa por vários estágios de processamento:


  • Traduzido para monocromático usando a fórmula simples (vermelho + verde + azul) / 3
  • O gradiente é calculado para cada ponto da matriz.
  • As regiões de peso mais significativas do gradiente são encontradas
  • Pesquisamos cadeias de vetores que cobrem essas áreas
  • Em seguida, as etapas são repetidas para obter o número mínimo de vetores que carregam a informação máxima.


O mesmo acontece no algoritmo analisado. Em seguida, as matrizes resultantes de vetores são comparadas:


  • Primeiro, o algoritmo tenta se apegar a algumas partes semelhantes (clusters locais). Por exemplo, ele pode encontrar uma sobrancelha semelhante a uma sobrancelha em uma amostra e, em seguida, encontrar um nariz que se parece com um nariz.
  • E, então, busca-se uma relação semelhante entre os clusters locais. Por exemplo, uma sobrancelha + nariz + outra sobrancelha. Já obteve um cluster mais complexo.
  • Etc. até você obter uma imagem das relações entre os clusters que coletam todos ou quase todos os vetores de imagem. I.e. por exemplo, sobrancelhas, olhos, nariz etc. rosto não vai funcionar.

Assim, pequenos detalhes são incluídos na imagem geral e ocorre um reconhecimento de padrão semelhante a uma avalanche.
A classificação em si é construída com base no princípio de encontrar a imagem mais semelhante da armazenada. O mais semelhante é aquele com o maior número de vetores correspondentes com os menores desvios em relação ao volume total de vetores na amostra.


O esquema geral da operação dos algoritmos:



Treinamento em várias etapas


Apesar do fato de o algoritmo poder funcionar eficientemente a partir de uma amostra, é possível aumentar a precisão do reconhecimento analisando várias amostras. Ele não está implementado na versão demo, por isso vou falar sobre esse recurso, é muito simples. O princípio do treinamento em várias amostras é descartar vetores desnecessários. Os extras são aqueles que não estão incluídos em um cluster de vetores mutuamente encontrado. Por exemplo, pode haver uma sombra na amostra reconhecida como uma borda, mas pode não estar na próxima amostra.


Assim, se o vetor fizer parte de um cluster encontrado na amostra salva e na analisada, ele receberá +1 e, se não, não receberá nada. Após vários treinamentos, os vetores que pontuaram pequenos pontos são removidos da amostra salva e não são mais utilizados para análise.


Você também pode criar um editor visual que simplesmente permita remover vetores indesejados do quadro após o primeiro treinamento.


O que pode ser usado


Honestamente, concentrei todos os meus esforços no próprio algoritmo. Embora desde Trabalho com o ambiente de soluções de negócios e automação da produção; em seguida, um aplicativo que eu vejo - reconhecimento de produtos em armazéns e linhas de produção - não há grandes conjuntos de dados aqui - a amostra precisa ser mostrada uma vez e depois reconhecida. Como ligação de código de barras apenas sem códigos de barras. Mas, em geral, o aplicativo é o mesmo de qualquer outro algoritmo de reconhecimento. O aplicativo é devido aos recursos e limitações do algoritmo.


Aplicativo de teste



O aplicativo trabalha com uma matriz de 100 * 100 pixels, converte a imagem em uma matriz monocromática desse tamanho. O algoritmo não se importa com o ângulo da amostra e suas dimensões também estão dentro de certos limites.


À esquerda, é mostrado o resultado do destaque de áreas significativas da imagem atual e dos vetores correspondentes (verde), e à direita é mostrada a estrutura dos vetores encontrados e o mais adequado dos salvos e vetores semelhantes são destacados em vermelho na estrutura salva. Assim, as estruturas vetoriais destacadas em vermelho e verde que o algoritmo considera semelhantes.


Você pode salvar várias amostras. E mostrando uma nova imagem, o algoritmo encontrará a mais adequada e exibirá partes semelhantes.

Source: https://habr.com/ru/post/pt414425/


All Articles