Conteúdo do Curso
Fundamentos de Visão Computacional
Fundamentos de Visão Computacional
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:
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
ebatch_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.
Obrigado pelo seu feedback!