fbpx
Sigmoidal
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
  • English
  • Home
  • Cursos
  • Pós-Graduação
  • Blog
  • Sobre Mim
  • Contato
Sem Resultado
Ver Todos Resultados
Sigmoidal
Sem Resultado
Ver Todos Resultados

Reduzindo o Overfitting com Data Augmentation

Carlos Melo por Carlos Melo
junho 20, 2019
em Blog, Machine Learning
0
48
COMPARTILHAMENTOS
1.6k
VIEWS
Publicar no LinkedInCompartilhar no FacebookCompartilhar no Whatsapp

Como sabemos, as redes neurais convolucionais (convolutional neural networks – CNN) possuem uma grande quantidade de parâmetros a serem otimizados.

Compostas por diversas camadas (layers), cada uma com diversos neurônios, as arquiteturas CNN passam por um processo de treinamento (com um dataset de treino) em uma etapa inicial.

Figura 1 – As CNN modernas possuem milhares ou até milhões de parâmetros para serem otimizados.

Esse processo de otimização permite, ao longo de várias iterações, encontrar os pesos ideais para cada um dos neurônios da CNN – quanto mais “ideal” os pesos forem, melhor será a acurácia do seu modelo na teoria.

Entretanto, para problemas do mundo real, normalmente não temos um dataset adequado para treinar a CNN. Pode ser que a quantidade de fotos que temos sobre um determinado objeto seja muito pequena para treinar os milhares (ou milhões) de parâmetros, ou que todas as fotos que temos foram batidas do mesmo ângulo.

Uma das consequências de trabalharmos com um dataset de treino desse tipo, é que a CNN não vai ter a generalidade necessária para trabalhar com o conjunto de dados de teste. O modelo vai  sofrer do indesejado efeito de overfitting.

As consequências práticas serão que o modelo apresentará um desempenho excelente quando rodado com as imagens de treino, com acurácia altíssima, porem um mau desempenho quando rodamos o dataset de teste.

Data Augmentation é uma técnica para gerar novos exemplares de dados de treinamento a fim de aumentar a generalidade do modelo.

Para reduzir o overfitting existem muitos métodos, como técnicas de normalizações dos pesos, método do dropout (remover aleatoriamente algumas conexões entre neurônios de layers subjacentes), ou batch normalization, cada uma com suas vantagens e características.

Figura 2 – Exemplo de data augmentation aplicado ao MNIST. Fonte: Bharath Raj.

Neste artigo, quero apresentar o método conhecido como data augmentation, que pode ser implementado facilmente com a biblioteca keras – e que vai ajudar você a minimizar o problema nas suas CNN.

O que é data augmentation?

Basicamente, toda modificação feita em um algoritmo com a intenção de reduzir o erro de generalização (mas não o erro de treinamento) é uma técnica de regularização (Goodfellow et al). Bom, a técnica de data augmentation se encaixa exatamente nesse perfil.

Aplicando essa técnica, veremos a nossa precisão no treinamento piorar, porém a precisão sobre o dataset de teste vai melhorar: o modelo CNN se tornará mais genérico.

Como que é possível, usando uma imagem, gerar outras?

São muitas maneiras possíveis, mas os métodos mais comuns são aplicando combinações de operações sobre a imagem original, como:

  • Translação;
  • Rotação;
  • Modificação a perspectiva;
  • Achatamento e alongamento;
  • Distorção de Lentes.
Figura 3 – Exemplo de data augmentation, onde a imagem original sofre um horizontal flip para gerar uma nova imagem. Fonte: CS231n.

Mesmo para os casos em que seu dataset de treino é “ideal”, o uso de data augmentation pode elevar em alguns pontos percentuais a acurácia do modelo.

Vamos ver agora como gerar novas imagens a partir de um input usando o Keras, de maneira totalmente descomplicada e direta.

Data augmentation usando Python + Keras

A biblioteca keras possui uma classe que facilita muito o nosso trabalho na hora de gerar novas imagens para alimentar o modelo.

Vamos supor que eu quisesse treinar uma CNN para classificar aviões militares, dentre elas o T-27 Tucano – aeronave que tive o privilégio de voar e dar instrução na Academia da Força Aérea (AFA) por 4 anos.

Figura 4 – Aeronave T-27 Tucano. A partir desta foto, vamos gerar 10 novas imagens.

Para melhorar a quantidade de T-27 do nosso conjunto de treino e para generalizar mais o modelo de classificação, vamos gerar 10 novas imagens. O código para fazer isso é bem direto:

