Clasificación de la cobertura del suelo utilizando eo-learn. Parte 3

Cuando necesita mejores resultados que satisfactorios


Parte 1
Parte 2



La transición de la zona de invierno a verano se compone de imágenes Sentinel-2. Puede notar algunas diferencias en los tipos de cobertura en la nieve, que se describió en un artículo anterior.


Prólogo


Las últimas dos semanas han sido muy difíciles. Publicamos la primera y segunda parte de nuestros artículos sobre la clasificación de la cobertura en todo el país utilizando el marco eo-learn . eo-learn es una biblioteca de código abierto para crear una capa entre la recepción y el procesamiento de imágenes satelitales y el aprendizaje automático. En artículos anteriores en los ejemplos, indicamos solo un pequeño subconjunto de los datos y mostramos los resultados solo en un pequeño porcentaje del área de interés completa (AOI - área de interés). Sé que esto parece al menos no muy impresionante, y quizás muy grosero de nuestra parte. Todo este tiempo has sido atormentado por preguntas sobre cómo puedes usar este conocimiento y transferirlo al siguiente nivel.


¡No se preocupe, para eso es el tercer artículo de esta serie! Toma una taza de café y toma asiento ...


¡Todos nuestros datos te pertenecen!


Ya estas sentado Tal vez deje el café sobre la mesa por otro segundo, porque ahora escuchará las mejores noticias de hoy ...
En Sinergise decidimos publicar el conjunto de datos completo para Eslovenia para 2017. Gratis ¡Puede acceder libremente a 200 GB de datos en forma de ~ 300 fragmentos de EOPatch, cada uno aproximadamente en el tamaño de 1000x1000, en una resolución de 10 m! Puede leer más sobre el formato EOPatch en la última publicación sobre eo-learn , pero de hecho es un contenedor de datos geo-temporales EO (Observación de la Tierra) y no EO: por ejemplo, imágenes de satélite, máscaras, mapas, etc.



Estructura EOPatch )


No pirateamos cuando descargamos estos datos. ¡Cada EOPatch contiene imágenes de Sentinel-2 L1C, su máscara s2cloudless correspondiente y el mapa oficial de cobertura del suelo en formato ráster!


Los datos se almacenan en AWS S3 en: http://eo-learn.sentinel-hub.com/


Deserializar un objeto EOPatch es bastante simple:


 EOPatch.load('path_to_eopatches/eopatch-0x6/') 

Como resultado, obtienes un objeto de la siguiente estructura:


 EOPatch( data: { BANDS: numpy.ndarray(shape=(80, 1010, 999, 6), dtype=float32) } mask: { CLM: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_DATA: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=uint8) IS_VALID: numpy.ndarray(shape=(80, 1010, 999, 1), dtype=bool) } mask_timeless: { LULC: numpy.ndarray(shape=(1010, 999, 1), dtype=uint8) VALID_COUNT: numpy.ndarray(shape=(1010, 999, 1), dtype=int64) } meta_info: { maxcc: 0.8 service_type: 'wcs' size_x: '10m' size_y: '10m' time_difference: datetime.timedelta(-1, 86399) time_interval: (datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 12, 31, 0, 0)) } bbox: BBox(((370230.5261411405, 5085303.344972428), (380225.31836121203, 5095400.767924464)), crs=EPSG:32633) timestamp: [datetime.datetime(2017, 1, 1, 10, 4, 7), ..., datetime.datetime(2017, 12, 25, 10, 15, 32)], length=80 ) 

El acceso a los diversos atributos de EOPatch es el siguiente:


 eopatch.timestamp eopatch.mask['LULC'] eopatch.data['CLM'][0] eopatch.data['BANDS'][5][..., [3, 2, 1]] 

EO Ejecutar orden 66


Genial, los datos se están cargando. Mientras esperamos la finalización de este proceso, echemos un vistazo a las capacidades de una clase que aún no se ha discutido en estos artículos: EOExecutor . Este módulo se dedica a la ejecución y monitoreo de la tubería y permite el uso de subprocesos múltiples sin esfuerzos innecesarios. No más búsquedas en Stack Overflow sobre cómo paralelizar la tubería correctamente o cómo hacer que la barra de progreso funcione en este modo: ¡ya hemos hecho todo por usted!


Además, maneja los errores que ocurren y puede generar un breve resumen del proceso de ejecución. Este último es el momento más importante para estar seguro de la repetibilidad de sus resultados en el futuro, para que el usuario no tenga que pasar un tiempo de trabajo precioso buscando los parámetros que utilizó el jueves pasado a las 9 a.m. después de una noche de juerga (no mezcle alcohol y programación) vale la pena!). ¡Esta clase también puede generar un buen gráfico de dependencia para la tubería, que puede mostrarle a su jefe!



Gráfico de dependencia de canalización generado por eo-learn


Experimentos de aprendizaje automático


