Como o aprendizado profundo ajuda a detectar vários objetos na imagem única?

8

Digamos que existem dois carros em uma imagem. Como ele pode detectar esses carros, considerando que ele pode detectar um único carro em uma imagem?

Amanuel Negash
fonte

Respostas:

11

Embora muitas soluções em sistemas de produção ainda usem uma janela deslizante, conforme descrito abaixo nesta resposta, o campo da visão por computador está se movendo rapidamente. Avanços recentes nesse campo incluem R-CNN e YOLO .


Detectar correspondências de objetos em uma imagem, quando você já possui um classificador de objetos treinado, geralmente é uma questão de varredura de força bruta através de patches de imagem.

Comece com o maior tamanho de patch esperado. Por exemplo, se sua imagem é 1024 x 768, mas sempre a distância de uma estrada, talvez você não espere que um carro ocupe mais de 80 x 80 pixels na imagem. Então você pega um bloco de pixels de 80x80 de um canto da imagem e pergunta ao seu classificador qual a chance de haver um carro nesse canto. Em seguida, faça o próximo patch - talvez mova 20 pixels.

Repita para todas as posições possíveis e decida quais patches têm mais probabilidade de conter carros.

Em seguida, diminua o tamanho de um bloco (talvez 60 x 60, movendo 15 pixels por vez) e repita o mesmo exercício novamente. Repita isso até atingir o menor tamanho de bloco esperado para sua meta.

Eventualmente, você terá uma lista de áreas na imagem, com a probabilidade de que cada uma contenha um carro.

Blocos sobrepostos, ambos com alta probabilidade, provavelmente são o mesmo carro; portanto, a lógica precisa ter limites para mesclar blocos - geralmente pegando a área sobreposta com a maior pontuação de probabilidade - e declarando que existe apenas um carro nessa área.

Como de costume nas abordagens de ML, você precisará experimentar os meta-parâmetros corretos - neste caso, tamanhos de blocos, tamanhos de etapas e regras para áreas de fusão / divisão - para obter os resultados mais precisos.

Neil Slater
fonte
10

Gostaria de adicionar a resposta de @ Neil_Slater compartilhando meu aplicativo.

No meu aplicativo, quero treinar um modelo que possa carregar automaticamente uma posição de xadrez de um livro de xadrez como este:

insira a descrição da imagem aqui

  1. Antes de fazer qualquer coisa, certifiquei-me de ter um modelo capaz de detectar com precisão uma peça de xadrez.

insira a descrição da imagem aqui

Não era um problema difícil, porque era como treinar os dígitos do MINST. Eu coletei amostras suficientes, adicionei aleatoriamente algum ruído a essas amostras. Meu modelo era um aprendizado profundo convolucional em duas camadas.

  1. Desde tabuleiro de xadrez é sempre um quadrado. Eu uso a detecção quadrada disponível no OpenCV para me dar uma lista de candidatos. Eu jogaria fora qualquer quadrado pequeno demais, grande demais ou não divisível por 64 (já que existem 64 quadrados).

  2. Em seguida, eu recortaria a imagem para algo assim:

insira a descrição da imagem aqui

Agora, tenho outra rede convolucional em várias camadas para verificar cada quadrado no quadro. O comprimento da passada é a dimensão da imagem dividida por 8 (já que existem oito quadrados em cada dimensão). O tamanho do patch é igual ao comprimento da passada.

Minha tubulação funcionou, pois pude combinar dois classificadores diferentes. Pessoalmente, prefiro treinar dois classificadores, pois seria mais fácil treinar e verificar do que tentar colocar tudo em um único modelo.

Olá Mundo
fonte
3

A questão em si não é muito clara, pois você não declara ter um modelo que pode detectar um carro por corrida para uma imagem ou está apenas perguntando quais ferramentas, algoritmos ou estruturas usar para detectar carros (ou outros objetos) em uma imagem.

Respondendo à segunda variante, você deve usar algoritmos desenvolvidos para a detecção de objetos, que são Haar Cascades (incorporados ao OpenCV e existem tutoriais claros de como treinar seu detector de objetos personalizado, por exemplo, tutorial banana ) ou CNNs, que são a opção pela detecção de objetos usando redes neurais, pessoalmente, gosto de trabalhar com essa implementação - código simples e abrangente e resultados surpreendentes.

Ambas as abordagens (Haar Cascades e CNNs) basicamente encontram padrões de formas mutuamente conectadas e co-localizadas que descrevem seu objeto específico (seja face, banana, carro ou OVNI) e usam esses padrões para encontrar objetos em uma nova imagem. A inclusão mútua de objetos detectados (quando as bordas dos objetos se cruzam ou uma é incluída por outra) é usada para encontrar a melhor correspondência para cada região.

chewpakabra
fonte
0

Sua pergunta afirma explicitamente que você está procurando apenas vários carros em vez de vários objetos; portanto, a resposta está na pergunta. Você não está procurando vários objetos, mas várias ocorrências do mesmo objeto.

Desde que você tenha treinado o sistema suficientemente bem para reconhecer os dois tipos de carro, eles devem ser detectados usando abordagens padrão de filtro em cascata ... É como perguntar como posso detectar 2 rostos em uma fotografia?

Se você estava procurando um carro e um macaco, a situação é muito diferente e, usando abordagens comuns com ferramentas como o CV aberto, você geralmente treinaria 2 classificadores (um para carros e outro para macacos), repetindo a imagem duas vezes.

Quanto mais classes diferentes de objeto você deseja detectar, mais classificadores e iterações você precisa.

softwareguru1
fonte