Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Construindo uma CNN | Redes Neurais Convolucionais
Fundamentos de Visão Computacional
course content

Conteúdo do Curso

Fundamentos de Visão Computacional

Fundamentos de Visão Computacional

1. Introdução à Visão Computacional
2. Processamento de Imagens com OpenCV
3. Redes Neurais Convolucionais
4. Detecção de Objetos
5. Visão Geral de Tópicos Avançados

book
Desafio: Construindo uma CNN

Redes neurais convolucionais (CNNs) são amplamente utilizadas em classificação de imagens devido à sua capacidade de extrair características hierárquicas. Nesta tarefa, será implementada e treinada uma CNN inspirada na VGG utilizando TensorFlow e Keras no conjunto de dados CIFAR-10. O conjunto de dados consiste em 60.000 imagens (32×32×3) pertencentes a 10 classes diferentes, incluindo aviões, carros, pássaros, gatos e outros.

Este projeto orienta sobre carregamento do conjunto de dados, pré-processamento das imagens, definição do modelo CNN, treinamento e avaliação do desempenho.

1. Pré-processamento de Dados para CNNs

Antes de treinar uma CNN, o pré-processamento dos dados é uma etapa crucial para garantir melhor desempenho e convergência mais rápida. Métodos comuns de pré-processamento incluem:

  • Normalização: este método envolve o escalonamento dos valores dos pixels das imagens de um intervalo entre 0 e 255 para um intervalo entre 0 e 1. Geralmente é implementado como x_train / 255.0, x_test / 255.0;

  • Codificação One-Hot: os rótulos geralmente são convertidos em vetores one-hot para tarefas de classificação. Isso é feito normalmente utilizando a função keras.utils.to_categorical, que transforma rótulos inteiros (por exemplo, 0, 1, 2, etc.) em um vetor one-hot, como [1, 0, 0, 0] para um problema de classificação com 4 classes.

2. Construção da Arquitetura da CNN

Uma arquitetura de CNN é composta por diversas camadas que executam diferentes tarefas para extrair características e realizar previsões. É possível implementar as principais camadas de CNN por meio de:

Camada Convolucional (Conv2D)

Nota

O parâmetro input_shape deve ser especificado apenas na camada de entrada.

Camada de Pooling (MaxPooling2D)

Camada de Flatten

Camada Densa

Nota

A camada densa final geralmente possui o número de unidades igual ao número de classes e utiliza uma função de ativação softmax para gerar uma distribuição de probabilidade entre as classes.

3. Compilação do Modelo

Após definir a arquitetura, é necessário compilar o modelo. Esta etapa envolve especificar a função de perda, o otimizador e as métricas que irão orientar o modelo durante o treinamento. Os seguintes métodos são comumente utilizados em CNNs:

Otimizador (Adam)

O otimizador ajusta os pesos do modelo para minimizar a função de perda. O otimizador Adam é popular devido à sua eficiência e capacidade de adaptar a taxa de aprendizado durante o treinamento.

Função de Perda (Entropia Cruzada Categórica)

Para classificação multiclasse, a entropia cruzada categórica é normalmente utilizada como função de perda. Isso pode ser implementado da seguinte forma:

Métricas

O desempenho do modelo é monitorado utilizando métricas para tarefas de classificação, como acurácia, precisão, recall, entre outras. Estas podem ser definidas como:

Compilar

4. Treinamento do Modelo

O treinamento de uma CNN envolve alimentar os dados de entrada na rede, calcular a perda e atualizar os pesos utilizando retropropagação. O processo de treinamento é controlado pelos seguintes métodos principais:

  • Ajuste do Modelo: o método fit() é utilizado para treinar o modelo. Este método recebe os dados de treinamento, o número de épocas e o tamanho do lote. Também inclui uma divisão opcional de validação para avaliar o desempenho do modelo em dados não vistos durante o treinamento:

  • Tamanho do Lote e Épocas: o tamanho do lote determina o número de amostras processadas antes de atualizar os pesos do modelo, e o número de épocas refere-se a quantas vezes todo o conjunto de dados é passado pelo modelo.

5. Avaliação

Relatório de Classificação

sklearn.metrics.classification_report() compara os valores reais e previstos do conjunto de teste. Inclui precisão, recall e F1 score para cada classe. Porém, os métodos precisam receber apenas os rótulos das classes, então não se esqueça de converter de vetores ([0,0,1,0] -> 2):

Avaliação

Após o treinamento do modelo, ele é avaliado no conjunto de teste para verificar sua capacidade de generalização. A avaliação fornece métricas, que foram mencionadas no método .compile(). A avaliação é realizada utilizando o .evaluate():

Matriz de Confusão