# importar os pacotes necessários
import numpy as np
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.preprocessing.image import ImageDataGenerator


# definir caminhos da imagem original e diretório do output
IMAGE_PATH = "./t27_tucano.jpg"
OUTPUT_PATH = "output/"

# carregar a imagem original e converter em array
image = load_img(IMAGE_PATH)
image = img_to_array(image)

# adicionar uma dimensão extra no array
image = np.expand_dims(image, axis=0)

# criar um gerador (generator) com as imagens do data augmentation
imgAug = ImageDataGenerator(rotation_range=45, width_shift_range=0.1,
                            height_shift_range=0.1, zoom_range=0.25,
                            fill_mode='nearest', horizontal_flip=True)

imgGen = imgAug.flow(image, save_to_dir=OUTPUT_PATH,
                     save_format='jpg', save_prefix='t27_')

# gerar 10 imagens por data augmentation
counter = 0

for (i, newImage) in enumerate(imgGen):
    counter += 1
    # ao gerar 10 imagens, parar o loop
    if counter == 10:
        break

As Linhas 9 e 10 especificam o caminho do arquivo de entrada (imagem do T-27) e o diretório onde as 10 imagens geradas devem ser salvas.

Após carregar a imagem e transformá-la em um array, é acrescentada uma nova dimensão a este array (Linha 17). Esse procedimento para muita coisa relacionada a CNN. Se a dimensão extra não for incluída, o código vai dar ValueError na execução.

Na Linha 20, é criado um objeto ImageDataGenerator, onde especificamos os valores máximos para o range (em graus) no qual a imagem pode rotacionar, os deslocamentos laterais e verticais (porcentagem em relação à imagem toda), quantidade de zoom e se a imagem pode ser espelhada em relação ao eixo y (horizontal flip).

Na sequência (Linha 24), é criado um generator com os argumentos relacionados à imagem de origem, diretório de output, formato do arquivo e prefixo (nome) das imagens a serem geradas.

O próximo passo para gerar 10 novas imagens é chamar a variável imgGen por 10 vezes, dentro do loop. Como a variável aponta para o generator imgAug.flow, a cada nova chamada um novo arquivo é criado.

Agora é só executar o código e ir conferir o diretório de saída:

carlos$ python data_augmentation.py
Using TensorFlow backend.
carlos$ ls -A1 output/
t27__0_1061.jpg
t27__0_1208.jpg
t27__0_386.jpg
t27__0_446.jpg
t27__0_5674.jpg
t27__0_6440.jpg
t27__0_891.jpg
t27__0_8986.jpg
t27__0_9269.jpg
t27__0_9351.jpg

Simples, direto, eficiente. Veja as imagens:

Figura 5 – Imagens geradas usando a técnica data augmentation com Python e Keras.

Resumo

Definitivamente, overfitting é um problema que você vai ter com seus modelos, principalmente se estiver usando conjuntos de dados pequenos ou que não são estatisticamente representativos.

Uma rede treinada com um dataset inadequado não vai ter a capacidade de ser generalista. Ao contrário, ela vai se sair muito bem com as imagens de treinamento, porém pouco eficiente quando você rodar seu conjunto de teste,

Ao rotacionar, inverter, girar e dar zoom nas imagens de treino, você vai conseguir reduzir o problema do overfitting, pois os pesos dos neurônios estarão mais adaptados a realidade.

Mesmo que o train dataset seja grande, ainda sim a data augmentation pode contribuir para melhorar a eficiência do modelo CNN. Ou seja, sua utilização deve ser sempre considerada dentre todas as outras técnicas de regularização 🙂

Compartilhar3Compartilhar19Enviar
Post Anterior

Aprender Deep Learning: os 3 melhores cursos em Python

Próximo Post

Como se tornar um Cientista de Dados?

Carlos Melo

Carlos Melo

Engenheiro de Visão Computacional graduado em Ciências Aeronáuticas pela Academia da Força Aérea (AFA) e Mestre em Engenharia Aeroespacial pelo Instituto Tecnológico de Aeronáutica (ITA).

Relacionado Artigos

Green Card aprovado por habilidades extraordinárias em Data Science
Blog

Green Card aprovado por habilidades extraordinárias em Data Science

por Carlos Melo
julho 14, 2025
O Que é Amostragem e Quantização no Processamento de Imagens
Artigos

O Que é Amostragem e Quantização no Processamento de Imagens

por Carlos Melo
junho 20, 2025
Curso de Pós-Graduação em Data Science
Data Science

