Erre Datos

Almacenamiento en la nube para procesar imágenes satelitales con R

De conformidad con la Ley 34/2002 (LSSI-CE), art. 20, sobre comunicaciones comerciales, este artículo señala la presencia de enlaces de afiliado. Si realiza una compra a través de uno de ellos, recibo una comisión del comerciante, su precio de compra permanece inalterado.

Un modelo de MaxEnt corre en minutos sobre mi laptop de oficina; una sola escena de Sentinel-2 sin procesar puede tardarse una tarde entera solo en copiarse de una carpeta a otra. Esa es la primera lección que nadie te da cuando decides mezclar teledetección satelital con R para mapear dónde podría estar una especie: el problema casi nunca es la estadística, es el almacenamiento. Llevo tiempo ayudando a armar mapas de distribución para un grupo de conservación que trabaja cerca de la Reserva Biológica Carara, y la idea que más trabajo me costó asumir fue esta: ni subas todo a la nube ni lo guardes todo en el disco duro, reparte el trabajo entre los dos según lo que cada capa realmente necesita.

Antes de tocar R en serio, intenté meterme por el lado de Python porque parecía la opción con más futuro y con mejores tutoriales sueltos por internet; me duró poco, porque toda la gente con la que hablaba de modelado de nicho trabajaba en R, y yo terminaba traduciendo cada ejemplo de un lenguaje a otro en vez de aprender algo. Cuando por fin me quedé con R, el problema de espacio no tardó en aparecer.

La teledetección satelital con R vive y muere por el almacenamiento

Nadie me avisó, cuando pasé de contar aves con binoculares a querer modelar su nicho, que las imágenes de Sentinel-2, con su resolución de 10 metros en las bandas visibles, pesan una barbaridad. Un solo producto comprimido puede rondar el gigabyte, y si quieres armar una serie temporal o cubrir un corredor biológico entero, ese peso se multiplica rápido hasta convertirse en un problema que no se arregla borrando el historial del navegador.

Mi escritorio en L, con dos monitores que no son de la misma marca, vive arrinconado en un cuarto trasero de mi apartamento en Los Yoses, con la pared de atrás cubierta de post-its donde anoto nombres de especies y rutas de archivo que se me olvidan si no las veo escritas. Ahí fue donde, hace un tiempo, viví el momento más ridículo de mi vida como biólogo de fin de semana: tuve que borrar contenido del disco para hacerle campo a un archivo .tif que igual terminó devolviéndome un error de memoria a los pocos minutos. El disco externo con los cables enrollados bajo la silla y el ventilador de piso junto al CPU dejaron de ser un capricho de aficionado con demasiado equipo y pasaron a ser parte fija del cuarto.

Error de memoria en RStudio al procesar imágenes satelitales pesadas para un modelo MaxEnt en R

Guardar en la nube o procesarla ahí: La distinción que me costó entender

Tirar todo a la nube comercial de siempre fue mi primer instinto, como el de cualquiera. El plan gratuito de Google Drive se llena en una tarde de descargas satelitales, y R no se lleva bien con carpetas sincronizadas que intentan subir un archivo mientras el script lo está sobrescribiendo -- las rutas que "no existen" porque el cliente de la nube renombró la unidad virtual son un dolor de cabeza aparte. Investigando cómo trabaja la gente que sabe de verdad de teledetección, entendí que hay una diferencia enorme entre guardar archivos en la nube y procesarlos ahí mismo.

Para alguien que apenas está aprendiendo las diferencias entre imágenes Sentinel y Landsat para procesar con R, saltar directo a Google Earth Engine se sintió como querer pilotar un transbordador espacial sin saber andar en bicicleta -- es una herramienta pensada para quien ya viene de QGIS o de programación pesada, no para el aficionado que recién deja el clic y arrastra. Nathalie Fallas, una colega con la que comparto dudas de R desde hace rato, me mandó un enlace a una guía en inglés sobre buckets de almacenamiento en la nube que sigo teniendo abierta en una pestaña, sin terminar de leer; mientras tanto encontré un punto medio más realista: mantener los scripts y los puntos de presencia -- esas coordenadas que recojo con los mejores GPS para puntos de presencia de aves -- guardados de forma local, y dejar las capas pesadas en un servicio que R pueda consultar sin descargar el archivo completo.

La estrategia híbrida: procesar en casa, guardar afuera

