lucas hipper˛ stuart boden arquiteturas deep learning ... · a área de deep learning é...

44
U F F I C D C C Lucas Hipper Stuart Boden ARQUITETURAS DEEP LEARNING APLICADAS EM VEÍCULOS AUTÔNOMOS Niterói-RJ 2017

Upload: others

Post on 03-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Universidade Federal Fluminense

Instituto de Computação

Departamento de Ciência da Computação

Lucas Hipper� Stuart Boden

ARQUITETURAS DEEP LEARNING APLICADAS EM

VEÍCULOS AUTÔNOMOS

Niterói-RJ

2017

ii

LUCAS HIPPERTT STUART BODEN

ARQUITETURAS DEEP LEARNING

APLICADAS EM VEÍCULOS AUTÔNOMOS

Monografia apresentada ao Departamento

de Ciência da Computação da Universidade

Federal Fluminense, como requisito parcial

para obtenção do Grau de Bacharel em

Ciência da Computação.

Orientador: Prof. Dr. Luis Martí Orosa

Niterói-RJ

2017

Ficha Catalográfica elaborada pela Biblioteca da Escola de Engenharia e Instituto de Computação da UFF

B666 Boden, Lucas Hippertt Stuart

Arquiteturas deep learning aplicadas em veículos autônomos /

Lucas Hippertt Stuart Boden. – Niterói, RJ : [s.n.], 2017.

42 f.

Projeto Final (Bacharelado em Ciência da Computação) –

Universidade Federal Fluminense, 2017.

Orientador: Luis Martí Orosa.

1. Veículo autônomo. 2. Aprendizado de máquina. 3.

Inteligência artificial. I. Título.

CDD 629.892

v

vi

Agradecimentos

Gostaria de agradecer à minha avó Lucia, que foi como mãe e pai para mim e meus

irmãos, que ela esteja bem aonde quer que esteja. À minha mãe Marcelle por toda luta e

sacrifício para conseguir formar os seus três filhos e ser o exemplo que é para todos os três.

Aos meus tios Márcia e Ruben por terem cuidado de mim enquanto morei com eles e por

sempre estarem perto em momentos de necessidade. À minha avó Laura por ser esse exemplo

de amor ao próximo, por todas as vezes que acordou cedo e me viu com sono e me animava

com um abraço, um beijo e um pão com manteiga. À minha namorada Jaqueline, por ser meu

suporte e meus sorrisos quando o desespero me alcançava. Ao meu orientador, professor Luis

Martí, por todo o esforço e dedicação ao me orientar para que esse trabalho fosse feito da

melhor forma possível. E a todos os que confiaram em mim e me auxiliaram de alguma forma

para que conseguisse alcançar o meu objetivo.

vii

Resumo

Existem diversos modelos e parâmetros que podem ser utilizados ao classificarmos

imagens utilizando Deep Learning. Essas diversas variações afetam diretamente a qualidade

das predições realizadas, e no contexto de veículos autônomos, esses valores podem ser a dife-

rença entre o carro se manter na estrada ou não. Por este motivo, este projeto visa realizar um

estudo de como a utilização de diferentes técnicas e arquiteturas de Deep Learning afetam a

qualidade da predição do ângulo que o veículo deve tomar para a tarefa de direção autônoma,

através da realização de experimentos teóricos e práticos, com o intuito de obter resultados

que possam ser utilizados tanto na tarefa de direção autônoma de veículos quanto em tarefas

semelhantes.

Palavras-chave: Deep Learning. Veículos Autônomos. Aprendizado de Máquina. Inteligência

Artificial

viii

Abstract

There are several models and parameters that can be used to classify images using

Deep Learning. These variations directly a�ect the quality of the assumptions made, and

in context of autonomous vehicles, these values can be deferred in the car whether to stay

on the road or not. For this reason, this project aims to perform a study of how the use

of techniques and architectures of Deep Learning a�ect the quality of the angle prediction

that the vehicle must take to the task of autonomous steering, through the realization of

theoretical experiments and practical, in order to obtain results that are used both in the task

of autonomous steering of vehicles and in similar tasks.

Keywords: Deep Learning. Self Driving Cars. Machine Learning. Artificial Intelligence

Sumário

Resumo vii

Abstract viii

Lista de Figuras xi

1 Introdução 1

1.1 Descrição do problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.4 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Conceitos Básicos 4

2.1 Aprendizado de Máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Redes Neurais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Multilayer Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.1 Função de erro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.2 Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3.3 Overfi�ing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4 Aprendizagem profunda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4.1 Funções de ativação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4.2 Redes neurais convolucionais . . . . . . . . . . . . . . . . . . . . . . . 13

3 Deep Learning para Veículos Autônomos 16

3.1 Obtenção dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2 Pré-processamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1 Aumento de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

ix

x

3.2.2 Recorte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3 Treinamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4 Experimentos e Resultados 24

5 Conclusões 29

5.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

xi

Lista de Figuras

2.1 Exemplo do funcionamento do dropout. Fonte: [Srivastava et al. 2014]. . . . . 9

2.2 Exemplo de uma arquitetura CNN para classificação de imagens. Fonte: [Britz

2015] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.3 Exemplo de camada de convolução. Fonte: [Pacheco 2017]. . . . . . . . . . . 14

2.4 Exemplo de camada de agrupamento utilizando a função de máximo. Fonte:

[Boureau, Ponce e LeCun 2010]. . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.1 Arquitetura original. CNN com 9 camadas, aproximadamente 27 milhões de

conexões e 250 mil parâmetros. Fonte: [Bojarski et al. 2016] . . . . . . . . . . 18

3.2 Vistas laterais e central das câmeras do veículo no simulador. Fonte: Próprio

autor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.3 Distribuição inicial dos dados obtidos. Fonte: [Pagadala 2017]. . . . . . . . . . 20

3.4 Exemplo de imagem após a operação de rotação. Fonte: [Pagadala 2017] . . . 21

3.5 Exemplo de imagem após a operação de ajuste de brilho. Fonte: [Pagadala

2017] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.6 Exemplo de imagem após a operação de crop. Fonte: [Pagadala 2017] . . . . . 22

3.7 Arquitetura CNN simplificada utilizada no experimento. Fonte: Próprio autor 23

4.1 Gráfico dos erros de validação em cada configuração estudada. Fonte: Próprio

autor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Capítulo 1

Introdução

Uma das principais causas do estresse nos dias atuais está relacionada ao trânsito

[Ibope 2016]. Dirigir tornou-se uma tarefa complexa, exigindo paciência e removendo das

pessoas horas do seu dia por causa do trânsito, fazendo com que muitos prefiram nem sair de

casa para evitar o estresse, enquanto outros optam por entrar em ônibus com a esperança de

irem sentados para poder evitar um pouco do estresse causado pela direção.

A introdução de veículos autônomos no mercado, com capacidade para dirigir de forma

igual ou até melhor do que humanos, faria com que o número de acidentes fosse reduzido e o

tempo gasto dirigindo fosse gasto com outras tarefas, como por exemplo dormir, melhorando

assim a qualidade de vida da população.

Atualmente muitos estudos são feitos na área de veículos autônomos, e uma das técni-

cas mais utilizadas recentemente, e sobre a qual esse trabalho se desenvolveu, é a de utilizar

diferentes tecnologias da área de Deep Learning para fazer com que o so�ware responsável

pela direção do veículo aprenda a dirigir a partir de dados obtidos em simulações com pessoas

reais. Essa técnica onde o so�ware aprende uma determinada tarefa a partir da observação do

comportamento de seres humanos solucionando essa tarefa é chamado de aprendizado por

imitação.

1.1 Descrição do problema

Ao se estudar alguns dos modelos e técnicas atuais que utilizam Deep Learning para a

tarefa de predição de direção para veículos autônomos, observa-se a necessidade da utilização

de diferentes técnicas que visam solucionar problemas comuns de Machine Learning, além de

1

2

otimizar o processo de simular a ação humana na direção de veículos. Ao estudar as soluções

adotadas para a resolução dos problemas nessa simulação, observa-se que os métodos de

resolução de problemas e de otimização não se aplicam apenas à tarefa de direção de veículos,

eles são replicáveis para quase todas as outras tarefas que utilizam Machine Learning.

1.2 Motivação