Vale a pena fazer uma Pós-Graduação em Data Science?

por Carlos Melo
janeiro 20, 2025
Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”
Livros

Review do Livro “Mãos à obra: Aprendizado de Máquina com Scikit-Learn, Keras & TensorFlow”

janeiro 18, 2025
Carlos Melo e Sérgio Sacani – Ciência Sem Fim
Youtube

Carlos Melo e Sérgio Sacani – Ciência Sem Fim

por Carlos Melo
janeiro 16, 2025
Próximo Post
Como se tornar um Cientista de Dados?

Como se tornar um Cientista de Dados?

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pós-Graduação em Data Science Pós-Graduação em Data Science Pós-Graduação em Data Science

Mais Populares

  • Introdução ao MediaPipe e Pose Estimation

    Introdução ao MediaPipe e Pose Estimation

    488 compartilhamentos
    Compartilhar 195 Tweet 122
  • ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

    410 compartilhamentos
    Compartilhar 164 Tweet 103
  • O Que é Amostragem e Quantização no Processamento de Imagens

    9 compartilhamentos
    Compartilhar 4 Tweet 2
  • Geometria da Formação de Imagens: Matrizes, Transformações e Sistemas de Coordenadas

    384 compartilhamentos
    Compartilhar 154 Tweet 96
  • Processamento de Nuvens de Pontos com Open3D e Python

    45 compartilhamentos
    Compartilhar 18 Tweet 11
  • Em Alta
  • Comentários
  • Mais Recente
Como Tratar Dados Ausentes com Pandas

Como Tratar Dados Ausentes com Pandas

agosto 13, 2019
Como usar o DALL-E 2 para gerar imagens a partir de textos

Como usar o DALL-E 2 para gerar imagens a partir de textos

dezembro 25, 2022
Introdução ao MediaPipe e Pose Estimation

Introdução ao MediaPipe e Pose Estimation

julho 15, 2023

ORB-SLAM 3: Tutorial Completo para Mapeamento 3D e Localização em Tempo Real

abril 10, 2023
Como Analisar Ações da Bolsa com Python

Como Analisar Ações da Bolsa com Python

15
Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

Setembro Amarelo: Análise do Suicídio no Brasil, com Data Science

13
Como Aprender Data Science?

Como Aprender Data Science?

9
Qual o Cenário de Data Science no Brasil hoje?

Qual o Cenário de Data Science no Brasil hoje?

8
Green Card aprovado por habilidades extraordinárias em Data Science

Green Card aprovado por habilidades extraordinárias em Data Science

julho 14, 2025
O Que é Amostragem e Quantização no Processamento de Imagens

O Que é Amostragem e Quantização no Processamento de Imagens

junho 20, 2025
DeepSeek vazamento de dados de usuários

DeepSeek: Vazamento de dados expõe dados de usuários

fevereiro 1, 2025
DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA

DeepSeek R1 vs OpenAI o1 – Qual é o Melhor Modelo de IA?

janeiro 25, 2025

Seguir

    Instagram Youtube LinkedIn Twitter
    Sigmoidal

    O melhor conteúdo técnico de Data Science, com projetos práticos e exemplos do mundo real.

    Seguir no Instagram

    Categorias

    • Aeroespacial
    • Artigos
    • Blog
    • Carreira
    • Cursos
    • Data Science
    • Deep Learning
    • Destaques
    • Entrevistas
    • IA Generativa
    • Livros
    • Machine Learning
    • Notícias
    • Python
    • Teoria
    • Tutoriais
    • Visão Computacional
    • Youtube

    Navegar por Tags

    camera calibration carreira chatgpt cientista de dados cnn computer vision Cursos dados desbalanceados data science data science na prática decision tree deep learning gpt-3 histograma IA generativa image formation inteligência artificial jupyter kaggle keras machine learning matplotlib mnist nft openai opencv overfitting pandas profissão python redes neurais redes neurais convolucionais regressão linear regressão logística salário scikit-learn seaborn sklearn tensorflow titanic tutorial visão computacional vídeo youtube árvore de decisão

    © 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.

    Welcome Back!

    Login to your account below

    Forgotten Password?

    Retrieve your password

    Please enter your username or email address to reset your password.

    Log In

    Add New Playlist

    Sem Resultado
    Ver Todos Resultados
    • Home
    • Cursos
    • Pós-Graduação
    • Blog
    • Sobre Mim
    • Contato
    • English

    © 2024 Sigmoidal - Aprenda Data Science, Visão Computacional e Python na prática.