Digamos que hay dos autos en una imagen. ¿Cómo puede detectar estos autos, dado que puede detectar un solo automóvil en una imagen?
fuente
Digamos que hay dos autos en una imagen. ¿Cómo puede detectar estos autos, dado que puede detectar un solo automóvil en una imagen?
Aunque muchas soluciones en sistemas de producción todavía usan una ventana deslizante como se describe a continuación en esta respuesta, el campo de la visión por computadora se está moviendo rápidamente. Los avances recientes en este campo incluyen R-CNN y YOLO .
La detección de coincidencias de objetos en una imagen, cuando ya tiene un clasificador de objetos entrenado, generalmente es una cuestión de escaneo de fuerza bruta a través de parches de imagen.
Comience con el tamaño de parche más grande esperado. Por ejemplo, si su imagen es de 1024 x 768, pero siempre una toma a distancia de una carretera, tal vez no espere que ningún automóvil ocupe más de 80 x 80 píxeles en la imagen. Entonces, toma un bloque de píxeles de 80x80 de una esquina de la imagen y le pregunta a su clasificador qué posibilidades hay de que haya un automóvil en esa esquina. Luego tome el siguiente parche, tal vez muévase 20 píxeles.
Repita para todas las posiciones posibles y decida qué parches tienen más probabilidades de contener automóviles.
Luego, reduzca el tamaño de un bloque (quizás 60 x 60, moviendo 15 píxeles a la vez) y repita el mismo ejercicio nuevamente. Repita esto hasta que haya alcanzado el tamaño de bloque más pequeño esperado para su objetivo.
Eventualmente, tendrá una lista de áreas dentro de la imagen, con la probabilidad de que cada una contenga un automóvil.
Los bloques superpuestos, ambos con alta probabilidad, probablemente sean el mismo automóvil, por lo que la lógica debe tener umbrales para fusionar bloques, generalmente tomando el área superpuesta con el puntaje de probabilidad más alto, y declarando que solo hay un automóvil en esa área.
Como es habitual con los enfoques de ML, deberá experimentar con metaparámetros correctos, en este caso tamaños de bloque, tamaños de paso y reglas para fusionar / dividir áreas, para obtener los resultados más precisos.
Me gustaría agregar la respuesta de @ Neil_Slater compartiendo mi aplicación.
En mi aplicación, quiero entrenar un modelo que pueda cargar automáticamente una posición de ajedrez desde un libro de ajedrez como este:
No fue un problema difícil porque fue como entrenar los dígitos MINST. Recolecté suficientes muestras, agregué al azar algo de ruido a esas muestras. Mi modelo era un aprendizaje profundo convolucional de 2 capas.
Dado que el tablero de ajedrez siempre es un cuadrado. Utilizo la detección cuadrada disponible en OpenCV para darme una lista de candidatos. Tiraría cualquier cuadrado que sea demasiado pequeño, demasiado grande o no divisible por 64 (ya que hay 64 cuadrados).
A continuación, recortaría la imagen a algo como esto:
Ahora, tengo otra red convolucional de múltiples capas para verificar cada cuadrado en el tablero. La longitud de la zancada es la dimensión de la imagen dividida por 8 (ya que hay ocho cuadrados en cada dimensión). El tamaño del parche es el mismo que la longitud del paso.
Mi tubería funcionó porque pude combinar dos clasificadores diferentes. Personalmente prefiero entrenar dos clasificadores, ya que sería más fácil entrenar y verificar que tratar de poner todo en un solo modelo.
La pregunta en sí no está del todo clara, ya que no declara que tiene un modelo que puede detectar un automóvil por carrera para una imagen o simplemente pregunta qué herramientas, algoritmos o marcos usar para detectar automóviles (u otros objetos) en una imagen
Respondiendo a la segunda variante, debería usar algoritmos desarrollados para la detección de objetos, que son Cascadas de Haar (que están integradas en OpenCV y hay tutoriales claros sobre cómo entrenar su detector de objetos personalizado, por ejemplo, tutorial de banana ) o CNN, que son La elección de la detección de objetos utilizando redes neuronales, personalmente, disfruto trabajando con esa implementación : código simple y completo y resultados sorprendentes.
Ambos enfoques (Haar Cascades y CNN) básicamente encuentran patrones de formas mutuamente conectadas y ubicadas conjuntamente que describen su objeto particular (ya sea cara, plátano, automóvil o OVNI) y usan estos patrones para encontrar objetos en una nueva imagen. La inclusión mutua de los objetos detectados (cuando los bordes de los objetos se cruzan o uno está incluido por otro) se utiliza para encontrar la mejor coincidencia para cada región.
Su pregunta indica explícitamente que solo está buscando varios autos en lugar de múltiples objetos, por lo que la respuesta está en la pregunta. No está buscando múltiples objetos, sino múltiples ocurrencias del mismo objeto.
Si entrena el sistema lo suficientemente bien como para reconocer ambos tipos de automóviles, ambos deberían detectarse utilizando enfoques de filtro en cascada estándar ... Esto es como preguntar ¿cómo puedo detectar 2 caras en una fotografía?
Si estaba buscando un automóvil y un mono, la situación es muy diferente y, al usar enfoques comunes con herramientas como CV abierto, generalmente entrenaría 2 clasificadores (uno para automóviles y otro para monos) que iterarán sobre la imagen dos veces.
Cuantas más clases diferentes de objetos desee detectar, más clasificadores e iteraciones necesitará.