Você está na página 1de 40

Ministério da Educação e Ciência

Escola Secundária de Avelar Brotero

Ano letivo 2017 / 2018

Curso Profissional de Técnico


de
Gestão e Programação de Sistemas Informáticos

Relatório
da
Prova de Aptidão Profissional

Tema
. Machine Learning no Contexto de Reconhecimento de Objetos .

3 de julho de 2018

Nome do Autor: Archibald William Kennedy

Ano / Turma / Número 12 PSI1 4

Professores Orientadores: Zélia Martins Agra & José Carlos Martins


Relatório da Prova de Aptidão Profissional

Machine Learning no Contexto de


Reconhecimento de Objetos

Archibald William Kennedy


Nº4 - 12ºPSI - 2017/2018
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

1 Índice
1 Índice 2
2 Índice de figuras 4
3 Título 5
4 Introdução ao âmbito do projeto 5
4.1 O que é Machine Learning 5
4.2 Problemas com a computação tradicional 5
4.3 Qual é o interesse? 5
4.4 Um exemplo concreto 6
5 Explicação da tecnologia 6
5.1 O cérebro biológico 6
5.2 Neurónio artificial 7
5.3 Arquitetura de uma rede neural 8
5.4 A importância de dados de treino para supervised learning 9
5.5 Melhorar com o treino 10
6 O projeto 11
6.1 Descrição do projeto 11
6.2 Interesse e aplicabilidade 11
6.2.1 Motores de busca de imagens 12
6.2.2 Veículos autónomos 12
6.2.3 No âmbito de inteligência artificial 12
6.2.4 Ciência de dados 12
6.2.5 Astronomia 12
7 Desenvolvimento do projeto 12
7.1 Sistema de classificação de imagens 13
7.1.1 Função de custo 13
7.1.2 Algoritmo de otimização 13
7.1.2.1 Stochastic gradient descent 13
7.1.2.2 Momentum 14
7.1.2.3 Momentum de Nesterov 15
7.1.2.4 Taxa de aprendizagem com decaimento exponencial 16
7.1.2.5 Mini-batching 17
7.1.3 Dados de treino 17

2
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.4 Data augmentation 17


7.1.4.1 Ajustes aleatórios 18
7.1.4.2 Cortes aleatórios com interpolation 19
7.1.5 Dados de validação 20
7.1.6 Tipos de camadas usadas 21
7.1.6.1 Convolution 21
7.1.6.2 ReLU 22
7.1.6.3 Batch normalisation 23
7.1.6.4 Dropout 24
7.1.6.5 Conexão de shortcut 25
7.1.6.6 Global average pooling 25
7.1.6.7 Camada fully connected 26
7.1.7 Função softmax 26
7.1.8 Arquitetura da rede neural 27
7.1.9 Cálculo de precisão usando dados de validação 27
7.1.10 Treinar a rede neural 27
7.1.10.1 Hiperparâmetros 27
7.1.10.2 Execução do programa 28
7.1.10.3 Recursos do sistema 30
7.1.11 Resultados 31
7.1.11.1 Precisão final da rede neural 31
7.1.11.2 Gráficos 31
7.2 Aplicação Android 32
7.2.1 Primeira vez que é executado 33
7.2.2 Fase de preparação 33
7.2.3 Classificação em tempo real 34
8 Disciplinas envolvidas na PAP 35
9 Saberes e competências incorporados 35
10 Fases temporais de implementação do projeto 36
11 Recursos envolvidos 36
11.1 Humanos 36
11.2 Materiais 36
12 Custos estimados do projeto 37

3
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

13 Parcerias com empresas ou instituições 37


14 Reflexão final sobre o trabalho desenvolvido 37
15 Bibliografia 38
15.1 Artigos científicos 38
15.2 Webgrafia 38
16 Anexos 39

2 Índice de figuras
Figura 1 - Dígitos manuscritos 6
Figura 2 - Estrutura de um neurónio 7
Figura 3 - Estrutura de um neurónio artificial 7
Figura 4 - Planificação de uma rede neural 8
Figura 5 - Exemplo da conversão de uma imagem input 8
Figura 6 - Exemplo de dados MNIST 10
Figura 7 – Exemplo de um gráfico de uma função de custo 11
Figura 8 - Exemplo de um gráfico da precisão 11
Figura 9 - Visualização de stochastic gradient descent 13
Figura 10 - Gráfico mostrando dados ruidosos 14
Figura 11 - Gráfico mostrando dados que foram "limpos" 15
Figura 12 - Explicação gráfica do momentum de Nesterov 15
Figura 13 - Explicação gráfica de diferentes taxas de aprendizagem 16
Figura 14 - Exemplo de ajustes aleatórios de matiz, saturação, contraste e brilho 18
Figura 15 - Exemplo de uma inversão horizontal 19
Figura 16 - Exemplo de padding sem interpolation 19
Figura 17 - Exemplo de interpolation espelhada 20
Figura 18 - Exemplo de cortes aleatórios 20
Figura 19 - Exemplo de uma convolução 21
Figura 20 - Exemplo de detetores de características 22
Figura 21 - O gráfico do neurónio sigmóide e ReLU 22
Figura 22 - Exemplo de covariate shift numa distribuição 23
Figura 23 - Algoritmo de batch normalisation [Sergey Ioffe & Christian Szegedy, 2015]
24
Figura 24 - Exemplo de uma rede neural antes e depois de aplicar o dropout [Nitish
Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever & Ruslan Salakhutdinov,
2014] 24
Figura 25 - Esquema de uma conexão de shortcut 25
Figura 26 - Exemplo da global average pooling 26
Figura 27 - O efeito de redução dimensional da global average pooling 26
Figura 28 - A página de ajuda do programa 28
Figura 29 - O programa a descarregar os dados de treino e de validação 28
Figura 30 - O programa a treinar a rede neural 29