El truco que me evitó comprar una computadora nueva fue simple: no migrar todo el procesamiento a la nube. Si eres aficionado, los costos de "egreso" -- lo que cobran por sacar información de la nube -- pueden dar un susto feo en la tarjeta, así que procesar en local usando funciones que solo piden lo que necesitan reduce esa factura de forma notable. El paquete "terra", sucesor del viejo "raster", deja leer los metadatos de un archivo pesadísimo sin cargarlo entero en la RAM, y ya no tengo guardadas todas las escenas de Landsat 8/9 con su ciclo de 16 días del año completo -- llamo solo el periodo que me interesa para el modelo. Con las capas climáticas de WorldClim pasa lo mismo: bajar el set global completo cuando el proyecto solo cubre una franja de bosque es la manera más rápida de llenarte el disco sin necesidad.

Si te falta base para entender cómo conectar R con estos servicios, el curso de Teledetección Satelital con R y R-Studio [Para ir más lejos] fue donde encontré respuestas más claras que las que da Google a fuerza de buscar por mi cuenta; no es una compra pequeña, pero comparado con el tiempo que perdí borrando archivos y reinstalando paquetes rotos, me pareció que valió la pena. Ahí se aprende a manejar los objetos SpatRaster de forma eficiente, algo que se vuelve importante en cuanto tus corridas de MaxEnt empiezan a tardar y la máquina se pone a sudar.

En el foro de modelado de nicho donde reviso preguntas de vez en cuando, un ornitólogo aficionado llamado Plácido Arce sube capturas de sus mapas impresos y escaneados en lugar de archivos exportados -- un método que al principio me pareció anticuado, hasta que noté que a él nunca se le mezclan las coordenadas de un proyecto con las de otro. A mí sí me pasó: hacia la semana doce de estar reorganizando todo entre el disco externo y la nube, corrí un modelo con capas de extensión distinta y el mapa resultante me puso la especie prediciendo hábitat en pleno océano. El error no estaba en MaxEnt ni en ninguna fórmula -- estaba en que había mezclado un raster recortado con otro que no lo estaba, y R los procesó sin protestar.

Comparando una imagen satelital impresa con un mapa de distribución digital para teledetección con R

Si vale la pena pagar por más almacenamiento en la nube

La verdad sea dicha (y esto va para quien hace esto por amor al arte y a las aves, no por trabajo): pagar una suscripción mensual completa de AWS o Azure se siente como demasiado para la mayoría de los proyectos de un aficionado. Lo que a mí me funciona es usar un disco externo SSD para el trabajo sucio -- las descargas crudas, las pruebas que voy a botar -- y dejar la nube solo para los resultados finales y las capas ya recortadas. Si estás viendo las mejores opciones de formación en sensores remotos con R y R-Studio, fíjate si el programa enseña a optimizar el uso de memoria con variables derivadas de satélite; si el profesor solo usa ejemplos de un par de megabytes, no te está preparando para lo que de verdad te vas a encontrar en campo.

A veces el problema no es cuánto espacio tienes, sino que estás bajando una resolución que el proyecto no necesita -- he visto gente descargar gigas de información para un modelo que funcionaría igual de bien con capas más livianas. Entender qué resolución de capas climáticas elegir pesa tanto como saber dónde vas a guardarlas.

Los cursos que me ayudaron en el camino

Los dos cursos que más me han servido hasta ahora cubren ángulos distintos, y vale la pena diferenciarlos antes de pagar por cualquiera. El de Ver detalles del curso aquí -- Teledetección Satelital con R y R-Studio -- es el que le quitó el miedo a las imágenes pesadas: mete de lleno en el flujo de trabajo real y no solo en la teoría, aunque es un salto de inversión más grande y todavía tiene pocas reseñas, así que conviene revisar el grupo del curso antes de comprometerse. El de Echarle un ojo al programa -- Modelado de Nicho Ecológico con Maxent en R -- va directo al grano si lo tuyo es saber dónde podrían estar los bichos y no pelearte tanto con el lado puramente satelital: no pide base previa de programación y el precio de entrada es más accesible para probar si el modelado de nicho es lo tuyo, aunque las primeras clases se sienten cuesta arriba si nunca has abierto R, y sigue siendo un curso de nicho pequeño, sin demasiadas reseñas todavía.

Antes de gastar en disco o en curso de MaxEnt en R, revisa esto

Mis mapas de nicho ya no dependen de cuánto espacio quede libre en la computadora de la casa, y eso cambió más por organización que por comprar hardware nuevo. Sigo googleando la mitad de las funciones y de vez en cuando la consola me tira un error de memoria que arranca con "cannot allocate vector of size" y se corta ahí, pero ya sé que es cuestión de limpiar memoria o de revisar si mezclé capas de distinta extensión antes de asumir que el modelo está mal. Si estás por empezar, mi recomendación es directa: antes de gastar en un disco más grande o en un curso nuevo, entiende primero cómo vas a organizar y mover tus datos -- esa decisión pesa más en el resultado final que cualquier parámetro que ajustes dentro de R.

Artículos relacionados