Para obter mais informações sobre o desempenho do modelo, é possível visualizar a matriz de confusão, que mostra as previsões de verdadeiro positivo, falso positivo, verdadeiro negativo e falso negativo para cada classe. A matriz de confusão pode ser calculada utilizando o TensorFlow:

Essa matriz pode então ser visualizada utilizando mapas de calor para observar o desempenho do modelo em cada classe:

1. Carregar e pré-processar o conjunto de dados

  • Importar o conjunto de dados CIFAR-10 do Keras;

  • Normalizar os valores dos pixels para o intervalo [0,1] para melhor convergência;

  • Converter os rótulos das classes para o formato one-hot encoded para classificação categórica.

2. Definir o modelo de CNN

Implementar uma arquitetura de CNN semelhante à VGG com as seguintes camadas principais: VGG like architecture

Camadas convolucionais:

  • Tamanho do kernel: 3×3;

  • Função de ativação: ReLU;

  • Preenchimento: 'same'.

Camadas de pooling:

  • Tipo de pooling: max pooling;

  • Tamanho do pooling: 2×2.

Camadas de dropout (Previnem overfitting desativando neurônios aleatoriamente):

  • Taxa de dropout: 25%.

Camada Flatten - converte mapas de características 2D em um vetor 1D para classificação.

Camadas totalmente conectadas - camadas densas para classificação final, com camada de saída relu ou softmax.

Compilar o modelo utilizando:

  • Adam optimizer (para aprendizado eficiente);

  • Função de perda Categorical cross-entropy (para classificação multiclasse);

  • Métrica de Accuracy metric para medir desempenho (as classes são balanceadas, e você pode adicionar outras métricas se desejar).

3. Treinar o modelo

  • Especificar os parâmetros epochs e batch_size para o treinamento (ex: epochs=20, batch_size=64);

  • Especificar o parâmetro validation_split para definir a porcentagem dos dados de treinamento que se tornarão validação para acompanhar o desempenho do modelo em imagens não vistas;

  • Salvar o histórico de treinamento para visualizar tendências de acurácia e perda.

4. Avaliar e visualizar resultados

  • Testar o modelo nos dados de teste do CIFAR-10 e exibir a acurácia;

  • Plotar perda de treinamento vs. perda de validação para verificar overfitting;

  • Plotar acurácia de treinamento vs. acurácia de validação para garantir a progressão do aprendizado.

PROJETO CNN NO COLAB

question-icon

Insira as partes da chave (Você as recebeu após concluir o projeto)

1.  2.  3.  4.  5.
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 7

Pergunte à IA

expand
ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

Fundamentos de Visão Computacional

Fundamentos de Visão Computacional

1. Introdução à Visão Computacional
2. Processamento de Imagens com OpenCV
3. Redes Neurais Convolucionais
4. Detecção de Objetos
5. Visão Geral de Tópicos Avançados

book
Desafio: Construindo uma CNN

Redes neurais convolucionais (CNNs) são amplamente utilizadas em classificação de imagens devido à sua capacidade de extrair características hierárquicas. Nesta tarefa, será implementada e treinada uma CNN inspirada na VGG utilizando TensorFlow e Keras no conjunto de dados CIFAR-10. O conjunto de dados consiste em 60.000 imagens (32×32×3) pertencentes a 10 classes diferentes, incluindo aviões, carros, pássaros, gatos e outros.

Este projeto orienta sobre carregamento do conjunto de dados, pré-processamento das imagens, definição do modelo CNN, treinamento e avaliação do desempenho.

1. Pré-processamento de Dados para CNNs

Antes de treinar uma CNN, o pré-processamento dos dados é uma etapa crucial para garantir melhor desempenho e convergência mais rápida. Métodos comuns de pré-processamento incluem:

  • Normalização: este método envolve o escalonamento dos valores dos pixels das imagens de um intervalo entre 0 e 255 para um intervalo entre 0 e 1. Geralmente é implementado como x_train / 255.0, x_test / 255.0;

  • Codificação One-Hot: os rótulos geralmente são convertidos em vetores one-hot para tarefas de classificação. Isso é feito normalmente utilizando a função keras.utils.to_categorical, que transforma rótulos inteiros (por exemplo, 0, 1, 2, etc.) em um vetor one-hot, como [1, 0, 0, 0] para um problema de classificação com 4 classes.

2. Construção da Arquitetura da CNN

Uma arquitetura de CNN é composta por diversas camadas que executam diferentes tarefas para extrair características e realizar previsões. É possível implementar as principais camadas de CNN por meio de:

Camada Convolucional (Conv2D)

Nota

O parâmetro input_shape deve ser especificado apenas na camada de entrada.

Camada de Pooling (MaxPooling2D)

Camada de Flatten

Camada Densa

Nota

A camada densa final geralmente possui o número de unidades igual ao número de classes e utiliza uma função de ativação softmax para gerar uma distribuição de probabilidade entre as classes.

