Detección visual de gatos mediante detección de anomalías.

17

Tengo un proyecto de pasatiempo en el que estoy pensando comprometerme como una forma de aumentar mi experiencia hasta ahora limitada de aprendizaje automático. He tomado y completado el Coursera MOOC sobre el tema. Mi pregunta es con respecto a la viabilidad del proyecto.

La tarea es la siguiente:

De vez en cuando, los gatos vecinos visitan mi jardín, lo que no me gusta, ya que tienden a defecar en mi césped. Me gustaría tener un sistema de advertencia que me avise cuando haya un gato presente para poder perseguirlo con mi super remojo. Por simplicidad, digamos que solo me importa un gato con color blanco y negro.

He configurado un raspberry pi con módulo de cámara que puede capturar videos y / o imágenes de una parte del jardín.

Imagen de muestra:

Imagen de jardín de muestra

Mi primera idea fue entrenar a un clasificador para identificar un gato o un objeto similar a un gato, pero después de darme cuenta de que no podré obtener una cantidad suficiente de muestras positivas, lo abandoné en favor de la detección de anomalías.

Calculo que si capturara una foto cada segundo del día, terminaría con quizás cinco fotos que contienen gatos (de aproximadamente 60,000 con luz solar) por día.

¿Es esto posible mediante la detección de anomalías? Si es así, ¿qué características sugeriría? Mis ideas hasta ahora serían simplemente contar la cantidad de píxeles con los que tiene ciertos colores; hacer algún tipo de detección de manchas / segmentación de imágenes (que no sé cómo hacerlo y, por lo tanto, me gustaría evitar) y realizar el mismo análisis de color en ellas.

escarcha
fuente
1
Quizás esta pregunta sea más adecuada para el sitio SE de validación cruzada, ahora que lo pienso. La distinción no está clara para mí ...
Frost
44
Creo que la pregunta es muy adecuada para este sitio, ya que analiza una aplicación práctica del aprendizaje automático. Por cierto, pregunta tonta, ¿por qué tan pocas fotos de gatos? ¿Vienen solo por cinco segundos?
insys
@insys, los rumores sobre mi vigilancia con el remojo parecen haberse extendido en la comunidad felina. Tienden a no quedarse como solían hacerlo. Supongo que es algo bueno con el objetivo real de librar a mi jardín de gatos, a pesar de que complica mi solución preferida y más sofisticada.
Frost
2
Parece que el siguiente paso obvio (después de que funciona la detección de gatos) es un súper remojo controlado por frambuesa pi :-)
Kryten

Respuestas:

8

Podría simplificar su problema de manera significativa utilizando un enfoque de detección de movimiento / cambio. Por ejemplo, podría comparar cada imagen / cuadro con uno de un tiempo anterior (por ejemplo, un minuto antes), luego solo considerar los píxeles que han cambiado desde el momento anterior. Luego, puede extraer la región rectangular de cambio y usarla como base para su clasificación o detección de anomalías.

Tomar este tipo de enfoque puede simplificar significativamente su clasificador y reducir su tasa objetivo falsa porque puede ignorar cualquier cosa que no sea aproximadamente del tamaño de un gato (por ejemplo, una persona o un pájaro). Luego usaría las regiones de cambio extraídas que no se filtraron para formar el conjunto de entrenamiento para su clasificador (o detector de anomalías).

Solo asegúrese de obtener su tasa objetivo falsa lo suficientemente baja antes de montar una torreta láser en su sistema de detección de intrusos felinos.

bogatron
fuente
1
Esta es una buena idea para un entorno controlado, pero no estoy seguro de su aplicabilidad en este caso, ya que estamos tratando con el entorno natural donde hay un cambio continuo, es decir, un cambio en el clima, la posición del sol, las plantas y los árboles debido a viento, estaciones, etc. Creo que la región de cambio, como usted describe, crecería cerca del tamaño de la imagen completa en cualquier caso.
insys
@insys - Veo su punto pero no estoy de acuerdo - Creo que hace que el detector sea más resistente al cambio. La diferencia de tiempo entre fotogramas relativos debe ser pequeña (~ segundos a un minuto), por lo que el sol, la estación y el clima deben ser insignificantes. Estoy de acuerdo en que el viento hará que las plantas se muevan, pero el paso de clasificación puede evitarlos, ya que su tamaño / forma / color son diferentes a los de un gato. Además, el uso de dos cuadros en momentos similares permite normalizar las intensidades de píxeles para manejar mejor las diferentes condiciones de iluminación (por ejemplo, un gato en un día soleado o nublado).
bogatron
En realidad, estoy más confundido acerca de su respuesta ahora que leí su comentario :) Tal vez no entendí bien, pero si realmente usa las "regiones de cambio extraídas" para formar sus muestras positivas, como se menciona en su pregunta, ¿cómo puede hacer seguro que son gatos? Podrían ser cualquier cosa. Como tal, su paso de clasificación no detectaría nada más que lo que se enseña a detectar, es decir, cambios de cualquier tipo. Por lo tanto, en realidad está repitiendo el trabajo del detector de "cambio".
insys
Además, las condiciones de iluminación son definitivamente preocupantes, pero, si entiendo bien, no está claro qué dos imágenes similares, tomadas con una diferencia de 1 minuto, ofrecerían para normalizar las intensidades de píxeles.
insys
Las regiones extraídas pueden representar ejemplos positivos o negativos: son lo que usaría para entrenar al clasificador de gatos. Con respecto a las intensidades, suponga que el clasificador está entrenado de regiones extraídas principalmente de imágenes soleadas. El clasificador puede encontrar fácilmente gatos con pelaje blanco brillante, pero eso no funcionará bien más tarde en un día nublado (cuando el pelaje blanco no es tan brillante) o cerca del anochecer. Realizar una normalización de las dos imágenes ayuda a mitigar ese problema (es decir, un par de imágenes brillantes y un par de imágenes oscuras parecerían similares al clasificador).
bogatron
4