A área de Deep Learning é atualmente uma das mais promissoras segundo o Pane�a

2017 e ao se estudar essa área, observa-se um aumento nos estudos sobre a mesma muito

recente, guiado pelo barateamento e aumento no poder de processamento de sistemas com-

putacionais e no grande aumento da disponibilidade de dados.

Dentro dessa área, uma das aplicações mais estudadas é a de veículos autônomos.

Grandes empresas do setor tecnológico, como a Google, e do setor automobilístico, como a

Tesla, investem fortemente no desenvolvimento de novos modelos que possam fazer com que

um carro não precise de nenhuma interferência humana para ser dirigido. Recentemente,

observando a qualidade das tecnologias que utilizam inteligência artificial, a Volkswagen fez

uma parceria com a NVIDIA para utilizar essa tecnologia em diferentes campos de sua em-

presa, além da aplicação em veículos autônomos [Gabriel 2017].

Estudando e observando modelos já existentes para a tarefa de simulação de direção

de veículos, observa-se a frequente necessidade de combinações de técnicas para solução de

problemas, que muitas vezes não são solucionados, são apenas minimizados.

1.3 Objetivo

Neste trabalho iremos estudar como diferentes técnicas e algoritmos de Deep Learning

podem ser utilizados para prever qual direção um veículo autônomo deve tomar, ou seja, se ele

deve virar para a esquerda, para a direita ou seguir reto, baseado em imagens obtidas através

de câmeras acopladas ao mesmo. Será realizado um experimento através da combinação da

utilização de diferentes valores na função de dropout e quatro diferentes funções de ativação;

ReLU, SELU, ELU e LReLU, aplicando esses valores e essas funções em dois modelos distin-

tos utilizando redes neurais convolucionais, o primeiro com nove camadas e o segundo com

apenas três.

3

Iremos analisar como a utilização dessas técnicas, tais como o dropout, o aumento de

dados e diferentes funções de ativação afetam a predição da direção que o carro deve tomar

baseado em imagens tiradas de diferentes ângulos do carro sendo dirigido por humanos. Fa-

remos um estudo empírico acerca deste assunto, demonstrando o resultado obtido através de

experimentos.

O objetivo geral deste projeto é obter resultados e análises que possam ajudar a solu-

cionar problemas recorrentes em modelos de Deep Learning na tarefa de simulação da direção

de veículos autônomos, para posteriormente replicar as soluções encontradas especificamente

para essa tarefa, para outras tarefas utilizando modelos semelhantes e estudar seus compor-

tamentos.

1.4 Organização

Neste capítulo foi apresentado o tema da monografia, sua importância e a motivação

por trás da mesma.

No capítulo 2 será feita a introdução a alguns conceitos importantes de serem com-

preendidos, antes de se aprofundar mais na leitura da monografia.

No capítulo 3 é apresentado o modelo base utilizado e o processo de obtenção e tra-

tamento de imagens. A partir do modelo, são demonstradas as alterações feitas no mesmo,

gerando novos modelos, com parâmetros diferentes.

No capítulo 4 são demonstrados os dados do experimento, explicando como o mesmo

foi obtido e quais informações podem ser obtidas a partir do experimento.

No capítulo 5 é realizada a conclusão do trabalho, apresentando como a experimenta-

ção abordada contribui para o objetivo do projeto, as limitações dos experimentos realizados

e quais devem ser os próximos passos para o estudo do tema proposto.

Capítulo 2

Conceitos Básicos

Neste capítulo abordaremos questões básicas que devem ser compreendidas para en-

tendimento do restante do trabalho.

2.1 Aprendizado de Máquina

Aprendizado de Máquina, tradução do inglês Machine Learning, é uma área da ciência

da computação, sendo subárea da inteligência artificial, que estuda como um computador

pode exercer funções de forma mais natural possível, sem que pareça que foi explicitamente

programado para isso. De forma simples, os algoritmos de Machine Learning permitem que os

computadores tomem decisões inteligentes baseados em comportamento que não foi direta-

mente programado, mas sim aprendido ou adaptado por meio de algum conhecimento [Reis

2017].

Existem diversas classes de problemas de Machine Learning, sendo as mais comuns a

classificação (onde ao se entregar um determinado dado nunca visto antes para o algoritmo

de Machine Learning, ele deve ser capaz de dizer à qual ou quais das já conhecidas classes

do problema esse novo dado pertence), clusterização (onde o objetivo é agrupar os dados em

classes de acordo com suas semelhanças, sem conhecer previamente as classes existentes) e

regressão (que é semelhante à classificação, mas os valores a serem previstos são contínuos e

não discretos como na classificação), que será o que possuirá mais enfoque neste trabalho.

4

5

2.2 Redes Neurais

Existem diferentes algoritmos e técnicas de Machine Learning, sendo uma das princi-

pais delas as redes neurais artificiais, ou simplesmente redes neurais.

O trabalho com redes neurais tem sido motivado desde o começo pelo reconhecimento

de que o cérebro de animais processa informações de uma forma inteiramente diferente do

computador digital convencional. O cérebro é um computador, um sistema de processamento

de informação altamente complexo, não linear e paralelo [Haykin 1994].

Além disso, o cérebro possui a capacidade de se adaptar ao ambiente em que se en-

contra e aprender com os experimentos passados. Somos capazes de, por exemplo, identificar

um rosto conhecido no meio de um ambiente não conhecido em questão de milissegundos,

ou então um morcego que é capaz, através do sinal recebido pelo seu sonar, identificar o ta-

manho da sua presa, a velocidade em que ela se encontra e a distância até a mesma [Suga

1990].

Com a percepção desse alto poder de processamento do cérebro, cientistas começaram

a tentar replicar esse processamento para os computadores, criando assim as redes neurais.

A primeira rede neural conhecida foi criada em 1943 [McCulloch e Pi�s 1943], utilizando

circuitos digitais para replicar o funcionamento dos neurônios.

A rede então é composta por vários neurônios, onde cada neurônio é uma unidade

de processamento de informação. Para realizar esse processamento, são enviados para esses

neurônios sinais de entrada relativos aos dados que estamos utilizando para realizar o trei-

namento da rede. Esses sinais são então multiplicados por pesos que são relacionados a cada

canal de entrada do neurônio. A atualização desses pesos é o que é chamado de aprendizado.

Após a multiplicação entre os pesos e os sinais de entrada, é adicionado um valor de viés,

visando permitir uma melhor adaptação, por parte da rede neural, ao conhecimento a ela

fornecido. No final, o resultado dessas operações é dado como entrada para uma função, cha-

mada de função de ativação, que serve para definir se a informação obtida naquele neurônio

é importante ou não para a tarefa a ser realizada.

A maneira pela qual os neurônios são estruturados está intimamente relacionada com

o algoritmo de aprendizagem utilizado para treinar a rede [Haykin 1994].

Existem três tipos principais de estruturas para redes neurais. A estrutura de redes

alimentadas adiante com duas camadas, onde os neurônios são organizados em camadas,

é estruturada de forma que haja uma camada de entrada e uma camada de saída, sendo

6

que a camada de entrada recebe os sinais de entrada dos dados e a camada de saída recebe

como entrada a saída da camada de entrada. Essa estrutura é conhecida como Perceptron

[Rosenbla� 1961].

Outro tipo são as redes alimentadas diretamente com múltiplas camadas, onde além

das camadas de entrada e saída, são adicionadas camadas intermediárias, também conhecida

como camada oculta, que possuem o objetivo de extrair estatísticas de ordem elevada, o que

é muito útil em problemas com uma grande quantidade de neurônios na camada de entrada.

Esse tipo de estrutura é geralmente conhecido como Multilayer Perceptron.

A terceira forma estrutural são as redes neurais recorrentes, onde pelos menos uma

saída de um dos neurônios das camadas posteriores é utilizado como entrada para neurônios

de camadas anteriores, processo esse chamado de realimentação. Essa terceira estrutura é

conhecida comumente como rede recorrente (Recurrent Neural Network).

2.3 Multilayer Perceptron

Como visto na seção anterior, o Multilayer Perceptron é uma topologia de rede neural

que funciona com três ou mais camadas de neurônios [Rumelhart, Hinton e Williams 1985].

No Multilayer Perceptron, o processo de aprendizagem é realizado de uma maneira supervi-

