top of page
Foto do escritorCarlos Silva

RoadMap de Machine Learning no ArcGIS PRO - Identificando Pilhas de Madeira

Entre Novembro e Dezembro de 2021 me aventurei novamente na proposta dos MOOC's (Massive Open Online Courses) da Esri, desta vez no "Spatial Data Science: The New Frontier in Analytics", que basicamente traz uma abordagem de analise espacial de dados, ou melhor dizendo, uma ciência de dados espaciais. Eles trazem isso com uma abordagem que vai de visualização de dados, previsão, agrupamento, detecção de objetos com aprendizado profundo e apresentação de dados, a proposta principal é a apresentação de ferramentas que irão auxiliar no roadmap de análise espacial como um todo. Porém no MOOC cada parte do roadmap de análise espacial traz um estudo de caso diferente, que é ótimo para entender e focar nas ferramentas, porém pouco prático para entender a lógica da resolução de problemas espaciais. Por isso resolvi trazer um estudo de caso que caminhasse de verdade em um roadmap de análise espacial.


Minha proposta é identificar pilhas de madeira em áreas de colheita florestal, essa áreas são facilmente identificáveis através da observação de regiões de solo exposto rodeada de floresta uniforme que indica que aquela região foi plantada em algum momento, além de que é fácil identificar a presença de pilhas de madeira que serão carregadas. Nesse experimento utilizei uma imagem CBERS RGB de pixels de 2 metros obtida através da mescla das imagens RGB de 8 metros com a Imagem PAN de 2 metros em formato TIFF. Muito importante ajustar o sistema de coordenadas, nesse caso foi o ‘SIRGAS 2000 22S’ para todas informações.


Criando informações de treinamento.


Dentro do ArcGIS PRO ao selecionar uma imagem na sua área de trabalho aparece na aba de análise uma opção para criação de informações de treinamento para detecção de objetos. Não é obrigatório o dados de treinamento virem deste modo, mas ele produz alguns metadados que podem ser úteis, o mais importante é que a imagem e o polígono criado estejam no mesmo sistema de coordenadas e que no dado de treinamento se tenha uma coluna com a classificação do objeto.


Onde encontrar ferramenta para criação de labels
Criando uma classe para identificação
Tabela dos dados de treinamento


Análise exploratória espacial


Treinar um modelo é demorado, então quis ver se através dos pixels eu poderia ter alguma noção da identificação desses , extraí o valor médio de cada banda da imagem para cada um dos polígonos da amostra.


Visualmente os gráficos não me apresentaram nada muito significativo, pra fugir de um viés usei a ferramenta de clusterização para classificar minhas amostras em até três classes. Com isso pude ver como as amostras se agrupavam no espaço.



Distribuição dos valores das bandas RGB dentro das amostras de treinametno

Matriz de correlação das bandas RGB

Quantidade de amostras de cada classe da clusterização

Distribuição dos valores de banda para cada classe da clusterização

Pilhas de madeira classificadas

Olhando esses resultados eu descreveria as três classes como pilhas de tonalidade mais escura (em vermelho), pilhas com sombra (em azul) e pilhas homogêneas borradas (em verde).


Exportando amostras


A parte de exportação de amostras exige um detalhamento especial relacionado com ao tipo de algoritmo de treinamento e por consequência o seu objetivo. Podemos ter amostras e algoritmos para detecção de objetos, classificação de pixels, detecção de mudanças e afins. Nosso objetivo é identificar as pilhas de madeira em campo, as pilhas de madeira são os nossos objetos. O algoritmo que vamos utilizar é o ‘sigle shot identification’ e ele exige uma estrutura Pascal de amostras.


Dica: Conceitue seu problema e pesquise na documentação como ele funciona e que configuração de amostra ele deve ter.


Segue como ficaram os parâmetros.



Exportando amostras

Na pasta “TrainData” há dados para o treinamento e também outra pasta com o conjunto de imagens para treinamento.


