Título del libro: Sentinel-1 PyGMTSAR (Python InSAR): una guía paso a paso para todos. Capítulo 3.

aleksey pechnikov

Al revisar su contenido, parece tener una estructura sólida y la información fluye lógicamente. Sin embargo, he realizado algunos ajustes menores de gramática y puntuación para mejorar aún más la legibilidad. Aquí está el capítulo revisado:

Este libro aclara los fundamentos de PyGMTSAR sin sumergirse en las complejidades de sus algoritmos centrales y los componentes internos del software. En general, puede ejecutar comandos secuencialmente, trazar resultados, exportarlos a archivos y más. Incluso se puede realizar un análisis SBAS en 2000 interferogramas en hardware estándar, como una computadora portátil Apple Air o un iMac, utilizando la configuración predeterminada. Es posible que solo deba considerar las optimizaciones de tubería cuando ejecuta el procesamiento PyGMTSAR en su resolución más alta de 15 metros, y quizás para un conjunto de escenas unidas y múltiples subsegmentos. El objetivo principal es mantener un enfoque consistente, ya sea que esté explorando un solo interferograma o procesando una gran serie SBAS.

Si bien PyGMTSAR se esfuerza por ofrecer un rendimiento óptimo, tiene algunas limitaciones. Un punto clave es que PyGMTSAR se basa en herramientas de terceros para el procesamiento. Si bien estas herramientas funcionan bien, no fueron diseñadas para un entorno interactivo con cálculos perezosos. Los más importantes entre estos son el paquete GMTSAR InSAR y el desempaquetador SNAPHU. Esto significa que algunas operaciones son procesos separados que utilizan herramientas binarias, lo que dificulta, si no es que imposibilita, hacerlas tan flexibles como el código central de Python.

El paquete GMTSAR InSAR es un conjunto de herramientas diseñado para procesar datos de radar de apertura sintética interferométrica (InSAR). Desarrollado por la Institución Scripps de Oceanografía, este paquete ha tenido un uso generalizado en la comunidad científica para diversas aplicaciones geodésicas y geofísicas, particularmente en la ciencia sísmica. Esencialmente, GMTSAR transforma los datos satelitales sin procesar en mapas de desplazamiento, que son útiles para estudiar los cambios en la superficie de la Tierra. Puede encontrar más información sobre el paquete GMTSAR InSAR en su sitio web oficial. GMTSAR puede procesar datos de una amplia variedad de satélites, incluidos ERS-1/2, Envisat, ALOS-1, TerraSAR-X, COSMO-SkyMed, Radarsat-2, Sentinel-1A/B y ALOS-2.

Vale la pena señalar que GMTSAR opera sin estado, similar a Unix, realizando muchas operaciones (como la geocodificación) en archivos separados en lugar de usar una matriz de geocodificación común para acelerar significativamente el procesamiento. Si bien este enfoque se adapta a las herramientas de shell, es menos efectivo para un solo paquete de software de Python. Para construir una canalización de procesamiento completa, he parcheado temporalmente el requerido

SNAPHU (Statistical-Cost, Network-Flow Algorithm for Phase Unwrapping) es un software de desenvolvimiento de fases desarrollado por Radar Interferometry Group de la Universidad de Stanford. Dentro del contexto del procesamiento InSAR, el desenvolvimiento de fase es un paso crucial que recupera los valores de fase absolutos de los datos de fase envueltos. SNAPHU emplea métodos estadísticos y computacionales para brindar resultados de desenvolvimiento de fase confiables y precisos. Se pueden encontrar más detalles sobre SNAPHU y su uso en la página de inicio de SNAPHU.

Actualmente, estoy trabajando para reemplazar las herramientas binarias con código Python puro, pero es un esfuerzo que requiere mucho tiempo. Con frecuencia, exige idear nuevos métodos para lograr los mismos resultados, utilizando múltiples núcleos de procesador y memoria limitada mientras se preserva el rendimiento en Python. Para mejorar la usabilidad, inicialmente construí las funciones que estaban ausentes o eran demasiado lentas en GMTSAR. Estos incluyen la generación de topografía en coordenadas de radar, eliminación de tendencias, procesamiento SBAS, descomposición de tendencias estacionales, geocodificación y más.

