Clasificación

¡Bienvenido al módulo de entrenamiento de conjuntos de datos!

A estas alturas del entrenamiento, hemos examinado muchas imágenes satelitales, frecuentemente llenas de vegetación verde, pero ¿cómo podemos determinar exactamente cuánta cobertura de tierra hay en una determinada región? ¡Los algoritmos de clasificación son la respuesta!

En este módulo, profundizaremos en el emocionante mundo de la clasificación y aprenderemos cómo automatizarla utilizando técnicas de aprendizaje automático. Al importar una imagen y recopilar puntos de entrenamiento, podemos entrenar un clasificador que nos ayudará a identificar diferentes tipos de cobertura terrestre. ¿Y la mejor parte? Podemos aplicar este clasificador a toda la imagen y crear un hermoso mapa que muestre la diversidad del paisaje.

If you train robots like dogs, they learn faster.
— Kristin Houser

Clasificación avanzada (conjuntos de datos de entrenamiento)

La clasificación en Google Earth Engine (GEE) se refiere al proceso de asignar categorías de cobertura de suelo o uso de suelo a diferentes áreas geográficas. El objetivo de la clasificación es agrupar píxeles que tienen propiedades espectrales o atributos similares en categorías significativas.

Esto es útil para una variedad de aplicaciones, incluyendo la cartografía de cobertura terrestre, la detección de cambios y el análisis de hábitats. También puede utilizarse para crear mapas temáticos que muestren la distribución de diferentes clases de cobertura terrestre en una región, lo que puede ser útil para la gestión de recursos naturales y la planificación de la conservación. La clasificación se realiza utilizando técnicas de Aprendizaje Automático.

Antecedentes

La clasificación supervisada utiliza un conjunto de datos de entrenamiento con etiquetas conocidas y que representan las características espectrales de cada clase de cobertura terrestre de interés para "supervisar" la clasificación. El enfoque general de una clasificación supervisada en Earth Engine se resume de la siguiente manera:

  1. Obtener una escena.

  2. Recopilar datos de entrenamiento.

  3. Seleccionar y entrenar un clasificador utilizando los datos de entrenamiento.

  4. Clasificar la imagen utilizando el clasificador seleccionado (¡un método muy simple de punto y clic!)

Ejercicio

Utilizaremos el siguiente código para crear un conjunto de datos de entrenamiento que se utilizará para clasificar automáticamente la tierra alrededor de Río de Janeiro, Brasil.

// create an Earth engine point object over rio
var pt = ee.Geometry.Point([-43.173732,-22.903846])

// Filter the landsat 8 collection and select the least cloudy image
var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterBounds(pt)
  .filterDate('2019-01-01','2020-01-01')
  .sort('CLOUD_COVER')
  .first()

//center the map on that image
Map.centerObject(landsat,8)

//Add Landsat image to the map
var visParams = {
  bands: ['SR_B4','SR_B3','SR_B2'],
  min: 7000,
  max: 12000
};

Map.addLayer(landsat, visParams, 'Landsat 8 image');

Utilizando las Herramientas de Geometría, crearemos puntos en la imagen Landsat que representen clases de cobertura terrestre de interés para usar como nuestros datos de entrenamiento. Necesitaremos hacer dos cosas: (1) identificar dónde ocurre cada cobertura terrestre en el suelo, y (2) etiquetar los puntos con el número de clase adecuado. Para este ejercicio, utilizaremos las clases y códigos mostrados en la siguiente tabla.

En las Herramientas de Geometría, haz clic en la opción de marcador. Esto creará una geometría de punto que aparecerá como una importación llamada "geometry". Haz clic en el icono de engranaje para configurar esta importación.

Comenzaremos recolectando puntos de bosque, así que nombra la importación como bosque. Impórtala como una FeatureCollection, y luego haz clic en + Propiedad. Nombre la nueva propiedad "clase" y dale un valor de 0. También podemos elegir un color para representar esta clase. Para una clase de bosque, es natural elegir un color verde. En el futuro, simplemente puedes elegir el color, pero para este ejemplo, introduce el código de color hexadecimal específico #589400.

Ahora, en las Importaciones de Geometría, veremos que la importación ha sido renombrada como bosque. Haz clic en ella para activar el modo de dibujo y así comenzar a recolectar puntos de bosque.

Ahora, comienza a recolectar puntos sobre áreas boscosas. Amplía y reduce el zoom según sea necesario. Puedes usar el mapa base satelital para ayudarte, pero la base de tu recolección debería ser la imagen Landsat. Recuerda que cuantos más puntos recolectes, más aprenderá el clasificador de la información que proporcionas. Por ahora, establezcamos como objetivo recolectar 25 puntos por clase. Haz clic en Salir junto a Dibujar punto cuando hayas terminado. (Click Exit next to Point drawing when finished.)

Repite el mismo proceso para las otras clases creando nuevas capas. No olvides importar utilizando la opción FeatureCollection como se mencionó anteriormente. Para la clase desarrollada, recolecta puntos sobre áreas urbanas. Para la clase de agua, recolecta puntos sobre el océano y otras características de agua. Para la clase herbácea, recolecta puntos sobre campos agrícolas. Recuerda establecer la propiedad "clase" para cada clase con su código correspondiente de la tabla y haz clic en Salir una vez que finalices la recolección de puntos para cada clase, como se mencionó anteriormente. Utilizaremos los siguientes colores hexadecimales para las otras clases: #FF0000 para desarrollado, #1A11FF para agua y #D0741E para herbáceas.

Tus datos de entrenamiento pueden parecer algo así:

