Reconhecimento de Objetos por Redes Neurais - PUC-Rio

Propaganda
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
Download