Como se prometió, este artículo está destinado principalmente a estudiar diferentes modelos con eo-learn utilizando los datos que proporcionamos. A continuación, hemos preparado dos experimentos en los que estudiamos el efecto de las nubes y diferentes algoritmos de remuestreo durante la interpolación temporal sobre el resultado final. Después de todo esto, comenzaremos a trabajar con redes de convolución (CNN) y compararemos los resultados de dos enfoques: el análisis píxel por píxel del árbol de decisión y el aprendizaje profundo utilizando redes neuronales convolucionales.


Lamentablemente, no se puede dar una respuesta inequívoca sobre las decisiones que se deben tomar durante los experimentos. Puede estudiar el área temática más profundamente y hacer suposiciones para decidir si el juego vale la pena, pero en última instancia, el trabajo se reducirá a prueba y error.


Jugar con las nubes


Las nubes son un gran dolor en el mundo de EO, especialmente cuando se trata de algoritmos de aprendizaje automático, donde desea determinarlos y eliminarlos del conjunto de datos para la interpolación basada en valores perdidos. Pero, ¿qué tan grande es el beneficio de este procedimiento? ¿Vale la pena? Rußwurm y Körner, en su artículo Clasificación de la cobertura de la tierra multitemporal con codificadores secuenciales recurrentes, incluso demostraron que para el aprendizaje profundo, el proceso de filtrado de nubes probablemente no tenga ninguna importancia, ya que el clasificador mismo puede detectar nubes e ignorarlas.