sionada, onde os dados de treinamento possuem conhecimento prévio do valor ou classe a

ser estimada, conhecido como retropropagação (mais comumente chamado pelo seu termo

em inglês backpropagation), que utiliza uma função de erro para calcular a diferença entre o

resultado obtido e o esperado.

Entretanto, o uso dessa técnica de aprendizado costuma causar um grande problema

para o treinamento de redes neurais, o sobreajuste, que é mais conhecido pelo seu termo em

inglês overfi�ing.

2.3.1 Função de erro

A função de erro é a unidade de medida utilizada para saber o quão bem a rede neural

está em relação aos dados de treinamento e o resultado esperado [Phylliida 2016].

A função de erro mais utilizada para o backpropagation é a função conhecida como

erro quadrático médio ou MSE (do inglês mean squared error). Ela é calculada realizando a

substração entre o resultado obtido pela rede neural e o resultado esperado e elevando esse

7

valor obtido ao quadrado. Esse processo é realizado para todos os exemplos de entrada da

rede e então são somados e é calculada uma média para obter o valor final do erro para aquela

etapa do treinamento.

A função MSE é equacionada conforme

E =∑N

k=1(yk − y ′k)

2)N

. (2.1)

2.3.2 Backpropagation

O backpropagation é um algoritmo para aprendizado supervisionado que utiliza uma

estratégia conhecida como descida do gradiente. Dada uma rede neural artificial e uma função

de erro, o método calcula o gradiente da função de erro com respeito aos pesos da rede neural

[Rumelhart, Hinton e Williams 1985].

O algoritmo de treinamento de uma rede neural utilizando backpropagation funciona

