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.
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
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.
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.
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.
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.
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
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