Boa parte do pessoal que está começando com data science não sabe como aquelas amostras de imagens surgem todas bonitinhas e prontas para criar os seus modelos de deep learning e depois colocar em produção.
Neste artigo, vou mostrar-lhes uma ferramenta do ArcGIS Pro, que nos auxiliará a extrair amostras de imagens, marcações e augmentation, e ainda deixar no formato correto para cada problema e arquitetura de rede neural que formos trabalhar.
Porém, antes preciso explicar o que é o ArcGIS Pro. Essa ferramenta, desenvolvida pela Esri, é uma evolução do ArcMap e tinha basicamente a funcionalidade de realizar análises espaciais, criar mapas.
Hoje, no entanto, existe uma infinidade de outras ferramentas que compõem uma plataforma em que se pode realizar quase todo tipo de trabalho, seja na criação de algoritmos de deep learning para detecção de objetos, seja na classificação tanto de imagens quanto de vídeos.
Fluxo do processo
Basicamente, o fluxo de processo para realizar a extração destas amostras segue o seguinte fluxo:
Primeiro, realiza-se a escolha das imagens, em relação à significância dessas para o processo de treinamento, como, por exemplo, quando você esta trabalhando com imagens de satélite e as imagens possuem muita nuvem.
Após isso, começa-se de fato a exportação das amostras. Inicialmente, como qualquer trabalho de visão computacional, é importantíssimo os Processamento Digitais de Imagens, realizar filtros convulsionais, filtros de ruído, composições de bandas, fusão e tudo mais que precisa ser feito, mas vamos deixar esse assunto para um próximo artigo.
Lógico que você pode fazer um filtro de PDI que nos ajude a enxergar determinada informação, realizar a criação de máscaras e automatizar esse processo. Porém, quando são coisas bem específicas, o processo de marcação será feito manualmente e demandará uma equipe exclusiva para isso. No geral, em torno de 30% de todo tempo usado será gasto para criar um modelo.
Na interface do ArcGIS Pro, isso é simples, bastando somente criar um arquivo vetorial poligonal, como uma Feature Class ou um shape file (são formatos de arquivos espaciais).
E estabelecer dentro desse arquivo os atributos de Class e Value. e você pode já colocar como Default, assim ajudando a acelerar o trabalho de marcação — claro, quando o trabalho que está fazendo só tem uma classe a ser detectada.
As imagens ficam assim marcadas no final.
Agora, é simples exportar os dados. Usando uma função existente no ArcGIS Pro, basta somente escolher a imagem de input e o diretório para o qual sua coleção será exportada.
Além disso, passamos as marcações que acabei de mostrar, assim como Class Value Field, que será aquele atributo Default. Você também pode colocar um raio para Buffer das marcações que mostrei (isso é válido quando estamos fazendo marcações de Pontos e Linhas).
Então, agora podemos realizar o Augmentation das imagens, processo de fazer o aumento das amostras e variedade das mesma. Geralmente temos 5 atributos que podemos alterar Size, Stride e Rotation.
- Size X and Y: tamanho em pixels das imagens.
- Stride X and Y: refere-se a uma sobreposição em pixels entre as imagens nas dimensões X e Y.
- Rotation Angle: Uma função que basicamente rotacional as imagens em um passo com o valor do ângulo.
Uma das vantagens dessa ferramenta é poder exportar as amostras de maneira mais adequada para o tipo de modelo que está sendo desenvolvido, podendo exportar no formato para RCNN. Para modelos de Classified Tiles como UNET e até mesmo só exportar as Tiles caso o modelo que você esteja desenvolvendo não seja específico.
No final, podemos também ter uma visão de relatório da execução da extração, mostrando o balanceamento, tamanho das imagens e tudo mais que você vai precisar para fazer um bom treinamento.
É lógico que tudo isso pode ser automatizado com somente duas linhas de código, exceto a marcação dos objetos.
#Importar biblioteca do Arcpy
import arcpy
#Exportar Traning Data for DeepLearning
arcpy.ia.ExportTrainingDataForDeepLearning("imagem.tif", r"D:\\amostras","features", "TIFF",
256, 256, 128, 128, "ALL_TILES", "RCNN_Masks",
0, "Value", 0, None, 90, "PIXEL_SPACE",
"PROCESS_AS_MOSAICKED_IMAGE", "NO_BLACKEN",
"FIXED_SIZE", None)