Activación de la capa de entrada (arriba) y la capa de modulación (abajo) en la secuencia de imágenes de un fragmento específico para una red neuronal. Puede notar que este fragmento de red aprendió a crear máscaras de nube y filtrar los resultados obtenidos. (Página 9 en https://www.researchgate.net/publication/322975904_Multi-Temporal_Land_Cover_Classification_with_Sequential_Recurrent_Encoders )


Recordamos brevemente la estructura del paso de filtrado de datos (para más detalles, consulte [artículo anterior] ()). Después de tomar instantáneas de Sentinel-2, comenzamos a filtrar instantáneas en la nube. Todas las imágenes en las que el número de píxeles no nublados no supere el 80% están sujetas a selección (los valores de umbral pueden diferir para diferentes áreas de interés). Después de eso, para obtener valores de píxeles en días arbitrarios, se usan máscaras de nubes para no tener en cuenta dichos datos.


En total, cuatro comportamientos son posibles:


  1. con filtro de imagen, máscaras de nubes dadas
  2. sin filtro de instantáneas, con máscaras de nube dadas
  3. con filtro de imagen, excluyendo máscaras de nubes
  4. sin filtro de imagen, sin incluir máscaras de nube


Visualización visual de la pila de imágenes del satélite Sentinel-2. Los píxeles transparentes a la izquierda significan píxeles faltantes debido a la capa de nubes. La pila central muestra los valores de píxeles después de filtrar imágenes e interpolarlas con una máscara de nubes (Caso 4), y la pila de la derecha muestra el resultado de la interpolación en el caso sin filtrar imágenes y sin máscaras de nubes (1). (Nota: aparentemente, el artículo contiene un error tipográfico, y significaba lo contrario: el caso 1 en el centro y el 4 a la derecha).


En el último artículo, ya realizamos una variación del caso 1 y mostramos los resultados, por lo que los utilizaremos para comparar. Preparar otros transportadores y entrenar el modelo parece una tarea simple: solo necesita asegurarse de que estamos comparando los valores correctos. Para hacer esto, solo tome el mismo conjunto de píxeles para entrenar y validar el modelo.


Los resultados se muestran en la tabla a continuación. ¡Puede ver que, en general, la influencia de las nubes en el resultado del modelo es bastante baja! Esto puede deberse al hecho de que la tarjeta de referencia es de muy buena calidad y el modelo puede ignorar la mayoría de las imágenes. En cualquier caso, este comportamiento no puede garantizarse para ningún AOI, ¡así que tómate tu tiempo para eliminar este paso de tus modelos!


ModeloPrecisión [%]F_1 [%]
Sin filtros, sin máscara.92,892,6
Sin filtros, con máscara.94,293,9
Con filtro, sin mascarilla94,093,8
Con filtro, con mascarilla94,494,1

El impacto de diferentes enfoques de remuestreo


La elección de las opciones de remuestreo temporal no es obvia. Por un lado, necesitamos una matriz detallada de imágenes que muestren bien los detalles de las imágenes de origen; queremos incluir el número de imágenes más cercano posible a los datos de origen. Por otro lado, estamos limitados por los recursos informáticos. La reducción del paso de remuestreo duplica el número de fotogramas después de la interpolación y, por lo tanto, aumenta el número de atributos que se utilizan en el entrenamiento. ¿Vale esa mejora el costo de los recursos? Esto es lo que tenemos que descubrir.


Para este experimento, utilizaremos la variación 1 del paso anterior. Después de la interpolación, volvemos a muestrear con las siguientes variaciones:


  1. Muestreo uniforme con un intervalo de 16 días.
  2. Muestreo uniforme con un intervalo de 8 días.
  3. La elección de las "mejores" fechas, el número coincide con el caso 2.

La muestra en el caso 3 se basa en el mayor número de fechas comunes para todos los EOPatch en el AOI seleccionado

El gráfico muestra el número de fragmentos de EOPatch que contienen datos para cada día de 2017 (azul). Las líneas rojas muestran las fechas óptimas para el remuestreo, que se basan en las fechas de las imágenes de Sentinel-2 para el AOI 2017 dado.


Mirando la tabla a continuación, puede ver que los resultados no son muy impresionantes, como en la experiencia pasada. Para los casos 2 y 3, la cantidad de tiempo invertido se duplica, pero la diferencia con el enfoque inicial es inferior al 1%. Dichas mejoras son demasiado discretas para un uso práctico, por lo que podemos considerar el intervalo de 16 días adecuado para la tarea.


ModeloPrecisión [%]F_1 [%]
Uniformemente cada 16 días94,494,1
Uniformemente cada 8 días94,594,3
Elegir las mejores fechas94,694,4

Resultados de precisión general y F1 ponderada para diferentes tuberías con un cambio en el enfoque de remuestreo.


Aprendizaje profundo: uso de la red neuronal convolucional (CNN)


El aprendizaje profundo se ha convertido en el enfoque estándar para muchas tareas, como la visión por computadora, el procesamiento de palabras en lenguaje natural y el procesamiento de señales. Esto se debe a su capacidad para extraer patrones de entradas multidimensionales complejas. Los enfoques clásicos de aprendizaje automático (como los árboles de decisión) se han utilizado en muchas tareas de geodatos temporales. Las redes convolucionales, por otro lado, se utilizaron para analizar la correlación espacial entre imágenes adyacentes. Básicamente, su uso se limitó a trabajar con imágenes individuales.


Queríamos estudiar la arquitectura de los modelos de aprendizaje profundo e intentar elegir uno que sea capaz de analizar los aspectos espaciales y temporales de los datos satelitales al mismo tiempo.


Para hacer esto, utilizamos Netvork temporal totalmente convolucional, TFCN, o más bien, la extensión temporal a U-Net, implementada en TensorFlow. Más específicamente, la arquitectura utiliza correlaciones espacio-temporales para mejorar el resultado. Una ventaja adicional es que la estructura de red le permite representar mejor las relaciones espaciales a diferentes escalas gracias al proceso de codificación / decodificación en U-net. Como en los modelos clásicos, en la salida obtenemos una matriz bidimensional de etiquetas, que compararemos con la verdad.



Utilizamos el modelo entrenado para predecir las marcas en el conjunto de prueba, y los valores obtenidos se verificaron con la verdad. En general, la precisión fue del 84,4% y F1 fue del 85,4%.



Comparación de diferentes predicciones para nuestra tarea. Imagen visual (arriba a la izquierda), mapa de referencia real (arriba a la derecha), predicción del modelo LightGBM (abajo a la izquierda) y predicción de U-net (abajo a la derecha)


Estos resultados muestran solo el trabajo inicial en este prototipo, que no está altamente optimizado para la tarea actual. A pesar de esto, los resultados concuerdan con algunas estadísticas obtenidas en la región. Para liberar el potencial de una red neuronal, es necesario optimizar la arquitectura (conjunto de atributos, profundidad de red, número de convoluciones), así como establecer hiperparámetros (velocidad de aprendizaje, número de eras, ponderación de clase). Esperamos profundizar aún más en este tema (ja, ja) aún más, y planeamos distribuir nuestro código cuando esté en una forma aceptable.


Otros experimentos


Puede encontrar muchas formas de mejorar sus resultados actuales, pero no podemos resolverlas ni probarlas todas. ¡Es en ese momento que apareces en la escena! ¡Muestre lo que puede hacer con este conjunto de datos y ayúdenos a mejorar los resultados!


Por ejemplo, en el futuro cercano, uno de nuestros colegas participará en la clasificación de la cobertura basada en la pila temporal de imágenes individuales utilizando redes de convolución. La idea es que algunas superficies, por ejemplo, las artificiales, se pueden distinguir sin características temporales, bastante espaciales. ¡Estaremos encantados de escribir un artículo separado cuando este trabajo conduzca a resultados!


Del traductor


Desafortunadamente, la siguiente parte de esta serie de artículos no salió, lo que significa que los autores no mostraron ejemplos de código fuente con la construcción de U-Net. Como alternativa, puedo ofrecer las siguientes fuentes:


  1. U-Net: redes convolucionales para la segmentación de imágenes biomédicas - Olaf Ronneberger, Philipp Fischer, Thomas Brox es uno de los artículos básicos sobre arquitectura U-Net que no involucra datos temporales.
  2. https://eo-learn.readthedocs.io/en/latest/examples/land-cover-map/SI_LULC_pipeline.html : la página de documentación de eo-learn, donde (posiblemente) se encuentra una versión más reciente de tuberías de 1.2 partes.
  3. https://github.com/divamgupta/image-segmentation-keras - Un repositorio con varias redes implementadas usando keras. Tengo algunas preguntas sobre las implementaciones (son ligeramente diferentes de las descritas en los artículos originales), pero en general, las soluciones se adaptan fácilmente para fines personales y funcionan bastante bien.

Source: https://habr.com/ru/post/453354/


All Articles