Treinando o modelo


Assim que você indica a pasta que contem os dados de treinamento o ArcGIS PRO já identifica quais os tipos de modelo podem ser processados a partir desses dados. Há uma série de hiperparâmetros que podem ser configurados, neste teste optei por deixar como padrão, modificando apenas o número de épocas para 25, lembrando que as épocas são a quantidade de vezes que a base de treinamento será explorada para construção dos pesos do modelo, por consequência mais tempo levará para o modelo ser treinado. Neste teste as 25 épocas levaram 2 horas e 15 minutos para serem processadas.



Configurando treinamento de modelo de detecção de objetos

Avaliando métricas


Na pasta de output de treinamento encontraremos o arquivo “model_metrics.html” onde há as principais métricas para avaliação quantitativa do modelo que foi treinado, das quais destaco o gráfico de perda de treinamento e validação, e Pontuação média de precisão.


Resultados do modelo treinado

Gráfico de perda de treinamento e validação (Training and Validation loss): A perda aqui se refere a perca de capacidade de aprendizado no de correr do tempo , começa aprendendo muito por vez e vai decaindo. Isso vale para os dados de treinamento e validação. Percas continuas de aprendizado no decorrer das épocas de treinamento e validação normalmente demonstram um bom modelo, contudo se a perda da validação tende a aumentar ou ficar superior a de treinamento podemos estar observando um overfitting dos dados de treinamento, indicando que o modelo não está generalizado. Que foi o nosso caso.


Pontuação média de precisão (Average Precision Score): É a capacidade de avaliaçã0 dos modelos na detecção de objetos. Varia de 0 a 1, sendo os valores mais próximos de 1 uma indicação de um melhor modelo.

Dados de treino x Previsão


Testando o modelo e avaliando os resultados


Para usar o modelo que acabamos de criar podemos usar a ferramenta "Detect Objects Using Deep Learning", introduzindo uma imagem com as mesmas configurações daquelas usadas no treinamento e indicando os arquivos '.emd' ou '.dlpk' da pasta do modelo treinado na etapa anterior.


Identificando objetos através do modelo treinado

Ao processar temos o resultado abaixo dos quadrados vermelhos, dos quais deixei destacado os casos em que o modelo identificou alguma amostra de treinamento corretamente.

Previsões x Amostras

A imagem usada para teste tinha 214 pilhas , o modelo foi capaz de encontrar 70% delas (150), contudo 665 objetos foram identificados incorretamente marcando trechos de estrada, solo exposto e até vegetação como se fosse uma pilha de madeira, isso fez o aproveitamento do modelo ser abaixo de 18% se considerarmos algumas sobreposições de identificação.


Conclusão?


O roadmap de ciência da dados não é linear e um aproveitamento de 18% é baixo suficiente para mostrar que esse modelo ainda não está pronto para convergir em uma versão de produção. É bem comum ter resultados como esse nas primeiras semanas de uma prova de conceito (POC) de algum produto. A conclusão que eu deixo aqui é o questionamento de quais seriam os próximos passos?


Observando visualmente, os resultados do modelo temos que boa parte dos retângulos de identificação não centralizam a pilha da madeira e sim a borda da mesma, além disso há casos sombras de árvores, vegetação nativa e bordas de estradas identificadas como pilha. Isso nos põe a hipótese de que as amostras fornecidas são muito boas para representar bordas e sombras ao invés de pilhas.

Características dos dados provisionados

Para reverter essa questão um bom caminho seria mudar os dados de treinamento aumentando a quantidade de pixels para além daqueles que formam a pilha para agregar contexto aquilo que se deseja identificar e reiniciar o processo, de novo e de novo até ficarem claras todas as limitações e oportunidades.





220 visualizações0 comentário

Comments


Post: Blog2_Post
Post: Blog2 Custom Feed
bottom of page