La visión por computadora ha captado el interés de empresarios de todo el mundo, y por una buena razón: las capacidades de la tecnología moderna de IA convierten ideas que antes eran imposibles en productos reales.
La detección y clasificación de objetos en fotografías y vídeos ha encontrado aplicaciones en muchas áreas diferentes y en cientos de sistemas, desde cámaras de seguridad con reconocimiento facial incorporado y detección de enfermedades basadas en escaneos de rayos X hasta simples aplicaciones móviles.
Pero basta de introducción, en este artículo quería compartir "entre bastidores" de cómo se desarrolla un producto de visión por computadora, especialmente uno complejo.
Tuve la oportunidad de trabajar en Birdsy, una aplicación de reconocimiento de aves para personas que quieren ver quién visita sus patios traseros mientras no miran.
Birdsy es una aplicación compleja impulsada por IA con detección y clasificación de objetos en tiempo real que debe poder ejecutarse en hardware débil, detectar tipos de aves y sexo con alta precisión.
Teniendo en cuenta todo eso, el camino desde la idea inicial hasta la publicación de la aplicación en las tiendas de aplicaciones fue complicado y cautivador al mismo tiempo.
Hemos enfrentado muchos obstáculos, tanto desde el punto de vista empresarial como del desarrollo, que he decidido compartir en un solo lugar para, con suerte, ayudar a los emprendedores y desarrolladores de IA que podrían estar enfrentando el mismo proyecto.
Las aves han tenido millones de años de evolución para mezclarse perfectamente con su entorno y evitar a los depredadores y, en este caso, a los observadores de aves, lo que les dificulta admirar la vida silvestre.
Si bien observar ciertas especies de aves cara a cara puede ser problemático, monitorearlas a través de una cámara de video desde la comodidad de su hogar es una manera encantadora de disfrutar de nuestros amigos alados, especialmente si la IA elimina la necesidad de mirar horas de video y envía Te avisa cuando un pájaro ha entrado en el campo de visión de la cámara, detectando automáticamente de qué especie de pájaro se trata.
Birdsy tiene dos partes:
Para que el servicio sea más accesible y fácil de usar, se puede utilizar cualquier cámara para la observación de aves. Aquí es donde nos topamos con el primer problema: las cámaras de baja calidad al ser las más asequibles y las más extendidas.
Si bien el 'sin límite de cámara' es excelente para los usuarios, representó un desafío para nosotros, ya que el modelo de detección de objetos se ejecuta utilizando el chipset de la cámara.
Cuando alguien consigue un buen trato, otros se llevan la peor parte; en este caso, "otros" son nuestros desarrolladores de CV. Trabajar con una cámara barata significa trabajar con un chipset barato que hace imposible utilizar la arquitectura de red neuronal predeterminada.
En comparación con un estándar de primera línea de cámaras de video de visión por computadora (NVIDIA Jetson Nano) que permite usar alrededor de 120 capas de YOLO v4 predeterminado, las cámaras con las que tuvimos que trabajar solo permitían 22 capas.
Mientras que una red neuronal YOLO v4 completa proporciona excelentes resultados de reconocimiento, una versión simplificada tiene un rendimiento deficiente. Probamos ambos y nos sorprendió desagradablemente lo baja que era la profundidad del modelo cuando lo ejecutamos con un chipset económico.
Comenzamos entrenando el modelo YOLO v4 predeterminado y probándolo en el conjunto de datos del cliente. Los resultados que logramos fueron satisfactorios: 95% de mAp, que en el mundo de la visión por computadora es más que suficiente para lanzar un modo a producción.
Después de volver a entrenar el modelo para que se ajustara a los parámetros de la cámara, la calidad de la detección disminuyó significativamente. Pero donde las máquinas fallan, los humanos avanzan.
Probamos la red neuronal con datos de prueba y evaluamos visualmente los falsos positivos y los falsos negativos. Esto puso de relieve dónde le faltaba conocimiento a la red y dónde cometía más errores.
La red estaba ansiosa por detectar a las personas, especialmente las manos de las personas, como animales (y no lo culpamos, los humanos SON animales después de todo). Si bien, desde un punto de vista biológico, esto es correcto, el usuario final está más interesado en observar las aves que a sus vecinos, por lo que tuvimos que trabajar para enseñar a la red a ignorar a las personas y centrarse en las aves y los mamíferos.
Para ello hemos añadido ejemplos negativos, incluidas imágenes de personas en distintos ángulos y manos humanas.
Las cámaras tienen dos modos: el modo diurno normal, que produce imágenes a todo color, y el modo infrarrojo nocturno, que produce imágenes en blanco y negro. Cuando la cámara cambió a infrarrojos, el modelo produjo muchos falsos positivos:
Los usuarios no estarían muy felices de ser despertados por una notificación, se emocionarían al mirar un búho o un zorro, pero terminarían mirando una grabación de una polilla golpeando su cuerpo contra la lente de una cámara.
Para reducir al mínimo las interrupciones del sueño, recopilamos casos de falsos positivos en entornos nocturnos y los marcamos a mano.
¿Alguna vez has oído hablar de las redes sociales como "carretes destacados" donde las personas presentan la mejor versión de sí mismas? ¿Quién diría que lo mismo podría ocurrir con los animales salvajes?
Las fotografías de aves que se pueden obtener de fuentes abiertas, como Google Imágenes y vídeos de Youtube, suelen ser de alta calidad, muy nítidas y muestran los mejores especímenes, mirando a la cámara o al menos colocados de frente, sin nada entre el pájaro. y la cámara obstruye la vista.
La realidad no siempre es tan bonita. Las cámaras producen imágenes de baja calidad que pueden dificultar la comprensión de lo que sucede incluso para el ojo humano, las malas condiciones climáticas como lluvia, nieve o polvo pueden obstruir la vista, y estamos seguros de que las aves sienten cuando alguien quiere capturarlas y posicionarse de la manera más ridícula posible.
El conjunto de datos que proporcionó el cliente (que consta de imágenes fragmentadas encontradas en Internet) no fue de mucha utilidad para este proyecto.
Necesitábamos recopilar un conjunto de imágenes de aves en condiciones reales utilizando las cámaras del cliente para mostrarle al modelo cómo son realmente las aves y no cómo se presentan en las redes sociales.
Entonces, después de hacer todo lo anterior:
Hemos logrado alcanzar un mAP del 97,5% para la detección de objetos. Este es un resultado muy alto para un modelo de visión por computadora, ya que la regla no escrita para cualquier modelo CV que entre en producción es tener más del 94% de mAP.
Si bien los resultados que hemos logrado ahora son más que suficientes para utilizarlos en el producto final, todavía hay margen de mejora.
Después de recopilar suficientes imágenes para cada grupo, esperamos que el mAP aumente y alcance el 98,5%.
El siguiente paso para conocer a los visitantes de su patio trasero es pasar la imagen con un pájaro a un modelo de clasificación de objetos. Su objetivo es reconocer la especie de ave y su sexo.
Como algunas especies de aves viven exclusivamente en determinados continentes, hemos decidido crear dos modelos: uno para las que viven en América del Norte y otro para las de Europa.
Inicialmente, el problema de la clasificación de objetos se resolvió mediante un enfoque "frontal": a la red se le mostraron fotografías de todas las diferentes especies, tanto machos como hembras, a partir de las cuales se intentó aprender cómo son y en qué se diferencian entre sí. otro.
Esto resultó en puntuaciones de precisión muy bajas; en otras palabras, la red cometió muchos errores al identificar especies de aves y mamíferos.
La red estaba intentando aprender demasiados aspectos al mismo tiempo. Muchas especies de aves se parecen mucho entre sí y se diferencian entre sí por una única mancha de plumas de diferentes colores o por un pico de diferente forma.
Retener toda esta información, junto con el aspecto de los diferentes sexos de la misma especie, es demasiado difícil en determinadas circunstancias. La red a menudo mezclaba especies de aves y al mismo tiempo determinaba correctamente el tipo de ave más amplio.
Por ejemplo, la diferencia entre una reinita encapuchada y una reinita de Kentucky en una mancha de plumas negras:
La red etiquetaría una reinita encapuchada como reinita de Kentucky, lo que produciría un resultado incorrecto, pero en general sería correcto: ambas SON reinitas. Por razones de tiempo, el cliente decidió que era más importante detectar el tipo de ave en general que su especie particular, así que ahí es donde comenzamos.
Después de la evaluación del modelo, hemos decidido implementar un enfoque de varias etapas:
Al agrupar las especies de aves, logramos disminuir el número de clases de 98 a 49, lo que mejoró enormemente la puntuación de precisión ya que la red simplemente no tenía tantas clases para elegir.
Cuando te encuentras con un concepto nuevo, lees libros o miras videos educativos para comprenderlo. Si fracasas, le pides a tu amigo que te lo explique o visitas un seminario sobre el tema. En otras palabras, intentas acumular más información al respecto para comprenderlo mejor.
Lo mismo ocurre con las redes neuronales. Cuanto mejor necesites entender cómo es una reinita, más imágenes de reinitas necesitarás para mostrarla. Cuantos más datos haya analizado, mejores serán las puntuaciones de precisión.
El enfoque de varias etapas que hemos elegido no solo mejoró la precisión del modelo de clasificación de objetos, sino que también hizo posible analizar el conjunto de datos y determinar dónde faltaban datos de aprendizaje en la red.
Después de lanzar el modelo de clasificación de objetos, nos sorprendió recibir resultados mucho peores de lo que nos mostraron las pruebas: el modelo no podía determinar correctamente la especie o el tipo de ave.
El problema era más profundo que esto: nuestro desarrollador de visión por computadora a cargo de todo el proyecto, que aprendió todas las especies de aves mientras trabajaba en él, tampoco pudo determinar cuáles eran las aves cuando recibió las imágenes etiquetadas incorrectamente por la red. .
Resultó que julio no es el mejor momento para lanzar un modelo de clasificación de aves, ya que es el momento en que las aves adolescentes aprenden a volar y abandonar sus nidos.
¿Recuerdas la historia del patito feo? Bueno, es cierto para la mayoría de las aves, los novatos no se parecen en nada a las aves adultas y es difícil saber qué ave estás mirando si aún es joven.
Hemos recopilado imágenes de aves jóvenes durante el verano y planeamos entrenar la red de clasificación para determinar las diferentes especies de aves en diferentes edades.
Los observadores de aves son un grupo apasionado, saben cómo identificar un ave por la forma de su única pluma. Poseen el conocimiento que nuestra red de clasificación sueña tener, entonces, ¿por qué no unirlos y formar una alianza amante de las aves como el mundo nunca antes había visto?
Actualmente, la red de clasificación no sólo le dice al usuario la especie de ave, sino que muestra el grado de confianza junto con otras conjeturas.
El usuario puede confirmar la suposición de la red o corregirla, ayudándonos así a entrenarla, un pájaro a la vez. Después de ejecutar el sistema de comentarios de los usuarios durante 3 meses, hemos recopilado más de 20 mil imágenes. Estos datos son muy valiosos para nosotros ya que las fotos están tomadas en condiciones reales (malas condiciones climáticas, de noche, etc.) y están marcadas por expertos.
Vale la pena señalar que durante este proyecto, nosotros mismos nos hemos convertido en expertos en aves. Observar aves durante todo el día, y al mismo tiempo educar a un niño virtual sobre las pequeñas diferencias entre los diferentes tipos de gorriones, lo convierte instantáneamente en un miembro platino de la comunidad de observación de aves.
Si todo lo demás falla, los miembros de nuestro equipo de CV pueden terminar fácilmente en ornitología.
Hablando en serio, al observar miles de imágenes de aves, ya sea para marcar conjuntos de datos o analizar dónde la red comete la mayor cantidad de errores, hemos profundizado en este proyecto y salimos del otro lado no solo con un montón de conocimientos sobre aves, sino también una mejor comprensión de cómo funcionan los complejos sistemas de clasificación y reconocimiento de imágenes, cómo implementarlos mejor, cómo analizar un gran conjunto de datos y encontrar sus puntos débiles.
Este proyecto fue invaluable para nosotros como una oportunidad para investigar y trabajar con las últimas tecnologías de visión por computadora, trabajar con comentarios de los clientes en tiempo real y pulir nuestras habilidades de resolución de problemas cuando trabajamos con código obsoleto.