detecção de objectos extremo-a-extremo com a correspondência de modelos usando Python

como implementar a detecção de objectos personalizada com a correspondência de modelos. Não são necessários dados anotados!

object-detection-template-matching
Object detection with Template matching to detect components

Today, state-of-the-art object detection algorithms (algorithms aiming to detect objects in pictures) are using neural networks such as Yolov4.

object-detection-output
an object detection output

Template matching is a technique in digital image processing for finding small parts of an image that matches a template image. É uma solução muito mais simples do que uma rede neural para conduzir a detecção de objetos. Além disso, vem com os seguintes benefícios:

  • não há necessidade de anotar os dados (um demorado e tarefa obrigatória para treinar as redes neurais)
  • caixas delimitadoras são mais precisos
  • não há necessidade de GPU

Na minha experiência, a combinação de uma rede neural como Yolov4 e detecção de objetos com o modelo de correspondência aqui está uma boa maneira de melhorar consideravelmente a sua rede neural desempenho!

o que corresponde ao modelo?

quando usar o modelo OpenCV correspondente, o seu modelo desliza pixel por pixel na sua imagem. Para cada posição, uma métrica de similaridade é calculada entre o modelo de imagem e a parte da imagem que se recupera de:

modelo de correspondência-exemplo
Usando o modelo de correspondência para detectar francês IDENTIFICAÇÃO em documentos digitalizados

Se a métrica de similaridade é alto o suficiente para que um pixel, em seguida, este pixel é, provavelmente, o canto superior esquerdo de um objeto correspondente ao seu modelo!

consequentemente, você pode alcançar a detecção de objetos com template correspondente apenas se os objetos que você tenta detectar são semelhantes o suficiente-quase idênticos-dentro de uma classe. Você ainda pode incluir mais modelos para lidar com variações de objetos (tamanho, cor, orientação). Mas vai aumentar o tempo de previsão.À primeira vista, parece muito restritivo. Mas muitos casos de uso de detecção de objetos podem ser enfrentados com correspondência de modelos:

  • identificação em documentos digitalizados
  • espaço de estacionamento vazio de uma câmara estacionária
  • componentes de uma linha de montagem…

a Practical Example

A good use case for object detection using template matching is to detect components on printed circuits, such as this one:

printed-circuit-unsplash
a print circuit – Photo by Umberto on Unsplash

we could imagine an assembly line producing such circuits. Imaginemos que alguns circuitos fabricados são componentes em falta e, portanto, defeituosos. Poderíamos propor instalar uma câmera no final do trilho e filmar cada circuito, a fim de filtrar produtos defeituosos. Podemos conseguir isso com detecção de objetos com correspondência de modelos!Por uma questão de simplicidade, vamos concentrar-nos na detecção de alguns componentes.

Um primeiro componente que aparece duas vezes:

modelo de correspondência-componente-1
Componente 1

Essa que aparece quatro vezes:

modelo de correspondência-componente-2
Componente 2

E este terceiro, que aparece seis vezes:

modelo de correspondência-componente-3
Componente 3

Finalmente, escolhemos estas três imagens como modelos. Consequentemente, a complexidade deste caso de uso é reduzida: vamos facilmente detectar pelo menos os objetos escolhidos como modelos.

Básico de detecção de objetos com o modelo de correspondência

Definição de modelo

em Primeiro lugar, vamos definir modelos de:

  • um caminho de imagem,
  • a etiqueta
  • uma cor (por resultado visualização —caixas delimitadoras e rótulos de cor),
  • e uma correspondência de limiar.

em segundo lugar, consideramos que todos os pixels com uma métrica de semelhança acima deste limiar indicam uma detecção para este modelo.

aqui está o código que define os modelos:

definição de modelos

detecção de objectos com modelo correspondente