4
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 31 - O programa a verificar a precisão da rede neural 29


Figura 32 - O processo da rede neural mostrado usando o comando htop 30
Figura 33 - O estado da GPU durante o treino da rede neural, mostrado usando o
comando nvidia-smi 30
Figura 34 - A função de custo durante o treino da rede neural final 31
Figura 35 - A taxa de aprendizagem durante o treino da rede neural final 31
Figura 36 - A precisão nos dados de treino, durante o treino da rede neural final 32
Figura 37 - A correlação entre um salto na precisão e o decaimento da taxa de
aprendizagem 32
Figura 38 - A precisão nos dados de validação, durante o treino da rede neural final 32
Figura 39 - A aplicação a pedir permissões ao utilizador 33
Figura 40 - A aplicação durante a fase de preparação 34
Figura 41 - A aplicação a classificar uma maçã 35

3 Título
Sistema de classificação de imagens usando machine learning, através do
desenvolvimento e treino de um artificial neural network (rede neural artificial).

4 Introdução ao âmbito do projeto


4.1 O que é Machine Learning
Machine learning refere-se a sistemas capazes de melhorar autonomamente, sem a
intervenção direta de um programador humano. Isto permite resolver problemas usando
a inteligência artificial que, até recentemente, eram inultrapassáveis.

4.2 Problemas com a computação tradicional


Os computadores foram criados com o objetivo de resolver problemas: são mais
rápidos, eficientes e muito menos propensos a erros do que os humanos. Um bom
exemplo disto são as calculadoras, sendo capazes de funcionar rapidamente, sem
degradação dos resultados.

Mas ainda existem problemas em que os computadores falham completamente. Pior do


que isto, é que muitas vezes os mesmos problemas são facilmente resolvidos por
qualquer pessoa, quase sem pensar.

4.3 Qual é o interesse?


Se os humanos já são capazes de resolver estes problemas, porque é que precisamos de
computadores?

5
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Embora as pessoas, teoricamente, sejam capazes de resolver este tipo de problemas, em


quase todas os casos, o tempo e o dinheiro gasto nessa resolução, torna isso impossível
de concretizar em tempo útil ou num orçamento comportável. É por esta razão, que as
grandes empresas estão a investir tanto nesta tecnologia emergente.

4.4 Um exemplo concreto


Tomando em conta os seguintes dígitos manuscritos (Figura 1):

Figura 1 - Dígitos manuscritos

Para quase toda gente, basta olhar para saber que os dígitos escritos são 504192.

Agora imagine que é um programador encarregado de criar um programa para


classificar dígitos manuscritos. O que parecia simples tornou-se agora num problema
extremamente complexo. Pois, como é que exprimimos em que consiste um número
escrito à mão em termos matemáticos? É precisamente aqui que a maneira antiga da
programação falha.

Se quiséssemos desenvolver uma calculadora, seria relativamente simples planear


qualquer situação, visto que existe um número baixo de variáveis e são todas
conhecidas, por exemplo sabemos todas as operações possíveis (somar, multiplicar,
dividir, etc.).

Por outro lado, no caso da classificação de dígitos manuscritos, existe um número


enorme de variáveis desconhecidas e quando consideramos que cada pessoa escreve de
uma forma diferente, torna-se óbvio que precisamos de outra solução: machine
learning.

5 Explicação da tecnologia
5.1 O cérebro biológico
O componente mais simples do cérebro humano é o neurónio, cuja estrutura se
apresenta na figura em baixo (Figura 2):

6
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 2 - Estrutura de um neurónio

O neurónio recebe várias cargas elétricas como input (no lado esquerdo). Se receber
impulsos suficientes, origina um output para os neurónios adjacentes.

Em termos muito simplificados, é através deste conjunto de interações que tomamos


decisões. Esta explicação mal corresponde exatamente à realidade, mas ajuda a perceber
os conceitos abordados neste projeto.

5.2 Neurónio artificial


A partir da biologia podemos construir modelos matemáticos, um dos mais usados é o
neurónio sigmóide (Figura 3):

Figura 3 - Estrutura de um neurónio artificial

em que cada input (x) tem um peso (W) correspondente e b designa o bias, ou seja, a
tendência para dar um certo output.

O output é calculado através da soma de todos os Wx e o b. Mais concretamente:


1
𝜎=
𝑒 −𝛴𝑗 𝑥𝑗𝑊𝑗 −𝑏
No caso do neurónio sigmóide o output pode ser qualquer número real de 0 a 1.

Através da manipulação dos pesos e do bias, é possível fazer uma decisão bastante
simples. A utilidade dos neurónios artificiais é visível quando estão em rede, chamada
rede neural.

7
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

5.3 Arquitetura de uma rede neural


Nesta explicação dou a prioridade à legibilidade em detrimento do número de neurónios
por camada.

Os neurónios constituintes de uma rede neural são organizados em camadas, como as


que são apresentadas em baixo (Figura 4):

Figura 4 - Planificação de uma rede neural

Em relação ao exemplo de classificação de dígitos, sabendo que as imagens vão ser de


tamanho 28 por 28 pixéis, podemos fazer corresponder um pixel a cada neurónio de
input. Assim teremos 28 × 28 = 784 pixéis, visto a camada de entrada ter 784
neurónios. Como exemplo, podemos ter em consideração a seguinte figura (Figura 5):

Figura 5 - Exemplo da conversão de uma imagem input

O termo hidden layer refere-se ao facto de as camadas não serem input layer nem
output layer. O número de neurónios (ou até camadas) presentes pode variar muito,
dependendo da implementação escolhida e das técnicas usadas.

