# Proyecto de monitoreo de fauna a través de fototrampas ###### tags: `Definitions and References` ## Alcance El problema que buscamos resolver es el de encontrar las fotos en las que aparece algún animal en un conjunto de fotos de cámaras trampa, con el objetivo de acelerar el proceso de etiquetado manual por un equipo de personas. Al mismo tiempo, para ciertas aplicaciones de monitoreo muchas veces es deseable descartar las fotos donde aparecen personas o fauna doméstica, para centrarse en especies de fauna silvestre, con lo cual realizar un filtrado de algunas especies también haría más eficiente el proceso de etiquetado. Esto coincide con que algunas de estas categorías, ya sea por la cantidad de fotos con las que se cuenta o por la apariencia de los individuos, son fácilmente clasificados por un modelo de visión por computadora, como las personas, los automóviles o algunas especies de gran tamaño, de las que además se cuenta con muchas fotos. Por lo tanto, necesitamos una metodología que permita diferenciar entre imágenes con-fauna e imágenes sin-fauna, realizando un análisis de las especies de las que se tenga la suficiente certeza que serán filtradas correctamente del conjunto de imágenes con-fauna y etiquetarlas de manera automática. ## SELIA [SELIA](http://selia.conabio.gob.mx/) es un programa para cargar y consultar bases de datos de biodiversidad animal. Su propósito es reducir el esfuerzo a la hora de cargar muestreos y facilitar el proceso de trabajo. Ofrece un sistema automatizado y centralizado de gestión de bases de datos. Tres importantes ventajas: - Sistema semiautomatizado de carga de archivos que facilita el ingreso de la información. Revisa los metadatos de los archivos cargados y llena todos los campos que le sean posibles (fecha, hora, ubicación, tipo de archivo, etc.). - Permite revisar las fotografías y etiquetarlas. - Permite reutilizar datos del pasado, a partir de muestreos anteriores identifica patrones y rellena los campos (coordenadas, localidad, etc.). Nosotros proponemos utilizar SELIA para centralizar la información de todas las colecciones y así tener una forma común de consultar y actualizar la información de las fotocolectas. ## El cliente de anotación y Naturalista El [cliente de anotación](https://snmb.conabio.gob.mx/cliente_anotacion/?user_id=0&level=usuario) es una plataforma web que permite generar anotaciones sobre colecciones de imágenes de fototrampas, acotando las especies disponibles a las registradas en México y que han sido catalogadas por la CONABIO. Esta herramienta permite marcar una o varias regiones en cada foto, indicando cualquier nivel taxonómico a través de una búsqueda en el catálogo mientras se captura el nombre, autocompletándolo en función de los nombres científicos, nombres comunes y sinónimos encontrados, dando la opción de elegir alguno de los resultados y que será el taxón del individuo. La herramienta permite, además, dar información más específica de cada individuo, como su sexo, edad, comportamiento, etc., o bien indicar que la foto no contiene presencia de fauna o de personas. La información generada a través del cliente de anotación será visible en la versión local de [Naturalista](http://snmb.conabio.gob.mx/home) de la CONABIO, donde se organizan las observaciones realizadas por el usuario o grupo de usuarios de un proyecto, pudiendo realizar análisis estadístico sobre las observaciones realizadas, y cuando se llegue a un cierto nivel de certeza en la calidad de las observaciones hechas en las fotos, esta información podrá ser exportada a la versión global de Naturalista. ### Colecciones Actualmente contamos con varias colecciones de fotos de cámaras trampa, de las cuáles algunas fotos ya han sido etiquetadas, ya sea indicando la presencia de algún animal o persona y especificando su localización a través de un recuadro (bounding box) y su clasificación taxonómica, o con una marca que indica que en la fotografía no hay presencia de animales ni personas. #### SNMB Esta es la colección etiquetada en la CONABIO con el cliente de anotación de la que más etiquetas tenemos en este momento, y tiene la siguiente distribución: | Total de fotos | Fotos con fauna | Fotos sin fauna | Fotos sin etiquetar | | -------------- | --------------- | --------------- | --------------- | | 616,469 | 31,990 | 206,888 | 377,591 | ![](https://i.imgur.com/97Ljy3Y.png) De las fotos etiquetadas tenemos: ![](https://i.imgur.com/qi65tJ5.png) Vemos que hay un gran desbalance entre las fotos que no tienen fauna y las que sí, siendo esto algo muy común en las colecciones de fototrampas, debido a que las cámaras suelen activarse por otros motivos además del movimiento de un animal frente a ellas, siendo esto un factor que dificulta mucho la tarea de evaluación del rendimiento de un modelo que detecta animales en las fotos, ya que la cantidad de detecciones falsas aumentará a causa de la proporción de imágenes vacías. ##### Distribución de las 20 etiquetas más comunes ![](https://i.imgur.com/YIv0MSq.png) #### Otras colecciones Se han integrado otras colecciones al cliente de anotación, como IBUNAM, Pronatura, Instituto de Biología, Provicom, Serengeti, Caltech, etc., y pueden ser vistas y etiquetadas por algunos usuarios, dependiendo de los permisos que se les otorgue en la plataforma. Algunas de estas colecciones ya contaban con etiquetas previas y éstas fueron importadas a la plataforma para servir como apoyo en la generación de nuevas etiquetas. #### Privacidad de datos En las colecciones de fototrampas hay datos sensibles que a veces no se quiere compartir con otros usuarios, pero que es útil para entrenar y evaluar los modelos de detección, como la información de localización o las fotos donde aparecen personas, y esta puede ocultarse o mostrarse de manera difusa si los propietarios de la colección así lo requieren. #### LILA BC El [Proyecto LILA BC](http://lila.science/datasets) recopila una serie de colecciones de fotos, varias de ellas de cámaras trampa, y pone disponibles tanto las imágenes con sus metadatos, como las anotaciones hechas sobre ellas, esto con el objetivo de ayudar a proyectos de monitoreo a entrenar y evaluar modelos de clasificación y detección de fauna. Generalmente los datos de las imágenes y las anotaciones de estas colecciones son compartidos en archivos JSON que siguen el [formato COCO](https://github.com/Microsoft/CameraTraps/blob/master/data_management/README.md#coco-cameratraps-format), que es un estándar utilizado en competiciones de visión por computadora para la evaluación de modelos y que cada vez se usa más extensamente para compartir la información de colecciones de fotos y otros tipos de datos en proyectos de Aprendizaje Automático. Para facilitar y difundir el uso de este formato, el [proyecto COCO](https://github.com/cocodataset/cocoapi) desarrolló un API disponible en varios lenguajes de programación que permite la creación de datasets a partir de archivos que sigan este estándar. ### Modelos de detección de objetos Son modelos capaces de encontrar **objetos** dentro de una imagen, asociando a cada uno de ellos: - Una categoría. - La localización por medio de un recuadro delimitador (bounding box). - Un nivel de confianza de la detección (**score**) (0, 1]. ![](https://i.imgur.com/TufEGpJ.png) Aunque en esta etapa del proyecto no importa que el modelo pueda detectar más de un individuo en cada foto y dar su localización, nos basamos en esta clase de modelos ya que en general tienen mejor rendimiento que los de [Clasificación](https://hackmd.io/@api-conabio-ml/SJz3eYNrL) y presentan una serie de ventajas que podremos aprovechar en etapas posteriores. #### Megadetector Un grupo de desarrollo patrocinado por el programa de Microsoft [AI for Earth](https://www.microsoft.com/en-us/ai/ai-for-earth) entrenaron un modelo con varias colecciones de fotos de cámaras trampa y lo llamaron [Megadetector](https://github.com/microsoft/CameraTraps/blob/master/megadetector.md), del cual publicaron tanto el [archivo TFODAPI](https://lilablobssc.blob.core.windows.net/models/camera_traps/megadetector/megadetector_v3.config) con la configuración de los hiperparámetros que fueron usados en el entrenamiento, como el [archivo .pb](https://lilablobssc.blob.core.windows.net/models/camera_traps/megadetector/megadetector_v3.pb) con los pesos del modelo, y que permite utilizarlo ya sea para generar detecciones sobre cualquier conjunto de imágenes, o para que pueda ser re-entrenado sobre un conjunto de fotos específico, usando interfaces de programación como el [API de Detección de Objectos de Tensorflow](https://github.com/tensorflow/models/tree/master/research/object_detection). *El Megadetector pretende ser un detector genérico de animales en fotos de cámaras trampa.* Este modelo se basa en la arquitectura Faster-RCNN con una red InceptionResNetv2, y fue entrenado para ser capaz de detectar objetos de las siguientes categorías: 1. Animal 2. Persona [Aquí](http://dolphinvm.westus2.cloudapp.azure.com/video/detector_video.html) se muestra un video del funcionamiento del Megadetector. ### Métricas de evaluación Un modelo suele producir un conjunto de unas 100 detecciones por imagen, y puede que la mayoría tengan un valor de score muy pequeño (<0.1) y se trate de detecciones falsas. Por lo tanto, es necesario poner un umbral de score y considerar sólo aquéllas detecciones que superen este valor. En la siguiente imagen, a la izquierda se muestran todas las detecciones generadas para la foto y a la derecha sólo aquéllas con un score ≥ 0.9: ![](https://i.imgur.com/fusYDoB.png) Para el caso de las fototrampas, configurar este umbral demasiado alto puede suponer que sea difícil encontrar algunas especies y se pierda una parte considerable de las fotos con animales. Por otro lado, si se pone el umbral muy bajo, se pueden tener demasiadas detecciones falsas y el modelo no estaría ayudando a reducir el esfuerzo requerido para encontrar las fotos que nos interesan. La relación entre la cantidad de fotos con animales que el modelo es capaz de recuperar y la cantidad de fotos que tenemos que revisar para ello, se puede medir con la **precisión** y la **recuperación** (recall). ![](https://i.imgur.com/mapxa0b.png) Un modelo óptimo recuperará todos los objetos verdaderos (recall=1) sin generar detecciones falsas (precisión=1). Si no usamos un modelo tenemos que revisar un porcentaje N de todas las fotos para encontrar ese mismo porcentaje N de las fotos con animales. Un buen modelo ayudará a recuperar un porcentaje N de fotos con animales teniendo que revisar un porcentaje menor que N de todas las fotos. ##### Curvas de Precisión x Recall Es una forma de medir la relación entre la precisión y la recuperación de un modelo. La idea detrás de este método es la de estimar el **impacto** que tendrá tomar únicamente las detecciones con un score mayor a un cierto valor de umbral. Aunque las métricas tradicionales para evaluar los modelos de detección de objetos evalúan que la localización de los recuadros encontrados sea muy similar a la de los recuadros de las anotaciones manuales, en este caso no es necesario evaluar esto, por lo que simplemente se analizan los nivel de score de las detecciones del modelo para la construcción de las curvas de Precisión x Recall. Por ejemplo, a continuación se muestra la gráfica de Precisión x Recall que se obtuvo al pasar el Megadetector a **todas** las fotos etiquetadas del SNMB (87% sin fauna): ![](https://i.imgur.com/Ze4VuVg.png) La interpretación de esta gráfica es: - Para la clase Animal el modelo es capaz de recuperar el 80% de las fotos con animales teniendo una precisión del 50%. Es decir, si tenemos un conjunto de 1 millón de fotos, donde es probable que sólo 100,000 tengan animales (10%), el modelo será capaz de recuperar 80,000 de ellas (80%), teniendo que revisar para ello 160,000. Sin utilizar el modelo, se habrían tenido que revisar 800,000 fotos para encontrar 80,000. Estamos recuperando un 80% de las fotos con animal revisando únicamente el 16% del total, reduciendo el trabajo en un factor de 5. - Si quisiéramos tener un 90% de recuperación de los animales, esto sería asumiendo que la precisión es del ~25%, y se podrían recuperar 90,000 fotos con animales teniendo que revisar 360,000. Estamos recuperando un 90% de las fotos con animal revisando únicamente el 36% del total, reduciendo el trabajo en un factor de 2.5. - Si es suficiente con tener una recuperación del 60%, ésta se puede alcanzar con una precisión del 90%, por lo que podríamos recuperar 60,000 fotos con animal teniendo que revisar únicamente 66,666. Sin el modelo se habrían tenido que revisar 600,000. Estamos recuperando un 60% de las fotos con animal revisando únicamente el 6.6% del total, reduciendo el trabajo en un factor de 9. - Si quisiéramos tener un 100% de recuperación de los animales, esto sería asumiendo que la precisión es del ~10%, por lo que tendríamos que revisar 1 millón de fotos para recuperar las 100,000 con animal, y en ese caso el modelo no estaría ayudando a reducir el trabajo de etiquetado. - Para la clase Persona es algo similar, teniendo un 90% de recuperación con un 50% de precisión. [Aquí](https://hackmd.io/KqOleR0TQXGAbQ8NsBuzuA?view#Definiciones-y-especificaciones-de-modelos-de-Detecci%C3%B3n) se explican con mas profundidad los conceptos relacionados con estos modelos y métricas. ### Generación de etiquetas automáticas Las herramientas que hemos desarrollado en el área de Ecoinformática permiten generar detecciones sobre un conjunto cualquiera de fotos, indicando las regiones en cada una donde aparece un individuo identificado, con el nombre de la categoría y el score que se le asignó a la detección. Opcionalmente también es posible guardar estas imágenes en carpetas de acuerdo a las categorías contenidas en cada imagen, y si se cuenta con un conjunto previamente etiquetado de fotos, y que las etiquetas estén organizadas en alguno de los formatos soportados (CSV, JSON, imágenes en carpetas con los nombres de las categorías, etc.), también se podrá evaluar el modelo sobre este conjunto de fotos para estimar su rendimiento sobre otro conjunto de fotos de la misma colección o de un ecosistema similar. Otra funcionalidad que es bastante útil es la de generar etiquetas automáticas sobre las fotos de las colecciones que se encuentren integradas en el [cliente de anotación](#El-cliente-de-anotaci%C3%B3n-y-Naturalista), mostrando únicamente aquéllas con detecciones que tengan un **score** por encima de un valor que nos dé un cierto grado de confianza de que el modelo encontró correctamente **la mayoría** de los individuos presentes, permitiendo etiquetar manualmente un conjunto potencialmente **mucho más pequeño** de fotos y reduciendo en gran medida el tiempo de la tarea de etiquetado. Los términos "*la mayoría*" y "*mucho más pequeño*" están relacionados con las necesidades del problema que se está tratando de resolver, y el *score* utilizado para esto puede ser determinado a partir del análisis hecho en el proceso de evaluación que se describió anteriormente. ## Timelapse [Timelapse](http://saul.cpsc.ucalgary.ca/timelapse/) es una alternativa para el etiquetado off-line ## Diagrama del sistema ![](https://i.imgur.com/QVOYQy2.png)