Fuente: Project Hub
Dispositivo TinyML basado en la ganadería de precisión para la detección temprana de enfermedades respiratorias de los cerdos utilizando Edge Impulse.
Componentes y suministros
Apps y servicios en línea
Sobre este proyecto
Background
Para 2050, se prevé que la población humana mundial supere los 10 mil millones, consumiendo entre un 50% y un 60% más de lo que consume ahora. Sin modificar nuestras prácticas de consumo actuales, habrá un aumento significativo de la inseguridad alimentaria a nivel mundial. Los productos animales son fundamentales para la nutrición, la seguridad alimentaria, los medios de vida y la resiliencia de cientos de millones de personas en todo el mundo. La ganadería representa el 40% de los ingresos agrícolas mundiales. Se prevé que la demanda de productos animales seguirá aumentando en las próximas tres décadas, al igual que su precio de mercado.
Durante años, se han realizado experimentos, ensayos e investigaciones para convertir la ganadería de precisión (PLF) en un éxito. La ganadería de precisión es potencialmente una de las vías más poderosas para las intervenciones de desarrollo en el sector ganadero en particular, así como en el desarrollo nacional en general. El auge de nuevas tecnologías como TinyML e IoT tienen el potencial de revolucionar la industria ganadera. Se pueden utilizar para aumentar la rentabilidad, la eficiencia y la sostenibilidad de las granjas mediante la mejora de la cría, la nutrición, el diagnóstico temprano de enfermedades y otros aspectos de gestión de varias especies de ganado. El desafío y el éxito de la agricultura radica en la precisión con la que podemos intensificar nuestras prácticas agrícolas a largo plazo.
A lo largo de los años, la cría de cerdos se ha convertido gradualmente en una de las principales empresas agroindustriales. A nivel mundial, la carne de cerdo representa más del 38% de la producción mundial de carne, lo que la convierte en una carne muy popular.
Problema
La salud y la nutrición son los dos factores principales que rigen el rendimiento físico y económico de los cerdos desde el destete hasta el sacrificio. Las enfermedades respiratorias en los cerdos son posiblemente el problema de salud más importante para los productores de cerdos en la actualidad. Según una encuesta realizada por el Sistema Nacional de Monitoreo de Sanidad Animal (NAHMS), las enfermedades respiratorias fueron identificadas como la principal causa de mortalidad porcina: 44,2% de los lechones de destete y 61,1% de los cerdos de engorde / finalización.
La detección temprana y el diagnóstico de infecciones respiratorias en granjas de cerdos comerciales es fundamental para una intervención oportuna, lo que mejora el éxito del tratamiento, reduce el impacto de las enfermedades y promueve la producción porcina sostenible.
Los cerdos producen una amplia gama de sonidos con una variedad de significados. Las vocalizaciones de los cerdos enfermos podrían indicar enfermedades respiratorias. La tos es uno de los síntomas que buscan los veterinarios al diagnosticar y tratar enfermedades respiratorias comunes del ganado.
Solución
En este proyecto, construiré un dispositivo TinyML de bajo costo que puede detectar los sonidos de un cerdo tosiendo dentro de una manada de cerdos que gruñen, chillan y gritan en una pocilga de cerdos.
Arquitectura del proyecto
Model Training en Edge Impulse
Paso 1: Adquisición de datos
El primer paso fue recopilar datos que representen las dos clases a clasificar:
° Sonido de cerdo tosiendo
° Ruido (Fondo de pocilga de cerdo, cerdos gruñendo, cerdos chillando y cerdos chillando)
Obtener un conjunto de datos listo para usar para el proyecto fue difícil, así que decidí preparar el mío a partir de fuentes dispersas en línea. Para el sonido del cerdo tosiendo, logré obtener 7 minutos de datos. Luego utilicé el software Audacity para resaltar y exportar muestras .WAV de 1 segundo de largo de la región de interés como se muestra en la imagen a continuación.
Al exportar, configuro la frecuencia de muestreo en 16 KHz y 16 bits-PCM. El conjunto de datos era demasiado pequeño con muestras limitadas de muestras de sonido de tos, así que decidí realizar una curación de datos utilizando este repositorio de GitHub de Shawn Hymel. Durante la curación, mezclé las muestras de tos con el ruido de fondo de la pocilga de cerdo para obtener una salida de 1800 muestras.
Para la clase Noise, recopilé los gruñidos, chillidos y gritos de YouTube, los convertí a mp3 y luego a formato de archivo WAV. Luego los probé a 16 KHz usando audacity y los puse en una carpeta. Después de eso, agregué el siguiente script de Python en la misma carpeta y lo ejecuté en Visual Studio Code para dividir los archivos en trozos de 1 segundo cada uno.
Después de eso, los subí a Edge Impulse Studio para entrenar usando el Cargador de la Interfaz Web como se muestra a continuación.
Paso 2: Diseño de impulsos
Después de la adquisición de datos, diseñé mi impulso como se muestra a continuación. Para el bloque DSP elegí MFCC, mientras que para el bloque de aprendizaje automático decidí ir con un bloque de red neuronal como se muestra a continuación.
Después de eso, guardé mis parámetros como predeterminados y generé características. A continuación se muestra una muestra de cómo se ve un espectrograma extraído de un cerdo tosiendo.
Paso 3: entrenamiento
A continuación, procedí al clasificador de redes neuronales. Comencé con 50 épocas y una tasa de aprendizaje de 0.005 con una calificación de confianza mínima de 0.80 como se muestra en la siguiente figura.
Arquitectura de red neuronal:
Después de entrenar durante 50 épocas, obtuve los resultados que se muestran en la matriz de confusión a continuación.
Despliegue del modelo
Después del entrenamiento y la prueba del modelo, procedemos a la implementación del modelo. Elegí la biblioteca Arduino y encendí el compilador EON como se muestra en la imagen de abajo, luego hice clic en “construir”. El compilador EON optimiza la red neuronal entrenada para que funcione con hasta un 55% de RAM y un 35% de ROM mientras mantiene el nivel de precisión deseado. Esto es particularmente importante para este proyecto, ya que ejecutaremos inferencias en un microcontrolador Arduino con recursos limitados. El proceso de compilación descargó una biblioteca Arduino como se muestra a continuación.
Hardware
El hardware consta de dos placas Arduino (Arduino Nano 33 BLE y Arduino MKR Fox 1200) que se comunican entre sí a través del protocolo I2C. Arduino Nano 33 BLE tiene un micrófono integrado y se usa para realizar inferencias en el borde, mientras que el MKR Fox 1200 se usa para enviar alertas al detectar un sonido de cerdo tosiendo a través de la red Sigfox.
Para el sentido de Arduino Nano 33 BLE, cargué un código modificado como una biblioteca como se encuentra en la página de GitHub para este proyecto aquí.
También cargué este código Arduino en el Arduino MKR Fox 1200 para enviar alertas a través de la red Sigfox. Luego, el circuito se encerró en una carcasa y se colocó una antena como se muestra a continuación.
Después de ensamblar todo y asegurarme de que todo funciona bien, implementé el dispositivo para probarlo en una granja de cerdos como se muestra a continuación.
Trabajo futuro
° Recopile más datos de diferentes especies de cerdos en diferentes etapas de crecimiento para volver a entrenar el modelo para que sea más robusto.
° Intente buscar patrones de tos específicos para enfermedades respiratorias específicas de los cerdos.