8
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

A camada de output vai ter 10 neurónios, ou seja, um para cada dígito possível (de 0 até
9), o neurónio com maior output vai corresponder à decisão da rede neural, ou seja, à
classificação do dígito manuscrito.

5.4 A importância de dados de treino para supervised learning


O recurso mais importante para este tipo de machine learning são os dados, é por esta
razão que as grandes empresas como a Google oferecem armazenamento gratuito na
nuvem, eles precisam de uma quantidade enorme de dados.

Supervised learning baseia-se na ideia de construir uma rede neural e alimentá-la com
dados até que ela seja eficaz na realização de um determinado objetivo, para este fim
demos feedback à nossa rede. Este feedback é gerado através da função de custo
(referida em baixo), onde o cálculo é realizado comparando o que a rede neural "pensa"
ser a classe correta de cada elemento versus a verdadeira classe, contida nos metadados
presentes nos dados de treino.

Um bom exemplo de dados de treino é a chamada base de dados MNIST, que contém
milhares de imagens como estas (Figura 6):

9
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 6 - Exemplo de dados MNIST

5.5 Melhorar com o treino


Para permitir que a rede neural "aprenda", precisamos de uma forma de medir o seu
desempenho. Para tal, definimos uma função de custo:
1
𝐶(𝑊,𝑏) = ∑𝑥 |𝑦(𝑥) − 𝑎|2
2𝑛
● W designa a coleção de todos os pesos
● b é a coleção de todos os bias
● n é o número total de inputs de treino
● a é o vetor do output para input x
● |y(x)-a| designa a função de comprimento de um vetor

Sabemos que a nossa rede está a ter sucesso, ou seja, esta a classificar dígitos com uma
precisão elevada, quando C se aproxima de 0.

10
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Função de custo (depois de treinar 20 mil vezes):

Figura 7 – Exemplo de um gráfico de uma função de custo

A medida que a função de custo tende para baixo, a precisão tende para cima:

Figura 8 - Exemplo de um gráfico da precisão

6 O projeto
6.1 Descrição do projeto
Desenvolvimento de um sistema de classificação de imagens, capaz de identificar
objetos pertencentes a uma de 100 classes possíveis:

apple, aquarium fish, baby, bear, beaver, bed, bee, beetle, bicycle, bottle, bowl, boy,
bridge, bus, butterfly, camel, can, castle, caterpillar, cattle, chair, chimpanzee, clock,
cloud, cockroach, couch, crab, crocodile, cup, dinosaur, dolphin, elephant, flatfish,
forest, fox, girl, hamster, house, kangaroo, keyboard, lamp, lawn mower, leopard, lion,
lizard, lobster, man, maple tree, motorcycle, mountain, mouse, mushroom, oak tree,
orange, orchid, otter, palm tree, pear, pickup truck, pine tree, plain, plate, poppy,
porcupine, possum, rabbit, raccoon, ray, road, rocket, rose, sea, seal, shark, shrew,
skunk, skyscraper, snail, snake, spider, squirrel, streetcar, sunflower, sweet pepper,
table, tank, telephone, television, tiger, tractor, train, trout, tulip, turtle, wardrobe,
whale, willow tree, wolf, woman, worm

6.2 Interesse e aplicabilidade


O machine learning é uma área com um número enorme de aplicações e está a crescer
todos os dias. Para dar alguns exemplos:

11
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

6.2.1 Motores de busca de imagens


Existe uma quantidade enorme de imagens sem descrição e a sua pesquisa só é possível
através de sistemas de classificação de imagens. Em 2016, a Apple desenvolveu um
sistema de classificação de imagens, tiradas com o iPhone, com o objetivo de os
categorizar automaticamente.

6.2.2 Veículos autónomos


Para os veículos sem motorista, é extremamente importante serem capazes de interpretar
o mundo. Saber o que é um carro, pessoa ou sinal de stop só é possível através do
machine learning.

6.2.3 No âmbito de inteligência artificial


Os assistentes de inteligência artificial precisam de ser capazes de identificar objetos por
vários motivos, inclusivamente na assistência a pessoas com problemas na visão.

6.2.4 Ciência de dados


Oitenta por cento de todos os dados gerados no mundo são do tipo multimédia e grande
parte destes são imagens. Até recentemente, não foi possível organizar e interpretar esta
informação. Usando a aprendizagem de máquina é possível estruturar esses dados para
fazer estudos e tirar conclusões.

6.2.5 Astronomia
Um grupo de cientistas da instituição da ETH Zurich aplicou uma rede neural à
astronomia, obtendo as imagens mais nítidas de sempre de galáxias distantes.

Isto simplesmente não seria possível sem os recentes avanços nesta área.

7 Desenvolvimento do projeto
O projeto é divido em duas partes:
● Sistema de classificação de imagens:
○ Rede neural que toma como input imagens a cor, de dimensões 32 por 32
pixéis, faz output de um vetor contendo 100 valores (entre 0 e 1), em que
o índice do maior valor corresponde à classificação;
○ Escrito em Python;
○ Treinado com uma placa gráfica durante várias horas.
● Aplicação Android:
○ Executa a rede neural, previamente treinada para classificar objetos em
tempo real;
○ Escrito em Java;

12
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1 Sistema de classificação de imagens


Nesta seção vou descrever cada componente da rede neural desenvolvida para
classificação de imagens.

7.1.1 Função de custo


A função custo é calculada pegando no output da rede neural e comparando-a com a
classe real de cada imagem.

7.1.2 Algoritmo de otimização


Este algoritmo tem como objetivo minimizar a função de custo. Consegue isto fazendo
pequenas mudanças nos pesos da rede neural, sendo estes ajustes feitos em cada etapa
de treino.

