Prof. Adolfo Bauchspiess
LARA - Laboratório de Automação e Robótica
ENE - Departamento de Engenharia Elétrica
UnB - Universidade de Brasília
|
|
|
ENE0154 - Inteligência Computacional
3o Exercício -
Aprendizagem Profunda - CIFAR10
Objetivo:
Utilizando os bancos de dados CIFAR10, construir uma
rede neural profunda (CNN e GoogLeNet) para reconhecer objetos em
imagens digitais.
Introdução:
As redes redes neurais profundas revolucionaram
recentemente (a partir de ~2010!) as aplicações de inteligência artificial
conexionista. Várias camadas convolucionais são treinadas para produzir
mapas de caracteríscas, tornando viável o reconhecimento de padrões em
imagens complexas.
O treinamento depende de uma base de dados ampla o
suficiente para que a rede tenha boa capacidade de generalização. Neste
trabalho será utilizada a base CIFAR10 (
from keras.datasets import cifar10),
com 50.000 imagens de treinamento, 5.000 de teste e 5.000 de validação. As
imagens de 32x32 pixeis correspondem a 10 classes. Diferentes categorias,
como "aviões", "passaros", "gatos" e "cachorros" estão disponíveis.
Como referência*, o SotA ("State of the Art") do CIFAR10 apresenta
acerto de 99,%, [2018]. (O SotA do, agora famoso, MNIST tem um erro de
0,21%, [2013]).
Diferentes topologias de CNN estão disponiveis na
internet. Ver, por exemplo:
https://github.com/acht7111020/CNN_object_classification/tree/master/train.
*SotA - 99.0%, Yanping Huang et al. GPipe: Efficient Training of Giant
Neural Networks using Pipeline Parallelism
(Nov 2018, arXiv 2018)
Procedimento:
- Considerar os conjuntos
de treinamento, validação e teste.
- Normalizar o tamanho
das imagens, caso necessário, para a dimensão de entrada escolhida
para a RNA.
- Caso alguma classe
tenha poucas imagens - equilibrar o treinamento: Duplicar
imagens de classes menos representadas.
- Projetar 3 redes com
diferentes números de camadas convolucinais (e números de mapas de
características) intercaladas por camadas de pooling e terminadas
camadas densas, visando melhorar a taxa de acerto de classificação.
- Verificar a melhor
rede, entre as treinadas anteriormente, mas agora com 11 categorias. A
classe adicional "outros" é ativada se nenhum neurônio da camada de
saída atingir o limiar = 0,4. Não é feito nenhum treinamento novo. Em
caso de dúvida é "outro" e não o "menos ruim". Verificar a influência
do limiar na acurácia. (Em um banco de dados rotuladdo este
procedimento seria considerado "tendencioso", mas na classificação de
imagens do mundo real, não rotuladas, evita "diagnósticos forçados",
eg. [0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.09 0.11], winner = 0.11(!).
Sugestão:
Relatório:
Além dos itens usuais, não esqueça de incluir:
- A topologia das redes utilizadas.
- As matrize de confusão dos classificadores.
- Alguns exemplos das imagens utilizadas no treinamento e imagens de
teste e validação.
- Alguns exemplos de mapas de características - imagens filtradas no
início, meio e final da CNN (antes do "flatten").
- Através de uma tabela, resuma os resultados para as diferentes
topologias de rede. Taxas de acerto (accurarcy e loss), tempo de
treinamento.
- Hardware utilizado (PC, GPU, DevCloud, Colab etc.)
- Comente sobre o melhor resultado, comparando-o, sempre que possível,
aos resultados descritos na literatura.
- Código fonte.
Bom
Trabalho !!