O blog da AWS

Como treinar um modelo de aprendizado de máquina para reconhecer a colheita com o AWS Earth & SageMaker Autopilot

Por Maximiliano Paz, Arquiteto de Soluções de Startups

 

Recentemente Machine Learning deixou de ser uma aspiração e passou a ser uma parte fundamental dos negócios.

Neste blog eu irei demonstrar como criar um modelo de aprendizado de máquina usando o Amazon SageMaker Autopilot: uma ferramenta que serve para treinar modelos automaticamente usando fontes tabuladas de informações e 3 tipos de algoritmos (no momento da publicação): Linear Learning, XGBoost e MLP (você não precisa selecionar um deles, o Amazon SageMaker AutoPilot seleciona automaticamente o algoritmo apropriado), para identificar qual tipo de corte está em um determinado ponto, baseando essa descoberta nas informações públicas obter da AWS Earth, especificamente a partir do satélite Sentinel-2.

 

Neste post:

  • Parte I: Informações de base necessárias
  • Parte II: Baixar imagens de satélite
  • Parte III: Processar imagens para enriquecer o conjunto de dados
  • Parte IV: Treinar o modelo
  • Parte V: Testar a inferência

Parte I: Informações de base necessárias

O primeiro passo é ter o que é conhecido como “Ground truth” ou “verdade de campo”, que é a informação empírica para mais tarde inferir sobre lugares onde não temos informações.

Neste caso, a nossa informação é:

Tipo de colheita, Latitude, Longitude e Data de cultivo 2018/2019

 

 

E suas tags:

S/s = Soja, m/m = Milho, N = Campo Natural, U=Urbano, A=Água, G=Girassol, T = Trigo

 

Parte II: Baixar imagens de satélite

A primeira coisa que fazemos é enriquecer os dados usando informações de satélite e suas diferentes bandas para conhecer o reflexo desses pontos e converter essas informações em dados que podem ser processados pelo Amazon SageMaker AutoPilot (dados tabulares)

Para isso, o serviço Amazon Sagemaker nos permite usar Notebooks Jupyter, usaremos Python3 com Conda.

Na console, procuramos o serviço Amazon SageMaker e dentro criaremos um Jupyter Notebook:

 

 

Colocamos um nome e, neste caso, alteraremos o tamanho da instância por ml.t3.2xlarge devido ao uso da memória que precisamos para processar as imagens, o restante dos valores será como predefinido:

 

 

É muito importante notar que a instância que estamos criando tem um custo por hora, se deixar de usá-la, é recomendável desativá-la para que pare de gerar custo por computação.

Assim que a instância for criada, poderemos acessar clicando em “Open Jupyter”

 

 

Em seguida, vamos criar nossa instância dentro do notebook

 

 

Uma vez dentro do notebook, a primeira coisa que vamos fazer é instalar a biblioteca rasterio:

 

 

Esta biblioteca nos permite analisar imagens de satélite.

Agora baixamos as imagens de satélite para ver os valores das bandas nos pontos que temos com a colheita ou “Ground Truth”.

Nós baixamos o conjunto de dados sentinel-2:

 

 

Neste caso, baixamos as bandas: B02 (banda azul) – exemplo, B03 (banda verde), B04 (banda vermelha) e B08 (banda infravermelho) para o Tile (quadrantes) HNH/HPH (já que nestes 2 quadrantes os dados da “Ground Truth” são distribuídos; em 4 datas diferentes: 2 de maio e 2 de novembro, isso é apenas para restringir o trexemplo).

Para isso, usamos a biblioteca “boto3” que permite interagir com os serviços da AWS, como neste caso com o serviço Amazon S3 que contém informações públicas para imagens de satélite.

 

Parte III: Processar imagens para enriquecer o conjunto de dados

Com cada banda atribuímos uma variável por cor de banda (vermelho, azul, verde, nir) e seus valores.
O próximo passo é atribuir as imagens a valores e tamanhos que podemos processar por banda:

 

 

Um valor que vamos adicionar será o índice de vegetação, que é calculado com a faixa vermelha e a faixa infravermelha e determina a saúde das plantas em um intervalo de -1 a 1:

 

 

Agora que temos todas as informações, podemos pesquisar os valores em um determinado ponto por linha/coluna:

 

 

Vamos fazer o mesmo para os valores vermelho, verde, azul e infravermelho:

 

 

Na próxima etapa, substituímos Linha/Coluna, por pontos Latitude e Longitude, que informações de campo vamos usar:

