Rafael Henrique Santos Rocha Reconhecimento de Objetos por Redes Neurais Convolutivas Dissertação de Mestrado Dissertação apresentada como requisito parcial para obtenção do grau de Mestre pelo Programa de Pós–graduação em Otimização e Raciocı́nio Automático do Departamento de Informática da PUC–Rio Orientador: Prof. Ruy Luiz Milidiú Rio de Janeiro Agosto de 2015 Rafael Henrique Santos Rocha Reconhecimento de Objetos por Redes Neurais Convolutivas Dissertação apresentada como requisito parcial para obtenção do grau de Mestre pelo Programa de Pós–graduação em Otimização e Raciocı́nio Automático do Departamento de Informática do Centro Técnico Cientı́fico da PUC–Rio. Aprovada pela Comissão Examinadora abaixo assinada. Prof. Ruy Luiz Milidiú Orientador Departamento de Informática — PUC–Rio Prof. Hélio Cortês Vieira Lopes Departamento de Informática - PUC–Rio Prof. Marcus Vinicius Soledade Poggi de Aragão Departamento de Informática - PUC–Rio Prof. José Eugenio Leal Coordenador Setorial do Centro Técnico Cientı́fico — PUC–Rio Rio de Janeiro, 24 de Agosto de 2015 Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, do autor e do orientador. Rafael Henrique Santos Rocha Graduou–se em Ciência da Computação na Universidade Federal de Alagoas(UFAL) Ficha Catalográfica Rocha, Rafael Reconhecimento de Objetos por Redes Neurais Convolutivas / Rafael Henrique Santos Rocha; orientador: Ruy Luiz Milidiú. — Rio de Janeiro : PUC–Rio, Departamento de Informática, 2015. v., 48 f: il. ; 29,7 cm 1. Dissertação (mestrado) - Pontifı́cia Universidade Católica do Rio de Janeiro, Departamento de Informática. Inclui referências bibliográficas. 1. Informática – Tese. 2. Rede Neural Convolutiva. 3. Reconhecimento de Objetos. 4. Aprendizado Supervisionado. I. Milidiú, Ruy Luiz. II. Pontifı́cia Universidade Católica do Rio de Janeiro. Departamento de Informática. III. Tı́tulo. CDD: 510 Agradecimentos Aos meus pais, amigos e professores Resumo Rocha, Rafael; Milidiú, Ruy Luiz. Reconhecimento de Objetos por Redes Neurais Convolutivas. Rio de Janeiro, 2015. 48p. Dissertação de Mestrado — Departamento de Informática, Pontifı́cia Universidade Católica do Rio de Janeiro. Reconhecimento de objetos é uma tarefa de visão computacional que consiste em atribuir um rótulo a uma imagem com base no objeto nela representado. O estado da arte aplica técnicas de deep learning para classificar imagens diretamente a partir dos pixels, a versão mais recente chamada Spatially-Sparse Convolutional Neural Networks atinge 93.72% de acurácia na base CIFAR-10, que é usada como benchmark para esta tarefa. Diversos fatores contribuem para tornar esta tarefa complexa, como a oclusão parcial do objeto, diferenças de iluminação, variações em cenas de fundo, além das diferentes configurações que objetos do mesmo tipo podem apresentar. A relação entre os valores dos pixels e o conteúdo da imagem não é simples. Por isso, geralmente há uma primeira etapa de préprocessamento, que inclui obter uma descrição do conteúdo da imagem mais apropriada que os pixels. Encontrar essa descrição é a parte mais laboriosa e costumava ser feita por especialistas da área. Para isto, eles aplicam diferentes extratores de caracterı́sticas, a depender da tarefa em questão. Recentemente, avanços tanto teóricos como tecnológicos permitiram o uso eficiente de redes neurais de múltiplas camadas nessa tarefa. Uma das principais motivações desses desenvolvimentos é a descoberta automática de uma descrição mais apropriada dos dados. Este trabalho examina os detalhes envolvendo a implementação e o uso de diferentes tipos de redes neurais de múltiplas camadas para o reconhecimento de objetos em imagens, em especial as modificações mais recentes em redes neurais convolutivas. Os resultados são avaliados na base CIFAR-10. Esta base consiste de 60 mil imagens coloridas de 32 pixels de largura e altura, divididas em 10 classes de objetos. A base é dividida em um conjunto de treino com 50 mil imagens e um de teste com 10 mil. Os modelos apresentados geram como saı́da uma distribuição discreta de probabilidade, indicando a probabilidade da amostra pertencer a cada uma das 10 classes. São usadas duas medidas de performance dos modelos estudados. A entropia cruzada, que compara a distribuição de probabilidade gerada pelo modelo com o vetor da classificação real e a acurácia da classificação, que conta quantos elementos foram classificados corretamente pelo modelo. Esta dissertação demonstra o impacto das principais modificações de redes neurais convolutivas e técnicas de pré-processamento na capacidade de generalização dos diferentes modelos. Com nossas implementações das estratégias propostas, obtemos 87.14% de acurácia na base CIFAR-10, o que evidencia o poder das redes neurais convolutivas. Palavras–chave Rede Neural Convolutiva. Supervisionado. Reconhecimento de Objetos. Aprendizado Abstract Rocha, Rafael; Milidiú, Ruy Luiz. Object Recognition by Convolutional Neural Networks. Rio de Janeiro, 2015. 48p. MsC Thesis — Department of Informática, Pontifı́cia Universidade Católica do Rio de Janeiro. Object recognition is a computer vision task, at which we label an image based on the object within it. The state-of-the-art applies deep learning techniques to classify images, directly from the pixel values. The most recent network, called Spatially-Sparse Convolutional Neural Networks, reaches an accuracy of 93.72% at the CIFAR-10 dataset. Which is the dataset we use on this dissertation thesis. This task is considered hard due to many factors like, partial occlusion of an object, illumination variation, different backgrounds, and many object configurations within the same class. The relationship between pixel values and image’s content is not straightforward. Thus, Commonly there is a pre-processing step before the training, it includes a more robust image description than the pixel values. However, it is hard to find such description. This used to be made by specialists, For this, they used feature extractors, that changed according to the task. Recently, theoretical and technological advancements allowed us to efficiently use deep neural networks at this task. One of the main reasons for this is the automatic feature generation by this kind of approach. This work analyses the details around implementation and use of different kinds of deep neural networks for object recognition on images, specially the most recent modifications on convolutional neural networks. The results are evaluated on the CIFAR-10 dataset. This dataset consists of 60 thousand colored square images of 32 pixels side. The dataset is separated on a training set with 50 thousand images and a test set with 10 thousand images The presented models generate a discrete probability distribution, with the probability for the input sample to belong to each one of the 10 classes. We use two performance measures for the studied models. The cross-entropy, that compares the probability distribution generated by the model with the real classification vector of the input sample. and the classification accuracy. which counts how many samples were correctly classified by the model. This thesis presents the impact of the convolutional neural networks modifications and preprocessing techniques on the generalization capability of the models. This thesis shows the main modifications of convolutional neural networks and pre-processing techniques at the generalization capacity of the distinct models. With our strategies and implementations we reach 87.14% accuracy on CIFAR-10 dataset. This highlights the power of convolutional neural networks Keywords Convolutional Neural Network. Learning. Object Recognition. Supervised Sumário 1 Introdução 15 2 Préprocessamento 2.1 Normalização 2.2 Padding 2.3 Whitening 2.4 Translação 2.5 Redimensionamento 2.6 Dropout 19 19 20 20 22 23 23 3 Redes Neurais Convolutivas 3.1 Redes Neurais 3.2 Redes Neurais Convolutivas 3.3 Softmax 3.4 Maxout Networks 3.5 Networks in Networks 3.6 Convolução da Convolução 24 24 26 31 32 32 33 4 Implementação Java 4.1 Bibliotecas 4.2 Arquitetura 4.3 Resultados 34 34 34 36 5 Metodologia 5.1 Dataset 5.2 Implementação Java 5.3 Placas Gráficas 5.4 Implementação Python 37 37 37 38 38 6 Experimentos 6.1 Descrição das arquiteturas 6.2 Modelo 1 6.3 Modelo 2 6.4 Modelo 3 39 39 40 40 42 7 45 Conclusão Referências Bibliográficas 47 Lista de figuras 1.1 Imagens difı́ceis 15 2.1 2.2 Covariância dos Pixels Covariância dos Pixels após ZCA-Whitening 20 21 3.1 3.2 3.3 3.4 3.5 3.6 Rede Neural CNN vs DNN Convolução em Imagem Exemplo Convolução Convolução 1D Exemplo Pooling 24 27 27 28 29 30 4.1 4.2 Diagrama Layers Organização das Matrizes de Imagens 35 36 5.1 Cifar-10 37 6.1 6.2 6.3 6.4 Entropia Modelo 1 Acurácia Modelo 1 Entropia Modelo 2 Comparação Modelos 1 e 2 41 42 43 44 Lista de tabelas 1.1 1.2 Evolução do estado da arte no Cifar-10 Resultados 16 18 6.1 6.2 6.3 6.4 Matriz Matriz Matriz Matriz 40 41 43 44 de de de de confusão confusão confusão confusão do do do do modelo modelo modelo modelo 1 2 3 3 (Lanczos) If you torture the data enough, nature will always confess. Ronald Coase, Coase, R. H. 1982. How should economists choose?. 1 Introdução Apresentamos um estudo das principais arquiteturas de redes neurais de múltiplas camadas, aplicadas ao problema de reconhecimento de objetos em imagens naturais. As redes neurais de múltiplas camadas, do inglês Deep Neural Networks(DNN) são modelos de aprendizado (Rumelhart, et al. 1986),(Fukushima, 1980) que possuem muitos parâmetros ajustáveis e consomem muitos recursos durante a etapa de treino. No entanto, o surgimento recente de placas gráficas a baixo custo e avanços teóricos que diminuem o número de cálculos por parâmetro, tornou viável o treinamento desse tipo de algoritmo em tarefas que envolvem muitos dados. Figura 1.1: Imagens de gatos apresentando algumas das dificuldades na tarefa de classificação de objetos. À esquerda, uma amostra normal. No meio, parcialmente oclusa e na direita, parcialmente obstruı́da Uma especialização das DNNs, chamada Convolutional Neural Networks(CNN) (Lecun et. al, 2001) são modelos projetos para trabalhar com imagens. Elas são baseadas em um modelo não supervisionado, chamado Neocognitron (Fukushima, 1980), que por sua vez foi projetado com base no córtex visual de um gato (Hubel and Wiesel, 1962). Os algoritmos do estado da arte para reconhecimento de objetos são modificações das CNNs, como as Spatially-Sparse Convolutional Neural Networks (Graham, 2014) e as Network in Networks (Min Lin, et al. 2013). Na terminologia de aprendizado de máquina, o reconhecimento de objetos é uma tarefa de classificação. Cada tipo de objeto é uma classe, uma imagem está associada a apenas um objeto e existe um conjunto finito de tipos de objetos. Para avaliar os modelos nessa tarefa usamos a base de dados CIFAR- Capı́tulo 1. Introdução 16 Tabela 1.1: Tabela dos algoritmos do estado da arte ao longo dos anos Tı́tulo Autores Acurácia Spatially-Sparse Convolutional (Graham, 2014) 93.72% Neural Networks Networks in Networks (Min Lin, et al. 2013) 91.19% Maxout Networks (Goodfellow, et al. 2013) 90.65% Practical Bayesian Optimization (Snoek, et al. 2012) 90.5% of Machine Learning Algorithms ImageNet Classification with (Krizshevsky, et al. 2012) 89% Deep Convolutional Neural Networks Improving neural networks by (Hinton, et al. 2012) 84.4% preventing co-adaptation of feature detectors Learning Invariant Representati- (Sohn, et al. 2012) 82.2% ons with Local Transformations An Analysis of Single-Layer (Coates, et al. 2011) 79.6% Networks in Unsupervised Feature Learning 10 (Krizhevsky,2009), que consiste de imagens coloridas de 32 × 32 pixels, divididas em 10 classes. A base possui 50 mil imagens para treino e 10 mil para teste. Objetos do mesmo tipo podem ter diversas formas, estar sob diferentes perspectivas, obstruı́dos, ou parcialmente oclusos, assim como se espera em imagens naturais (ver figura 1.1). A tabela 1.1 apresenta os algoritmos do estado da arte no reconhecimento de objetos, na base cifar-10, ao longo dos anos de 2011 à 2014. Em 2011, (Coates, et al. 2011) usou K-means em sub-regiões da imagem para aprender um conjunto de features de k extratores de features. Esses extratores eram usados em um modelo de bag-of-features, para obter uma descrição da imagem que era passada para um classificador linear Support Vector Machine(SVM). Esse classificador treinava a tarefa de classificação de imagens usando os descritores aprendidos de maneira não supervisionada. Ele sugere que quanto maior o parâmetro k do K-means, melhor a taxa de acurácia que o modelo consegue obter. No final ele consegue 79.6% de acurácia, usando 4000 kernels. Em 2012 (Sohn, et al. 2012) usa outro método não-supervisionado, as Restricted Boltzmann Machine(RBM), para aprender features invariantes a transformações afins. Ele usa max-pooling nas features aprendidas da RBM para obter a invariância. Essas features são usadas em uma maneira similar aos kernels k-means de (Coates, et al. 2011), após aprender as features eles usam como classificador um SVM com regularização L2. Ainda em 2012, (Krizshevsky, et al. 2012) aplica redes neurais convolu- Capı́tulo 1. Introdução 17 tivas de múltiplas camadas na tarefa e consegue 89% de acurácia. No mesmo ano (Snoek, et al. 2012) usa otimização bayesiana para escolher os melhores hiper-parâmetros de uma Convolutional Neural Network e consegue 90.5%. Em 2013 (Goodfellow, et al. 2013) desenvolve uma alteração das Convolutional Neural Networks, chamada Maxout Networks que conseguem 90.65%. No mesmo ano (Min Lin, et al. 2013) desenvolve uma modificação mais geral que as Maxout Networks, as Network in Networks, que conseguem 91.19% de acurácia. Por fim, em 2014, (Graham, 2014) usa uma Network in Networks muito profunda nas imagens pequenas do Cifar-10, ele consegue isso adicionando padding nas imagens de entrada para aumentar o tamanho das imagens virtualmente. Com isso, a rede possui uma quantidade de parâmetros muito maior, mas a maioria dos valores nessa matriz durante a execução é 0. Por isso, ao usar um código otimizado para computar convolução em matrizes esparsas, ele consegue treinar essa rede de forma eficiente e obter 93.72% de acurácia no dataset. A classificação de imagens naturais é difı́cil quando usamos apenas os pixels para descrever o conteúdo. Geralmente, fazemos um pré-processamento da imagem para extrair caracterı́sticas mais descritivas como o Histogram of Gradients(Dalal and Triggs, 2005) ou Sift (Lowe, 1999). Esses descritores conseguem bons resultados para várias tarefas envolvendo imagens. No entanto, cada tarefa possui um conjunto de descritores mais apropriados, e criar descritores mais abstratos que as arestas a partir dos pixels de uma imagem é uma tarefa complexa para se fazer manualmente. Algumas propostas descrevem como obter descritores por meio de um processo de aprendizado não supervisionado (Coates, et al. 2011), mas o número de descritores necessários para obter bons resultados em qualquer tarefa é grande. As DNN são modelos supervisionados que propõem aprender tanto a tarefa quanto o conjunto de descritores mais apropriados para ela. Os neurônios das camadas internas de uma DNN podem ser vistos como descritores da entrada e camadas superiores geram descritores mais abstratos a partir das camadas inferiores. As CNNs foram projetadas para aprender bons descritores para imagens. Existem diversas implementações das CNNs, com pequenas mudanças na arquitetura provocando melhorias significativas na performance do algoritmo. Estudar o conjunto dessas alterações pode ajudar a entender melhor esse tipo de modelo e identificar oportunidades de melhorá-lo ainda mais. A tabela 1 mostra os resultados que obtivemos usando diferentes tipos de modelos, destacando além da acurácia, a entropia cruzada e o número de parâmetros ajustáveis do modelo. Implementamos algoritmos propostos no Capı́tulo 1. Introdução Estado da arte Modelo 3b Modelo 2 18 Acurácia 93.75% 87.14% 74.19% entropy-loss 0.42 0.76 Parâmetros 33.416.100 3.417.544 89.440 Tabela 1.2: Resultados da acurácia e entropy-loss obtida com os modelos testados estado da arte com diferentes parametrizações, mas ainda há uma margem considerável em relação ao estado da arte para esta tarefa. A principal diferença é que os modelos implementados são consideravelmente menores que o melhor resultado da litetura, mas parte do problema deve-se a diferenças na escolha de hiper-parâmetros, polı́tica de atualização da taxa de aprendizado, falta da introdução de rotações e outras transformações de imagens na etapa de préprocessamento e métodos de regularização especı́ficos que não foram replicados neste trabalho. Estudamos as principais modificações da CNN que atingem o estado da arte na classificação de objetos, discutindo os argumentos por trás das contribuições de cada modelo. Implementamos um sistema de software orientado a objetos em Java da CNN, com algumas das técnicas de pré-processamento e aumento artificial dos dados. Também avaliamos as modificações da CNN em um conjunto de dados de forma experimental. Este trabalho está organizado da seguinte maneira. No Capı́tulo 1, apresentamos os algoritmos usados no pré-processamento das imagens e aumento artificial dos dados. No Capı́tulo 2, fazemos uma revisão sobre Redes Neurais e Redes Neurais Convolutivas e descrevemos as principais modificações que levaram o algoritmo ao estado da arte no reconhecimento de objetos. No Capı́tulo 3, descrevemos a implementação em Java. No Capı́tulo 4, mostramos a metodologia usada no trabalho para os experimentos, com detalhes sobre o dataset, bibliotecas e hardware. No Capı́tulo 5, treinamos diferentes modelos no dataset CIFAR-10 e avaliamos os resultados. O Capı́tulo 6 é a conclusão com discussão sobre os resultados e contribuições desse trabalho. 2 Préprocessamento Algoritmos de aprendizado de máquina necessitam de uma grande quantidade de exemplos para funcionar bem. No entanto, como a tarefa de reconhecimento de objetos é supervisionada, os exemplos de treino precisam ser pré-classificados por humanos, o que torna esses dados escassos. Uma alternativa menos custosa que criar novos exemplos é modificar os exemplos já existentes. Esse aumento artificial dos dados visa explorar variações dos dados que podemos esperar na tarefa real. A maior quantidade de dados diminui as chances do modelo se adaptar a valores muito especı́ficos dos exemplos de treino e perder a capacidade de generalização. Quando o modelo se adapta bem ao treino mas não interpreta bem dados fora desse conjunto, dizemos que o modelo está sofrendo overfitting. Um dos maiores problemas de modelos com muitos parâmetros, como as DNN, é o overfitting. 2.1 Normalização A primeira etapa consiste em normalizar os dados. O algoritmo que ajusta os parâmetros do modelo usa os valores dos dados de entrada no cálculo do ajuste, se os dados de entrada possuem valores muito altos ou muito baixos o modelo não consegue generalizar bem. Em imagens, podemos subtrair de cada pixel o valor do pixel médio, e dividir pelo desvio padrão. Isso deixa as imagens centralizadas na origem e com variância igual a 1. X̂ = X − E[X] σ(X) Também podemos normalizar os dados em um intervalo fixo [0,1] X̂ = X − min(X) max(X) − min(X) Capı́tulo 2. Préprocessamento 20 2.2 Padding O Padding adiciona pixels ao redor da imagem, com valor zero. Ele é usado no algoritmo do estado da arte Spatially-Sparse Convolutional Neural Networks proposta por (Graham, 2014), para permitir que o modelo tenha muitos parâmetros, independentemente da imagem ser muito pequena. Usar o padding nos permite explorar mais transformações da imagem de entrada sem sacrificar pixels que descrevem o objeto. Outra vantagem dessa abordagem é que ela permite gerar arquiteturas arbitrariamente profundas a um custo relativamente baixo de implementação, sem que seja necessário modificar o framework das redes convolutivas. 2.3 Whitening Os pixels de uma imagem geralmente são altamente correlacionados aos pixels vizinhos. Levando em consideração que uma imagem possui três canais de cores e w × h pixels por canal, podemos computar a correlação XCov entre os pixels de um conjunto dessas imagens coloridas. Primeiro, transformamos a imagem em um vetor, com os pixels das três camadas concatenados. Um conjunto de N imagens forma uma matrix X = N × (3wh), cada linha representa uma imagem. A matriz XCov = N1 X T X é a matriz de covariância média entre os pixels nessas imagens. A figura 2.1 apresenta a matriz de covariância de um conjunto de 1000 imagens da base CIFAR-10. Figura 2.1: Covariância entre pixels de um conjunto de imagens naturais A correlação entre os pixels vizinhos é uma caracterı́stica que o modelo tenta aprender, mas que costuma atrapalhar a tarefa da classificação de objetos (Coates, et al. 2011). O Whitening é um algoritmo que descorrelaciona as dimensões de um vetor. Ao aplicar o Whitening nos pixels de uma imagem nós Capı́tulo 2. Préprocessamento 21 removemos esse trabalho do modelo, aumentando a velocidade de convergêcia. Geralmente usa-se o Principal Component Analysis(PCA) ou o Zero-Phase Component Analysis(ZCA) whitening para tornar os pixels da imagem descorrelacionados. Vemos na figura 2.2 que a correlação entre os pixels das imagens se aproxima da matriz identidade após aplicar esse allgoritmo. Figura 2.2: Covariância entre pixels de um conjunto de imagens naturais após multiplicar a imagem pela matriz de whitening Para computar o ZCA whitening seguimos o algoritmo 1. X é uma matriz N × M com N imagens coloridas por linha, cada qual com M = 3wh colunas. O algoritmo retorna a matriz ZCA M × M . Primeiro, centralizamos os dados, subtraindo a média de cada imagem. Depois, dividimos a matriz pelo número de amostras N . Então, computamos a covariância e fazemos a decomposição em auto-vetores(U ) e autovalores(s) da matriz de covariância XCov. A matriz de covariância XCov sempre tem uma decomposição em que U × s × U T = XCov e U T U = I. Depois computamos a raiz do inverso da matriz diagonal de autovalores s−0.5 . Por fim, obtemos a matriz de whitening ZCA = U T × s−0.5 × U . Data: X Result: ZCA X = X − X.mean(axis = 0); X = X/X.columns; XCov = X T × X; U, s, U T = svd(XCov); s−0.5 = √ 1 ; diag(s) ZCA = U T × s−0.5 × U ; Algorithm 1: ZCA Whitening Quando obtemos a matriz ZCA podemos descorrelacionar os pixels de um conjunto de imagens qualquer A multiplicando pela matriz de whitening ATwhite = ZCA × AT . As equações 2-1 mostram como o ZCA whitening torna os pixels da imagem descorrelacionados. Capı́tulo 2. Préprocessamento 22 Y = ZCA × X T Y T × Y = (ZCA × X T ) × (ZCA × X)T (ZCA × X T )T = X × ZCAT Y T × Y = ZCA × X T × X × ZCAT Y T × Y = ZCA × XCov × ZCAT ZCA = U T s−0.5 U ZCAT = U T (s−0.5 )T U (2-1) Y T × Y = U T s−0.5 U × U T sU × U T (s−0.5 )T U UT U = I Y T × Y = U T s−0.5 × s × (s−0.5 )T U Y T × Y = U T s−0.5 × s0.5 U Y T × Y = U T IU YT ×Y =I 2.4 Translação A translação permite aumentar a quantidade de dados rapidamente a um baixo custo, ela consiste em mover todos os pixels da imagem nos dois eixos. Isso ajuda o modelo a ser mais robusto com relação a posição do objeto dentro da imagem. 2.4.1 Lanczos Kernel Lanczos resampling é uma técnica usada para re-amostragem de um sinal digital e interpolação de valores. Ela também pode ser usada para fazer uma translação de um sinal digital por uma fração do intervalo de amostragem. Uma imagem pode ser vista como um sinal digital em duas dimensões, onde cada pixel é o intervalo de amostragem. Nós usamos essa técnica para fazer a translação da imagem em intervalos menores que um pixel. A vantagem de usar o Lanczos resampling é que ele muda os valores dos pixels da imagem com relação aos seus vizinhos, o que torna o modelo mais robusto a pequenas variações nos valores dos pixels. Ela também provê uma maior quantidade de possiveis translações em comparação a translação comum. A translação usando filtro de Lanczos é relativamente lenta em comparação à translação comum. No entanto, o impacto dessa mudança é pequeno quando Capı́tulo 2. Préprocessamento 23 usamos modelos com muitos parâmetros, que são os mais propensos a sofrer overfitting. Os efeitos de usarmos esse filtro são mais detalhados no capı́tulo de experimentos. O filtro de lanczos pode ser descrito pelas equações 2-2, onde a é o tamanho do kernel e x o ı́ndice do elemento no filtro. 1, x = 0 a sin(π(x) sin(πx/a) L(x) = (2-2) , −a < x < a π 2 x2 0, otherwise A função de re-amostragem S(x) usando o kernel de Lanczos é descrita pela equação 2-3. Na função, x é o ı́ndice do sinal re-amostrado. O sinal original s, sofre translação dx usando um kernel de tamanho a. Essa equação é efetivamente uma convolução com o filtro de Lanczos. Assim, podemos reutilizar o framework das CNNs para implementar essa translação. ⌊x+dx⌋+a S(x) = ∑ si L(x − i) (2-3) i=⌊x+dx⌋−a+1 2.5 Redimensionamento Outra maneira de aumentar os dados é o redimensionamento, (scale em inglês). Ele modifica a distancia relativa dos pixels da imagem, mas mantém a estrutura do objeto dentro da imagem. Isso torna o modelo mais robusto com relação a objetos de diferentes tamanhos na imagem. 2.6 Dropout O dropout é uma técnica de regularização (Hinton, et al. 2012) que ajuda a descorrelacionar a saı́da dos neurônios de uma DNN, ele é aplicável em qualquer camada das DNN. O dropout desativa alguns dos neurônios da camada associada com alguma propbabilidade p. Desativar um neurônio significa mudar o valor de saı́da para 0. Assim, Quando usamos dropout com probabilidade p em uma camada com M parâmetros, nós a treinamos como se ela tivesse pM parâmetros em cada iterção, mas esses pM parâmetros que formam a rede podem ser diferentes em cada iteração. No final os neurônios que sofreram dropout tem os parâmetros reajustados, multiplicados por p. O efeito de usar esse algoritmo é similar ao de fazer uma média de todos os possı́veis Capı́tulo 2. Préprocessamento 24 modelos da rede neural que usam um subconjunto pM dos M parâmetros disponı́veis na camada afetada. 3 Redes Neurais Convolutivas O Neocognitron de (Fukushima, 1980) é um modelo não-supervisionado de aprendizado que tenta modelar o sistema visual de um mamı́fero. Lecun, extende esse modelo para um formato supervisionado, chamado Convolutional Neural Network (CNN) ou Rede Neural Convolutiva. Ele aplica as CNNs em uma tarefa de reconhecimento de caracteres em grande escala (Lecun et. al, 2001). 3.1 Redes Neurais Redes Neurais são modelos genéricos constituı́dos de neurônios artificiais. Um neurônio recebe um conjunto de valores de entrada e computa um único valor de saı́da. O formato mais simples de redes neurais são as Feedforward Neural Networks (FFNN). Este tipo de rede é constituı́do de camadas, e todos os neurônios de uma camada são conectados com os neurônios da próxima, ver figura 3.1 Figura 3.1: Rede Neural Com uma camada escondida (hidden), cada par de neurônios entre camadas subsequentes tem um parâmetro W . O neurônio da camada da frente usa uma combinação desses parâmetros e da ativação dos neurônios da camada de trás para computar sua ativação Capı́tulo 3. Redes Neurais Convolutivas 26 As FFNN possuem dois algoritmos, o forward propagation e o back propagation. Eles são usados para computar o vetor de saı́da de ativação da rede e reajustar os parâmetros da rede com base em alguma medida de erro, com exceção da camada de entrada e saı́da, todas as camadas da FFNN são chamadas camadas escondidas (hidden). 3.1.1 Forward Propagation Cada camada da rede computa a saı́da como uma função aplicada a um vetor de ativação dos neurônios da camada anterior. Os parâmetros de uma camada formam uma matriz W que multiplica o vetor de entrada x para obter o vetor de ativação z. Então, a rede aplica uma função não-linear para obter o vetor disparo a. Seja uma FFNN com N camadas. Considere um vetor x com os valores de entrada da rede, computamos o vetor de saı́da aN segundo as equações 3-1. Onde f é uma função derivável qualquer, chamada função de disparo. A função de disparo não deve ser linear porque a composição de transformações lineares pode ser representada por uma única transformação linear. Os neurônios da primeira camada não computam nenhuma ativação, apenas representam o vetor de entrada. a(0) = x z (l) = W l−1 .a(l−1) , ∀l ∈ [1..N ] (3-1) a(l) = f (z (l) )∀l ∈ [1..N ] A rede neural computa a saı́da de cada camada em sequência, a entrada dos neurônios da camada n + 1 é a saı́da dos neurônios da camada n. O modelo aplica transformações não-lineares sucessivas no vetor de entrada até obter um vetor de saı́da. 3.1.2 Back propagation O treino nas redes neurais é feito com o algoritmo de Backpropagation. Como as redes neurais são um modelo supervisionado, cada vetor de entrada vem com o vetor de saı́da desejada na base de treino. Então, podemos computar a diferença entre a saı́da desejada e a obtida para medir o erro da rede. A partir do erro, podemos ajustar os parâmetros W da rede usando o gradiente do erro com relação a esses parâmetros. Como as funções de ativação f são deriváveis, podemos usar a regra da cadeia para computar a derivada do erro com relação a cada parâmetro da rede tendo apenas o valor do erro na última camada. Capı́tulo 3. Redes Neurais Convolutivas 27 Dessa forma, podemos computar o ajuste ∆W a ser feito no parâmetro W seguindo as equações 3-3. Primeiro temos ∂Err . Por exemplo, se usamos uma ∂aN função de erro quadrática temos que a derivada do erro com relação a saı́da aN é Y − aN , segundo as equações 3-2. Err = dif f (aN , Y ) = 0.5(Y − aN )2 ∂Err = (aN − Y ) ∂aN (3-2) Para uma camada interna l + 1, podemos computar junto com o ajuste . Então, basta dos parâmetros W l a derivada com relação a entrada ∂Err ∂al propagar esses valores para a camada anterior, que computa a derivada em relação aos parâmetros W l−1 . Dessa forma, implementamos o algoritmo do backpropagation. Uma versão mais orientada a código do algoritmo é apresentada no capı́tulo 4. Err = dif f (aN , Y ) ∂Err ∂Err ∂al+1 ∂z l+1 ∂Err = = l+1 f ′ (z l+1 )al , ∀l ∈ [0..N − 1] l l+1 l+1 l ∂W ∂a ∂z ∂W ∂a ∂Err ∆W l = − ∂W l (3-3) 3.2 Redes Neurais Convolutivas Enquanto as DNN fazem com que cada feature seja computada com base em todas as dimensões da entrada, as CNN computam cada feature com base em um subconjunto das dimensões da entrada que formam uma vizinhança na imagem, como ilustrado na figura 3.2. Em uma DNN não importa se o usuário apresenta um rearranjo aleatório dos pixels da imagem como treino, desde que seja sempre o mesmo rearranjo, mas nas CNNs a posição dos pixels importa. As CNNs são arquiteturas profundas com diferentes tipos de camadas. Nesse trabalho são usadas as camada de convolução, max-pooling e softmax. 3.2.1 Convolução Cada camada de convolução possui um conjunto de parâmetros, chamados Kernels. Cada neurônio da saı́da de uma camada de convolução zik está associado a uma região da imagem de entrada Xi e a um Kernel k. O valor no Capı́tulo 3. Redes Neurais Convolutivas 28 neurônio de saı́da é uma função do produto interno entre um dos Kernels W k e essa região da entrada Xi , ou seja zik = f (W k × Xi ). Chamamos o conjunto de todas as saı́das z k associadas a um Kernel W k de Feature Map k. Para uma entrada X de dimensão w × h e um Kernel W de dimensão s × s, o Feature Map do kernel computa w − s + 1 × h − s + 1 valores de saı́da. A função de disparo é computada com o mesmo parâmetro W em diferentes regiões da imagem. A camada de convolução funciona como uma extratora de features especializada em imagens. Os Kernels são parâmetros ajustáveis do modelo, eles devem aprender a modelar relações entre pixels vizinhos, independente da posição em que esses pixels se encontram na imagem. Essa extração funciona usando uma convolução, similar aos primeiros extratores de features feitos manualmente em visão computacional (Dalal and Triggs, 2005). A figura 3.3 mostra o efeito de se aplicar uma convolução com um Kernel inicializado para detectar linhas horizontais. Forward Para realizar uma convolução, deslizamos o kernel pela imagem, multiplicando-o por cada subconjunto de pixels vizinhos, como ilustrado na Figura 3.2: Diferença entre dimensões da entrada que afetam o cálculo de ativação de uma feature nas DNNs e CNNs Figura 3.3: Efeito causado ao aplicar a convolução de um Kernel para detecção de linhas horizontais, em uma imagem de avião da base CIFAR-10 Capı́tulo 3. Redes Neurais Convolutivas 29 figura 3.4. Figura 3.4: Exemplo de convolução em uma “imagem” com uma camada de cor Cada Kernel possui o mesmo número de canais que a imagem de entrada. Assim, a operação de convolução em imagens é bidimensional. Seja uma imagem X com dimensões c×s1 ×s2 . Onde c é o número de canais de cores. Uma camada de convolução com m kernels 3 × 3 define um conjunto de parâmetros {W 1 , ..., W m }, cada W i com dimensões c × 3 × 3. A operação de convolução dessa camada produz m Feature Maps com dimensões (s1 − 3 + 1) × (s2 − 3 + 1). Uma medida comum é adicionar padding a imagem antes de executar a convolução, para que as dimensões de largura e altura do Feature Map sejam equivalentem às da imagem de entrada. Mostramos o cálculo do valor de uma saı́da (i, j) do Feature Map k na equação 3-4. O ı́ndice t representa o canal de cor, p, q e k são os ı́ndices do Kernel, i e j são os ı́ndices do Feature Map e σ é a função de ativação. c ∑ 3 ∑ 3 ∑ k,t k t f(i,j) = σ( W(p,q) × X(i+p,j+q) ) (3-4) t=0 p=0 q=0 Para efeito de comparação com uma camada convencional de F F N N a figura 3.5 mostra uma representação da convolução sobre um vetor 1D. Os parâmetros de mesma cor possuem o mesmo valor, alguns dos neurônios de entrada não participam da ativação de alguns dos neurônios de saı́da. O tamanho do Kernel determina a vizinhança dos neurônios na entrada que participam da ativação de um neurônio de saı́da especı́fico, na figura, o tamanho do kernel é 3 [Wr , Wg , Wb ]. Backpropagation Os parâmetros da camada de convolução são usados em diferentes valores da saı́da. Por isso, a computação do gradiente do erro com relação a esses Capı́tulo 3. Redes Neurais Convolutivas 30 parâmetros é um somatório, que acumula a contribuição do erro em cada valor do respectivo Feature Map. Assumindo que temos a derivada do erro com relação a saı́da da camada ∂Err de convolução ∂f = dE(i,j,k) . Podemos computar a derivada do erro com k (i,j relação ao Kernel de acordo com a equação 3-5. Essa equação tem uma forma similar ao backpropagation comum 3-3, com a diferença de que agora temos a soma sobre todos os neurônios de saı́da que usaram o Kernel. ∑∑ ∂Err k dE(i,j,k) σ ′ (zi,j )X(i+p,j+q) = k ∂W(p,q) i j (3-5) 3.2.2 Pooling A operação de pooling, como descrito por (Fukushima, 1980) tem como principal objetivo diminuir a sensibilidade da rede com relação a pequenas alterações na imagem. Ela consegue esse feito combinando as diferentes features de uma região em uma única feature. Isso diminui a redundância da rede. Figura 3.5: Representação de uma convolução unidimensional de tamanho 3 em um vetor, os parâmetros Wr, Wg e Wb são re-utilizados na computação da saı́da Capı́tulo 3. Redes Neurais Convolutivas 31 A forma de pooling mais usada atualmente nos principais trabalhos de reconhecimento de objetos é o max-pooling. Ele escolhe apenas o maior valor de ativação de uma região. zi = max{xj } j Isso implica que a derivada da saı́da zi com relação a entrada xj é 1 ou 0 a depender de se o valor xj foi escolhido ou não. Derivadas simples aceleram o processo de treino consideravelmente, especialmente em rede neurais de múltiplas camadas que possuem uma grande quantidade de conexões entre neurônios. A figura 3.6 mostra um exemplo do max-pooling em uma matriz simplificada. O número de camadas da imagem não muda depois do pooling, ou seja, as regiões de pooling são determinadas apenas nas dimensões de largura e altura da imagem. A equação 3-6 descreve o resultado de aplicar pooling em uma imagem particionada em regiões p × p. Onde c é o ı́ndice do canal de cores e i, j são os ı́ndices das partições. c z(i,j) = maxa∈[p.i,(p+1)i],b∈[p.j,(p+1)j] {xca,b ∀c, i, j} (3-6) Figura 3.6: Exemplo de max-pooling em uma região dividida em quatro quadrantes Overlapping Pooling Alguns modelos não usam pooling sobre partições da imagem, ao invés disso eles dividem a imagem em regiões que podem se sobrepor, semelhante à camada de convolução. O uso de regiões que se sobrepõem ajuda a regularizar a rede (Min Lin, et al. 2013). O algoritmo de forward não muda, apenas é Capı́tulo 3. Redes Neurais Convolutivas 32 executado em mais regiões. No entanto, o mesmo valor de entrada pode ser escolhido mais de uma vez, quando isso acontece o backpropagation deve somar as contribuições daquela entrada. Esse tipo de camada de pooling tem dois parâmetros, o tamanho da região que se faz o pooling e o deslocamento (stride em inglês) que determina onde deve ser a proxima região a ser sub-amostrada na entrada. Em uma camada de pooling convencional o deslocamento é igual ao tamanho. 3.2.3 Rectified Linear Units Um dos avanços recentes que permitem o uso eficiente de redes neurais convolutivas é uma nova função de ativação chamada Rectified Linear Unit (ReLU), descrita na equação 3-8. Com exceção do 0 essa função é derivável. A derivada dessa função é 1 para quando x é diferente de 0, ou 0 caso contrário. Isso simplifica o algoritmo do backpropagation e diminui o número de cálculos necessários por conexão. Como as CNNs são modelos com muitas conexões o impacto dessa mudança é considerável. Além disso, a ativação de neurônios inexpressivos é exatamente zero, o que acelera tanto o forward quanto o backpropagation. A combinação de diferentes ativações do tipo ReLU pode aproximar as funções tradicionais em formato sigmoidal, por isso ela funciona especialmente bem em arquiteturas profundas. (3-7) f (x) = max(0, x) 3.3 Softmax Geralmente, no final de uma DNN usamos uma camada Softmax. Uma propriedade da softmax é que a soma das saı́das é 1 e todas as saı́das são positivas. Então podemos interpretar saı́da da rede como uma distribuição de probabilidade discreta da entrada pertencer a cada uma das classes de interesse. A função de saı́da do Softmax é descrita na equação. O softmax possui um vetor de parâmetros para cada classe. computamos a similaridade da entrada x com relação a cada um dos vetores de parâmetros wi . Tornamos todos os valores de ativação positivo usando a função exponencial ai = ewi ×x , e normalizamos para que a soma das ativações seja 1 ŷi = ∑aiaj . j e−zj ŷj = ∑ −zi zi = wi × x ie (3-8) Capı́tulo 3. Redes Neurais Convolutivas 33 Geralmente usamos a entropia cruzada como medida de erro para o softmax, no lugar da distância euclidiana. Fazemos isso porque a derivada do erro Err com relação aos parâmetros da softmax wi , usando a entropia cruzada como erro, assume uma forma elegante: ∂Err = (ŷi − yi )x ∂wi 3.4 Maxout Networks As redes Maxout permitem que uma camada de convolução use mais de um kernel por feature map. Nas Maxout Networks, a ativação do maior kernel é a única levada em consideração. A função max aplicada a diferentes funções lineares fornece uma aproximação por partes de qualquer função convexa. Portanto, as Maxout Networks fornecem uma modelagem mais complexa das relações entre os pixels de uma região da imagem que podem ser representados por funções convexas, ao invés de funções lineares. A equação 3-9 descreve uma camada de convolução Maxout. Uma forma mais direta de implementar o Maxout é executando um Max-pooling entre Feature Maps. k f(i,j) = max{ v c ∑ 3 ∑ 3 ∑ k,t,v t W(p,q) × X(i+p,j+q) )} (3-9) t=0 p=0 q=0 3.5 Networks in Networks Networks in Networks propõem aumentar a capacidade da rede de modelar as relações entre os pixels, usando micro redes neurais para modelar cada subregião. Ao invés de fazer o produto interno de cada sub-região com um Kernel e aplicar uma função não linear no resultado. As Network in Networks aplicam uma rede neural na subregião para obter um valor. Uma forma de implementar o modelo proposto é adicionar uma camada de convolução com Kernel 1x1 em frente a camada de convolução convencional (Min Lin, et al. 2013). Quando uma camada de convolução com M Kernels é aplicada a Uma sub-região Xi de tamanho s × s, obtemos um vetor 1 × 1 × M , com uma feature por Feature Map. Ao aplicar uma camada de convolução com N kernels de tamanho 1 × 1, nós multiplicamos o vetor de features anterior por uma matriz e aplicamos uma função não-linear no resultado. Isso é identico a aplicar uma rede neural com uma camada escondida de M neurônios na Capı́tulo 3. Redes Neurais Convolutivas 34 sub-região s × s. 3.6 Convolução da Convolução As Network in Networks são uma generalização das CNNs comuns, que pode ser implementada como uma convolução 1x1 após uma camada de convolução comum. Então, duas camadas convolutivas de formato arbitrário generalizam as Networks in Networks. 4 Implementação Java Esse trabalho descreve uma implementação de uma rede neural convolutiva (CNN) em Java, usando apenas uma biblioteca de álgebra linear. 4.1 Bibliotecas Utilizamos a biblioteca JBlas para a implementação das operações com matrizes, infelizmente a biblioteca não conta com suporte a arrays multidimensionais. O que dificulta a manipulação de imagens. 4.2 Arquitetura A arquitetura segue a implementação em módulos como sugerida por Lecun (Lecun et. al, 2001). Cada módulo representa uma camada da Rede Neural. A figura 4.1 apresenta uma versão simplificada do diagrama de classes das classes que implementam os módulos da CNN. 4.2.1 Layer Cada módulo pode computar o vetor de saı́da a partir do vetor de entrada com a operação forward. Cada classe filha de Layer define como implementar essa operação. Para isso a classe recebe uma matriz bidimensional, a classe filha é responsável por reajustar o tamanho da matriz de acordo com a necessidade do algoritmo. A informação sobre a dimensão esperada da matriz é informada no método init. Esse método inicializa os parâmetros do módulo e retorna um vetor de inteiros com descrição da dimensão do vetor de saı́da. Foi necessário fazer essa manipulação de arrays de inteiros devido a falta de suporte da biblioteca para vetores multi-dimensionais. O método backward ajusta os parâmetros da camada. Esse método recebe como entrada a derivada do erro com relação a saı́da. Escolhemos usar o gradiente do erro ao invés do próprio erro por uma conveniência de implementação. Essa abordagem permite executar o algoritmo do backpropagation Capı́tulo 4. Implementação Java 36 de uma maneira direta no LinearLayer. O método backward computa o gradiente do erro com relação a entrada, ou seja, o gradiente com relação a saı́da da camada anterior. 4.2.2 Linear Layer Fizemos um módulo à parte que permite concatenar as diferentes camadas em uma lista. Com isso temos a inicialização, o processamento da saı́da e o ajuste dos parâmetros de todas as camadas de uma rede neural em uma única interface, dando flexibilidade para alterar a arquitetura sem muitas implicações no código-fonte. 4.2.3 Pre processamento Também implementamos o algoritmo de ZCA-Whitening, usando a biblioteca de álgebra linear jblas, que provê os métodos necessários como decomposição de uma matriz em auto vetores e auto valores. 4.2.4 Figura 4.1: Diagrama simplificado das classes da Rede Neural implementadas em Java. Capı́tulo 4. Implementação Java 37 Manipulação de Imagens Algumas técnicas de pré-processamento envolvem realocar os pixels da matrizes, implementamos a translação comum e a traslação usando o filtro de Lanczos. Além disso, devido a restrição de matrizes bidimensionais, implementamos métodos utilitários que ajudavam a administrar matrizes de três dimensões, guardando a largura e a altura da imagem. Para representar imagens de três dimensões em duas, concatenamos as linhas das diferentes camadas e guardamos a largura e altura da imagem. Como apresentado na figura 4.2. Figura 4.2: Como as matrizes de múltiplas camadas eram organizadas na implementação Java 4.3 Resultados O melhor resultado obtido usando a implementação do autor, executando em um Laptop com Intel core i5-4200U com 4Gb ram foi 73% de acurácia no conjunto de validação. O tempo de treino era de aproximadamente 10 horas, com 20 épocas. Devido as restrições de manipulação de arrays multidimensionais, implementamos o treino online, sem suporte a batches. 5 Metodologia 5.1 Dataset A base de dados que usamos é a CIFAR-10, que consiste de 60 mil imagens coloridas de 32x32 pixels, com 50 mil para treino e 10 mil para teste. As imagens estão divididas em 10 classes, a saber: avião, navio, caminhão, automóvel, sapo, pássaro, cachorro, gato, cavalo e cervo. Cada imagem possui apenas um dos objetos da classe de interesse, podendo estar parcialmente obstruı́do por outros objetos que não pertençam a esse conjunto. Alguns exemplos podem ser vistos na figura 5.1. Figura 5.1: Algumas amostras da base de dados utilizada, com amostras de cada classe por linha 5.2 Implementação Java Na implementação Java, utilizamos a biblioteca de álgebra linear JBlas, que oferece uma interface java para bibliotecas otimizadas. No entanto, como não há paralelização das operações nessa implementação e a utilização das operações de matrizes certamente não foram as melhores para a implementação do algoritmo, o tempo de execução do treino é bem maior do que na versão Capı́tulo 5. Metodologia 39 python. Portanto, os testes dos principais modelos foram feitos usando uma biblioteca python. 5.3 Placas Gráficas Para usufruir da capacidade de paralelizar as principais operações nas redes neurais convolutivas, usamos uma placa gráfica GeForce GTX 960, a placa possui 1024 núcleos com clock de 1.1 Ghz. As placas da Nvidia são construı́das na plataforma CUDA(Computer Unified Device Arquitecture) e compartilham uma linguagem de programação que permite executar algoritmos concorrentes nos diferentes núcleos. 5.4 Implementação Python O python possui uma biblioteca para programação numérica chamada Theano, que compila código em CUDA e associa ao código python de maneira simples para o desenvolvedor. Usamos a biblioteca de aprendizado de máquina Lasagne que depende do Theano para paralelizar as operações com matrizes e computar as derivadas do erro no backpropagation 5.4.1 Theano O Theano é uma biblioteca do python com operações para manipulação de arrays multi-dimensionais, ela conta com derivação automática de funções e, quando disponı́vel, paralelização das operações com matrizes para executar em uma placa gráfica. 5.4.2 Lasagne Lasagne é uma biblioteca do python para aprendizado de máquina com foco em redes neurais de múltiplas camadas, ela é relativamente recente e continua em desenvolvimento. Essa biblioteca provê diversos tipos de camadas em uma arquitetura modular, como a que foi apresentada na implementação Java, mas muito mais completa. Ela conta com diversos parâmetros de configuração das redes neurais e fornece uma interface simples para a criação, treino e validação dos algoritmos com redes neurais de múltiplas camadas. 6 Experimentos Esse capı́tulo apresenta os resultados dos experimentos com os modelos em python, executados na placa gráfica, usando a biblioteca lasagne de aprendizado de máquina para implementação das arquiteturas. As 10 classes são enumeradas de 1 à 10 representando respectivamente os objetos {avião, carro, pássaro, gato, cervo, cachorro, sapo, cavalo, navio, caminhão}. As matrizes de confusão representam cada classe pelas três primeiras letras do objeto (e.g. avião = avi), as linhas são previsões e as colunas são as classes reais dos objetos. 6.1 Descrição das arquiteturas Usamos uma notação padrão para descrever os diferentes modelos estudados. A CNN é formada por diversas camadas e cada camada possui uma descrição resumida, as camadas vizinhas são separadas por uma barra vertical “|”. A camada convolutiva possui dois parâmetros, o número de Kernels e o tamanho dos Kernels. Geralmente usa-se padding antes da convolução, para que a saı́da da camada convolutiva preserve as dimensões da imagem de entrada, mas nem sempre isso é utilizado. Assim, descrevemos uma camada convolutiva com n kernels k × k como nCk e no caso de não haver padding nck (e.g. 10C3, uma camada convolutiva com 10 kernels 3x3 com padding). Todas as camadas de pooling usadas implementam o Max-Pooling, que possui dois parâmetros, o tamanho da região a ser amostrada, e o desvio, ou stride. pM s é uma camada de MaxPooling que faz o pooling em uma região p × p com stride s × s. Descrevemos uma camada com uma rede neural completamente conectada com n neurônios de saı́da como F n. A camada softmax que produz saı́da de tamanho n é Sn. Por fim, qualquer camada de uma DNN pode ser seguida de dropout, o único parâmetro do dropout é a probabilidade de desativar algum neurônio da camada anterior. Descrevemos uma camada de dropout com probabilidade 0.x de desativar um neurônio como Dx Por exemplo, uma arquitetura 10C3|3M 2|D5|F 100|S10 é uma rede convolutiva com uma camada de convolução 3 × 3 com 10 Kernels e padding, Capı́tulo 6. Experimentos avi car pas gat cer cac sap cav nav cam Tabela avi car 734 12 16 835 61 8 36 15 13 1 6 3 13 5 13 7 52 20 54 93 6.1: Matriz pas gat 45 12 1 3 695 71 60 673 48 30 58 116 46 42 30 24 7 8 9 18 41 de confusão cer cac 12 7 3 2 83 66 95 235 668 31 22 579 45 21 61 47 6 3 5 6 do modelo sap cav 7 12 2 3 48 36 95 61 16 37 14 48 809 5 5 780 2 2 2 13 1 nav 65 25 13 30 1 5 9 2 794 53 cam 20 50 10 22 1 5 3 8 13 868 seguida de uma camada de Max-Pooling com região de pooling 3 × 3 e stride 2 × 2, , seguida de dropout com 50% de chance de desativar um neurônio, seguida de uma camada de rede neural comum com 100 neurônios de saı́da, seguida de uma softmax com saı́da de tamanho 10. 6.2 Modelo 1 O primeiro modelo tem arquitetura 32C5|3M 2|32C5|3M 2|64C5|3M 2|F 64|S10, com 145376 parâmetros no total, normalizamos as imagens e usamos ZCAWhitening. Não aumentamos os dados e usamos o algoritmo de adadelta para gerenciar a taxa de aprendizado. Treinamos o modelo por aproximadamente 140 épocas, quando a entropia cruzada no conjunto de validação se estabilizou, como vemos na figura 6.2. A acurácia do modelo no conjunto de teste é 74.47%. Podemos ver na tabela 6.1 que as classes de gato e cachorro são as que apresentam maior dificuldade para o modelo, quando prevê a classe gato mas é cachorro com 235 erros, ou quando prevê cachorro mas é gato com 116 erros. Outras classes de objetos parecidos apresentam erro maior do que a média como cavalo e cervo, ou carro e caminhão. 6.3 Modelo 2 O modelo 2 remove a camada de rede neural do modelo 1. A arquitetura fica sendo 32C5|3M 2|32C5|3M 2|64C5|3M 2|S10, com 89440 parâmetros, uma redução de 38% no número de parâmetros. Também normalizamos as imagens e não aumentamos artificialmente os dados. Treinamos o modelo por aproximadamente 140 épocas. A acurácia do modelo no conjunto de teste é 74.19%. Capı́tulo 6. Experimentos avi car pas gat cer cac sap cav nav cam Tabela avi car 732 17 31 830 63 6 16 10 20 9 7 4 8 10 9 5 60 29 52 79 6.2: Matriz pas gat 50 17 0 5 700 81 60 594 61 64 36 105 58 62 21 30 7 16 6 23 42 de confusão cer cac 12 17 2 4 64 79 54 200 740 49 16 563 52 26 45 47 11 5 4 7 do modelo sap cav 12 15 3 6 52 49 57 54 29 62 9 29 826 8 4 762 5 2 3 10 2 nav 69 32 12 16 3 6 6 2 814 37 cam 27 71 8 17 3 0 2 8 18 846 Podemos ver na tabela 6.2 que as classes de gato e cachorro ainda são as que apresentam maior dificuldade para o modelo, no geral o modelo se manteve com a mesma performance sem aumentar a quantidade de parâmetros. As curvas de entropia cruzada na figura 6.3 são similares as do primeiro modelo, com um overfitting crescente a partir da época 40. A taxa de acurácia também segue um formato similar, podemos ver na figura 6.4 a comparação entre os dois modelos no progresso da taxa de acurácia ao longo das épocas, os dois seguem praticamente idênticos. 6.4 Figura 6.1: Entropy-loss nos conjuntos de treino e validação do modelo 1 ao longo das épocas Capı́tulo 6. Experimentos 43 Modelo 3 O modelo 3 usa o algoritmo de Networks in Networks, que equivale a adicionar uma camada de convolução 1 × 1 após outra camada de convolução comum. A arquitetura do modelo 3 é 96C5|96C1|2M 2|drop5 192C5|192C1|2M 2|drop5 192C5|192C1|2M 2|drop5 F 2500|drop5|S10 Totalizando, 3417544 (3 milhões 417 mil e 544) parâmetros. Para treinar o modelo aplicamos whitening, além de translações, espelhamento e escalonamento de imagens.Treinamos esse modelo por 348 épocas. O modelo com melhor acurácia no conjunto de validação era o 191 e este foi escolhido para usarmos no conjunto de teste. A rede consegue atingir 86.88% de acurácia no conjunto de teste e entropia cruzada de 0.42. Nas primeiras 10 mil imagens do conjunto de treino o algoritmo atinge 89.11% de acurácia e 0.34 de entropia cruzada. Podemos ver pela matriz de confusão na tabela 6.3 que as classes mais difı́ceis continuam sendo as mesmas. Treinamos o mesmo modelo novamente, mas ao invés de usar translações comuns usamos o filtro de Lanczos. Após 309 épocas o erro na validação não estava diminuindo então paramos o treino. O último modelo foi escolhido pois Figura 6.2: Acurácia no conjunto de validação do modelo 1 ao longo das épocas Capı́tulo 6. Experimentos avi car pas gat cer cac sap cav nav cam Tabela avi car 841 2 8 939 34 0 12 1 8 0 1 3 10 1 9 0 52 13 23 40 6.3: Matriz pas gat 23 6 1 3 813 34 20 699 44 37 32 126 50 53 6 22 7 8 3 9 44 de confusão cer cac 2 4 1 3 29 21 12 107 884 28 10 791 33 18 27 21 1 3 1 1 do modelo sap cav 3 5 2 0 17 12 15 15 11 31 3 28 941 3 1 896 6 3 1 4 3 nav 21 9 2 5 1 2 6 1 933 17 cam 7 40 1 1 0 1 1 1 11 937 estava com a melhor acurácia no conjunto de validação. Ele conseguiu uma acurácia de 87.14% no conjunto de teste, com entropia cruzada de 0.42. Nas primeiras 10 mil imagens do treino o algoritmo atinge 89.10% de acurácia e 0.35 de entropia cruzada. Isso sugere que a translação usando filtro de lanczos fornece algum nı́vel de regularização com relação a translação comum. A tabela 6.4 mostra a matriz de confusão, vemos que os erros entre as classes que são visualmente similares para humanos são consistentemente as mais difı́ceis de classificar. Figura 6.3: Entropy-loss nos conjuntos de treino e validação do modelo 2 ao longo das épocas Capı́tulo 6. Experimentos avi car pas gat cer cac sap cav nav cam Tabela avi 868 8 31 3 9 3 4 6 38 28 6.4: car 5 938 0 1 1 1 0 2 10 41 Matriz de confusão do modelo 3(Lanczos) pas gat cer cac sap cav nav 28 12 3 7 2 6 22 2 6 1 4 3 2 9 833 34 27 19 25 19 4 17 655 21 81 18 16 3 40 49 890 29 14 19 0 31 150 12 820 8 22 6 33 50 23 16 922 3 1 9 21 20 18 3 902 2 4 10 2 1 5 2 936 2 10 1 2 0 6 14 45 cam 5 44 4 1 0 0 2 0 8 936 Figura 6.4: Comparação da acurácia dos modelos 1 e 2 no conjunto de validação ao longo das épocas 7 Conclusão Reconhecimento de objetos é uma tarefa de visão computacional que consiste em atribuir um rótulo a uma imagem com base no objeto nela representado. Obter uma representação do conteúdo da imagem, expressiva o suficiente para permitir a separação das imagens dos objetos nas classes de interesse, é a parte mais complexa. Redes Neurais aprendem o modelo classificador da tarefa e uma nova representação dos dados simultaneamente. No entanto, essa técnica é difı́cil de parametrizar e muito custosa computacionalmente para treinar. Redes Neurais Convolutivas (CNN) são uma forma especial de Redes Neurais que geralmente obtém o melhor desempenho em tarefas relacionadas a imagens, elas reutilizam mais parâmetros do modelo que redes neurais convencionais e são altamente paralelizáveis, sendo mais eficientes nas tarefas que envolvem extrair informações de uma imagem. Este trabalho apresenta a implementação de uma CNN em uma arquitetura modular, na linguagem Java. Os módulos implementam camadas especı́ficas da arquitetura da CNN que podem ser intercambiáveis. Cada módulo possui opções de parametrização compatı́veis com a literatura. Apresentamos uma arquitetura treinada nesse software que obtém resultados equiparáveis aos de implementações consolidadas. No entanto, devido a limitações de hardware e falta de técnicas de otimização, o tempo de treino dessa rede é muito mais extenso que o convencional para a tarefa apresentada, em comparação as abordagens que utilizam programação parelela em placas gráficas. Isto torna impraticável a utilização desse software em problemas grandes. Descrevemos também as técnicas de pré-processamento de imagens que geralmente são aplicadas na tarefa abordada. Aplicamos diferentes combinações dessas técnicas para avaliar o impacto delas na capacidade de generalização dos modelos estudados e introduzimos uma forma alternativa de aumentar os dados por translação, usando o filtro de Lanczos para permitir translações a nı́vel de sub-pixel. Este método aumenta a variação dos dados e consequentemente contribui para uma melhor regularização, em troca de um pré-processamento mais computacionalmente intensivo. Usamos as diferentes versões mais modernas de CNN em python com Capı́tulo 7. Conclusão 47 o auxı́lio da biblioteca de aprendizado de máquina lasagne, que implementa o código paralelizado em placas gráficas usando a biblioteca Theano. Usamos uma placa gráfica Nvidia Geforce GTX960 para executar o código distribuı́do. Fizemos estudos empı́ricos sobre cada modelo, com análise sobre os resultados dos diferentes tipos de redes neurais. Mostramos a entropia cruzada, matriz de confusão e acurácia dos modelos em um conjunto de validação e teste. O resultado do melhor modelo em um conjunto de teste, obteve 87.14% de acurácia. Novas técnicas estão sendo desenvolvidas sobre as CNN que aumentam ainda mais a capacidade de generalização da rede, dentre elas novas funções de ativação conhecidas como leaky rectified linear units e a implementação eficiente da versão esparsa dessas redes, aplicadas a imagens aumentadas com bordas esparsas, chamadas Spatially-sparse convolutional neural networks. O autor pretende estudar estas e outras técnicas a fim de melhorar a compreensão sobre esse tipo de modelo e poder generalizar novos conceitos quando cabı́vel. Apresentamos uma revisão do background teórico de redes neurais convolutivas e um estudo compreensı́vel de técnicas recentes aplicadas ao problema de reconhecimento de objetos em imagens naturais. Detalhamos aspectos de implementação e parametrização dos modelos além de formas comuns de pré-processamento, utilizando uma placa gráfica para treinar os modelos mais complexos. Analisamos o impacto de diferentes arquiteturas e técnicas de regularização na performance das redes neurais. Por fim, alcançamos um resultado similar ao estado da arte de 2012. Referências Bibliográficas [Coates, et al. 2011] COATES, A.; LEE, H. ; NG, A.. An analysis of singlelayer networks in unsupervised feature learning. In: Gordon, G.; Dunson, D. ; Dudı́k, M., editors, PROCEEDINGS OF THE FOURTEENTH INTERNATIONAL CONFERENCE ON ARTIFICIAL INTELLIGENCE AND STATISTICS, volumen 15 de JMLR Workshop and Conference Proceedings, p. 215–223. JMLR W&CP, 2011. 1.1, 1, 2.3 [Dalal and Triggs, 2005] DALAL, N.; TRIGGS, B.. Histograms of oriented gradients for human detection. In: PROCEEDINGS OF THE 2005 IEEE COMPUTER SOCIETY CONFERENCE ON COMPUTER VISION AND PATTERN RECOGNITION (CVPR’05) - VOLUME 1 - VOLUME 01, CVPR ’05, p. 886–893, Washington, DC, USA, 2005. IEEE Computer Society. 1, 3.2.1 [Fukushima, 1980] FUKUSHIMA, K.. Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36:193–202, 1980. 1, 1, 3, 3.2.2 [Goodfellow, et al. 2013] GOODFELLOW, I. J.; WARDE-FARLEY, D.; MIRZA, M.; COURVILLE, A. C. ; BENGIO, Y.. Maxout networks. CoRR, abs/1302.4389, 2013. 1.1, 1 [Graham, 2014] GRAHAM, B.. Spatially-sparse convolutional neural networks. CoRR, abs/1409.6070, 2014. 1, 1.1, 1, 2.2 [Hinton, et al. 2012] HINTON, G. E.; SRIVASTAVA, N.; KRIZHEVSKY, A.; SUTSKEVER, I. ; SALAKHUTDINOV, R.. Improving neural networks by preventing co-adaptation of feature detectors. CoRR, abs/1207.0580, 2012. 1.1, 2.6 [Hubel and Wiesel, 1962] HUBEL, D. H.; WIESEL, T. N.. Receptive fields, binocular interaction and functional architecture in the cat’s visual cortex. The Journal of physiology, 160:106–154, Jan. 1962. 1 Referências Bibliográficas 49 [Krizhevsky,2009] KRIZHEVSKY, A.. Learning Multiple Layers of Features from Tiny Images. Master’s thesis, 2009. 1 [Krizshevsky, et al. 2012] KRIZHEVSKY, A.; SUTSKEVER, I. ; HINTON, G. E.. Imagenet classification with deep convolutional neural networks. In: Pereira, F.; Burges, C.; Bottou, L. ; Weinberger, K., editors, ADVANCES IN NEURAL INFORMATION PROCESSING SYSTEMS 25, p. 1097–1105. Curran Associates, Inc., 2012. 1.1, 1 [Lecun et. al, 2001] LECUN, Y.; BOTTOU, L.; BENGIO, Y. ; HAFFNER, P.. Gradient-based learning applied to document recognition. In: Haykin, S.; Kosko, B., editors, INTELLIGENT SIGNAL PROCESSING, p. 306–351. IEEE Press, 2001. 1, 3, 4.2 [Lowe, 1999] LOWE, D. G.. Object recognition from local scale-invariant features. In: PROCEEDINGS OF THE INTERNATIONAL CONFERENCE ON COMPUTER VISION-VOLUME 2 - VOLUME 2, ICCV ’99, p. 1150–, Washington, DC, USA, 1999. IEEE Computer Society. 1 [Min Lin, et al. 2013] LIN, M.; CHEN, Q. ; YAN, S.. Network in network. CoRR, abs/1312.4400, 2013. 1, 1.1, 1, 3.2.2, 3.5 [Rumelhart, et al. 1986] RUMELHART, D.; HINTONT, G. ; WILLIAMS, R.. Learning representations by back-propagating errors. Nature, 323(6088):533–536, 1986. 1 [Snoek, et al. 2012] SNOEK, J.; LAROCHELLE, H. ; ADAMS, R. P.. Practical bayesian optimization of machine learning algorithms. In: Pereira, F.; Burges, C.; Bottou, L. ; Weinberger, K., editors, ADVANCES IN NEURAL INFORMATION PROCESSING SYSTEMS 25, p. 2951–2959. Curran Associates, Inc., 2012. 1.1, 1 [Sohn, et al. 2012] SOHN, K.; LEE, H.. Learning invariant representations with local transformations. In: ICML. icml.cc / Omnipress, 2012. 1.1, 1