De hecho, el software PyGMTSAR está bien paralelizado y funciona según el principio de cálculos numéricos perezosos o retrasados. Esto significa que muchas operaciones se posponen, lo que le permite obtener rásteres de salida casi al instante. Sin embargo, los cálculos reales solo se realizan cuando comienza a utilizar los valores.

Este concepto se puede comparar con ver una casa nueva sin muebles en el interior. Ya puedes verlo, tocarlo y estimar su valor, pero está esencialmente vacío. Si traes tu cama, incluso puedes dormir en ella, y si traes tu máquina de café, puedes hacer café, etc. Lo mismo es posible en la programación. PyGMTSAR le proporciona una casa vacía y solo llena las habitaciones que visita y los elementos que realmente necesita en este momento. Ilustraré cómo funciona esto usando algunos ejemplos a continuación.

Cuando abrimos una gran pila de cuadrículas de correlación (1749 rásteres) de archivos NetCDF en coordenadas de radar, solo lleva unos segundos (9,74 s):

Curiosamente, también podemos abrir los mismos rásteres con geocodificación aplicada para producir rásteres WGS84 a partir de coordenadas de radar en segundos también (17,9 s):

Puede que te sorprendas porque hay algo de magia detrás de escena. Esto es posible porque solo se extraen del disco las estructuras de datos, no los valores reales. Es factible transformar las estructuras mucho más rápido que los valores reales. Como resultado, vemos la cuadrícula de salida correcta en las coordenadas «lat» y «lon» y los valores de las coordenadas son correctos (lat=33.66 33.66 33.66 … 34.48 34.48, lon=-6.355 -6.354 … -5.206 -5.205). Todavía no gastamos tiempo de procesamiento ni memoria para realizar ninguna operación en los datos. Mapeemos una cuadrícula:

Como era de esperar, tenemos el mapa en coordenadas geográficas. Es importante destacar que no hay un consumo de memoria excesivo para mantener todas las cuadrículas grandes en la memoria (RAM) y no hay operaciones de geocodificación de cuadrícula 1749 cuando mapeamos solo una cuadrícula. La administración de la pila de procesamiento demorado incurre en cierta sobrecarga cuando se opera en un solo ráster dentro de una pila grande. Podemos mapear el ráster único mucho más rápido (0.565 s):

Es posible que esta optimización no sea significativa para las pilas típicas con unos pocos cientos de interferogramas, pero requerirá un trabajo de programación adicional por su parte. Puede decidir si la aceleración potencial vale la pena o si prefiere usar el código más simple y robusto. No recomendaría dedicar su tiempo a la optimización prematura, ya que los enfoques de ejemplo proporcionados se han probado en una amplia gama de hardware y han demostrado ser estables y rápidos. Además, las operaciones principales, como la generación de múltiples interferogramas, el desenvolvimiento, la eliminación de tendencias y el análisis SBAS, ya están bien optimizados internamente y no requieren su atención para funcionar correctamente.

Puede aplicar tantos cálculos como necesite sin preocuparse por las limitaciones de su hardware. El conjunto de mapas se puede trazar fácilmente y en aproximadamente la misma cantidad de tiempo (3,86 s):

Y como era de esperar, el mismo conjunto de mapas geocodificados requiere más tiempo para ser procesado y mapeado (1 min 12 s):

Tenga en cuenta que hay una manera de monitorear el procesamiento paralelo interno utilizando el enlace del panel de Dask en la celda de inicialización del clúster:

Al monitorear el tablero de Dask, puede obtener información sobre cómo su código utiliza el procesamiento paralelo e identificar posibles cuellos de botella o mejoras de rendimiento utilizando el procesador, la memoria, la actividad de la red y otras herramientas de monitoreo:

Para obtener más información sobre esta mecánica, considere buscar en la biblioteca Python Dask, que permite cálculos perezosos, la biblioteca xarray para el procesamiento de cuadrículas, la biblioteca numpy para cálculos numéricos, la biblioteca científica scipy y la biblioteca joblib para la paralelización de tareas. Puede encontrar más información sobre estas herramientas en los siguientes enlaces:

Este contenido se compartirá con los patrocinadores en Patreon. Puede encontrarlo en https://www.patreon.com/pechnikov.


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *