top of page
  • Foto do escritorJoão Ataide

CleanVision: Uma Ferramenta Essencial para Limpeza de Dados de Imagem


 

Ao trabalhar com um conjunto de dados de imagens de radar fornecido pela ICEYE, uma empresa inovadora na tecnologia de radar de abertura sintética (SAR), enfrentei um desafio significativo. As imagens de radar, apesar de serem uma fonte rica de informações, apresentam desafios únicos. A maioria das amostras que manipulamos tendem a ser suscetíveis a ruídos, conter duplicatas e sofrer de problemas como exposição inadequada. Se não tratadas corretamente, essas questões têm o potencial de comprometer a precisão dos modelos de aprendizado de máquina que dependem desses dados.


Nesse cenário, iniciei uma busca por uma solução que pudesse melhorar a qualidade dos meus dados de imagem. Minha busca me levou à biblioteca CleanVision, uma ferramenta de IA centrada em dados que prometia resolver muitos dos problemas que eu estava enfrentando. Neste artigo, compartilho como a CleanVision me ajudou a melhorar a qualidade dos meus dados de imagem e, consequentemente, a precisão do meu modelo.


A CleanVision é capaz de detectar automaticamente vários problemas em conjuntos de dados de imagens, como imagens que são duplicatas (ou quase), borradas, superexpostas/subexpostas, etc. Ao identificar e tratar esses problemas antes de alimentar os dados em nosso modelo, podemos melhorar significativamente a precisão de nossas previsões.




No projeto em questão, trabalhei com imagens fornecidas pela ICEYE. Essas imagens de radar, por sua natureza, apresentam uma série de características e desafios únicos. Portanto, para garantir a eficácia do aprendizado do modelo, era essencial otimizar ao máximo a qualidade do meu conjunto de dados.


Aqui está um exemplo da imagem que usei:


As bibliotecas empregadas neste projeto incluem as seguintes:

from cleanvision.imagelab import Imagelab
import os
import pandas as pd

Para iniciar nosso trabalho, é necessário invocar a função ImageLab, especificando o diretório que contém nossas imagens. Atualmente, a CleanVision suporta os formatos de imagem mais comuns, como JPG e PNG. Portanto, no meu caso, foi necessário exportar as amostras de radar no formato JPG utilizando o software ArcGIS.


No entanto, é importante mencionar que para exportar as amostras no ArcGIS em formato JPG, as imagens precisam estar em 8 bits (8_BIT_UNSIGNED). Além disso, é necessário realizar uma composição de imagem, repetindo a mesma banda nos canais de imagem. Este processo adicionou algumas etapas adicionais de processamento ao fluxo de trabalho.


imagelab = Imagelab(data_path=r"diretory")

Prosseguindo com nosso fluxo de trabalho, após a preparação inicial dos dados, chegamos à etapa crucial de identificar problemas potenciais em nosso conjunto de dados de imagens. Para isso, utilizamos a função find_issues() da biblioteca CleanVision.


imagelab.find_issues()


Depois de identificar os problemas em nosso conjunto de dados com a função find_issues(), o passo subsequente é obter um relatório minucioso dessas questões. Para isso, empregamos a função report().


imagelab.report()

Ao analisar nosso conjunto de 280 imagens, a CleanVision foi capaz de identificar várias questões. Descobrimos que 36 das imagens tinham baixa informação, 7 estavam excessivamente escuras e 3 estavam desfocadas (ou "blurry"). Essas informações são fundamentais para entendermos a qualidade de nosso conjunto de dados e planejarmos as próximas etapas de pré-processamento.




Ao executar a função completa issue_summary, obtemos um resumo dos tipos de problemas identificados em nosso conjunto de dados. Embora a biblioteca não tenha detectado todos os possíveis problemas, ela demonstra sua capacidade de resolver uma variedade de questões comuns em conjuntos de dados de imagens. Isso reforça a utilidade da CleanVision como uma ferramenta valiosa para aprimorar a qualidade dos dados antes do treinamento do modelo.



Ao utilizar a função issue, obtemos um dataframe que contém informações sobre o score e a presença de problemas em nossas imagens. Neste dataframe, um valor "False" indica que a imagem não apresenta o problema em questão, enquanto um valor "True" indica a presença do problema.


imagelab.issues

Com base nisso, temos a opção de filtrar o dataframe para incluir apenas as imagens que apresentam problemas (ou seja, aquelas marcadas como "True"). Em seguida, podemos utilizar a biblioteca 'os' para excluir cada uma dessas imagens problemáticas. Essa etapa de limpeza é crucial para remover qualquer imagens que possam prejudicar o desempenho do nosso modelo de aprendizado de máquina.


bool_columns = dataset.select_dtypes(include=bool).columns
filtered_df = dataset[dataset[bool_columns].any(axis=1)]

delet = 0
for directory in filtered_df.index:

    # Lista de extensões a serem excluídas
    extensions = ["jpg", "jpg.aux.xml", "jgw", "jpg.ovr"]

    # Percorre os arquivos e exclui os com as extensões especificadas
    for extension in extensions:
        files = directory.split('.')[0]+ f".{extension}"
        try:
            os.remove(files)
            print(f"Arquivo excluído: {files}")

        except Exception as e:
            print(f"Erro ao excluir o arquivo {files}: {e}")

Agora vamos avançar para realizar o mapeamento das imagens e rótulos existentes, assegurando que cada imagem seja adequadamente associada à sua classe ou categoria correspondente. Essa etapa é crucial para manter a integridade dos dados, pois, se não for realizada corretamente, você não conseguirá fazer a associação dos dados e, consequentemente, não será capaz de realizar o treinamento.


Uma vez concluído o mapeamento das imagens e labels, estamos prontos para prosseguir com as etapas subsequentes do projeto, como o treinamento do modelo de aprendizado de máquina e a realização de previsões ou análises sobre os dados.


map_file_path = r"diretory\\map.txt"
image_paths = r"diretory\images"

with open(map_file_path, "w") as f:
    for image_file in os.listdir(image_paths):
        if image_file.endswith(".jpg"):
            label = image_file[:-3]
            image_path = os.path.join(r"images", image_file)
            label_path = os.path.join(r"labels", label+"png")
            print(image_path, label_path)

            f.write(f"{image_path} {label_path}\n")

Um ajuste que acabei não fazendo é a modificação de parâmetros, como o threshold, para aprimorar ainda mais a análise e limpeza dos dados. Ao fazer esse ajuste podemos adaptar a sensibilidade da detecção de problemas nas imagens, permitindo-nos personalizar o processo de limpeza de acordo com as características específicas do nosso conjunto de dados.


Essa ferramenta provou ser valiosa para mim, está me ajudando a melhorar a qualidade dos dados dos projetos de visão computacional, permitindo tratar efetivamente uma variedade de problemas comuns em nosso conjunto de dados de imagens. O uso desta só destaca a importância da limpeza e preparação de dados no processo de aprendizado de máquina. Afinal, a qualidade dos dados que alimentamos em nossos modelos é um fator determinante para a precisão e eficácia de nossas previsões.


Espero que este artigo tenha fornecido uma visão útil sobre como a biblioteca pode ser usada para melhorar a qualidade dos dados de imagem. Seja você um profissional experiente em visão computacional ou alguém apenas começando na área, acreditamos que essa pode ser uma adição valiosa ao seu conjunto de ferramentas de aprendizado de máquina.

コメント


bottom of page