em três etapas. Na primeira etapa, conhecida como passagem dos padrões de treinamento (ou

pelo termo em inglês feedforward, os sinais de entrada são passados para a primeira camada

da rede. Esses sinais são passados para a camada seguinte, de forma que o valor recebido por

cada neurônio seja de acordo com

in = v +N∑i=1

wi,jxi , (2.2)

onde v é o valor do viés associado ao neurônio que está recebendo o sinal, wi,j é o valor do

peso relacionado à conexão entre o neurônio i da camada anterior e o neurônio j da camada

que está recebendo o sinal e xi é o valor da saída da camada anterior. Esse valor então é

passado para a função de ativação do neurônio, encontrando um valor f (in) que passará esse

novo valor para a camada seguinte, até chegar na última camada, que é a camada de saída.

Na camada de saída, cada neurônio realizará o mesmo cálculo que os neurônios das camadas

ocultas, chegando a um resultado final y .

Na segunda etapa, cada neurônio de saída calcula um valor ∂ = (ye− y)f ′(in), onde ye

é a saída esperada para aquele neurônio, y é a saída efetiva do neurônio, f ′() é a derivada da

função de ativação do neurônio e in é a entrada recebida pelo neurônio, calculado na etapa

1. Após achar esse valor, o neurônio deve calcular o seu termo de correção de pesos, utili-

zando a fórmula ∆w = α∂f (in), onde α é chamado de taxa de aprendizagem, um parâmetro

8

geralmente entre (0, 1], ∂ o valor obtido anteriormente e f (in) o valor da saída da camada an-

terior. O neurônio também deve calcular o seu termo de correção de viés, conforme fórmula

∆b = ∂α.

Nos neurônios da camada oculta, o cálculo deve ser feito da seguinte forma. Primeiro

calcula o ∂, conforme fórmula ∂in =∑N

k=i(∂kwk), onde ∂k é o valor calculado nos neurônios da

camada superior que possuem conexão com o neurônio k onde está sendo realizado o cálculo

e wko peso do neurônio que possui relação com o neurônio onde está sendo feito o cálculo.

Após esse cálculo, é encontrado o valor ∂j = ∂inf ′(in), que então é multiplicado pelo

valor da taxa de aprendizagem e pelo valor de entrada no neurônio, achando um valor de taxa

de correção de peso ∆w e achando o valor da taxa de correção de viés através da fórmula

∆v = α∂k . Na terceira fase, os pesos e viéses antigos são adicionados às taxas de correção de

peso e vieses, respectivamente, para então encontrar os novos valores.

2.3.3 Overfi�ing

O sobre-ajuste, ou overfi�ing, é um dos principais problemas em redes com múltiplas

camadas e do aprendizagem de máquina em geral. O overfi�ing se dá quando uma rede sim-

plesmente decora o comportamento dos dados de entrada no treinamento e tenta replicá-los

sempre. Dessa forma, a rede funciona muito bem para dados similares aos utilizados no trei-

namento, mas não tão bem para entradas com comportamentos diferentes dos já conhecidos.

Existem diferentes técnicas utilizadas para evitar esse comportamento indesejado, como pa-

rar o treinamento quando o desempenho nos dados de validação está ficando pior, ou técnicas

de penalização de pesos como a regularização L1 e L2. [Srivastava et al. 2014] Entretanto, ire-

mos utilizar uma técnica conhecida como dropout, que funciona permitindo que os valores de

saída dos neurônios na camada anterior ao dropout apenas sejam passados para a camada se-

guinte se um valor gerado aleatoriamente for maior do que o parâmetro do dropout, chamado

de probabilidade de permanência (em inglês keep probability).

2.4 Aprendizagem profunda

Aprendizagem profunda, tradução do seu termo em inglês Deep Learning, é uma téc-

nica de Machine Learning que visa ensinar ao computador a fazer o que os humanos fazem

naturalmente: aprender a partir de exemplos [Goodfellow, Bengio e Courville 2016]. Com o

9

(a) Rede completamente conectada. (b) Rede depois do dropout.

Figura 2.1 – Exemplo do funcionamento do dropout. Fonte: [Srivastava et al. 2014].

estudo e experiências em Machine Learning, foi observado que a utilização de mais camadas

dentro de uma rede neural gera resultados muito mais precisos para as tarefas desejadas. Isso

se deve ao fato de que redes com mais camadas possuem maiores níveis de não-linearidade,

enquanto que redes com menos camadas possuem maior dificuldade para obter esses níveis.

Com isso, muitos cientistas pensaram que bastaria adicionar novas camadas aos seus mode-

los que resolveriam o problema. Porém, isso não ocorre de fato. Um dos motivos para que

isso não ocorra é devido à natureza do backpropagation.

O backpropagation é realizado utilizando derivadas. Pelo que foi visto no tópico de

backpropagation, se possuirmos muitas camadas na rede, a regra da cadeia aplicada para cal-

cular o fator de correção daquela camada se tornará uma multiplicação tão grande quanto o

número de camadas após a camada onde estamos calculando o fator na rede. Dessa forma,

caso o valor das derivadas seja um número pequeno, a multiplicação de diversos números

pequenos convergirá para um número muito próximo de 0, que mesmo que não chegue a

zero, devido a limitação de representação dos computadores, este número será tratado como

0, fazendo com que os pesos das camadas inicias não sejam alterados, ou seja, não há apren-

dizado nas camadas iniciais, tornando elas camadas inúteis. Esse tipo de problema é chamado

de problema do desaparecimento do gradiente, ou em inglês vanishing gradient problem [Ho-

chreiter 1991, Hochreiter et al. 2001]. Para minimizar esse problema, são utilizadas funções

de ativação que apresentem menos problema de saturação, dependendo da necessidade do

aumento no número de camadas da rede.

10

Outro problema do Deep Learning é a necessidade de uma grande quantidade de da-

dos. �anto maior for a necessidade de generalização do problema, maior a quantidade de

dados necessários. O problema da necessidade de grande quantidade de dados não é a obten-

ção dos dados em si, pois com a internet, muitos dados estão disponíveis, mas as arquiteturas

de Deep Learning funcionam melhor se os dados disponíveis forem classificados com rela-

ção à tarefa que desejamos, e esses dados são mais difíceis de arrumar, pois requisitam um

especialista que classifique-os antes de serem enviados para treinamento na rede. Por isso,

geralmente se recorre a técnicas que visam ajustar os dados que já se possui de forma que

eles funcionem como novos dados, como por exemplo rotacionar uma imagem de um gato na

tarefa de reconhecer uma figura. A figura contínua sendo a de um gato, mas para a rede é

como uma nova figura. Isso serve também para informar indiretamente à rede que a posição

do gato na figura não interfere na tarefa de classificação.

Existem diferentes técnicas de Deep Learning. A primeira já foi vista no tópico anterior,

que são os Multilayer Perceptrons. Outras duas muito populares são as redes neurais convo-

lucionais (CNN, do inglês Convolutional Neural Network) e redes neurais recorrentes (RNN,

do inglês Recurrent Neural Networks). E existe também uma quarta, que tem ganhado muita

força nos últimos anos que são as redes geradoras adversárias (GANs, do inglês Generative

Adversarial Nets), que possuem esse nome pelo fato de possuírem duas redes sendo treina-

das ao mesmo tempo, uma primeira, que gera instâncias falsas, e uma segunda, que tenta

diferenciar entre tais instâncias falsas (aquelas geradas pela primeira rede) e as entradas de

fato. [Goodfellow et al. 2014]

2.4.1 Funções de ativação

Como visto anteriormente, um dos principais problemas dos modelos de Deep Lear-

ning é o vanishing gradient problem. Para solucionar esse problema, muitos estudos estão

sendo feitos, em sua maioria voltados para a utilização de diferentes funções de ativação nos

neurônios das camadas. A seguir são demonstradas algumas dessas funções e como ela auxi-

liam na minimização desse problema, visto que ele ainda é um problema sem solução.

11

2.4.1.1 Unidade linear retificada (ReLU)

A função de ativação ReLU, do inglês Rectified Linear Unit é dada conforme

f (x) = max(0, x) . (2.3)

Essa função é bastante utilizada, pois como visto anteriormente, para treinarmos redes

neurais é necessário tanto fazer cálculos com a função de ativação quanto com a derivada da

mesma. Observando a função ReLU, observa-se que calcular o valor da função é simples

computacionalmente, e a derivada dela também, pois a derivada será 1 se x for positivo e 0

se x for negativo. Dessa forma, mesmo que tenhamos um grande número de multiplicações,

o cálculo será simples e rápido. Porém, essa função tem um problema. Os neurônios com

essa função de ativação são desativados quando a entrada deles é negativa. Isso pode em

muitos casos bloquear o processo de backpropagation pois o valor dos gradientes será 0 após

uma entrada negativa para a função de ativação [Maas, Hannun e Ng 2013]. Além disso,

ela não é derivável para o valor 0, de forma que pode causar problemas para o processo de

backpropagation.

2.4.1.2 Unidade linear retificada vazada (LReLU)

A fórmula para a função de ativação LReLU, do inglês Leaky Rectified Linear Unit, é

dada abaixo:

f (x) = max(αx , x) (2.4)

e derivada:

f ′(x) =

1 se x ≥ 0,

α em caso contrário.(2.5)

Essa função foi proposta [Maas, Hannun e Ng 2013] como uma forma de solucionar

o problema da ReLU, multiplicando o valor de entrada por um número muito pequeno, ge-

ralmente próximo a 0.2, fazendo com que tanto o valor da função para entradas negativas

quanto a sua derivada não zerem. Entretanto, essa função não soluciona o vanishing gradient

problem visto que a derivada para números negativos também será um número pequeno.

12

2.4.1.3 Unidade linear exponencial (ELU)

A função ELU, do inglês Exponential Linear Unit [Clevert, Unterthiner e Hochreiter

2015] é dada conforme à fórmula:

f (x ,α) =

x se x ≥ 0,

α(ex − 1), em caso contrário.(2.6)

f ′(x ,α) =

1 se x ≥ 0,

f (x ,α) + α em caso contrário.(2.7)

ELU também soluciona o problema da ReLU de desativar um neurônio com entrada

negativa, entretanto, por ser necessário realizar cálculos de exponencial, ela se torna um mé-

todo mais lento se comparado a LReLU e ReLU, mas conforme mostrado no artigo de proposta

da mesma [Maas, Hannun e Ng 2013], ela possui melhor performance quando comparadas

com as outras duas.

2.4.1.4 Unidade linear exponencial escalonada (SELU)

A função SELU, do inglês scaled exponential linear unit, é bem parecida com a fun-

ção ELU, mas ela possui uma pequena diferença conforme mostrado nas fórmulas abaixo, da

função e de sua respectiva derivada, onde por convenção, λ = 1.0507 e α = 1.6732.

f (x) = λ

x se x > 0

α(ex − 1), em caso contrário.(2.8)

e derivada:

f ′(x) = λ

1 se x > 0

αex , em caso contrário.(2.9)

A ideia principal dessa função é realizar a normalização dos dados dentro da função,

não sendo necessário técnicas externas para realizar essa tarefa.

13

Figura 2.2 – Exemplo de uma arquitetura CNN para classificação de imagens. Fonte: [Britz2015]

2.4.2 Redes neurais convolucionais

Redes neurais convolucionais (CNN, do inglês Convolutional Neural Networks) [LeCun

et al. 1989], são um tipo de modelo de Deep Learning amplamente utilizado para tarefas de

classificação e aprendizado através de imagens. A ideia do modelo é diminuir o tamanho das

imagens ao mesmo tempo que extrai-se delas características não conhecidas das camadas

anteriores e então, a partir dessas características, obter a informação desejada, como por

exemplo reconhecer qual objeto está presente na imagem, ou, no exemplo deste trabalho,

descobrir qual direção o veículo deve seguir.

Elas foram primeiramente propostas em 1998 [LeCun et al. 1989], sendo utilizada para

reconhecer dígitos escritos a mão, atingindo uma taxa de acerto de de 99,2%, atingindo assim

um novo estado da arte. A Figura 2.2 mostra uma arquitetura típica de CNN.

2.4.2.1 Camada de convolução

Essa camada é a camada mais importante da rede (Figura 2.3). Ela possui a maior

parte do processamento da rede convolucional, sendo também responsável por dar o nome

ao modelo. Nela, é passada uma matriz de filtro de tamanho definido, contendo valores que

podem ser interpretados como pesos. Essa matriz é multiplicada pela entrada da camada,

fazendo multiplicações matriciais percorrendo toda a imagem, da esquerda para a direita

e de baixo para cima, sempre andando um número pré-definido de pixeis, conhecido como

passo, ou em inglês stride. Essa camada é capaz de identificar características específicas de

pequenas partes da imagem. Ela também é capaz de aprender, já que os valores da matriz de

filtros são tratados como pesos, e como o filtro é o mesmo em todas as partes da imagem, esse

peso é chamado de peso compartilhado, tipo de peso que reduz a quantidade de operações

de aprendizagem.

14

Figura 2.3 – Exemplo de camada de convolução. Fonte: [Pacheco 2017].

2.4.2.2 Camada de agrupamento

A camada de agrupamento, tradução do inglês para pooling layer, é uma camada seme-

lhante à camada de convolução, onde é passado um filtro pelos dados de entrada da camada

sendo guiado pelo stride. Entretanto, ao contrário da camada de convolução onde é feito uma

multiplicação matricial, o filtro da camada de agrupamento é uma função que é aplicada ao

dado de entrada. Existem diferentes funções utilizadas para essa tarefa, sendo a mais utili-

zada a função de máximo, que faz com que, dentro do pedaço do dado sendo analisado pelo

filtro, apenas o maior valor seja passado para a camada seguinte, fazendo assim com que

seja passado apenas o valor que em tese possuiria mais impacto para a tarefa desejada na

utilização do modelo. A Figura 2.4 mostra um exemplo do processo antes descrito.

15

Figura 2.4 – Exemplo de camada de agrupamento utilizando a função de máximo. Fonte:[Boureau, Ponce e LeCun 2010].

2.4.2.3 Camada totalmente conectada

A camada totalmente conectada, como o próprio nome já sugere, é completamente

conectada com a camada anterior [Pacheco 2017], ou seja, todos os neurônios de uma ca-

mada se conectam com todos os neurônios da camada seguinte. Como todos os neurônios de

uma camada precisam se conectar com todos os da anterior, e geralmente as camadas total-

mente conectadas vem após as camadas de convolução, e as camadas de convolução possuem

saídas com profundidade, é necessário que seja realizado um processo de aplainar, também

conhecido como sua pronuncia em inglês fla�en, para que todos os neurônios da camada de

convolução consigam se conectar aos neurônios da camada totalmente conectada. O principal

objetivo dessa camada é realizar as tarefas que desejamos na nossa rede, tanto de classificação

quanto de regressão, baseados nas características extraídas pelas camadas anteriores.

Capítulo 3

Deep Learning para Veículos

Autônomos

Veículos autônomos são há muito tempo temas de ficção científica e discutidos pela

população. Entretanto, eles não estão apenas no mundo das ideias. Grandes empresas de tec-

nologia e do ramo automobilístico estão unindo forças para concretizar essa ideia, já havendo

alguns modelos capazes de dirigir durante longos períodos de tempo sem acidentes provo-

cados pelo mesmo, sob determinadas condições, como é o caso do carro desenvolvido pela

Google [Waymo 2017], que atualmente já dirigiu mais de 126.000 milhas sem ação externa.

Existem cinco diferentes níveis de autonomia na direção de veículos. Autonomia de

funções específicas, como estacionamento, autonomia de funções integradas, como manter o

veículo no centro da pista, autonomia limitada, quando o veículo transfere para o usuário a

direção do veículo, por se encontrar em uma situação de perigo ou que não possui conheci-

mento, autonomia sobre condições específicas, quando o veículo dirige sem a ajuda externa,

mas apenas em condições específicas, como pistas com marcações, e autonomia total, quando

o veículo é capaz de dirigir sem qualquer necessidade de intervenção humana sobre qualquer

condição [Litman 2017].

Atualmente, o estado da arte para veículos autônomos é a utilização de combinações

de técnicas de Deep Learning para realizar tarefas como detecção de pedestres, detecção de

pista, detecção de veículos, identificação de sinais luminosos, etc. Como as principais tarefas

de direção podem ser traduzidas como tarefas de reconhecimento de imagens, os modelos

mais utilizados são CNN, que foram recentemente impulsionados pelo grande poder de pa-

ralelismo de processamento das GPU e pela massiva quantidade de dados disponível através

16

17

da internet.

Os primeiros estudos feitos utilizando Deep Learning para a tarefa de simular a direção

humana de um veículo foram feitos por Pormelau [Pormelau 1989], que utilizou um modelo

com três camadas totalmente conectadas para, tendo como entradas para a sua rede vídeos

feitos por uma câmera acoplada ao veículo e uma distância entre o veículo e os objetos da

cena, calculada através de um sensor de laser acoplado ao veículo. Como foi um estudo de

1989, houveram dificuldades relacionadas à obtenção de dados, armazenamento dos dados,

processamento, o que dificultou o funcionamento do modelo, mas de qualquer forma ele ser-

viu como base para estudos futuros. Esse modelo criado por Pormelau ficou conhecido como

Alvinn, sigla em inglês para veículo terrestre autônomo utilizando redes neurais.

Cientistas da Agência de Projetos de Pesquisa Avançada de Defesa (DARPA) [DARPA

2017] dos Estados Unidos, utilizando os estudos de Pormelau como base, desenvolveram um

projeto conhecido como DAVE, sigla em inglês para veículo autonômo da Darpa, que foi trei-

nado utilizando vídeos capturados por duas câmeras acopladas a um veículo guiado por hu-

manos, que apenas davam o sinal de esquerda ou direita para o veículo, como forma de simular

a direção. Entretanto, DAVE não obteve marcas tão expressivas, conseguindo apenas andar

em média vinte metros em estradas complexas.

Alguns meses depois, o projeto DAVE foi retomado por uma equipe da NVIDIA, co-

mandada pela Karol Zieba [Bojarski et al. 2016], visando aplicar os estudos anteriores para

realizar testes em estradas públicas. Eles desenvolveram um modelo CNN com cinco camadas

de convolução e três camadas totalmente conectadas, além de uma camada inicial de norma-

lização, utilizada para acelerar e otimizar o processo de treinamento. O modelo utilizado se

encontra na figura 3.1.

Com esse modelo, foi possível percorrer dez mil milhas em uma estrada sem nenhuma

intervenção humana. Também foi possível percorrer ruas urbanas com apenas 2% do tempo

sendo necessária intervenção humana, sem contar as mudanças de faixa. Esses resultados

foram obtidos com apenas setenta e duas horas de captura de vídeo para treinamento da

rede.

A partir desse estudo da NVIDIA, foram desenvolvidas diferentes implementações que

visam replicar ou melhorar os resultados obtidos pela equipe.

Os modelos estudados para esse projeto utilizaram de uma ideia conhecida como

aprendizagem por imitação, que visa imitar o comportamento humano em uma determinada

18

Figure 4: CNN architecture. The network has about 27 million connections and 250 thousandparameters.

To remove a bias towards driving straight the training data includes a higher proportion of framesthat represent road curves.

5.2 Augmentation

After selecting the final set of frames we augment the data by adding artificial shifts and rotationsto teach the network how to recover from a poor position or orientation. The magnitude of theseperturbations is chosen randomly from a normal distribution. The distribution has zero mean, and thestandard deviation is twice the standard deviation that we measured with human drivers. Artificiallyaugmenting the data does add undesirable artifacts as the magnitude increases (see Section 2).

6 Simulation

Before road-testing a trained CNN, we first evaluate the networks performance in simulation. Asimplified block diagram of the simulation system is shown in Figure 5.

The simulator takes pre-recorded videos from a forward-facing on-board camera on a human-drivendata-collection vehicle and generates images that approximate what would appear if the CNN were,instead, steering the vehicle. These test videos are time-synchronized with recorded steering com-mands generated by the human driver.

5

Figura 3.1 – Arquitetura original. CNN com 9 camadas, aproximadamente 27 milhões deconexões e 250 mil parâmetros. Fonte: [Bojarski et al. 2016]

tarefa, no caso, a de dirigir um veículo. Nessa técnica, um agente (um modelo de Machine

Learning) é treinado para realizar tarefas a partir de exemplos, realizando um mapeamento

entre as observações e as ações. [Hussein et al. 2017]

Ao se estudar essas diferentes implementações, observou-se que em quase sua totali-

dade, as implementações tiveram a necessidade da utilização de uma camada de dropout, e

todas as estudadas apenas utilizaram as funções de ativação ReLU ou ELU. Observando isso,

desenvolveu-se a ideia desse projeto, que visa estudar como a utilização de diferentes funções

de ativação e de diferentes valores de keep probability utilizados na função de dropout afetam

a robustez dos diferentes modelos estudados na tarefa de predição angular do veículo.

19

(a) Vista da lateral esquerda. (b) Vista da lateral direita.

(c) Vista central.

Figura 3.2 – Vistas laterais e central das câmeras do veículo no simulador. Fonte: Próprioautor.

3.1 Obtenção dos dados

Para a obtenção dos dados e futuros testes, utilizou-se um simulador [Brown et al.

2017], tendo em vista que testes e obtenção de dados reais seriam inviáveis para esse trabalho.

Esse simulador possui duas pistas, com apenas o veículo que está sendo dirigido. Esse

veículo possui três câmeras acopladas a ele, sendo uma em seu centro e duas nas laterais,

todas mirando a frente do veículo. Essas imagens são então salvas como frames e é criado um

arquivo de log contendo as informações das pastas onde estão salvas as imagens, da veloci-

dade do veículo, ângulo de rotação do volante, profundidade do acelerador e profundidade do

freio.

Ao final dessa simulação, os dados se encontram com a distribuição demonstrada na

figura 3.3.

Esse tipo de configuração, com muitos dados concentrados em um único ponto é ge-

ralmente ruim para fins de Machine Learning, pois pode influenciar o modelo a tomar a deci-

são de apenas tentar predizer que o dado de entrada vai possuir um valor igual à esse valor

mais concentrado, e mesmo assim acertar na maioria das vezes, ou seja, nesse caso o modelo

pode apenas retornar sempre um ângulo zero e mesmo assim ele irá ter uma resposta apa-

20

Figura 3.3 – Distribuição inicial dos dados obtidos. Fonte: [Pagadala 2017].

rentemente boa, mas que na prática não será tão boa assim, pois não estará generalizando o

modelo. Para evitar que esse tipo de situação aconteça, geralmente se adotam duas alterna-

tivas: ou mais dados são gerados, tentando minimizar essa discrepância, ou mais dados são

criados. Nós assumiremos a segunda alternativa, que será demonstrada na próxima sessão.

3.2 Pré-processamento

Antes do modelo receber os dados, são aplicadas técnicas que visam melhorar o de-

sempenho do sistema, removendo informações desnecessárias das imagens, e aumentando a

quantidade de imagens existentes. Essas técnicas são úteis pois diminuem a necessidade de

obtenção exaustiva de dados, contribuindo para o objetivo de generalização do modelo, onde

o veículo deve ser capaz de funcionar do mesmo modo em pistas conhecidas e pistas nunca

antes vistas.

3.2.1 Aumento de dados

Nessa etapa do pré-processamento, são aplicadas diferentes técnicas visando aumen-

tar a quantidade de dados disponíveis para o treinamento do modelo.

Para realizar essa tarefa, o sistema seleciona aleatoriamente uma das três imagens de

cada momento, com o seu respectivo ângulo de direção. Dependendo da imagem selecionada

21

Figura 3.4 – Exemplo de imagem após a operação de rotação. Fonte: [Pagadala 2017]

Figura 3.5 – Exemplo de imagem após a operação de ajuste de brilho. Fonte: [Pagadala 2017]

(esquerda, centro ou direita), é necessária uma alteração no ângulo da direção registrado no

arquivo de log, pois o que está registrado é o ângulo em relação a câmera central. Após a

seleção, a imagem é rotacionada em torno de seu eixo y, com uma probabilidade de 0,5. Caso

a imagem receba a rotação, é necessário também atualizar o ângulo da direção, que passa a

valer o negativo do ângulo anterior.

Outra tarefa de aumento de dados aplicada é a de ajustar o brilho da imagem aleatori-

amente. Dessa forma, o sistema consegue aprender a dirigir em qualquer tipo de iluminação,

o que é bom para o objetivo de generalização do modelo.

3.2.2 Recorte

O recorte, tradução do termo em inglês crop, é a técnica utilizada para remoção de

informações da imagem que não são de interesse do modelo. O crop realizado no sistema

remove da imagem o céu e a parte dianteira do veículo, pois para a tarefa de descobrir qual a

22

Figura 3.6 – Exemplo de imagem após a operação de crop. Fonte: [Pagadala 2017]

direção a ser tomada pelo veículo, esses dados não são importantes e poderiam atrapalhar o

treinamento.

3.3 Treinamento

Para o processo de treinamento, foram realizadas todas as combinações possíveis entre

os valores passados. Dessa forma, foi possível realizar diferentes combinações de diferentes

modelos, diferentes funções de ativação e diferentes valores de keep probability. Esses parâ-

metros foram escolhidos com o intuito de verificar o funcionamento da rede com os mesmos,

permitindo dessa forma saber se seria possível desenvolver modelos mais potentes sem que

ocorresse o problema do vanishing gradient. Além disso, deseja-se verificar o impacto do pa-

râmetro de keep probability na generalização do modelo, verificando se o aumento ou a dimi-

nuição desse parâmetro afeta tanto a qualidade da direção do veículo na pista utilizada para

treinamento quanto a qualidade na pista utilizada para testes, pista essa que não foi utilizada

na tarefa de obtenção dos dados.

Nesse processo, foram escolhidos dois modelos para serem utilizados. O primeiro é o

modelo demonstrado no artigo da NVIDIA [Bojarski et al. 2016], observado nos tópicos an-

teriores. O segundo, utiliza uma arquitetura CNN bastante simplificada, possuindo apenas

a camada de normalização, semelhante ao modelo da NVIDIA, uma camada de convolução

e uma camada totalmente conectada. A escolha desse modelo se deu visando observar se é

possível utilizar um modelo mais simples, que teoricamente será mais rápido e mais leve com-

putacionalmente, comparando os resultados obtidos com os resultados do modelo da NVIDIA.

Para realização do treinamento, os dados foram separados em dados de treinamento

e dados de validação. A cada etapa do treinamento, foram enviadas para a rede pequenas

quantidades de imagens, conhecidas como lotes, escolhidas aleatoriamente dentro dos dados

de treinamento, fazendo com que não fosse necessário que todos os dados de treinamento

estejam na memória ao mesmo tempo. Dessa forma, a rede aprende a cada passagem de lote,

23

Figura 3.7 – Arquitetura CNN simplificada utilizada no experimento. Fonte: Próprio autor

não sendo necessário atualizar a rede a cada imagem, o que, devido ao número de imagens

seria custoso computacionalmente. Ao final da passagem de uma determinada quantidade de

lotes pré-definida, conhecida como época, a rede é testada utilizando os dados de validação.

Caso o resultado desse teste seja o melhor entre os testes utilizando a combinação atual, o

modelo é salvo para realização dos testes no simulador.

Capítulo 4

Experimentos e Resultados

Todo o experimento foi realizado utilizando Python [Rossum 1995], a IDE Jupyter No-

tebook [Kluyver et al. 2016], Pandas [McKinney 2010] para carregamento dos dados e cri-

ação dos datasets, Matplotlib [Hunter 2007] para geração e visualização dos gráficos, Scikit

Learn [Pedregosa et al. 2011] para separar os dados em dados de validação, treinamento e

teste, Keras [Chollet et al. 2015] para criação das camadas dos modelos e Numpy [Walt, Col-

bert e Varoquaux 2011] para tratamento de matrizes.

Como visto no capítulo anterior, o experimento consiste combinação das funções de

ativação ReLU, LReLU, ELU, e SELU, dos valores de keep probability no dropout de 0.25, 0.5

e 0.75 e dos dois modelos apresentados, o modelo da NVIDIA [Bojarski et al. 2016] e o CNN

simplificado.

Essa combinação foi repetida 30 vezes, gerando um total de 720 modelos. Dentro des-

ses modelos foram pegos os que obtiveram a menor função de erro em relação aos dados de

validação, para cada uma das 24 combinações possíveis, e então foi feita uma comparação

entre eles.

Apenas o processo de treinamento das redes para o experimento levou um total de

186 horas aproximadamente, o que requisitou que, para evitar interferências no experimento,

fosse utilizada uma máquina com o intuito de não rodar nenhuma outra aplicação durante o

experimento, limitando assim a realização de uma maior quantidade de experimentos.

24

25

Figura 4.1 – Gráfico dos erros de validação em cada configuração estudada. Fonte: Próprioautor.

Os resultados do experimento podem ser examinados na Figura 4.1. Ao se observar

esse gráfico, é possível perceber uma piora esperada nos testes ao se utilizar um modelo mais

simples. Além disso, é possível observar que, para o modelo original, a função de ativação

ReLU mostrou-se a com melhores resultados no teste de validação, enquanto que a função

LReLU obteve melhores resultados no modelo simplificado. A função de ativação SELU obteve

um resultado ruim que já era esperado, pois essa função requisita que haja um outro tipo de

inicialização de pesos, diferente do que foi utilizado para o experimento, que seguiu o mesmo

tipo de inicialização realizada pelo artigo utilizado como base para este projeto. Porém, o mau

resultado da função de ativação ELU foi surpreendente, pois ela foi a função mais utilizada

pelos projetos semelhantes ao experimento e obteve resultado ruim nos dois modelos.

A Tabela 4.1 mostra os resultados da Figura de forma tabulada. Além disso também

mostra informações sobre os testes no simulador. O tempo na tabela se refere ao tempo

da época que obteve o melhor resultado no teste de validação utilizando as configurações

apontadas na primeira coluna, sendo elas combinações de “Ori” ou “Sim” representando os

tipos do modelo, onde “Ori” representa o modelo original com 9 camadas e “Sim” o modelo

com apenas 3 camadas, "ReLU", "LReLU", "ELU"ou "SELU"as funções de ativação utilizadas e

26

Tabela 4.1 – Resultados para cada configuração estudada. O tempo na tabela se refere aotempo médio na etapa da época que obteve o melhor resultado no teste de validação do mo-delo original (Ori) ou o simplificado (Sim). ReLU, LReLU, ELU ou SELU as funções de ativaçãoutilizadas e 0.25, 0.5 ou 0.75 o valor da variável keep probability do dropout.

Modelo Tempo Erro de validação Tempo emPista 1

Tempo emPista 2

Núm. deToques

OriReLU0.25 92s 0.0111 +10m 3s 0OriReLU0.5 91s 0.0118 +10m 3s 10

OriReLU0.75 92s 0.0122 +10m 3s 0OriLReLU0.25 98s 0.0109 +10m 5s 4OriLReLU0.5 98s 0.0118 +10m 5s 0

OriLReLU0.75 97s 0.0121 +10m 5s 10OriELU0.25 92s 0.0108 +10m 28s 20OriELU0.5 92s 0.0125 24s 14s 1

OriELU0.75 93s 0.0117 +10m 5s 24OriSELU0.25 99s 0.0121 +10m 3s 0OriSELU0.5 97s 0.0115 +10m 8s 0

OriSELU0.75 98s 0.0120 +10m 4s 20SimReLU0.25 78s 0.0128 +10m 3s 0SimReLU0.5 76s 0.0123 +10m 3s 0

SimReLU0.75 77s 0.0122 3m 3s 12SimLReLU0.25 78s 0.0122 50 3s 4SimLReLU0.5 77s 0.0119 +10m 4s 10

SimLReLU0.75 78s 0.0121 +10m 4s 3SimELU0.25 84s 0.0135 23s 4s 100000SimELU0.5 82s 0.0132 23s 3s 100000

SimELU0.75 83s 0.0137 23s 3s 100000SimSELU0.25 85s 0.0141 48s 4s 3SimSELU0.5 86s 0.0142 26s 3s 1

SimSELU0.75 85s 0.0138 33s 3s 1

0.25, 0.5 ou 0.75 o valor da variável keep probability do dropout. A coluna de erro na validação é

o valor da função de erro MSE aplicada nos dados de validação, na época que obteve o melhor

resultado. Pista1 é o tempo que o veículo se manteve na pista utilizada para treinamento, sem

nenhuma interferência e Pista2 o tempo na pista que nunca foi vista pelo modelo. A coluna

de Toques informa a quantidade de vezes que o veículo tocou a lateral da pista, sem sair da

mesma ou saindo e voltando automaticamente, sem necessidade de interferência.

A partir dessa tabela, é possível observar que, como esperado, a utilização do modelo

simplificado possuiu impacto direto na qualidade da simulação. Entretanto, ao se utilizar as

funções de ativação ReLU e LRELU foi possível fazer com que o veículo ficasse na pista, apesar

de ter atingindo a lateral da mesma algumas vezes. A quantidade de toques na faixa lateral nos

apresenta um outro fator importante na observação do comportamento do veículo. Apesar de

27

ele ter conseguido completar as voltas na pista, ele demonstrou uma instabilidade na direção

do veículo muito maior do que quando utilizado o modelo com mais camadas. Isso se deve ao

fato de o modelo simplificado obter menos características da pista do que o modelo com mais

camadas. Com isso, o modelo conseguiu aprender características como para não sair da pista

mas não conseguiu obter características suficientes para se manter a uma distância suficiente

do fim da mesma.

Outra importante informação obtida a partir do experimento e dos resultados conse-

guidos foi a da impossibilidade de se testar os modelos baseando-se apenas na primeira volta

da pista, pois no caso do modelo simplificado utilizando função ReLU com 0.75 de keep proba-

bility, o veículo completou uma volta, mas na terceira volta ele saiu da pista. Nos resultados

OriELU0.75, OriLReLU0.25, SimLReLU0.25 e SimLReLU0.75 esse comportamento também é

observável, pois o número de toques por volta na pista não se manteve constante. Nesses

casos, em algumas voltas o veículo chegava próximo à lateral da pista, mas não a tocava,

enquanto que em outras voltas, na mesma posição da pista, o veículo tocava a lateral. Esse

comportamento se deve ao fato de que as imagens obtidas no simulador durante as voltas não

eram as mesmas durante as voltas, nos mesmos pontos da pista, principalmente nos mode-

los que demonstraram uma maior instabilidade na direção do veículo. Foi colocado um valor

de cem mil na coluna de Toques nos modelos simplificados utilizando a função ELU pois no

curto período de tempo em que o veículo se manteve na pista, ele andou todo o tempo na

faixa lateral da mesma.

Comprovando os dados obtidos pelo gráfico, a função de ativação ELU se apresentou

a com piores resultados, tanto no modelo com nove camadas quanto no simplificado. No

modelo original essa função, apesar de conseguir completar mais do que dez voltas na pista,

ela tocou a lateral da pista pelo menos duas vezes em cada volta, demonstrando fragilidade

na realização de curvas. Entretanto, estudos mais profundos com as mesmas são necessários,

pois mesmo demonstrando instabilidade nas curvas da pista de treinamento, a configuração

utilizando essa função de ativação foi a única que conseguiu ultrapassar a segunda curva da

pista de testes, conseguindo chegar até a sexta curva, sendo as curvas da segunda pista curvas

mais fechadas e em ladeiras, enquanto que na primeira pista as curvas são mais abertas e não

possuem ladeiras.

Já a função SELU contrariou o esperado pelos testes teóricos, e se mostrou a função

com maior estabilidade na direção dentro do modelo original. Isso demonstra que essa é uma

28

função que pode substituir a função ELU como a mais utilizada, pois mesmo não trabalhando

essa função em seu estado ideal, utilizando uma inicialização de pesos diferente do proposto

pelo autor da mesma, ela obteve bons resultados na simulação.

Com os resultados do experimento, é possível intuir que a utilização de um modelo sim-

plificado é possível, como na utilização da função de ativação ReLU, que se mostrou com maior

velocidade no treinamento. Em um treinamento em maior escala, com maior quantidade de

dados, maior variedades de parâmetros a serem otimizados e maior carga de teste, esses pou-

cos segundos podem ter influência positiva na decisão de qual modelo escolher.Entretanto,

como na tarefa de direção de veículos autônomos, a principal é a estabilidade do veículo, uti-

lizar modelos com maior número de camadas deve ser priorizado, pois esse tipo de modelo se

mostrou possuidor de maior confiança do que o modelo simplificado.

Capítulo 5

Conclusões

Como dito anteriormente, o objetivo do experimento era observar e analisar o impacto

que diferentes técnicas de Deep Learning teriam na tarefa de simulação da direção de veículos

autônomos, através da combinação dessas técnicas aplicadas em diferentes arquiteturas.

Os resultados apresentados anteriormente demonstraram uma boa aproximação deste

objetivo. A partir deles é possível concluir que é possível utilizar modelos mais simples para a

tarefa de direção autônoma de veículos, acelerando assim o processo de treinamento, apesar

de possuir um alto grau de instabilidade no experimento, fazendo com que seja necessário

um estudo mais profundo visando aumentar a estabilidade dos veículos que utilizem essa

arquitetura.

Outro fato que deve ser melhor estudado é a utilização da função ELU, que não apre-

sentou resultados tão bons no experimento, tanto na parte teórica quanto na prática, apesar

de ser a única que conseguiu ser utilizada na tarefa de generalização.

5.1 Trabalhos Futuros

Com os resultados obtidos neste projeto, seria possível, através de aprendizado por

transferência [Pra� 2017], estender o problema para outros veículos, como caminhões ou mo-

tos, e avaliar os resultados. Com isso, não seria necessário começar esses estudos do zero,

podendo utilizar este projeto como base e apenas realizar as alterações necessárias para o

bom funcionamento em outros veículos.

Existem diversos outros parâmetros que poderiam ser estudados para detectar a in-

fluência dos mesmos na tarefa principal do projeto, como a taxa de aprendizagem, a iniciali-

29

30

zação dos pesos da rede, o tamanho do filtro nas camadas de convolução. Outra característica

que deve ser estudada é a estrutura da rede e o impacto dela na tarefa,visto que foi apontado

que essa característica afeta diretamente a qualidade da direção. Muitos estudos estão sur-

gindo visando utilizar modelos de redes neurais recorrentes e redes geradoras adversárias na

área de veículos autônomos. Esses estudos visam utilizar a característica de que a direção do

veículo em determinado momento seria baseada na direção do mesmo em momentos anterio-

res. Além disso, com as GANs, seria possível detectar outros problemas existentes na direção

de veículos, ignorados neste projeto por motivo de simplificação, como outros veículos nas

pistas, pedestres e sinais luminosos.

Baseado na implementação deste trabalho, é possível perceber que a utilização da

mesma metodologia para diferentes simuladores é possível, como a utilização destes modelos

em jogos de video game, pois seria necessário apenas implementar a captura de imagens no

simulador utilizado e o arquivo de conexão entre o simulador e o programa que utiliza o

modelo desenvolvido para direção.

Outra utilização que pode ser dada para este projeto é o desenvolvimento de um carro

de controle remoto com câmeras acopladas ao mesmo e a utilização do mesmo em algumas

pistas reduzidas, simulando veículos e pistas reais, o que seria uma maneira menos custosa

de se testar os resultados obtidos, quando comparado a utilização de veículos reais, além de

complementar os resultados obtidos neste projeto.

Com este trabalho, foi possível perceber que, com a utilização de redes neurais, está

sendo possível se obter excelentes resultados na área de veículos autônomos, demonstrando

assim que não está longe o dia em que a ficção científica se encontrará com a realidade, onde

não será mais necessário que nos preocupemos com o trânsito nem com acidentes, pois a

direção será toda automatizada.

Referências Bibliográficas

BOJARSKI, M. et al. End to end learning for self-driving cars. arXiv preprint arXiv:1604.07316,2016.

BOUREAU, Y.-L.; PONCE, J.; LECUN, Y. A theoretical analysis of feature pooling in visualrecognition. In: Proceedings of the 27th International Conference on Machine Learning(ICML-10). [S.l.: s.n.], 2010. p. 111–118.

BRITZ, D. Understanding Convolutional neural networks for NLP. [S.l.]: WildML, 2015.

BROWN, A. et al. Self Driving Car Simulator. [S.l.]: GitHub, 2017. <h�ps://github.com/udacity/self-driving-car-sim>.

CHOLLET, F. et al. Keras. [S.l.]: GitHub, 2015. <h�ps://github.com/fchollet/keras>.

CLEVERT, D.-A.; UNTERTHINER, T.; HOCHREITER, S. Fast and accurate deep networklearning by exponential linear units (ELUs). arXiv preprint arXiv:1511.07289, 2015.

DARPA. Defense Advanced Projects Agency. 2017. Último acesso em 13/12/2017. Disponívelem: <h�ps://www.darpa.mil/>.

GABRIEL, J. ao. Volkswagen e Nvidia fazem parceria para desenvolver IA alémdos carros autônomos. 2017. <h�ps://adrenaline.uol.com.br/2017/06/28/50413/volkswagen-e-nvidia-fazem-parceria-para-desenvolver-ia-alem-dos-carros-autonomos/>.Último acesso em 14/12/2017.

GOODFELLOW, I.; BENGIO, Y.; COURVILLE, A. Deep Learning. [S.l.]: MIT Press, 2016.<h�p://www.deeplearningbook.org>.

GOODFELLOW, I. et al. Generative adversarial nets. In: Advances in Neural InformationProcessing Systems. [S.l.: s.n.], 2014. p. 2672–2680.

HAYKIN, S. Neural networks: A comprehensive foundation. [S.l.]: Prentice Hall PTR, 1994.

HOCHREITER, S. Untersuchungen zu dynamischen neuronalen netzen. Diploma, TechnischeUniversität München, v. 91, 1991.

HOCHREITER, S. et al. Gradient flow in recurrent nets: The di�iculty of learning longtermdependencies. In: . A Field Guide to Dynamical Recurrent Networks. Wiley-IEEEPress, 2001. p. 464–. ISBN 9780470544037. Disponível em: <h�p://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5264952>.

HUNTER, J. D. Matplotlib: A 2d graphics environment. Computing In Science & Engineering,IEEE COMPUTER SOC, v. 9, n. 3, p. 90–95, 2007.

31

32

HUSSEIN, A. et al. Imitation learning: A survey of learning methods. ACM Comput. Surv.,ACM, New York, NY, USA, v. 50, n. 2, p. 21:1–21:35, abr. 2017. ISSN 0360-0300. Disponível em:<h�p://doi.acm.org/10.1145/3054912>.

IBOPE. Paulistano passa, em média, 1 mês e meio no trânsito por ano. 2016. <h�ps://veja.abril.com.br/brasil/paulistano-passa-em-media-1-mes-e-meio-no-transito-por-ano>.

KLUYVER, T. et al. Jupyter notebooks - a publishing format for reproducible computationalworkflows. In: ELPUB. [S.l.: s.n.], 2016.

LECUN, Y. et al. Backpropagation applied to handwri�en ZIP code recognition. Neuralcomputation, MIT Press, v. 1, n. 4, p. 541–551, 1989.

LITMAN, T. Autonomous Vehicle Implementation Predictions. 2017. <h�ps://www.vtpi.org/avip.pdf>. Último acesso em 13/12/2017.

MAAS, A. L.; HANNUN, A. Y.; NG, A. Y. Rectifier nonlinearities improve neural networkacoustic models. In: Proceedings International Conference on Machine Learning. [s.n.], 2013.v. 30, n. 1. Disponível em: <h�p://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf>.

MCCULLOCH, W. S.; PITTS, W. A logical calculus of the ideas immanent in nervous activity.The bulletin of mathematical biophysics, Springer, v. 5, n. 4, p. 115–133, 1943.

MCKINNEY, W. Data structures for statistical computing in python. In: WALT, S. van der;MILLMAN, J. (Ed.). Proceedings of the 9th Python in Science Conference. [S.l.: s.n.], 2010. p. 51– 56.

PACHECO, A. Redes Neurais Convolutivas – CNN. 2017. <h�p://www.computacaointeligente.com.br/artigos/redes-neurais-convolutivas-cnn/>. Último acesso em 13/12/2017.

PAGADALA, S. Deep Learning to Clone Driving Behavior. 2017. <h�ps://srikanthpagadala.github.io/serve/carnd-behavioral-cloning-p3-report.html>. Último acesso em 14/12/2017.

PANETTA, K. End to End Learning for Self-DrivingCars. 2017. <h�ps://www.gartner.com/smarterwithgartner/top-trends-in-the-gartner-hype-cycle-for-emerging-technologies-2017>. Último acesso em29/11/2017.

PEDREGOSA, F. et al. Scikit-learn: Machine learning in Python. Journal of Machine LearningResearch, v. 12, p. 2825–2830, 2011.

PHYLLIIDA. A list of cost functions used in neural networks, alongside applications. 2016. CrossValidated. URL:h�ps://stats.stackexchange.com/q/154880 (version: 2016-11-08). Disponívelem: <h�ps://stats.stackexchange.com/q/154880>.

PORMELAU, D. A. An Autonomous Land Vehicle In a Neural Network. 1989. <h�p://repository.cmu.edu/cgi/viewcontent.cgi?article=2874&context=compsci>. Último acessoem 13/12/2017.

PRATT, L. Y. Discriminability-Based Transfer between Neural Networks. 2017. <h�p://papers.nips.cc/paper/641-discriminability-based-transfer-between-neural-networks.pdf>.Último acesso em 14/12/2017.

33

REIS, L. Machine Learning: entendendo a evolução dos algoritmos. 2017.<h�p://blog.cedrotech.com/machine-learning-a-evolucao-dos-algoritmos/?gclid=EAIaIQobChMIq4Ta5ZWF2AIVVgWRCh1rBw29EAAYBCAAEgKcofD_BwE>. Último acessoem 12/12/2017.

ROSENBLATT, F. Principles of neurodynamics. perceptrons and the theory of brain mechanisms.Bu�alo, NY, USA, 1961.

ROSSUM, G. Python Reference Manual. Amsterdam, The Netherlands, The Netherlands,1995.

RUMELHART, D. E.; HINTON, G. E.; WILLIAMS, R. J. Learning internal representations byerror propagation. [S.l.], 1985.

SRIVASTAVA, N. et al. Dropout: A simple way to prevent neural networks from overfi�ing.Journal of Machine Learning Research, v. 15, n. 1, p. 1929–1958, 2014.

SUGA, N. Biosonar and neural computation in bats. Scientific American, v. 262, n. 6, p. 60–68,1990.

WALT, S. van der; COLBERT, S. C.; VAROQUAUX, G. The numpy array: A structure fore�icient numerical computation. Computing in Science Engineering, v. 13, n. 2, p. 22–30,March 2011. ISSN 1521-9615.

WAYMO. 2017. Último acesso em 13/12/2017. Disponível em: <h�ps://waymo.com/>.