Método de aumento de datos basado en modelos de difusión guiados por texto para la detección de brotes en viñedos

Volver

Descripción del Proyecto

El estudio propone un método de aumento de datos generativo llamado D4, que utiliza un modelo de difusión guiado por texto para mejorar la detección de brotes en viñedos. Este método aborda los desafíos de la escasez de datos de entrenamiento y la diversidad de dominios en la agricultura, generando imágenes anotadas que preservan la información necesaria para la detección de objetos. Los resultados muestran mejoras significativas en la precisión de detección, lo que sugiere que D4 puede ser una solución efectiva para la agricultura de precisión.

Proyecto de aumento de imágenes en viñedos

Enfoque Técnico

Paso 1: Recolección de Datos

Se utilizan vehículos aéreos no tripulados (UAV) para capturar videos de viñedos durante el día y la noche. Esto permite obtener una gran cantidad de imágenes de diferentes condiciones ambientales.


import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision.models as models
from pymongo import MongoClient
import numpy as np
import random
import cv2
import os

# Configuración de MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['vineyard_db']
collection = db['images']

# Transformaciones para las imágenes
transform = transforms.Compose([
    transforms.ToPILImage(),
    transforms.Resize((256, 256)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2),
    transforms.ToTensor(),
])

def preprocess_images(image_path, image_type='satellite'):    
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)    
    if image is None:
        raise ValueError(f"Error al cargar la imagen en {image_path}")


    image_resized = cv2.resize(image, (512, 512))    
    image_normalized = image_resized / 255.0    
    gray_image = cv2.cvtColor(image_resized, cv2.COLOR_BGR2GRAY)    
    edges = cv2.Canny(gray_image, 100, 200)    
    blurred_image = cv2.GaussianBlur(image_resized, (5, 5), 0)    
    color_hist = cv2.calcHist([image_resized], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
    color_hist = cv2.normalize(color_hist, color_hist).flatten()    
    _, thresholded = cv2.threshold(gray_image, 128, 255, cv2.THRESH_BINARY)

    # Morfología (dilatación y erosión)
    kernel = np.ones((5, 5), np.uint8)
    morphed_image = cv2.morphologyEx(thresholded, cv2.MORPH_CLOSE, kernel)

    
    contours, _ = cv2.findContours(morphed_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    contour_image = np.zeros_like(gray_image)
    cv2.drawContours(contour_image, contours, -1, (255, 255, 255), thickness=2)

    # Extracción de características espectrales
    if image_type == 'spectral':        
        spectral_means = np.mean(image_normalized, axis=(0, 1))  # Media de cada canal
        spectral_variances = np.var(image_normalized, axis=(0, 1))  # Varianza de cada canal
    else:
        spectral_means = spectral_variances = None

    # Retorno de la imagen preprocesada y características
    processed_data = {
        'normalized_image': image_normalized,
        'gray_image': gray_image,
        'edges': edges,
        'blurred_image': blurred_image,
        'color_hist': color_hist,
        'thresholded_image': thresholded,
        'contour_image': contour_image,
        'spectral_means': spectral_means,
        'spectral_variances': spectral_variances
    }

    return processed_data   
                

Paso 2: Anotación de Imágenes

Se seleccionan imágenes nocturnas de alta calidad y se anotan manualmente para identificar los brotes y sus nodos. Esta anotación es crucial para entrenar el modelo de detección.

Anotación de imágenes

Paso 3: Entrenamiento del Modelo D4

Se entrena el modelo D4 utilizando las imágenes anotadas y un conjunto de datos de imágenes diurnas. El modelo aprende a generar imágenes diurnas a partir de las nocturnas, adaptándose a las variaciones de dominio.

Entrenamiento del modelo D4

Paso 4: Generación de Imágenes Sintéticas

D4 genera un gran número de imágenes diurnas sintéticas que son anotadas automáticamente, lo que aumenta la diversidad del conjunto de datos y mejora la precisión del modelo.

Paso 5: Evaluación y Optimización

Se evalúa el rendimiento del modelo utilizando métricas de precisión media (mAP) y se ajustan los parámetros del modelo para maximizar la precisión en la detección de brotes.

Resultados y Beneficios

Viñedos del Sur, una empresa vitivinícola en el Valle de Colchagua, implementó el modelo D4 para optimizar la detección de brotes en sus viñedos. Gracias a esta tecnología, lograron aumentar su rendimiento en un 20% y mejorar la calidad de sus uvas, posicionándose como líderes en innovación agrícola en la región"

- José Covarrubias, Gerente de Viñedos del Sur

Tecnologías y Herramientas

Python

Lenguaje principal de desarrollo

PyTorch

Framework de deep learning

OpenCV

Framework de Procesamiento de imágenes

MongoDB

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?