¿Cómo detectaría el modelo de aprendizaje profundo los mismos objetos varias veces en un parche de imagen si existe?

El acercamiento inicial

Como estás trabajando con imágenes, querrás usar una red neuronal convolucional. Lo entrenaría como lo haría con cualquier otra red neuronal, utilizando una función de pérdida que incluye un término de la forma | número de caras en la salida de imagen (número estimado de caras |. Después de unas pocas capas, esperaría terminar con algunos mapas de características que son cero, excepto en las regiones correspondientes a caras gracias a la convolución, agrupación máxima y capas ReLu. Después de esto, cierta agrupación máxima podría reducir cada “cara” a un solo punto. El resultado es entonces el número de no cero píxeles, que es una combinación lineal de las intensidades de píxeles como es estándar en una red neuronal.

¡Espere! ¡¡Hay un problema!!

Si las caras pueden ser de tamaños muy diferentes (tal vez no dependiendo de su problema), desea hacer una agrupación más agresiva. Esto puede ser problemático si diferentes caras están muy juntas, ya que puede contar varias caras como una sola. Es por eso que tendría diferentes canales de funciones con diferentes estrategias de agrupación. Su última capa completamente conectada tendrá en cuenta estos resultados y determinará una salida escalar.

¿Hay una mejor manera?

La respuesta a esa pregunta es quizás definitiva. Justo en la parte superior de mi cabeza, tienes varias otras opciones.

  1. Entrene una única red neuronal para determinar si una imagen contiene una cara. Divida la imagen en parches y marque “hay una cara en este parche” y cuente la cantidad de parches con caras en ellos. Haga esto para diferentes tamaños de parche y calcule su resultado a partir de eso. Este último paso también podría hacerse con una red neuronal estándar.
  2. Entrénelo para detectar narices, ojos, bocas, etc. ¡INDIVIDUALMENTE! Calcule su respuesta a partir de esa salida. Esto es efectivo cuando las caras pueden estar parcialmente oscurecidas. Tenga en cuenta que una CNN puede aprender a hacer exactamente esto por sí misma (o detectar otras características pero el mismo concepto), por lo que puede no ser necesario.
  3. Use una capa de agrupación variable (un término que acabo de inventar) que aplica la agrupación máxima pero su tamaño de agrupación depende de la salida de la capa anterior. Puede permitir que la red aprenda a calcular esto o puede especificarlo manualmente con bastante facilidad. Será molesto programarlo, ya que no es estándar en ninguna biblioteca que conozca y hace que el ajuste de los tamaños de las capas futuras sea complicado, pero es un experimento interesante.

Me acabas de dar como un millón de respuestas. ¡¿Cuál uso?!

Para la mayoría de los propósitos, la implementación básica debería funcionar bien, así que pruébalo primero. Si tienes problemas, mira lo que va mal. ¿Produce demasiadas o muy pocas caras? ¿Es correcto cuando las caras son del mismo tamaño pero incorrectas cuando no lo son? Ese tipo de cosas le dirá lo que necesita hacer para solucionarlo.

Puedes pensar en dos formas.

  1. Use un detector de objetos ab como SSD: Single Shot MultiBox Detector que puede detectar múltiples ocurrencias de objetos del mismo tipo en una imagen. Por supuesto, debe limitar los valores de confianza de salida del detector y evaluar su precisión.
  2. Si tiene acceso a un detector que puede detectar una sola ocurrencia, simplemente tome parches más pequeños en la imagen uno por uno recortando la imagen comenzando desde la izquierda y moviéndose hacia la derecha, y luego hacia abajo. Para cada cultivo, envíelo al detector y vea si hay una cara. Al final, puede contar con cuántos parches diferentes disparó su detector. Hay pocas cosas como el tamaño del cultivo y otras condiciones de contorno que necesita manejar. ¿Espero que esto ayude?

More Interesting

¿Qué es mejor: un tema fundamental de doctorado de ML o uno aplicado?

¿Es más fácil construir un vehículo autónomo que un sistema de traducción automática a nivel humano?

¿Cómo entrenamos redes neuronales en imágenes en lugar de datos numéricos?

¿Qué tipo de trabajo, como ingeniero de software, me apoyaría más para convertirme en Ingeniero / Investigador de Aprendizaje Automático más adelante en mi carrera?

¿Cuál es una buena forma de buscar artículos en visión artificial y aprendizaje automático?

¿La normalización de lotes hará la diferencia al entrenar con tamaño de lote = 1?

¿Todas las funciones de pérdida sufren el problema del gradiente de fuga en las redes neuronales?

¿Es el modelo de análisis factorial una versión multivariada del modelo de mezcla gaussiana?

¿Cuál es una explicación intuitiva del método de optimización llamado Hessian-free Optimizer (HF) para redes neuronales?

¿Es c # una buena opción para el aprendizaje automático de producción?

Cómo lidiar con datos sin patrones en los que necesito realizar un modelo de clasificación

Como persona con una maestría en química y un doctorado en ingeniería eléctrica y nanotecnología, a los 26 años sin experiencia en ciencias de la computación, ¿es demasiado tarde o demasiado difícil enseñarme a mí mismo el aprendizaje automático?

¿El reconocimiento facial basado en CNN todavía se clasificaría correctamente si la imagen facial presentada está al revés?

¿Cuál es la diferencia entre gradiente de política determinista y gradiente de política estocástica?

¿La red neuronal profunda es realmente un aprendizaje profundo?