Este es un proyecto interesante y también bastante ambicioso :)

No estoy seguro de que la detección de anomalías (al menos en el sentido descrito en el curso que siguió) sería un algoritmo muy adecuado en este caso.

Consideraría un enfoque más viable como lo que se discutió al final de ese curso donde se demostró un flujo de trabajo de Photo OCR.

El enfoque consistiría en segmentar su imagen en "bloques" más pequeños, y revisarlos uno por uno utilizando un algoritmo de aprendizaje supervisado e intentar clasificar cada bloque de acuerdo a si contiene un gato o no. Si un bloque contiene un gato, la alarma se activa. Como beneficio adicional, también obtienes la posición del gato, por lo que puedes pensar en incorporar alguna respuesta "automática" como un paso futuro para tu proyecto.

El beneficio aquí es que no tendrá que entrenar su algoritmo usando un conjunto de datos específico para su jardín (que, como mencionó es difícil de crear), pero puede usar imágenes de gatos extraídos de la red (por ejemplo, tal vez pueda buscar "gato en el césped" o algo así), y tal vez parches de fotos de sus (u otros) jardines. Por lo tanto, no tiene que pasar el tiempo recolectando fotos de su cámara, y evita el riesgo de tener una muestra muy pequeña (comparable) de positivos (es decir, gatos).

Ahora, por supuesto, lo fácil que es construir un detector de gatos preciso es otro tema.

insys
fuente
¿Y qué pasaría si su bloque divide el corte en dos o más rebanadas? La estrategia de bloqueo es un enfoque muy común, pero cuando tengo una cámara completamente fija en una determinada posición, la detección de movimiento es un enfoque mejor y que requiere menos tiempo, desde mi punto de vista.
adesantos
@adesantos: lo que usted dice puede ser cierto, y para la predicción, la diferenciación entre partes móviles y no móviles tiene sus ventajas. Pero para el entrenamiento, tal como lo describe bogatron, no está claro qué beneficios aporta. En general, mi opinión es que agrega complejidad, lo que alarga significativamente el tiempo de depuración. La ventaja de mover la ventana está en su simplicidad.
insys
Por cierto, con respecto a la división que mencionas, una estrategia obvia es dejar que tus ventanas se superpongan, de modo que la posición de división no afecte a tu clasificador.
insys
Agregaría a mi propuesta (detección de movimiento) el uso del algoritmo SIFT con una textura de gato. El método SIFT también se puede usar con esa estrategia de bloques, pero en ese caso comparará más bloques de los necesarios. Observe que un gato se mueve, pero un árbol o un arbusto no tanto.
adesantos
3

La estrategia de detección de movimiento / cambio es ciertamente adecuada, pero agregaría una operación adicional. Detectaría aquellas regiones que tienen más probabilidades de cambiar, por ejemplo, la escalera parece un lugar donde los humanos pueden estar (también los gatos) y la hierba donde pueden estar los perros, los gatos o los humanos.

Capturaría un mapa con el tamaño del objeto y la trayectoria y con esto crearía un clúster con el objetivo de detectar un objeto (con un tamaño específico dentro de la imagen en términos de píxeles) que se mueve con cierta velocidad y trayectoria.

Puede lograr esto usando R o sugeriría OpenCV para detectar movimiento y seguir diferentes objetos.

adesantos
fuente
2

La sustracción de fondo de OpenCV encontrará objetos que se mueven alrededor de su endurecimiento. Después de eso, podría usar un clasificador o análisis de forma para diferenciar entre gatos, personas, árboles, etc.

vrfsdbelbeml
fuente
1

¿Es un pajaro? ¿Es un gato? ¡Tenemos el tamaño de un gato blanco y negro! urracas aquí. entonces eso fallaría.

Lo primero sería excluir todas las áreas que son verdes, los gatos rara vez son verdes.

Luego compare el resto con una imagen de referencia para eliminar elementos estáticos como piedras y escaleras.

La detección de objetos de un tamaño mínimo debería ser posible, pero para una clasificación la resolución es demasiado baja. También podría ser tu vecino probando su nuevo dron con control remoto.

Con dos cámaras puede hacer un mapeo 3D de los objetos y eliminar los objetos voladores.

usuario1164
fuente