Depois de experimentar com vários algoritmos, decidi usar uma combinação de


stochastic gradient descent com momentum de Nesterov, uma taxa de aprendizagem
com decaimento exponencial e mini-batching.

7.1.2.1 Stochastic gradient descent


É possível mapear a função de custo e tentar aproximar ao mínimo global. Obviamente
teria mais dimensões do que o gráfico tridimensional apresentado (Figura 9):

Figura 9 - Visualização de stochastic gradient descent

13
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Em cada iteração, o algoritmo considera a posição atual no gráfico e tenta mover-se


para "baixo" (função de custo 𝐶(𝑥) → 0), um processo que chamamos convergência.
É importante salientar que enquanto o objetivo é aparentemente atingir o mínimo
global, na realidade, o algoritmo está a tentar encontrar qualquer mínimo, isso inclui
mínimos locais. É importante evitar “ficar preso” a esses mínimos.

7.1.2.2 Momentum
Stochastic gradient descent com momentum utiliza um conceito matemático chamada
exponential moving average que tem a função principal de lidar com dados que
introduzem “ruído”. Considere o seguinte gráfico (Figura 10):

Figura 10 - Gráfico mostrando dados ruidosos

A função original está representada a vermelho, mas nós só temos acesso aos dados
azuis. Em vez de usar os dados como estão, faz muito mais sentido trabalhar com as
médias desses pontos de dados. Podemos representar isto assim (Figura 11):

14
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 11 - Gráfico mostrando dados que foram "limpos"

Embora não sendo perfeita, a função a amarelo é mais próxima da função original.

7.1.2.3 Momentum de Nesterov


Momentum de Nesterov é uma versão ligeiramente diferente do momentum que
recentemente vem ganhando popularidade.

Figura 12 - Explicação gráfica do momentum de Nesterov

Em vez de avaliar o gráfico na posição atual, calculamos uma estimativa e avaliamos o


gradiente nesta posição "antecipada". O resultado é um cálculo mais eficiente e uma
convergência ligeiramente melhor.

Em termos matemáticos:

𝑉𝑡 = 𝛽𝑉𝑡−1 + 𝛼𝛥𝑤 𝐶(𝑊 − 𝛽𝑉𝑡−1 , 𝑋, 𝑦)


● Em que C representa a função de custo.

15
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

● O novo valor 𝛽 é um hiperparâmetro da rede neural que pode ser um valor entre
0 e 1.

A fórmula para calcular os pesos após uma etapa de treino:

𝑊 = 𝑊 − 𝑉𝑡
7.1.2.4 Taxa de aprendizagem com decaimento exponencial
A taxa de aprendizagem é um hiperparâmetro da rede neural e representa a otimização
que o algoritmo permite em cada iteração de treino.

Se escolhemos um valor demasiado alto a rede neural pode ficar instável e causar erros
NaN (Not a Number), por outro lado, se usarmos um valor demasiado pequeno a rede
pode demorar muito tempo a convergir, ou até "ficar presa" num mínimo local.

Figura 13 - Explicação gráfica de diferentes taxas de aprendizagem

O problema é que às vezes uma determinada taxa de aprendizagem pode funcionar bem
no início, mas falhar mais tarde. No meu caso, encontrei um valor que convergia
rapidamente no início, mas passado algum tempo a função de custo começou a
aumentar.

Uma solução para isto, é diminuir a taxa de aprendizagem com uma determinada
frequência, expresso matematicamente:

16
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