Ahora deberías tener cuatro importaciones de FeatureCollection llamadas forest, developed, water y herbaceous.

El siguiente paso es combinar todas las colecciones de entidades de entrenamiento en una sola. Copia y pega el código a continuación para combinarlas en una FeatureCollection llamada trainingFeatures. Aquí, utilizamos el método flatten para evitar tener una colección de colecciones de entidades; queremos entidades individuales dentro de nuestra FeatureCollection.

// training begins
var trainingFeatures = ee.FeatureCollection([
  forest, developed, water, herbaceous
]).flatten();

Ahora que tenemos nuestros puntos de entrenamiento, copia y pega el código a continuación para extraer la información de bandas para cada clase en cada ubicación de punto. Primero, definimos las bandas de predicción para extraer información espectral y térmica diferente de diferentes bandas para cada clase. Luego, usamos el método sampleRegions para muestrear la información de la imagen Landsat en cada ubicación de punto. Este método requiere información sobre la FeatureCollection (nuestros puntos de referencia), la propiedad a extraer ("clase") y la escala de píxeles (en metros).

// Define prediction bands
var predictionBands = ['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6','SR_B7','ST_B10'
];

//Sample training points
var classifierTraining = landsat.select(predictionBands)
  .sampleRegions({
      collection: trainingFeatures,
      properties: ['class'],
      scale: 30
  });

Ahora es el momento de elegir un método de clasificación. Estos son algoritmos que utilizan tus datos de entrenamiento para clasificar automáticamente toda la tierra en el área deseada (¡aprendizaje automático!). Uno de los algoritmos más comunes es el clasificador de Árbol de Clasificación y Regresión (CART). Utiliza el código a continuación para implementar el clasificador CART.

// Train a CART classifier
var classifier = ee.Classifier.smileCart().train({
  features: classifierTraining,
  classProperty: 'class',
  inputProperties: predictionBands
})

Ahora que has entrenado el clasificador, simplemente utiliza el siguiente código para clasificar la imagen Landsat y añadirla al Mapa.

// Classify the landsat image
var classified = landsat.select(predictionBands).classify(classifier);

// Define classification image visualization parameters
var classificationVis = {
  min: 0,
  max: 3,
  palette: ['589400','ff0000','1a11ff','d0741e']
};

// Add the classified image to the map
Map.addLayer(classified, classificationVis, 'CART classified')

¡Uf! ¡Acabamos de aprender mucho! Tómate tu tiempo, revisa el código línea por línea y piensa en qué hace cada parte. En resumen:

  1. Importamos una imagen de LANDSAT y luego la filtramos por fecha y ubicación. Después agregamos esta imagen como una capa al mapa.

  2. Creamos geometrías de puntos para usar como puntos de entrenamiento para nuestro algoritmo de clasificación (¡usando una técnica simple de punto y clic!).

  3. Agregamos estos puntos de entrenamiento a una variable llamada trainingFeatures, luego agregamos bandas a nuestra variable predicitonBands para que nuestro clasificador las use.

  4. Utilizamos estas variables como entradas para entrenar nuestro clasificador CART.

  5. Nuestro clasificador está ahora entrenado, así que lo usamos para clasificar el resto de nuestra imagen automáticamente y mostrar los resultados.

Resultados

Inspecciona el resultado: Activa la capa compuesta de Landsat y el mapa base satelital para superponer con las imágenes clasificadas. Cambia la transparencia de las capas para inspeccionar algunas áreas. ¿Qué notas? Es posible que el resultado no se vea muy satisfactorio en algunas áreas (por ejemplo, confusión entre clases desarrolladas y herbáceas). ¿Por qué crees que está sucediendo esto?

Aquí hay algunas formas en que podemos mejorar nuestro código de clasificación:

  • Recopilar más datos de entrenamiento: Podemos intentar incorporar más puntos para tener una muestra más representativa de las clases.

  • Probar otros clasificadores: Si los resultados de un clasificador no son satisfactorios, podemos probar algunos de los otros clasificadores en Earth Engine para ver si el resultado es mejor o diferente.

  • Ampliar la ubicación de la colección: Es una buena práctica recopilar puntos en toda la imagen y no solo enfocarse en una ubicación. Además, buscar píxeles de la misma clase que muestren variabilidad (por ejemplo, para la clase desarrollada, los techos de los edificios se ven diferentes que los techos de las casas; para la clase herbácea, los campos de cultivo muestran una estacionalidad/fenología distintiva).

  • Agregar más predictores: Podemos intentar agregar índices espectrales a las variables de entrada; de esta manera, estamos alimentando al clasificador información nueva y única sobre cada clase. Por ejemplo, hay una buena posibilidad de que un índice de vegetación especializado en detectar la salud de la vegetación (por ejemplo, NDVI) mejore la clasificación entre desarrollado y herbáceo.

Resumen

Este entrenamiento estuvo lleno de información.

Esto es lo que aprendimos en este entrenamiento:

  • Los algoritmos de clasificación son útiles para determinar la cobertura terrestre y la gestión de recursos en una región, ¡y se pueden automatizar a través del aprendizaje automático!

  • Simplemente importamos una imagen, recopilamos puntos de entrenamiento, entrenamos al clasificador y luego aplicamos el clasificador entrenado al resto de nuestra imagen.

Nuevos elementos de código:

  • Aquí hay una gran cantidad de nuevos elementos de código. Este es un gran código para copiar y pegar, ¡luego alterarlo según lo desees para tu aplicación! ¡Agrega más clases o quita algunas! Cambia los colores si así lo deseas. Sé creativo al clasificar cosas nuevas y significativas para tu aplicación.