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:
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)
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%.
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.
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.
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.
"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
Lenguaje principal de desarrollo
Framework de deep learning
Framework de Procesamiento de imágenes
Base de datos para almacenamiento
Infraestructura en la nube
Infraestructura en la nube
Manejo y análisis de datos tabulares
Operaciones matemáticas sobre matrices y tensores, esencial para cálculos de deep learning
Para crear entornos consistentes y reproducibles durante el desarrollo y despliegue
Para el control de versiones de los datos y el modelo
Framework ligero para crear APIs RESTful y exponer el modelo como servicio web
Certificados de seguridad para asegurar las comunicaciones entre servicios
Visualización de datos
Modelo de segmentación de imágenes y detección de objetos en tiempo real
Control de versiones