Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
MEC - SETEC
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE
MATO GROSSO - CAMPUS CUIABÁ
DEPARTAMENTO DE ELETORELETRÔNICA
BACHARELADO EM ENGENHARIA DE CONTROLE E AUTOMAÇÃO
Cuiabá - MT
Fevereiro 2019
Dados Internacionais de Catalogação na Publicação CIP)
Biblioteca Orlando Nigro – Campus Cuiabá
Jorge Nazareno Martins Costa – CRB1 - 3205
Inclui referência.
001.64404
CDD –
CDU – 004.8
LUIZ FERNANDO SEDREZ ROSSATO
Cuiabá - MT
Fevereiro 2019
Ao meu pai, minha mãe, meus amigos e ao
meu amor Loyse Fiametti.
AGRADECIMENTOS
Aos meus amigos que sempre me ajudaram e apoiaram para que eu conseguisse
concluir o Curso
A minha namorada Loyse Fiametti, por todo apoio emocional, e por ajuda concluir este
TCC
Ao meu orientador, Prof. Dr. Mario Anderson de Oliveira, pela oportunidade que me
deu de trabalhar com ele, pela sua compreensão e pela dedicação em me ajudar a
concluir este trabalho.
Self-driving cars have become a new trend in the technology which promises great
benefits to humanity, like a significant reduction in traffic accidents and deaths, less
traffic, less traffic fines, more comfort and convenience. Nowadays, there are several
technologies involved in its operation, such as sensors, cameras and powerful brake
systems, making cars understand the world around itself. The cost of some sensors,
like LIDAR, has demanded cheaper alternatives. Hence, one of LIDAR's replaceable
candidates is the cameras along with the computer vision. The Convolutional Neural
Network (CNNs) are Machine Learning models that have achieved outstanding results
in a variety of computer vision tasks. In this sense, this work proposes the use of CNNs
to detect the runaway edges to guide the vehicle autonomously in a certain route. Also,
YOLO (You Only Look Once) is employed to detect traffic signals in real time. We
carried practical experiments out, revealing that CNNs can learn how to follow a track
or road with only images of its edges. Furthermore, YOLO shows a powerful and fast
tool to detect objects, in real time, in which it considers a crucial task for autonomous
driving.
RPi Raspberry Pi
CNN Convolutional Neural Network
DNN Deep Neural Network
DL Deep Learning
IA Inteligência Artificial
RELU Rectified Linear Unit
Sumário
1. Introdução ..................................................................................................... 12
2. Fundamentação Teórica............................................................................... 17
2.5. Python......................................................................................................... 38
2.5.5 OpenCv.................................................................................................. 42
3. Metodologia .................................................................................................. 45
4. Resultados e Discussão............................................................................... 67
5. Considerações Finais................................................................................... 85
Referências ............................................................................................................. 88
12
1. Introdução
Control), sendo que neste sistema o veículo acelera ou freia de acordo com o tráfego
a sua frente, além de evitar colisão frontal. Também, o mesmo identifica pontos cegos
e possível aproximação de pedestres a sua volta (MARSHALL, 2018). Outro sensor
bastante utilizado é o LIDAR. Este utiliza o mesmo princípio de funcionamento do
RADAR, ao invés de ondas de rádio, se utiliza laser, capaz de criar um mapa 3D
preciso com 360º graus entorno do veículo (FERREIRA, 2017). Uma das grandes
vantagens do Radar é seu bom funcionamento em condições climáticas adversas
como chuva, neve e neblina, casos onde o uso de câmeras e o LIDAR são ineficientes
(BARNARD, 2018). O sucesso do LIDAR para navegação autônoma consiste no seu
enorme alcance, cerca de 500 metros, permitindo prever com antecedência os limites
das pistas, ou se há sinais de trânsito e semáforos a frente além de conseguir detectar
objetos e obstáculos a sua volta (CAMERON, 2017). Em contraste, as câmeras
surgem como uma alternativa mais barata que o LIDAR, que tem um custo alto.
Câmeras são capazes de fornecer maiores detalhes além de ótima resolução bem
como permitem identificar sinais de trânsito e linhas das pistas (DAVIES, 2018). Elon
Musk (CEO da TESLA) é o maior entusiasta no uso de câmeras para condução de
veículos autônomos e, segundo ele, as câmeras podem realizar o trabalho com
precisão e consequentemente não há necessidade de se utilizar o LIDAR. O mesmo
acredita que as câmeras podem fazer o papel do olho humano com bastante acurácia
(JONES, 2018). Câmeras são sensores que fornecem apenas imagens e, para o
processamento dos sinais atualmente tem-se utilizado técnicas de aprendizado
profundo ou redes neurais para classificação do que é cada imagem representa e
tomar a decisão do que o veículo deve fazer. Tal processamento é realizado de forma
semelhante ao nosso cérebro, demandando assim um hardware poderoso para a sua
implementação (AUTOPILOT REVIEW, 2018).
Atualmente a utilização de redes neurais com aprendizado profundo tem se
tornado cada vez mais importante, principalmente na área da visão computacional, no
qual as redes neurais convolucionais (Convolutional Neural Networks - CNN) têm sido
utilizadas nas mais diversas aplicações. Marr (2018) explica que o aprendizado
profundo ensina máquinas a realizar tarefas que requer a inteligência humana, sendo
estas capazes de aprender assim como nós humanos. Para detecção e classificação
de imagens a CNN é considerada a mais promissora ferramenta, pois sua habilidade
de “enxergar” e classificar imita o cérebro humano em uma maior totalidade
(SAMPATH, 2018). A Nvidia, dois anos atrás, publicou uma demonstração de um
14
• Fazer sinais de trânsito, treinar a rede YOLO para sua identificação e testá-la
para tomadas de ações.
1.3. Justificativa
Este trabalho visa comprovar a vasta utilização da CNN, além de mostrar sua
aplicabilidade na condução autônoma de veículos, tecnologia esta que está se
aproximando cada vez mais de nossa realidade cotidiana. Neste contexto, tornam-se
indispensáveis estudos que abordam este tema no sentido de trazer os diversos
benefícios da direção autônoma tais como a redução de acidentes de trânsito
causados por falhas humanas, redução de trafego nas vias, conforto, mobilidade para
deficientes (físicos e visuais) para a vida cotidiana das pessoas.
A criação do protótipo integra diversas disciplinas estudadas ao longo do
presente curso: inteligência artificial, eletrônica analógica, microcontroladores,
eletrônica de potência, controle, sistemas embarcados e linguagens de programação.
Esta multidisciplinaridade faz com que esta pesquisa seja de extrema importância,
possibilitando ao estudante aprimorar e aplicar os seus conhecimentos em
experiências de aplicações práticas.
Em suma, estudar redes CNN permite ao estudante ter a vivência de
tecnologias recentes que certamente estará embarcada nos veículos autônomos que
estão/serão produzidos mundo afora. Recentemente, apesar do seu enorme
potencial, ainda há dúvidas da sua confiabilidade quando se trata de emprega-la em
veículos autônomos, pois implica em utilizar um computador para todas tomadas de
decisões durante a locomoção. Por isso, a realização de pesquisas e testes são
passos mais que necessários no sentido de se ter uma aplicação minimamente segura
aos usuários dos veículos autônomos.
A detecção de objetos é considerada uma tarefa crucial para a condução
autônoma. Além de exigir alta precisão para garantir a segurança, a detecção de
objetos para condução autônoma também requer velocidade de inferência em tempo
real para garantir controle rápido do veículo. Neste sentido a rede YOLO tem se
mostrando uma ferramenta bastante confiável para esta função.
16
2. Fundamentação Teórica
2.1. Raspberry Pi
2.1.1 GPIO
Fonte: (Clay,2017)
20
O RPi pode fornecer energia de 5 volts (pinos 2 e 4), 3,3 volts (pinos 1 e 17) e
cerca de 500 mA de corrente, já os pinos de aterramento (GND) são: 6, 9, 14, 20, 25,
30, 34 e 39.
A GPIO padrão é capaz de fornecer 3,3 volts em nível alto (HIGH) e 0 volts
quando o pino está em nível baixo (LOW). Podem ser utilizadas também como entrada
de no máximo 3,3 volts, que o pino irá ler como nível alto (HIGH), os pinos para as
finalidades citadas são praticamente todos, exceto os de alimentação e os pinos 27 e
28 (Buckley, 2018).
O PWM (Pulse Width Modulation) no qual é cotidianamente utilizado para se
controlar a quantidade de tensão enviada a um LED ou servo motores, por exemplo,
está disponível nos pinos 12 e 35 (Rezende, 2017).
O SPI permite que dispositivos se comuniquem com o RPi de forma síncrona,
ou seja, diversos dados passando entre mestre e escravo. Existem vários dispositivos
e extensões que utilizam à comunicação SPI, como o Sense HAT produto oficial da
comunidade Raspberry Pi que fornece uma matriz de LED e uma ampla variedade de
sensores (Buckley, 2018). O I2C permite uma comunicação assíncrona utilizada em
dispositivos como DAC ou LCD.
Figura 3 - Representação de uma rede neural simples e rede neural de aprendizagem profunda.
Fonte: (RAJAT,2018)
1
Φ(z) = (1)
1 + 𝑒 −𝑧
eficiente (GUPTA, 2017). A função de ativação ReLU é dada pela função 𝑓(𝑧) =
max(0, 𝑧) e seu gráfico está representado na Figura 7.
(Equação 2). Onde o 𝑤 são todos os pesos na rede, 𝑏 todos os bias, 𝑛 é o número
total de entradas de treinamento, 𝑎 é o vetor de saídas da rede e, 𝑥 é a entrada.
1
C(w, b) = ∑ ||𝑦(𝑥) − a ||2 (2)
2𝑛
𝑥
A equação (3) descreve o que a descida de gradiente faz. Onde 𝑏 será a próxima
posição do gradiente, 𝑎 representa a posição atual, o sinal negativo refere-se a parte
de minimização do gradiente de descida, o 𝛾 é um fator de espera, e o termo ∇ f(a) é
o gradiente que consiste em um vetor de direção íngreme.
b = a – γ ∇ f(a) (3)
28
Uma rede neural para ser considerada ótima não pode generalizar demais os
dados de treinamento, porém não pode ser muito especifico, sendo assim deve manter
o balanço entre os dois termos. Existem dois conceitos em Machine Learning que
resume bem cada situação: Underfitting e Overfitting.
Underfitting refere-se ao um modelo que não aprendeu muito bem os dados de
treinamento, e também não conseguiu generalizar para os dados de testes. Sua
ocorrência significa que o modelo não se ajustou bem aos dados. Geralmente isso
acontece quando há poucos dados de treinamento para construir um modelo preciso,
ou quando estamos tentando treinar um modelo linear com dados não-lineares. O
Underfitting pode ser evitado empregando maior quantidade de dados e também
alterando alguns parâmetros internos da rede.
Overfitting refere-se a um modelo que aprendeu muito bem o conjunto de dados
de treino, mas quando este modelo treinado é aplicado a um conjunto de teste obtém-
se um desempenho insatisfatório. Isso pode ocorrer quando se utiliza muitos dados
na geração do modelo, fazendo com que a rede passe a considerar atributos que não
deveria. Então, o modelo não categoriza os dados corretamente devido ao excesso
de detalhes e ruídos. Nesse caso devemos deixar o algoritmo mais livre para
conseguir generalizar melhor, aumentando dados que ofereçam situações ruins. Vale
ressaltar que nem sempre uma alta taxa de acerto no conjunto de treinamento diz
necessariamente que acontecerá o overfitting.
LeNet (LECUN et al., 1998) que fez a CNN se popularizar abrindo caminho para a
concepção de diversas outras arquiteturas como a OverFeat (SERMANET et al.,2013)
e GoogLeNet (SZEGEDY et al., 2015) (CULURCIELLO, 2017). Atualmente as redes
CNN são amplamente usadas principalmente para classificar imagens, reconhecer
objetos dentro de cenas, identificar rostos, sinais de transito e muitos outros aspectos
dos dados visuais (PRABHU, 2018).
A visão humana inicia-se nos olhos, mas a interpretação do que vemos
acontece no córtex visual primário, que consiste em uma estrutura hierárquica
profundamente complexa de neurônios e conexões no cérebro, nos permitindo, assim,
lembrar e rotular objetos (CORNELISSE, 2018). Nós humanos aprendemos a
classificar objetos desde crianças, de maneira semelhante funciona os computadores
fazendo necessário mostrar a um algoritmo imagens para aprender a classifica-la. A
maneira que os computadores “enxergam” é bem diferente da nossa, sendo que o
mundo dos computadores consiste apenas em números, cada imagem é representada
em matrizes bidimensionais de números (pixels).
O tamanho da matriz irá depender do tamanho da imagem, por exemplo, uma
imagem de dimensões 6x6x3, representando respectivamente altura, largura e o
canal, onde o valor 3 são as cores vermelho, verde e azul (RGB – Red, Green e Blue)
(representada na Figura 11). Esta figura mostra 3 matrizes 2D empilhadas (uma para
cada cor), cada uma com valores de pixel entre 0 a 255, por exemplo, a mistura das
3 cores em valor mínimo (0,0,0) resulta na cor preta, em valor máximo (255,255,255)
resulta na cor branca (KARN, 2016).
Redes neurais regulares possuem uma arquitetura diferente das CNN. Redes
Neurais regulares recebem uma entrada (em único vetor) e a transformam através de
uma série de camadas ocultas. Cada camada possui um conjunto de neurônios, e
cada neurônio está totalmente conectado a todos os demais neurônios da camada
anterior. A última camada está totalmente conectada e é chamada de camada de
saída, que representa as previsões (CORNELISSE, 2018). Redes Neurais regulares
não se tornam atrativas quando se trata de imagens maiores e coloridas (Figura 12).
Em um conjunto de dados de imagens preto e branco de dimensões 28 x 28, um único
neurônio na camada oculta totalmente conectada teria uma entrada de 784 pesos,
esta quantidade é gerenciável do ponto de vista computacional, mas claramente a
estrutura de uma rede neural regular não é dimensionada para imagens maiores. Por
exemplo, uma imagem colorida de dimensões 200 x 200, teria uma camada de entrada
de 200 x 200 x 3 = 120.000 pesos. Com vários neurônios em múltiplas camadas os
parâmetros iriam se acumular, sendo assim, essa total conectividade seria um
desperdício e o grande número de parâmetros poderia levar rapidamente ao
overfitting. A rede CNN é vantajosa para lidar com imagens, pois restringe
sensatamente a arquitetura da rede profunda, reduzindo drasticamente o número de
parâmetros em um modelo (BUDUMA, 2017).
quando o stride é 1, o filtro movera um pixel por vez, quando o stride é 2, o filtro irá
mover 2 pixels por vez, isso produzirá saídas menores (KARPATH, 2017). As vezes o
filtro não se encaixa perfeitamente em uma imagem de entrada, sendo assim é
aplicado o zero-padding, que preenche as bordas com valores de pixels iguais a 0
(PRABHU, 2018).
Um conceito importante presente nas CNNs é o compartilhamento de pesos,
na qual permite que em vez da rede aprender pesos específicos para cada região da
imagem, ela aprenda apenas um conjunto de filtros menores que poderá ser aplicado
a todas as regiões da imagem, reduzindo o número de parâmetros (KARPATH, 2017),
(WANG et al., 2012). Uma camada muito utilizada nas CNN é o pooling
(agrupamento), com o objetivo de reduzir de maneira agressiva a dimensionalidade
dos mapas de recursos, retendo as informações mais importantes (BUDUMA, 2017).
O pooling pode ser de diferentes tipos, sendo o mais utilizado o Max Pooling que dividi
uma matriz do mapa de recurso em uma dimensão e pegando o valor máximo da
região, conforme mostrado na Figura 15. Outra técnica bastante utilizada nas CNNs é
o dropout, que consiste em ignorar neurônios durante o processo de treinamentos, e
tem como objetivo de reduzir overffiting.
veículo localizado mais à direita, é realizada de maneira fácil, pois sua caixa
delimitadora está dentro da célula de grade. Já a caixa delimitadora da camioneta
cruza várias células de grade, para a localização o algoritmo YOLO pega o ponto do
meio da caixa delimitadora e o associa à célula da grade que o contém (ZHANG, 2018)
. Ainda na Figura 19 o parâmetro “pc” significa se há ou não há objetos, caso não
houver, ignora todos os demais parâmetros.
A identificação de dois objetos (Figura 20) em uma mesma célula grade torna-
se possível com o uso do conceito de caixas de âncora.
irá conter informações de dois objetos em cada célula de grade ao invés de uma,
conforme mostrado na Figura 21 (SHARMA, 2018). As predefinições das caixas
âncora podem ser de variadas formas, para que o modelo se especialize melhor,
durante o treinamento, podendo assim detectar objetos mais amplos como o carro, ou
mais altos como pedestres.
O YOLO não procura regiões interessadas em uma imagem que pode conter
algum objeto, em vez disso, divide a imagem em grades de células, em uma imagem
com 19 x 19 grades, onde cada célula será responsável por prever 5 caixas
delimitadoras gerando assim um número alto de 1805 caixas (MAJ, 2018). A maioria
dessas caixas terá pontuação de confiança muito baixa, uma delimitação de 30% faz
com que limpe caixas indesejadas, pois a probabilidade de determinado objeto estar
ali ou não, é muito baixa. O valor da delimitação pode ser alterado dependendo do
detector (HOLLEMANS, 2017). O conceito de limpeza denomina-se supressão não
máxima (Non-Max-Suppression) (Figura 23).
2.5. Python
Python foi criado por Guido Van Rossum no final dos anos 80 e sua primeira
versão 0.9.0 foi lançada em 1991. Assim como outras linguagens de programação, o
Python possui várias versões e atualmente se encontra na versão 3.x (WOLFE, 2018).
Com a popularização da linguagem Python, em 2001 foi criada a Python Software
Foundation (entidade sem fins lucrativos), mantida com patrocínios de grandes
empresas como a Google e a Microsoft. Esta possui uma grande comunidade aberta
para que a linguagem de programação se mantenha em constante evolução (SILVA,
2018).
39
Assim a importância que Python tem para a inteligência artificial (IA) engloba
todas as vantagens do próprio Python. Por ser uma linguagem de fácil aprendizagem
ela proporciona acessibilidade para desenvolvedores que não estão ligados à área de
40
2.5.1 TensorFlow
2.5.2 Keras
2.5.3 Tkinter
O Tkinter é uma interface padrão fornecida junto com o Python e vem dentro
de um kit de ferramentas Tk, mas também pode ser instalada separadamente do
Python em algumas distribuições do Linux, como, por exemplo, o Ubuntu e o Derbian.
Foi, anteriormente, desenvolvida pela Sun Labs e é utilizado para desenvolver
Interface Gráficas de Usuário (GUI). Várias plataformas apresentam pacotes de
ferramentas diferentes, mas as operações das mesmas não se diferem muito entre
elas. Sua principal função é criar uma interface rápida e fácil de aplicativos GUI
(EFFBOT, 2018) (TOWN, 2014).
O modulo Tkinter exporta apenas classes de widgets, e tem uma programação
chamada de orientada a eventos. Assim, cada interação do usuário com o aparelho,
como, por exemplo, apertar um botão, um atalho do teclado ou até mesmo uma tarefa
concluída em segundo plano são chamadas de eventos. Assim, as funções que
executam a ação em resposta a um evento são chamadas de manipuladoras de
evento (GEEKS, 2018).
2.5.4 Socket
2.5.5 OpenCv
2.5.6 Numpy
2.5.7 Matplotlib
3. Metodologia
Está seção descreve todos os passos da montagem do veículo que foi utilizado
para testes das redes neurais propostas (CNN e YOLO). Também é apresentado os
principais componentes utilizados para realização do mesmo. Todo o processo de
construção foi dividido em três partes: alocação do Raspberry pi 3 junto a câmera,
sistema de controle dos motores e alimentação. A construção do veículo se deu início
com a utilização de um chassi de carrinho de controle remoto pronto (Figura 28).
Placa
MDF
Para o controle dos motores se fez necessário o uso de uma ponte h, cuja sua
principal função é controlar o sentido dos motores (horário e anti-horário), para tal
finalidade foi escolhido o Driver Ponte H L298N. A escolha se deu devido seu fácil
manuseio e por possuir PWM (Pulse Width Modulation). Assim, por meio da variação
na largura do pulso de uma onda quadrada realizou-se o controle da velocidade dos
motores. A Tabela 2 apresenta algumas especificações do Driver Ponte H L298N.
48
Freio 5v 5v 5v 5v
Fonte: Próprio autor
Fonte: FILIPEFLOP.
Para não ter a necessidade de remover as baterias para desligar o Driver Ponte
H L298N foi adicionada uma chave de liga- desliga no circuito de alimentação (Figura
38).
Figura 2 da seção 2.1.1. É importante salientar que o GND (-) dos dois componentes
deve ser o mesmo, para que os pinos tenham a mesma referência e funcionem de
maneira correta.
Foram montadas duas pistas no piso utilizando fita crepe brancas. A primeira
foi utilizada para aquisição de dados e também para testes (Figura 42). A segunda
consiste em uma pista oval a qual foi utilizada apenas para obtenção da metade das
imagens utilizadas (Figura 43).
São três teclas designadas aos movimentos do carrinho: para mover-se para
frente usa-se “w”, para direita “e” e para esquerda “q”. Cada tecla irá gerar dois
comandos (tecla pressionada e tecla soltada). A importância de se enviar quando a
tecla é solta para o Raspberry Pi 3, se dá pela necessidade de desativar as GPIOs.
Por exemplo, ao pressionar a tecla “w” as GPIOs responsáveis pelo movimento de ir
para frente serão ativadas e permanecerão nesse estado, até receberem outro
comando para serem desativadas. Todos os comandos são gravados em um arquivo
de texto (“.txt”) da forma apresentada na Figura 45.
O treinamento da CNN tem como objetivo classificar três classes (reto, direita
e esquerda), com a finalidade de controlar os movimentos do veículo objetivando que
o mesmo complete o circuito proposto de forma autônoma. Para desenvolvimento da
aplicação da CNN, foi utilizada a linguagem de programação em Python, por possuir
58
4. Resultados e Discussão
Como apresentado na seção 3.2, foram construídas duas pistas, para aquisição
de dados para treinamento e testes. Assim, ao todo foram obtidos três conjuntos de
dados. A Tabela 6 mostra a composição de cada conjunto de dados e, em qual pista
à mesma foi obtida.
A pista 2 (Figura 43), como descrito na seção 3.2, consiste em uma pista oval,
onde foi utilizada apenas a metade da mesma para obtenção do conjunto de dados 3
(Tabela 6).
Os modelos obtidos após o treinamento dos três conjuntos de dados foram
inseridos no Raspberry pi 3, para realização de testes. Os testes realizados com cada
modelo da CNN foram divididos em três fases. Na primeira fase foram realizados
testes somente na pista 1 (Figura 42) com o modelo obtido do primeiro conjunto de
dados. A segunda fase utilizou-se o modelo obtido do segundo conjunto de dados, e
os testes feitos nas duas pistas. A última fase fora realizada testes apenas na pista 2
(Figura 43), com o terceiro conjunto de dados.
imagens relativamente diferentes ao se comparar com uma reta onde não há grandes
alterações (Frente).
Figura 58 - Análise de desempenho da CNN para o conjunto de dados 2: (a) acurácia para as fases
de treinamento e teste em função do número de épocas; (b) taxa de perda para as fases de
treinamento e teste em função do número de épocas.
(a)
(b)
O primeiro teste com o modelo CNN criado foi realizado na pista 1 (Figura 60)
que constitui em um percurso com começo e fim, sendo assim, o propósito inicial do
experimento consiste em verificar se o veículo construído completará tal trajetória. A
primeira avaliação se deu com o veículo em baixa velocidade, completando o caminho
sem necessitar de nenhuma intervenção, realizando tanto a curva para esquerda,
quanto para direita. Na segunda avaliação, foi verificada a capacidade de
processamento do Raspberry e quão rápida seria sua resposta. Para isso, aumentou-
se a velocidade do veículo que novamente completou o percurso com sucesso.
Figura 62 - Análise de desempenho da CNN para o conjunto de dados 3 (a) acurácia para as fases de
treinamento e teste em função do número de épocas; (b) taxa de perda para as fases de treinamento
e teste em função do número de épocas.
75
até o início da segunda curva, onde em seguida utilizou-se o comando para virar para
esquerda, obtendo assim imagens iguais para ambos os rótulos do início desta curva.
Os testes foram realizados apenas na pista 2 (43), tanto para curva a direita
quanto esquerda. Para o percurso com curvas para direita, o veículo completou duas
voltas, sem haver necessidade de intervenção, após isso, em uma curva já
completada duas vezes pelo carrinho, o mesmo acabou se perdendo, saindo da
delimitação da pista. O teste durou cerca de 105 segundos, com apenas uma
intervenção. Assim, aplicando-se a métrica da seção 4.1 obteve-se 97,15% de
autonomia. O trajeto para a curva da esquerda durou cerca de 114 segundos, com
apenas uma intervenção realizada, resultando em 97,4% de autonomia.
O fato de não usar imagens com várias posições diferentes, faz com que seja
necessária a correção do veículo em uma curva que o mesmo realizou sem tal
necessidade, explicitando assim que o modelo treinado não generalizou muito bem,
ou seja, não foi capaz de fazer a predição correta em uma situação menos favorável.
4.4. Dificuldades
acessarem a internet, isso fez com que ocorresse atrasos na aquisição de imagens e
não permitiu que o processamento do modelo da CNN já treinado fosse realizada no
computador. Como alternativa a fase teste foi realizada no RPi. As principais
consequências dos atrasos fizeram-se que o veículo facilmente errasse as predições,
saindo da pista. Uma comunicação mais rápida e livre de tais atrasos poderia
aumentar a performance da CNN em navegação autônoma, pois o poder de hardware
de um computador é muito maior que o do RPi.
A integração do YOLO em conjunto com a CNN não pode ser implementada
devido o processamento da CNN estar sendo realizado no RPi. Devido ao seu baixo
poder de processamento, torna-se impossível utilizar a câmera para obtenção de
frames a fim de classificar os movimentos ao mesmo tempo enviar as imagens através
da comunicação com roteador para o processamento da rede YOLO no computador
(que necessita de uma GPU poderosa para um bom funcionamento).
85
5. Considerações Finais
5.1. Conclusões
Propostas para continuidade e melhoria do projeto, são sugeridas nos seguintes tópicos:
IV. Tratar as imagens de treinamento, onde foque apenas nos trechos das pistas,
cortando o resto do ambiente, fazendo com que a CNN identifique melhor as
delimitações da pista.
V. Integrar o YOLO junto a classificação de direção do carrinho, realizando a detecção
de sinais de trânsito e se comportando a partir delas, por exemplo, parando em
semáforos, controlando a velocidade a partir de placas e desviando de obstáculos.
VI. Fazer uso do sensor ultrassônico para medir as distâncias dos objetos a ser
identificados pelo YOLO, para que o veículo tome decisões mais precisas.
VII. Treinar a CNN identificando graus do eixo de direção, fazendo com que se aumente
o número de rótulos de classificação, permitindo que o veículo tome decisões mais
precisas dentro da pista de testes.
VIII. Aumentar o grau de visibilidade da câmera a fim de obter imagens melhores para
treinamento e testes do YOLO e CNN.
88
Referências
AGRAWAL, Varun. Improving Real-Time Object Detection with YOLO: A new perspective
for real-time object detection. 2017. Disponível em: <https://statsbot.co/blog/real-time-
object-detection-with-yolo/>. Acesso em: 14 fev. 2019.
ARAUJO, Thayron. Raspberry Pi B+: Introdução a Porta GPIO. 2014. Disponível em:
<http://blog.fazedores.com/raspberry-pi-b-introducao-porta-gpio/>. Acesso em: 23 jan. 2019.
AWASTHI, Himanshu. Python Programming Language in AI. 2018. Disponível em:
<https://www.zeolearn.com/magazine/python-programming-language-in-ai>. Acesso em: 10
fev. 2019.
BROWNLEE, Jason. Introduction to Python Deep Learning with Keras. 2016. Disponível
em: <https://machinelearningmastery.com/introduction-python-deep-learning-library-keras/>.
Acesso em: 11 fev. 2019.
CHABLANI, Manish. YOLO—You only look once, real time object detection
explained. 2017. Disponível em: <https://towardsdatascience.com/yolo-you-only-look-once-
real-time-object-detection-explained-492dc9230006>. Acesso em: 23 jan. 2019.
89
DAVIES, Alex. How Do Self-Driving Cars See? (And How Do They See Me?). 2018.
Disponível em: <https://www.wired.com/story/the-know-it-alls-how-do-self-driving-cars-see/>.
Acesso em: 23 jan. 2019.
EMPIRES, Forge Of. How important it is to learn RaspberryPi (or any other SOC) for an
electronics student? 2015. Disponível em: <https://www.quora.com/How-important-it-is-to-
learn-RaspberryPi-or-any-other-SOC-for-an-electronics-student>. Acesso em: 23 jan. 2019.
FILIPEFLOP. Conversor Boost DC Ajustável Step Up. 2018. Disponível em: <
https://www.filipeflop.com/produto/conversor-boost-dc-step-up/>. Acesso em: 14 fev. 2019.
GALL, Richard. Why is Python so good for AI and Machine Learning? 5 Python Experts
Explain. 2018. Disponível em: <https://hub.packtpub.com/python-machine-learning-expert-
interviews/>. Acesso em: 10 fev. 2019.
GALVÃO, Celio. Carros autônomos: você acredita que vão dar certo? Saiba o que vem
por aí. 2018. Disponível em: <https://carros.ig.com.br/colunas/carros-do-celio/2018-03-
30/carros-autonomos.html>. Acesso em: 23 jan. 2019.
GUPTA, Tushar. Deep Learning: Feedforward Neural Network. 2017. Disponível em:
<https://towardsdatascience.com/deep-learning-feedforward-neural-network-
26a6705dbdc7>. Acesso em: 14 fev. 2019.
HEATH, Nick. What is deep learning? Everything you need to know. 2018. Disponível
em: <https://www.zdnet.com/article/what-is-deep-learning-everything-you-need-to-know/>.
Acesso em: 23 jan. 2019.
JONES, Brad. Elon Musk Calls Out LIDAR Tech as “A Crutch” in Autonomous
Vehicles: "You can absolutely be superhuman with just cameras.". 2018. Disponível em:
<https://futurism.com/elon-musk-lidar-tech-autonomous-vehicles>. Acesso em: 23 jan. 2019.
KERAS. Keras: The Python Deep Learning library. 2018. Disponível em:
<https://keras.io/>. Acesso em: 11 fev. 2019.
2019.
MANSANO, Alex Fernandes. O que é uma Rede Neural Convolucional? 2016. Disponível
em: <https://www.linkedin.com/pulse/o-que-%C3%A9-um-rede-neural-convolucional-alex-
fernandes-mansano>. Acesso em: 23 jan. 2019.
MARR, Bernard. What Is Deep Learning AI? A Simple Guide With 8 Practical
Examples. 2018. Disponível em:
<https://www.forbes.com/sites/bernardmarr/2018/10/01/what-is-deep-learning-ai-a-simple-
guide-with-8-practical-examples/#2cd3f0c68d4b>. Acesso em: 23 jan. 2019.
MARSHALL, Bill. Lidar, Radar & Digital Cameras: the Eyes of Autonomous
ME, Best Programming Language For. Why Learn Python? 2018. Disponível em:
<http://www.bestprogramminglanguagefor.me/why-learn-python>. Acesso em: 10 fev. 2019.
MILLER, Lachlan. Machine Learning week 1: Cost Function, Gradient Descent and
Univariate Linear Regression. 2018. Disponível em:
<https://medium.com/@lachlanmiller_52885/machine-learning-week-1-cost-function-
gradient-descent-and-univariate-linear-regression-8f5fe69815fd>. Acesso em: 14 fev. 2019.
MORRIS, Charles. Renault road-tests Level 4 autonomous EV. 2018. Disponível em:
<https://chargedevs.com/newswire/renault-road-tests-level-4-autonomous-ev/>. Acesso em:
23 jan. 2019.
NEWGENAPPS. 6 Reasons: Why choose Python for AI Projects?. 2017. Disponível em:
<https://www.newgenapps.com/blog/python-for-ai-artificial-intelligence-ml>. Acesso em: 10
fev. 2019.
NIELSEN, Michael A.. Neural Networks and Deep Learning. United States Of America:
Determination Press, 2015. Disponível em:
<http://neuralnetworksanddeeplearning.com/chap5.html>. Acesso em: 23 jan. 2019.
NUMPY. NumPy. 2018. Disponível em: <http://www.numpy.org/>. Acesso em: 11 fev. 2019.
RAMOS, Vinícius. Porquê Aprender Python: 5 Motivos para Começar Agora! 2018.
Disponível em: <https://pythonacademy.com.br/blog/porque-aprender-python-5-motivos-
para-aprender-agora>. Acesso em: 10 fev. 2019.
REDMON. Joseph et al .2016, Las Vegas. You Only Look Once: Unified, Real-Time
Object Detection. Las Vegas: IEEE, 2016. 10 p. Disponível em: <https://www.cv-
foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_20
16_paper.pdf>. Acesso em: 14 fev. 2019.
REVIEW, Autopilot. Lidar vs. Cameras for Self Driving Cars – What’s Best? 2018.
Disponível em: <https://www.autopilotreview.com/lidar-vs-cameras-self-driving-cars/>.
Acesso em: 23 jan. 2019.
SHARMA, Pulkit. A Practical Guide to Object Detection using the Popular YOLO
Framework – Part III (with Python codes). 2018. Disponível em:
<https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-
framewor-python/>. Acesso em: 14 fev. 2019.
SOLOMON, Brad. Python Plotting With Matplotlib (Guide). 2018. Disponível em:
<https://realpython.com/python-matplotlib-guide/>. Acesso em: 11 fev. 2019.
TERJE. Everything You Want to Know About Raspberry Pi GPIO: But Were Afraid to
Ask. 2018. Disponível em: <https://www.circuits.dk/everything-about-raspberry-gpio/>.
Acesso em: 23 jan. 2019.
94
UNRUH, Amy. What is the TensorFlow machine intelligence platform? Learn about the
Google-developed open source library for machine learning and deep neurais networks
research. 2017. Disponível em: <https://opensource.com/article/17/11/intro-tensorflow>.
Acesso em: 10 fev. 2019.
WANG, T. et al. End-to-end text recognition with convolutional neural networks. Pattern
Recognition (ICPR), 2012 21st International Conference on. [S.l.]: [s.n.]. 2012. p. 3304-3308.
ZHANG, Chengwei. Gentle guide on how YOLO Object Localization works with Keras (Part
1). 2018. Disponível em: <https://hackernoon.com/gentle-guide-on-how-yolo-object-
localization-works-with-keras-part-1-aec99277f56f>. Acesso em: 14 fev. 2019.
ZHANG, Chengwei. Gentle guide on how YOLO Object Localization works with Keras
(Part 2). 2018. Disponível em: <https://heartbeat.fritz.ai/gentle-guide-on-how-yolo-object-
localization-works-with-keras-part-2-65fe59ac12d>. Acesso em: 14 fev. 2019.