𝑡
𝑓𝑙𝑜𝑜𝑟( )
𝐿𝑡 = 𝐿0 × 𝑎 𝑑
● L representa a taxa de aprendizagem.
● t é a iteração de treino.
● a é a quantidade para reduzir.
● d a frequência de decaimento.
● floor(x) representa a função floor
(https://en.wikipedia.org/wiki/Floor_and_ceiling_functions).

Desta forma podemos diminuir a taxa de aprendizagem à medida que a rede neural está
a treinar. Permitindo uma convergência rápida no início do treino e pequenos ajustes
mais preciso no fim.

7.1.2.5 Mini-batching
Mini-batching consiste em retirar uma quantidade relativamente pequena de dados de
treino, selecionados aleatoriamente, para serem usados durante uma iteração de treino.

Esta técnica traz três vantagens: a frequência de atualização do modelo é maior, o que
permite uma convergência mais robusta, evitando os mínimos locais; a rede usa menos
memória, pois não está a trabalhar com a base de dados completa em cada iteração; e
fornece um processo computacionalmente mais eficiente do que a stochastic gradient
descent.

7.1.3 Dados de treino


Conjunto de todos os dados de treino assim como as classes correspondentes. A função
de custo é calculada através do cross entropy (a diferença) entre as classes de cada
imagem e o output da rede neural.

A base de dados escolhida, CIFAR-100, contém 50 mil imagens de treino, divididas em


100 classes de objetos. Logo, temos apenas 500 exemplos de cada classe, isto não é
suficiente para obter uma boa convergência. Felizmente, este é um problema que
podemos resolver com data augmentation.

7.1.4 Data augmentation


Data augmentation permite-nos gerar "novos" dados através dos dados já existentes,
isto tem a vantagem de aumentar o número total de dados de treino e melhorar o
desempenho no "mundo real" da rede neural.

A seguir descrevo as técnicas de data augmentation que utilizei durante o treino da rede
neural.

17
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.4.1 Ajustes aleatórios


Estes ajustes ajudam a tornar a rede menos sensível a mudanças na iluminação. Consiste
em usar dados existentes e ajustar aleatoriamente a matiz, saturação, contraste e brilho
de cada imagem.

Figura 14 - Exemplo de ajustes aleatórios de matiz, saturação, contraste e brilho

Também podemos inverter horizontalmente algumas imagens, assim a rede neural fica
mais resistente a mudanças na orientação dos objetos.

18
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 15 - Exemplo de uma inversão horizontal

7.1.4.2 Cortes aleatórios com interpolation


Outro problema é o facto de as posições dos objetos serem demasiado centrados, por
isso, é importante criar alguma tolerância a translações.

Para este efeito, primeiro precisamos de aumentar a resolução da imagem para não
perder informação, pegamos na imagem de 32 por 32 e adicionamos 2 píxeis vazios em
cada direção (isto é chamado padding), então acabamos com a seguinte imagem (Figura
16):

Figura 16 - Exemplo de padding sem interpolation

19
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Agora, preenchemos esses 2 píxeis com uma versão espelhada da imagem original
(Figura 17):

Figura 17 - Exemplo de interpolation espelhada

Finalmente, cortamos a imagem de forma aleatório, para reduzir ao tamanho inicial. O


efeito pode ser difícil de ver, mas verifiquei que faz uma enorme diferença ao
desempenho da rede neural.

Figura 18 - Exemplo de cortes aleatórios

7.1.5 Dados de validação


Um subconjunto menor de dados e classes, geralmente retirados da mesma distribuição
que os dados de treino que a rede neural nunca "vê" durante o treino e se destinam a
representar novos dados do "mundo real" para testar o desempenho da rede.

20
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.6 Tipos de camadas usadas


É útil pensar sobre cada camada constituinte de uma rede neural como uma operação
computacional, pois cada camada tem uma função específica. Aqui estão todos os tipos
de camadas utilizadas na construção da rede neural:

7.1.6.1 Convolution
Recebe como input uma matriz quadridimensional, calcula uma convolução com os
pesos e adiciona o bias.

Uma convolução é calculada passando uma janela (ou filter) de um determinado


tamanho (conhecido como filter size ou kernel size) sobre a matriz. O seu deslizamento
é chamado stride e através do ajuste deste valor é possível reduzir a segunda e a terceira
dimensão, isto é conhecido como downsampling.

Figura 19 - Exemplo de uma convolução

A quarta dimensão, inicialmente os canais de cor, passa a representar o número de


filters. Cada filter, juntamente com os pesos, corresponde a um detetor de
características. Isto pode ser semelhante à imagem a seguir apresentada (Figura 20):

21
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 20 - Exemplo de detetores de características

A camada convolutional é fundamental para alcançar um desempenho de classificação


de imagens de última geração.

7.1.6.2 ReLU
ReLU (Rectified Linear Unit) é um tipo de neurónio artificial popular para redes neurais
com camadas convolutional.

Figura 21 - O gráfico do neurónio sigmóide e ReLU

A grande vantagem que vem de usar neurónios ReLU em vez de sigmóide é o aumento
da quantidade máxima de camadas na rede neural. Isto porque a derivada da função
sigmóide tem o valor máximo de 0,25 e à medida que adicionamos camadas o valor das
derivadas rapidamente se aproxima de 0, isto é chamado o problema de vanishing
gradients. O problema de vanishing gradients não existe em matemática pura (pois a
derivada nunca chegará a 0) mas devido às limitações da aritmética floating point
presentes em todos os computadores binários, a função sigmóide torna-se inútil para
redes com muitas camadas.

O neurónio ReLU pode ser representada da seguinte maneira:

𝐴 = 𝑚𝑎𝑥(0, 𝛴𝑗 𝑥𝑗 𝑊𝑗 − 𝑏)
22
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.6.3 Batch normalisation


A batch normalisation foi indispensável à arquitetura desta rede neural, devido ao
aumento drástico da velocidade de treino. Este aumento é devido à redução da internal
covariate shift.

O covariate shift refere-se à mudança na distribuição das variáveis de input presentes


nos dados treino e de validação e quase todas as bases de dados de treino sofrem com
este problema.

Figura 22 - Exemplo de covariate shift numa distribuição

A distribuição dos dados de treino é visível a azul e os de validação a verde.

Para aumentar a estabilidade de uma rede neural, a batch normalisation normaliza o


output de uma camada de ativação anterior, subtraindo a média do mini-batch e
dividindo pelo desvio padrão do mini-batch.

O algoritmo de batch normalisation é explicado na seguinte figura (Figura 23):

23
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 23 - Algoritmo de batch normalisation [Sergey Ioffe & Christian Szegedy, 2015]

7.1.6.4 Dropout
Dropout refere-se a ignorar alguns neurónios, escolhidos de forma aleatória, durante
uma iteração de treino.

Figura 24 - Exemplo de uma rede neural antes e depois de aplicar o dropout [Nitish Srivastava, Geoffrey Hinton,
Alex Krizhevsky, Ilya Sutskever & Ruslan Salakhutdinov, 2014]

Usando o dropout, um determinado neurónio não pode pensar que outros neurónios
estão presentes, forçando-o a tornar-se mais independente. O importante aqui é que as
camadas dropout reduzem o overfitting (quando a rede tem um desempenho bom a

24
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

classificar os dados de treino, mas falha quando são fornecidos dados novos),
melhorando a precisão da rede neural.

A probabilidade de um determinado neurónio se manter numa camada é chamada a


probabilidade dropout.

7.1.6.5 Conexão de shortcut


No artigo científico Deep Residual Learning for Image Recognition [Kaiming He,
Xiangyu Zhang, Shaoqing Ren & Jian Sun, 2015] os autores descrevem uma nova
técnica para possibilitar o treino de redes neurais muito profundas (com um grande
número de camadas), o chamado residual learning.

O conceito básico é que, em vez de esperar que cada conjunto de camadas se encaixe
diretamente no mapeamento desejado 𝐹(𝑥), os autores explicitamente permitem que
estas camadas se encaixem num mapeamento residual 𝐹(𝑥) + 𝑥 (Figura 25):

Figura 25 - Esquema de uma conexão de shortcut

O valor destas camadas está tanto na rapidez de treino, tal como a flexibilidade que dão
à rede neural.

7.1.6.6 Global average pooling


Parecido com a camada convolucional, a global average pooling passa uma janela sobre
a matriz de input, a diferença é que gera uma média de cada área considerada (Figura
26).

25
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 26 - Exemplo da global average pooling

Esta camada também tem o efeito de reduzir as dimensões da matriz input para uma só
dimensão (Figura 27):

Figura 27 - O efeito de redução dimensional da global average pooling

7.1.6.7 Camada fully connected


A última camada da rede neural é a chamada camada fully connected e tem conexões a
todos os neurónios da camada anterior (neste caso a global average pooling), assim as
ativações podem ser facilmente calculadas com o bias.

As dimensões do output desta camada devem ser unidimensionais e com comprimento


igual ao número de classes, uma vez que a classificação corresponde ao índice.

7.1.7 Função softmax


Também conhecido como normalized exponential function, serve para converter um
vetor de números aleatórios de comprimento n:
𝑣 = (𝑣1 , 𝑣2 , ⋅⋅⋅, 𝑣𝑛−1 , 𝑣𝑛 ) em que 𝑣𝑥 ∈ ] − ∞; +∞[ e 𝑣𝑥 ∈ ℜ

26
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

num vetor de números (de 0 a 1) de comprimento n:


𝑝 = (𝑝1 , 𝑝2 , ⋅⋅⋅, 𝑝𝑛−1 , 𝑝𝑛 ) em que 𝑝𝑥 ∈ [0; 1] e 𝑝𝑥 ∈ ℜ

Desta forma convertemos o output da rede neural, v, numa distribuição de


probabilidades p. Além de ser normalizada, acabámos de adicionar, de certa maneira,
mais significado ao output da rede.

A equação da função softmax pode ser escrita da seguinte maneira:


𝑧
𝑒 𝑗
𝑆(𝑣)𝑗 = ∑𝐾 𝑧𝑘 para 𝑗 = 1, ⋅⋅⋅, 𝐾
𝑘=1 𝑒

7.1.8 Arquitetura da rede neural


Na imagem em anexo (arquitetura.png) está um diagrama das camadas constituintes da
rede neural, tal como as conexões entre elas.

Baseei esta arquitetura nos artigos científicos ImageNet Classification with Deep
Convolutional Neural Networks [Alex Krizhevsky, Ilya Sutskever & Geoffrey Hinton,
2012] e Wide Residual Networks [Sergey Zagoruyko & Nikos Komodakis, 2016] tal
como os meus próprios testes.

7.1.9 Cálculo de precisão usando dados de validação


O desempenho da rede neural na tarefa de classificar objetos é calculado através da
classificação de 1000 imagens escolhidas de forma aleatória a partir dos dados de
validação, ou seja, imagens que não fazem parte dos dados de treino, para simular o
desempenho "real". A precisão nos dados de treino não nos interessa (é basicamente
100%, já que memoriza a distribuição de treino).

Este teste foi repetido cinco vezes e o resultado final é a sua média.

7.1.10 Treinar a rede neural


Esta é a fase que ocupou a maior parte do tempo durante o desenvolvimento do sistema
de classificação de imagens. Consistiu em executar a rede neural na placa gráfica,
alimentá-la com os dados de treino e esperar.

7.1.10.1 Hiperparâmetros
A rede neural foi inicializada com os seguintes hiperparâmetros:
● Taxa de aprendizagem inicial: 0,1
● Decaimento da taxa de aprendizagem: 0,2
● Frequência de decaimento da taxa de aprendizagem: 23500
● Momentum de aprendizagem: 0,9
● Probabilidade dropout: 0,3

27
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

● Decaimento de exponential moving average: 0,5


● Tamanho mini-batch: 128

7.1.10.2 Execução do programa


O programa que desenvolvi pode ser usado através de uma interface de linha de
comandos, a página de ajuda pode ser visualizada através da opção --help (Figura 28):

Figura 28 - A página de ajuda do programa

Ao iniciar o treino, o programa começa por verificar que os dados de treino e de


validação existem e não estão corrompidas. Caso não sejam encontrados, vai
descarregá-los (Figura 29):

Figura 29 - O programa a descarregar os dados de treino e de validação

28
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Depois vai extrair os dados, preparar os recursos do sistema, inicializar a rede neural e
começar a treinar (Figura 30):

Figura 30 - O programa a treinar a rede neural

Depois do treino é fácil verificar a precisão da rede neural treinada, basta acrescentar a
opção --accuracy (Figura 31):

Figura 31 - O programa a verificar a precisão da rede neural

29
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.10.3 Recursos do sistema


Por motivos de eficiência, movi a data augmentation para o CPU (Central processing
unit, o processador normal), libertando mais recursos da GPU (Graphics processing
unit, a placa gráfica) para treinar a rede neural. Fazendo isso consegui aumentar a
velocidade de treino em cerca de 66%.

Visto que executar data augmentation em 128 imagens, em paralelo, não é assim tão
difícil computacionalmente, especialmente em comparação com toda a rede neural, não
utilizou muitos recursos (Figura 32):

Figura 32 - O processo da rede neural mostrado usando o comando htop

Durante o treino a rede utilizou 100% do GPU e toda a memória vídeo disponível, como
dá para ver na seguinte figura (Figura 33):

Figura 33 - O estado da GPU durante o treino da rede neural, mostrado usando o comando nvidia-smi

30
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.1.11 Resultados

7.1.11.1 Precisão final da rede neural


A versão final da rede neural foi treinado durante 80 mil iterações numa placa gráfica
Nvidia GTX 1070 com 8GB de memória vídeo, demorando 22 horas e 14 minutos.

Foi possível alcançar uma precisão de 73.86% nos dados de validação.

7.1.11.2 Gráficos
Os seguintes gráficos dão-nos mais alguma informação sobre o treino da rede e foram
criados com base em pontos de dados gravados em cada centésima iteração, com a
exceção da precisão nos dados de validação que foi gravado em cada milésima iteração
(por motivos de desempenho).

Função de custo (Figura 34):

Figura 34 - A função de custo durante o treino da rede neural final

Uma boa indicação que a rede neural está a funcionar é se a função de custo está
maioritariamente a diminuir, é normal que não chegue a ser completamente monótona.

Taxa de aprendizagem (Figura 35):

Figura 35 - A taxa de aprendizagem durante o treino da rede neural final

A taxa de aprendizagem diminui conforme o decaimento que definimos através dos


hiperparâmetros.

Precisão nos dados de treino (Figura 36):

31
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 36 - A precisão nos dados de treino, durante o treino da rede neural final

À medida que a função de custo se aproxima de 0, a precisão vai aumentando.

Também dá para ver que por volta da iteração 23,5 mil houve um salto repentino na
precisão, isto foi devido ao primeiro decaimento da taxa de aprendizagem (Figura 37):

Figura 37 - A correlação entre um salto na precisão e o decaimento da taxa de aprendizagem

Precisão nos dados de validação:

Figura 38 - A precisão nos dados de validação, durante o treino da rede neural final

7.2 Aplicação Android


Para mostrar o sistema de classificação de imagens a funcionar, desenvolvi uma
aplicação para Android usando a linguagem de programação Java. Vou explicar as
funcionalidades agora.

32
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

7.2.1 Primeira vez que é executado


Imediatamente após a instalação, ao abrir a aplicação, o utilizador é solicitado a dar
permissão para usar a câmara.

Figura 39 - A aplicação a pedir permissões ao utilizador

Caso o utilizador decida não permitir, a aplicação fecha automaticamente, pois o acesso
à câmara é absolutamente necessário. Se o utilizador decidir dar esta permissão, a
aplicação reinicia automaticamente e entra na fase de preparação.

7.2.2 Fase de preparação


A aplicação entra nesta fase cada vez que é retomando, desde que tenha as permissões
necessárias. Durante esta fase está a fazer quatro coisas:
1. Preparar os elementos da interface gráfica;
2. Preparar a câmara e pré-visualização da câmara;
3. Carregar a rede neural já treinada;
4. Iniciar a thread de classificação em tempo real.

Isto é capaz de demorar algum tempo, por esta razão é apresentada uma mensagem ao
utilizador comunicando-lhe que a aplicação está a inicializar (não está parada) (Figura
40):

33
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 40 - A aplicação durante a fase de preparação

7.2.3 Classificação em tempo real


Se tudo correu bem até este ponto, a aplicação começará a classificar o vídeo da câmara
em tempo real e de forma contínua. Isto para dizer que não é necessário tirar fotografias
para os classificar, pois é capaz de fazer várias classificações por segundo.

Qualquer atraso nesta thread não é facilmente percetível, pois é executado em segundo
plano, com o objetivo de não afetar o vídeo exibido da câmara.

A seguinte figura demonstra a aplicação durante uma classificação típica (Figura 41):

34
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

Figura 41 - A aplicação a classificar uma maçã

8 Disciplinas envolvidas na PAP


As disciplinas cujos conteúdos estão envolvidos na PAP (encontram-se ordenadas por
ordem decrescente de importância) são:
● Programação e Sistemas de Informação
● Matemática
● Arquitetura de Computadores
● Sistemas Operativos

9 Saberes e competências incorporados


Os principais saberes e competências incorporados no projeto foram:

35
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

● Conseguir entrar numa área desconhecida e ter a capacidade de pesquisar através


de livros, artigos científicos e de notícias com o objetivo de compreender e
interiorizar conceitos novos;
● Pesquisar conceitos matemáticos abstratos e complexos e saber aplicar-los de
forma autónoma;
● Aprender a usar ferramentas novas, com base em documentação e outras
pesquisas na Internet, para ultrapassar problemas de forma eficaz;
● Ter a capacidade de analisar problemas e encontrar a melhor solução para cada
um deles;
● Converter raciocínio lógico em código, escrito em quaisquer das linguagens de
programação necessárias, elaborando as pesquisas que forem necessárias para a
sua implementação.

10 Fases temporais de implementação do projeto


● Pesquisa inicial - até 15 de novembro
● Planeamento do projeto - até 22 de novembro
● Desenvolvimento do sistema de classificação de imagens - até 28 de fevereiro:
○ Elaboração do programa para treinar e testar redes neurais de varias
arquiteturas diferentes. Esta programa teve der ser feito de maneira
robusta, possibilitando a implementação rápida de novas técnicas;
○ Configuração do computador de treino;
○ Fase de testes para encontrar o melhor design para a rede neural,
envolvendo a diagnostica de problemas por meios de visualização
gráfica.
● Desenvolvimento da aplicação Android - até 25 de março
● Melhorias a todos os aspetos do projeto - até a defesa da P.A.P.

11 Recursos envolvidos
11.1 Humanos
Não recebi ajuda externa no desenvolvimento do projeto.

11.2 Materiais
● Portátil XMG A523 (Clevo W350ST) - Embora tenha sido lançado em 2013,
este portátil teve a capacidade suficiente para desenvolver o projeto.
○ Sistema operativo: Linux Mint 17.3 (baseado no Ubuntu 16.04 LTS)
● PC fixo com as seguintes componentes - Este computador foi utilizado para
treinar a rede neural, pois exigiu um número enorme de cálculos em paralelo
○ Motherboard: MSI Z170A
○ CPU: Intel Core i7 6700K

36
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

○ Cooler do CPU: Cooler Master Nepton 240M


○ GPU: Nvidia GTX 1070 8GB VRAM
○ Memória: Crucial 16GB DDR4
○ Disco: Samsung 850 EVO SSD 500GB
○ PSU: EVGA SuperNova 1000 G2
○ Caixa: Fractal Design Define R5
○ Sistema operativo: Linux Mint 17.3

12 Custos estimados do projeto


● Portátil - 1000€
● PC fixo - Como montei sozinho não existe nenhum custo exceto os
componentes:
○ Motherboard - 133€
○ CPU - 334€
○ Cooler do CPU - 93€
○ GPU - 471€
○ Memória - 73€
○ Disco - 142€
○ PSU - 148€
○ Caixa - 94€
Total - 1488€
● Software:
○ Sistema operativo baseado em Linux - gratuito
○ Editor de texto Emacs - gratuito
○ Version control system Git - gratuito
○ Linguagem de programação Python (versão 3) - gratuito
○ Software library TensorFlow - gratuito

13 Parcerias com empresas ou instituições


Não tive parcerias com empresas ou instituições.

14 Reflexão final sobre o trabalho desenvolvido


Nos últimos anos, as redes neurais artificiais têm visto uma espécie de "renascimento"
desde os anos 80. Isto deve-se em grande parte à riqueza da pesquisa científica, que me
ajudou muito.

Consegui criar um sistema de classificação de imagens capaz de funcionar num


telemóvel. Com mais tempo e recursos hardware, penso que poderia melhorar ainda
mais a precisão alcançada.

37
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

O fator limitante foi quase sempre o tempo. Cada vez que implementei qualquer
alteração, foi necessário esperar para treinar a rede neural. Isso tornou os dados
resultantes de cada execução do programa extremamente valiosos, tanto para
diagnosticar problemas, como encontrar oportunidades para melhorar o sistema.

Em conclusão, sinto que consegui atingir os meus objetivos com este projeto, ou seja,
desenvolvi as minhas competências como programador e também aprendi bastante
sobre a área de machine learning.

15 Bibliografia
15.1 Artigos científicos
ImageNet Classification with Deep Convolutional Neural Networks [Alex Krizhevsky,
Ilya Sutskever & Geoffrey Hinton, 2012] (https://papers.nips.cc/paper/4824-imagenet-
classification-with-deep-convolutional-neural-networks.pdf);
Dropout: A Simple Way to Prevent Neural Networks from Overfitting [Nitish
Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever & Ruslan Salakhutdinov,
2014] (http://jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf);
Wide Residual Networks [Sergey Zagoruyko & Nikos Komodakis, 2016]
(https://arxiv.org/pdf/1605.07146.pdf);
A Method for Solving a Convex Programming Problem with Convergence Rate O(1/K2)
[Yurii Nesterov, 1983] (http://mpawankumar.info/teaching/cdt-big-
data/nesterov83.pdf);
Deep Residual Learning for Image Recognition [Kaiming He, Xiangyu Zhang,
Shaoqing Ren & Jian Sun, 2015] (https://arxiv.org/pdf/1512.03385.pdf);
Batch Normalization: Accelerating Deep Network Training by Reducing Internal
Covariate Shift [Sergey Ioffe & Christian Szegedy, 2015]
(https://arxiv.org/pdf/1502.03167v3.pdf);
Learning Multiple Layers of Features from Tiny Images [Alex Krizhevsky, 2009]
(https://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf).

15.2 Webgrafia
http://neuralnetworksanddeeplearning.com
https://towardsdatascience.com/
https://www.wikipedia.org/
https://www.tensorflow.org/programmers_guide/
https://docs.python.org/3/tutorial/
https://www.cs.toronto.edu/~kriz/cifar.html
http://yann.lecun.com/exdb/mnist/
http://analytics.rsystems.com/wp-content/uploads/2017/09/Image-Recognition-
WhitePaper-Rsystems.pdf

38
Machine Learning no Contexto de Reconhecimento de Objetos
-
Archibald William Kennedy

https://www.wired.com/2017/03/astronomers-deploy-ai-unravel-mysteries-universe/
https://arxiv.org/ftp/arxiv/papers/1709/1709.02245.pdf
http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html
https://en.wikipedia.org/wiki/Supervised_learning
https://quickkt.com/tutorials/artificial-intelligence/deep-learning/activation-function/
http://cs231n.github.io/neural-networks-3/
https://medium.com/nanonets/how-to-use-deep-learning-when-you-have-limited-data-
part-2-data-augmentation-c26971dc8ced
http://www.lahey.com/float.htm
https://leonardoaraujosantos.gitbooks.io/artificial-
inteligence/content/batch_norm_layer.html
https://www.researchgate.net/publication/324168804_On_the_Reduction_of_Biases_in
_Big_Data_Sets_for_the_Detection_of_Irregular_Power_Usage
https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-
performance-in-deep-learning-d0d4059c1c10
https://alexisbcook.github.io/2017/global-average-pooling-layers-for-object-localization

16 Anexos
arquitetura.png - Diagrama mostrando as camadas constituintes da rede neural, tal
como as conexões entre elas.

39

Você também pode gostar