depois, analisamos os modelos para efectuar a detecção de objectos com modelo correspondente para cada modelo. Como estamos usando um limiar, selecionamos uma métrica de similaridade normalizada (TM_CCOEFF_NORMED) ao aplicar correspondência de modelos. Assim, podemos escolher um limiar entre 0 e 1:

Object detection with template matching

we consider that each pixel having a similarity score above the template threshold is the top-left corner of an object (with the template’s height, width, and label).

Visualizar objectos detectados

em Seguida, marcamos o previsto caixas delimitadoras do objeto de detecção com o modelo correspondente na imagem de entrada:

objeto de Exibição de resultados de detecção

Finalmente, obtemos os seguintes resultados:

template-matching-duplicated-detected-objects
Duplicated detected objects

as indicated by the thickness of boxes (in green, yellow, and red), each object has been detected several times.

Remover Duplicados

por que obtivemos detecções duplicadas? Como explicado acima, a correspondência do modelo OpenCV devolve uma matriz 2-D com a dimensão da imagem de entrada (uma célula— e, portanto, uma pontuação de semelhança— para cada pixel de imagem de entrada).

portanto, se um objeto é detectado em um local, todos os pixels circundantes provavelmente terão a mesma pontuação de similaridade, e, portanto, considerados como outros cantos superiores-esquerdos objeto.

para resolver este problema, vamos ordenar todas as detecções diminuindo os valores correspondentes. Então, vamos escolher se validar ou não cada detecção. Validamos a detecção se ela não estiver sobrepondo muito com qualquer uma das deteções já validadas. Finalmente, determinamos que duas deteções estão sobrepondo-se se a interseção sobre a União de suas caixas envolventes está acima de um determinado limiar. Este processo é chamado de supressão não-máxima.

Aqui é uma explicação visual de que mais de Intersecção da União (IoU) é:

Intersecção sobre a União

Aqui está como eu implementado (computação IoU método, juntamente com mais explicações podem ser encontradas aqui):

Não-Máximo de Supressão de

E em seguida, Acabei de adicionar estas duas linhas após a detecção de loop:

Aplicar SMN

Como resultado, obtém-se:

despoluficados-detected-objects
Despoluficados detected objects

Much cleaner! Vemos agora claramente que todos os componentes primeiro e terceiro são detectados sem falsos positivos (precisão e recolha de 1).

agora queremos reduzir o número de falsos positivos para o componente 2. A maneira mais fácil é aumentar o limiar de correspondência para o modelo usado para este rótulo.

escolher hiperparametros

é claro que é melhor calcular métricas de detecção de objectos em várias imagens para escolher hiper-parâmetros (limiar de correspondência de modelos e limiar de supressão Não-máximo). Por agora, podemos simplesmente aumentar o limite para o componente 2:

Escolha o modelo correspondente limiares

E obtemos:

última saída
Final

agora temos apenas dois falsos positivos para o componente 2, em vez de dezenas (precisão de 2/3, lembre-1)! Além disso, os componentes 1 e 2 são ainda perfeitamente detectados (precisão e recolha de 1).

para melhorar os nossos resultados, poderíamos:

  • incluir modelos para os componentes confundidos com o componente 2.
  • tente várias métricas de similaridade
  • anotar algumas imagens para computar métricas de detecção, e realizar uma pesquisa em grade sobre estes parâmetros.

resumo

conseguimos a detecção de objectos com template correspondente por:

  • definição de pelo menos um modelo para cada objeto (o mais modelos, você tem um objeto mais sua recordação vai estar em alta e a sua precisão baixa)
  • usando OpenCV modelo método correspondente na imagem para cada modelo de
  • considerando-se que cada pixel tendo uma semelhança pontuação acima de um modelo de limiar é o canto superior esquerdo de um objeto (com este modelo, largura e altura do rótulo)
  • aplicação Não-Máximo de Supressão de detecções obtidas
  • escolher o modelo de limiares para melhorar a precisão da detecção!É isso!Está à procura de peritos em reconhecimento de imagens? Não hesite em contactar-nos!

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.