(Vamos usar como exemplo o ponto de Lat/Long da primeira imagem do blog:

Colheita: Soja, long ፦62.14416325 & lat ፦33.80020221

O que fazemos um ponto long/lat em linha/col com base no tamanho da imagem e no número de pontos, para isso usamos a biblioteca pyproj que transforma latitude/longitude em x, y pontos:

 

 

Vamos adicionar esses valores às nossas informações atuais, para usar o que já temos:

 

 

Atribuímos as variáveis que usamos para cada banda por data de cada imagem (neste caso, apenas 2 datas são mostradas como exemplo, com suas respectivas 4 bandas por data de amostra) e atribuímos os valores de vermelho, verde, azul, NIR e NDVI para cada data:

 

 

E o código que cuidará de ler os valores do CSV (nosso “Ground truth”) e adicionar os valores a um novo CSV criado para isso:

 

 

Isso resulta em:

 

 

Se o ponto estiver dentro da latitude/longitude, imprime os valores obtidos, caso contrário, dará erro, em tudo o que dá erro você tem que processá-los em outro Tile (no exemplo mostrado eu só processei a tile HNH, para ter todos os resultados que você tem que processar o tile HPH também… sempre falando no caso de amostra)

Uma vez que isto é feito e adicionado as outras 2 datas para completar a amostragem (mesmas etapas, mas em imagens de datas diferentes), o resultado se parece com este:

 

 

Com essas informações, agora podemos treinar nosso modelo do Amazon SageMaker AutoPilot

 

Parte IV: Treine o modelo

Colocamos nosso CSV dentro de um bucket do Amazon S3 e copiamos o nome do resultado:

 

 

 

 

Vamos fazer isso usando o console:

No serviço do Amazon Sagemaker, no lado esquerdo “Amazon SageMaker Studio” e selecione “Início rápido”, crie uma função ou selecione uma já criada e clique em Enviar.

Clique em Open Studio:

 

 

Uma vez dentro, “Create Experiment” em “Components and registries”:

 

 

E conclua as informações sendo a coisa mais importante do bucket do Amazon S3 onde está o conjunto de dados que criamos no Notebook, o destino (que é o atributo do conjunto de dados necessário para fazer a previsão) e o bucket de destino:

 

 

E eles também podem limitar o treinamento no tempo, número de tentativas e número de candidatos e selecionar “Advanced Settings”:

 

 

Depois de clicar em “Create Experiment”, o Amazon SageMaker AutoPilot começará o treinamento

 

 

Uma vez que o modelo é treinado, eles verão resultados diferentes para os diferentes experimentos automáticos:

 

 

Uma vez terminado, selecione o modelo com a melhor “accuracy”, clique em “deploy model”

Neste caso, vamos selecionar um endpoint em tempo real e colocar as seguintes variáveis:

 

 

Se eles quisessem ver a porcentagem de certeza, eles têm que adicionar como “inference response content”, além de predicted_label, accuracy_rate.

Agora, se formos ao Amazon SageMaker na console, poderemos ver o endpoint que está sendo criado:

 

 

Uma vez criado, podemos chamá-lo para fazer inferência em tempo real, para fazer a inferência o modelo precisa dos valores de: Longitude, Latitude, Data, NDVI, Vermelho, Verde, Azul e NIR

 

Parte V: Testar a inferência

E para testá-la temos os seguintes pontos onde sabemos os resultados:

 

M            -62.128740          -33.791581

S              -62.215580          -33.843258

N             -62.091203         -33.771852

 

Tomamos os valores de cada um dos pontos usando as funções mostradas acima:

 

 

E enviamos esses valores para o modelo para executar a inferência:

 

 

Resultado correto, embora com pouco nível de Certeza sobre o exemplo de soja, testamos no exemplo de milho:

 

 

Neste caso, o resultado foi correto e com um nível mais alto de Certeza:

 

 

E a mesma inferência pode ser realizada a partir de uma função lambda, desde que tenham os valores das bandas:

 

 

Definimos o evento Test com os valores como se você os recebesse por chamada de API:

 

 

E o resultado:

 

 

Finalmente, para evitar cobranças, exclua todos os recursos criados.

Conclusão

O uso do Sagemaker Autopilot simplifica a escolha e o treinamento do modelo, permitindo valor a um conjunto de dados sem a necessidade de executar uma pipeline completa de aprendizado de máquina para alcançá-lo e facilita a inferência em tempo real ou em lote.

 

 


Sobre o autor

Maximiliano Paz é Arquiteta de Soluções em Startup na AWS Argentina.