Detección de enfermedades en peces basado en aproximación por segmentación

Volver

Descripción del Proyecto

Detectar enfermedades en peces planos en ambientes de acuicultura densamente poblados es difícil debido a la alta densidad de peces y la necesidad de una detección temprana de enfermedades. Los métodos tradicionales se basan en inspecciones visuales, lo cual es ineficiente.

Solución: Se propone un sistema que:

Proyecto de detección de enfermedades

Enfoque Técnico

Paso 1: Preparación de Datos

Un gran conjunto de datos de imágenes de peces planos que incluye 164 peces enfermos y 394 identidades de enfermedades. Las enfermedades se segmentan visualmente y se clasifican en las regiones de cabeza, aletas y cuerpo. Se creó el conjunto de datos AMFlatIMG.


    import torch
    import torch.nn as nn
    import torch.optim as optim
    import torchvision
    import torchvision.transforms as transforms
    from torch.utils.data import DataLoader, Dataset
    from PIL import Image
    import os
    import matplotlib.pyplot as plt
    
    # Transformaciones de las imágenes
    transform = transforms.Compose([
        transforms.Resize((128, 128)),   # Redimensionar todas las imágenes a 128x128
        transforms.ToTensor(),           # Convertir la imagen a tensores
        transforms.Normalize((0.5,), (0.5,))  # Normalización
    ])
    
    class FishDiseaseDataset(Dataset):
        def __init__(self, root_dir, transform=None):
            self.root_dir = root_dir
            self.transform = transform
            self.image_paths = []
            self.labels = []
    
            # Recorremos el directorio para encontrar imágenes y sus etiquetas
            for label_dir in os.listdir(root_dir):
                if os.path.isdir(os.path.join(root_dir, label_dir)):
                    for img_file in os.listdir(os.path.join(root_dir, label_dir)):
                        if img_file.endswith(".jpg") or img_file.endswith(".png"):
                            self.image_paths.append(os.path.join(root_dir, label_dir, img_file))
                            self.labels.append(label_dir)
    
        def __len__(self):
            return len(self.image_paths)
    
        def __getitem__(self, idx):
            img_path = self.image_paths[idx]
            image = Image.open(img_path).convert('RGB')
            label = self.labels[idx]
    
            if self.transform:
                image = self.transform(image)
    
            # Etiquetas están codificadas en un diccionario
            label_map = {"head": 0, "fins": 1, "body": 2}  # Etiquetas de ejemplo
            label_idx = label_map[label]
            
            return image, label_idx
    
    # Ruta al dataset 
    dataset_root = './AMFlatIMG'
    dataset = FishDiseaseDataset(dataset_root, transform=transform)     
                

Paso 2: Aumento de Imágenes

El estudio utiliza Redes Generativas Adversarias (GAN) para generar parches realistas de enfermedades y aumentar el conjunto de datos, lo que mejora el rendimiento del modelo en un 12%.

Modelo de Data Augmentation

Paso 3: Segmentación por Partes

Las imágenes de los peces se dividen en tres segmentos (cabeza, cuerpo y aletas) para la detección de enfermedades. Este enfoque de segmentación mejora la detección al centrarse en las regiones específicas del cuerpo donde aparecen las enfermedades.

Modelo de Segmentación

Paso 4: Modelo y Armonización

Se utilizan GANs para generar parches realistas de enfermedades, que luego se combinan con imágenes de peces sanos mediante una técnica de armonización de imágenes. Esto mejora el conjunto de datos con imágenes sintéticas pero realistas.

Paso 5: Rendimiento de la Detección

El modelo propuesto, que incluye aumento de datos y segmentación por partes, mejora significativamente el rendimiento en los conjuntos de datos de peces planos y salmón. YOLOv8 se utilizó como modelo base, logrando una mejora del 12% en el rendimiento.

Resultados y Beneficios

"El Sistema de Predicción de Biomasa de Cultivos de Austral Metrics ha revolucionado nuestra forma de gestionar los cultivos. Hemos visto un aumento del 30% en la eficiencia de nuestros procesos y una mejora significativa en nuestras decisiones de manejo de cultivos."

- Juan Pérez, Agricultor Senior

Tecnologías y Herramientas

Python

Lenguaje principal de desarrollo

PyTorch

Framework de deep learning

OpenCV

Framework de Procesamiento de imágenes

PostgreSQL

Base de datos para almacenamiento

Microsoft Azure

Infraestructura en la nube

Scikit-learn

Infraestructura en la nube

Pandas

Manejo y análisis de datos tabulares

Numpy

Operaciones matemáticas sobre matrices y tensores, esencial para cálculos de deep learning

Docker

Para crear entornos consistentes y reproducibles durante el desarrollo y despliegue

DVC

Para el control de versiones de los datos y el modelo

FastAPI

Framework ligero para crear APIs RESTful y exponer el modelo como servicio web

SSL/TLS

Certificados de seguridad para asegurar las comunicaciones entre servicios

Matplotlib

Visualización de datos

Ultralytics YOLOv8

Modelo de segmentación de imágenes y detección de objetos en tiempo real

Git

Control de versiones

¿Listo para optimizar tus cultivos?