Clasificación supervisada | Sentinel-2

Francisco / Pachu
4 min readMar 28, 2021

Implementamos técnicas de Machine Learning para la clasificación de imágenes satelitales a partir de un modelo de clasificación supervisada. El objetivo es lograr la clasificación de la cobertura terrestre, esto presenta innumerables e interesantes aplicaciones tales como: analizar la vegetación y plantaciones agrícolas, el rendimiento de cultivos, el consumo de agua, el riesgo de incendios y el estudio de la erosión entre otras.

Trabajaremos con las librerías: rasterio, gdal, pandas, geopandas, numpy, matplotlib, sklearn y joblib como principales. Se puede trabajar con docker, todas las librerías están en la siguiente imagen: mavsonnen/jupy-notebook.

Las imágenes satelitales a clasificar las descargaremos de CopernicusHub, provenientes del satélite Sentinel-2 y con producto S2MSI2A.

Comenzamos realizando el proceso de stackering mediante el cual unimos las bandas ráster para su futuro análisis. Dependiendo del caso de estudio se utilizarán unas u otras bandas, en el caso de clasificar la cobertura terrestre utilizaremos las bandas 2, 3 y 4 correspondientes al RGB.

Proceso de stackering

Para entrenar el modelo necesitamos un ERSI Shapefile con algunas zonas ya clasificadas. Hemos considerado las siguientes 10 clases:

  • superficie_artificial, bosque_de_coniferas, bosque_de_frondosas, zonas_agricolas, vegetacion_esclerofila, pastizales_naturales, matorral_boscoso_de_transicion, zonas_quedamas, zonas_humedas y superficie_agua

Una opción es fotointerpretar y hacer los polígonos de entrenamiento con QGIS o SNAP, para facilitar el proceso se puede hacer una clasificación no supervisada para extraer características que las distintas coberturas terrestres tengan y facilitar el proceso.

Polígonos de entrenamiento en QGIS.

Sin embargo, no es tarea fácil ni rápida, una alternativa es buscar algún dataset donde ya esté clasificado. En la UE podemos utilizar “CORINE Land Cover”, una base de datos sobre la cobertura y uso del territorio. En nuestro caso está actualizado de 2006, admitimos el error que pueda crear.

Al tener todo clasificado, conviene quedarse de forma aleatoria con un 70% para el entrenamiento y dejar un 30% para analizar la precisión. De la misma forma se puede entrenar el modelo con varios ráster y comprobar la precisión con otro ráster no usado para el entrenamiento.

Una vez tenemos los polígonos de entrenamiento, obtenemos sus coordenadas:

Obtención de coordenadas de los polígonos de entrenamiento
Visualizar una geometría: geom[num]

A continuación inicializamos una matriz de características (features) y otra de etiquetas (labels).Procedemos la matriz “X” donde almacenaremos los píxeles que conforman una geometría o polígono de entrenamiento y en “y” la clase que le corresponde.

Creación de las matrices de características y etiquetas.

Creamos un modelo Naive Bayes y lo entrenamos con los datos previos. Se trata de un algoritmo de clasificación intuitivo que se basa en los principios del Teorema de Bayes.

Representación modelo Naive Bayes, imagen de Pier Paolo

El algoritmo calcula las probabilidades de que ocurran determinados eventos, estos son el hecho de que pertenezca a una clase u otra. Para ello se basa en los datos entrenados que se le han proporcionado. La implementación es sumamente sencilla, aunque lograr entrenar un buen modelo no es una tarea trivial.

Modelo de Naive Bayes

Una vez entrenado el modelo le pasamos una imagen nueva. Tenemos que ajustar las dimensiones de la matriz para poder realizar la clasificación y de nuevo devolverla a forma inicial si queremos visualizarla.

Clasificación de una imagen satelital basada en el modelo creado

Y… ¡listo! De esta forma visualizamos la clasificación llevada a cabo. Ahora comenzaría otra gran tarea, entrenar el modelo. Hemos de separar en datos de entrenamiento y datos de testeo, entrenarlo de forma homogénea asegurándonos de cubrir todas las clases sin caer en overfitting o underfitting, toda una aventura que podéis experimentar vosotros mismos.

Raster clasificado

Este tutorial e trata de un resumen en el proceso de clasificación supervisada. Se puede encontrar el Jupyter Notebook en el siguiente GitHub junto con otros procesos de tratado del dataset para profundizar.

A su vez se puede lograr la clasificación supervisada de toda una región, para ello se requiere otros procesos: depurar el dataset, recortar en función de los límites administrativos, implementar MapReduce para paralelizar la clasificación, etc. Todo esto, junto con su ejecución en serverless viene explicado otro GitHub.

Un saludo y espero que les haya servido! :)

--

--