3. Compilação do Modelo

Após definir a arquitetura, é necessário compilar o modelo. Esta etapa envolve especificar a função de perda, o otimizador e as métricas que irão orientar o modelo durante o treinamento. Os seguintes métodos são comumente utilizados em CNNs:

Otimizador (Adam)

O otimizador ajusta os pesos do modelo para minimizar a função de perda. O otimizador Adam é popular devido à sua eficiência e capacidade de adaptar a taxa de aprendizado durante o treinamento.

Função de Perda (Entropia Cruzada Categórica)

Para classificação multiclasse, a entropia cruzada categórica é normalmente utilizada como função de perda. Isso pode ser implementado da seguinte forma:

Métricas

O desempenho do modelo é monitorado utilizando métricas para tarefas de classificação, como acurácia, precisão, recall, entre outras. Estas podem ser definidas como:

Compilar

4. Treinamento do Modelo

O treinamento de uma CNN envolve alimentar os dados de entrada na rede, calcular a perda e atualizar os pesos utilizando retropropagação. O processo de treinamento é controlado pelos seguintes métodos principais:

  • Ajuste do Modelo: o método fit() é utilizado para treinar o modelo. Este método recebe os dados de treinamento, o número de épocas e o tamanho do lote. Também inclui uma divisão opcional de validação para avaliar o desempenho do modelo em dados não vistos durante o treinamento:

  • Tamanho do Lote e Épocas: o tamanho do lote determina o número de amostras processadas antes de atualizar os pesos do modelo, e o número de épocas refere-se a quantas vezes todo o conjunto de dados é passado pelo modelo.

5. Avaliação

Relatório de Classificação

sklearn.metrics.classification_report() compara os valores reais e previstos do conjunto de teste. Inclui precisão, recall e F1 score para cada classe. Porém, os métodos precisam receber apenas os rótulos das classes, então não se esqueça de converter de vetores ([0,0,1,0] -> 2):

Avaliação

Após o treinamento do modelo, ele é avaliado no conjunto de teste para verificar sua capacidade de generalização. A avaliação fornece métricas, que foram mencionadas no método .compile(). A avaliação é realizada utilizando o .evaluate():

Matriz de Confusão

Para obter mais informações sobre o desempenho do modelo, é possível visualizar a matriz de confusão, que mostra as previsões de verdadeiro positivo, falso positivo, verdadeiro negativo e falso negativo para cada classe. A matriz de confusão pode ser calculada utilizando o TensorFlow:

Essa matriz pode então ser visualizada utilizando mapas de calor para observar o desempenho do modelo em cada classe:

1. Carregar e pré-processar o conjunto de dados

  • Importar o conjunto de dados CIFAR-10 do Keras;

  • Normalizar os valores dos pixels para o intervalo [0,1] para melhor convergência;

  • Converter os rótulos das classes para o formato one-hot encoded para classificação categórica.

2. Definir o modelo de CNN

Implementar uma arquitetura de CNN semelhante à VGG com as seguintes camadas principais: VGG like architecture

Camadas convolucionais:

  • Tamanho do kernel: 3×3;

  • Função de ativação: ReLU;

  • Preenchimento: 'same'.

Camadas de pooling:

  • Tipo de pooling: max pooling;

  • Tamanho do pooling: 2×2.

Camadas de dropout (Previnem overfitting desativando neurônios aleatoriamente):

  • Taxa de dropout: 25%.

Camada Flatten - converte mapas de características 2D em um vetor 1D para classificação.

Camadas totalmente conectadas - camadas densas para classificação final, com camada de saída relu ou softmax.

Compilar o modelo utilizando:

  • Adam optimizer (para aprendizado eficiente);

  • Função de perda Categorical cross-entropy (para classificação multiclasse);

  • Métrica de Accuracy metric para medir desempenho (as classes são balanceadas, e você pode adicionar outras métricas se desejar).

3. Treinar o modelo

  • Especificar os parâmetros epochs e batch_size para o treinamento (ex: epochs=20, batch_size=64);

  • Especificar o parâmetro validation_split para definir a porcentagem dos dados de treinamento que se tornarão validação para acompanhar o desempenho do modelo em imagens não vistas;

  • Salvar o histórico de treinamento para visualizar tendências de acurácia e perda.

4. Avaliar e visualizar resultados

  • Testar o modelo nos dados de teste do CIFAR-10 e exibir a acurácia;

  • Plotar perda de treinamento vs. perda de validação para verificar overfitting;

  • Plotar acurácia de treinamento vs. acurácia de validação para garantir a progressão do aprendizado.

PROJETO CNN NO COLAB

question-icon

Insira as partes da chave (Você as recebeu após concluir o projeto)

1.  2.  3.  4.  5.
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 7
Sentimos muito que algo saiu errado. O que aconteceu?
some-alt