UNIVERSIDADE DE SAO PAULO˜ -...
Transcript of UNIVERSIDADE DE SAO PAULO˜ -...
UNIVERSIDADE DE SAO PAULOInstituto de Ciencias Matematicas e de Computacao
Reconhecimento de Gestos 3D utilizando o dispositivo
Kinect
Matheus Lin Truglio Alvarenga
Sao Carlos – SP
Reconhecimento de Gestos 3D utilizando o dispositivo
Kinect
Matheus Lin Truglio Alvarenga
Orientador: Fernando Santos Osorio
Monografia de conclusao de curso apresentada ao Instituto de
Ciencias Matematicas e de Computacao – ICMC-USP – para
obtencao do tıtulo de Bacharel em Engenharia de Computacao.
Area de Concentracao: Computacao Bioinspirada, Interacao
Usuario-Maquina, Robotica
USP - Sao Carlos
Novembro de 2011
Monografia de conclusao de curso sob o tıtulo “Reconhecimento de Gestos 3D utilizando
o dispositivo Kinect” apresentada ao Instituto de Ciencias Matematicas e de Computacao –
ICMC-USP – por Matheus Lin Truglio Alvarenga e aprovada em 17 de Novembro de 2011, em
Sao Carlos, Sao Paulo pela banca examinadora constituıda por:
Prof. Dr. Fernando Santos OsorioDepartamento de Sistemas de Computacao
Orientador
Prof. Dr. Julio Cezar EstrellaDepartamento de Sistemas de Computacao
Prof. Dr. Fernando Santos OsorioDepartamento de Sistemas de Computacao
O primeiro passo
para o futuro e imagina-lo.
Dedico
esta monografia a
meus pais, Paulo e Lin,
por todo o apoio e oportunidades
que me deram durante todos esses anos de graduacao e por toda a vida.
Dedico tambem, a minha namorada Thaıs, sempre ao meu lado desde que nos conhecemos.
Agradecimentos
Este trabalho de conclusao de curso certamente nao teria sido possıvel sem a participacao
de varias pessoas e amigos conhecidos durante a graduacao. Meus sinceros agradecimentos:
Aos professores do curso, com destaque aqueles que, com sua simpatia e metodos didaticos,
ensinaram conceitos importantes para a formacao do autor, tanto de forma tecnica quanto
com relacao a realizar analises crıticas. Agradecimentos especiais a Alysson Costa, Car-
los Maciel, Denis Wolf, Diogo Correa, Eduardo Simoes, Fernando Osorio, Gustavo Ba-
tista, Joao Batista Neto, Joao Navarro, Kalinka Castelo Branco, Marcos Santana, Maria
Cristina de Oliveira, Monica Rocha, Paulo Souza, Regina Santana, Sarita Bruschi, Si-
mone Souza, Rodrigo Andrade, Rodrigo Mello, Valdir Grassi Jr., Victor Ranieri.
Aos amigos, sem os quais este curso teria sido muito menos proveitoso e divertido. Agrade-
cimentos especiais a Andres Martano, Athila Quaresma, Bruno Alba, Bruno Tiba, Cassio
Matos, Ciro Gutierre, Daniel Luna, Felipe Coelho, Felipe Gomes, Gabriel Coelho, Gui-
lherme Hoshino, Joao Lucas do Val, Laercio Asano Jr, Luciano Falqueto, Luiz Fernando
Prado, Marcelo Mergulhao, Murillo Batista, Natassya Silva, Pedro Castellucci, Pedro
Pereira, Thiago Maziero, Tiago Casagrande, Vinıcius Madisson, entre tantos outros!
A minha namorada e companheira Thaıs, que esteve ao meu lado em muitos momentos
importantes do curso e de minha vida;
Alem desses, agradeco tambem a toda minha famılia e a Deus, pelo apoio, confianca e
oportunidades a mim depositados, sempre.
Sem a ajuda de todos voces, a experiencia unica de estudar nesta universidade nao seria tao
proveitosa e completa!
Resumo
Este projeto tem por objetivo utilizar o sistema ROS (Robot Operating System) e suas ferra-
mentas para classificar tres gestos simples desenvolvidos pela mao direita de um usuario. A
identificacao da pose e posicao do usuario e realizada pelo dispositivo eletronico Kinect c©,
que possui um sensor de profundidade capaz de mapear o ambiente a sua frente de forma tri-
dimensional. O uso de ferramentas do ROS permitem realizar a leitura dos sensores do Ki-
nect, enviando-as ao sistema aqui desenvolvido para extrair caracterısticas da movimentacao do
usuario. Atraves da realizacao dos movimentos a serem classificados, geram-se amostras de
treinamento e teste, utilizadas para realizar o aprendizado de uma rede neural artificial do tipo
MLP. Uma vez treinada, a rede e capaz de identificar os gestos realizados pelo usuario em tempo
real, permitindo o uso de comandos a distancia e sem o uso de equipamentos mecancios. Essa
possibilidade fornece um tipo atual de interface humano-maquina, criando uma interface mais
natural. Entre seus usos, destaca-se a area de jogos eletronicos, simulacoes e a possibilidade de
fornecer comandos a distancia para outros softwares ou ate mesmo aplicacoes roboticas.
Palavras-chave: Kinect, Artificial Neural Network, Perceptron, MLP, ROS, Gesture
Recognition, HCI
Sumario
Lista de Figuras p. III
Lista de Tabelas p. V
Lista de Abreviaturas p. VII
1 Introducao p. 9
1.1 Contextualizacao e Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . p. 9
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9
1.3 Organizacao do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 10
2 Revisao Bibliografica p. 11
2.1 Consideracoes Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
2.2 Interface com usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
2.3 O Kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
2.4 Ferramentas de Software para uso do Kinect - ROS . . . . . . . . . . . . . . p. 14
2.4.1 Estrutura de Comunicacao . . . . . . . . . . . . . . . . . . . . . . . p. 14
2.4.2 O Pacote de Demonstracoes do MIT . . . . . . . . . . . . . . . . . . p. 17
2.5 Reconhecimento de Gestos . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 17
2.6 Redes Neurais Artificiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19
2.6.1 O Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 20
2.6.2 O Aprendizado do Perceptron . . . . . . . . . . . . . . . . . . . . . p. 23
2.6.3 Aplicacoes do Perceptron . . . . . . . . . . . . . . . . . . . . . . . p. 26
2.6.4 MLP - Multi-Layer Perceptron . . . . . . . . . . . . . . . . . . . . . p. 26
2.6.5 O Aprendizado da MLP . . . . . . . . . . . . . . . . . . . . . . . . p. 27
2.6.6 Usos da MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 32
2.7 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 32
3 Desenvolvimento do Trabalho p. 33
3.1 Consideracoes Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
3.2 Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 33
3.3 Descricao das Atividades Realizadas . . . . . . . . . . . . . . . . . . . . . . p. 34
3.4 Resultados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 39
3.5 Dificuldades e Limitacoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 45
3.6 Consideracoes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 45
4 Conclusao p. 47
4.1 Contribuicoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 47
4.2 Consideracoes sobre o Curso de Graduacao . . . . . . . . . . . . . . . . . . p. 48
Referencias Bibliograficas p. 49
Lista de Figuras
2.1 Kinect e seus principais componentes. Fonte: (XBOX GAZETTE, 2011) . . . p. 12
2.2 openni tracker, detector de humanos. Fonte: (RUSU; CONLEY; FOOTE,
2011) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 13
2.3 Sequencia tıpica de criacao de topicos, uso do no ROS Master . . . . . . . . p. 15
2.4 Captura de tela do detector de maos. Fonte: (SUENDERHAUF; NEUBERT;
GALLAGHER, 2011) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 17
2.5 Representacao do neuronio biologico, adaptado de (JAROSZ, 2009) . . . . . p. 19
2.6 Modelo do Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 20
2.7 Exemplo de classificacao do Perceptron: IMC . . . . . . . . . . . . . . . . . p. 21
2.8 Efeito da variacao dos parametros a) pesos e b) bias . . . . . . . . . . . . . . p. 22
2.9 Exemplos de funcoes de ativacao: sigmoid (vermelho) e tanh (verde) . . . . . p. 25
2.10 Representacao de MLP de 3 camadas . . . . . . . . . . . . . . . . . . . . . p. 27
2.11 Funcoes com a) um unico mınimo e b) varios mınimos . . . . . . . . . . . . p. 30
2.12 Navalha de Occam: selecionando a solucao correta . . . . . . . . . . . . . . p. 31
3.1 Movimentos a serem classificados: a) circle, b come here e c) goodbye . . . . p. 33
3.2 Visao dos topicos e nos do ROS durante aquisicao de dados . . . . . . . . . . p. 38
3.3 Erros x epoca, variando-se o numero de neuronios da camada escondida . . . p. 43
3.4 Erros x epoca, variando-se a taxa de erro maxima para treinamento . . . . . . p. 43
3.5 Erros x epoca, variando-se o passo de aprendizado α . . . . . . . . . . . . . p. 44
3.6 Erros x epoca, variando-se o fator de momento . . . . . . . . . . . . . . . . p. 44
Lista de Tabelas
3.1 Resultado do teste de Validacao Cruzada . . . . . . . . . . . . . . . . . . . . p. 41
3.2 Resultado do teste com dados de uso real . . . . . . . . . . . . . . . . . . . p. 42
Lista de Abreviaturas
ROS Robot Operating System, um projeto open source com ferramentas deapoio ao desenvolvimento da robotica;
MLP Multi-Layer Perceptron, nome dado a rede neural artificial de multiplascamadas que faz uso de neuronios do tipo Perceptron;
USB Universal Serial Bus, interface padronizada de hardware;MIT Massachussets Institute of Technology, desenvolvedora de alguns paco-
tes ROS utilizados neste projeto;OCR Optical Character Recognition, reconhecimento de caracteres opticos
(uso de uma camera, por exemplo);HCI Human Computer Interface, forma de comunicacao entre usuarios e
maquinas;SDK Software Development Kit, ferramentas de desenvolvimento de soft-
ware.
9
1 Introducao
1.1 Contextualizacao e Motivacao
A area de pesquisas de HCI buscam novas formas de permitir que diferentes usuarios in-
terajam com diversas apliacoes. Dentro dessa area, encontram-se areas de pesquisa em reco-
nhecimento de gestos, disponibilizando uma forma natural e intuitiva de fornecer comandos ao
computador ou aplicacao.
Um novo dispositivo, Kinect, possui recursos para permitir o reconhecimento de gestos
de humanos, atraves de sensores de profundidade, capazes de gerar um mapeamento em 3
dimensoes. Algumas bibliotecas recentes (ROS) permitem utilizar esses recursos, fornecendo
informacoes valiosas para a determinacao de pose e posicao de usuarios.
O uso de redes neurais artificiais permite o reconhecimento de padroes atraves de um
metodo simples e eficaz, de modo que pode ser aplicado a leituras do Kinect para determinar
gestos realizados pelo usuario. Esses gestos poderiam ser utilizados para diversas aplicacoes,
inclusive na robotica, podendo fornecer comandos a robos sem o uso de dispositivos mecanicos
como teclados, joysticks ou controles remotos.
1.2 Objetivos
Este projeto visa desenvolver um software capaz de utilizar o Kinect para detectar os gestos
(sequencia de posicoes ou deslocamentos) realizados pela mao direita de um usuario. Planeja-
se que o software seja capaz de reconhecer pelo menos 3 tipos distintos de movimento. Alem
disso, espera-se que a fase de treinamento da rede seja rapida e seu resultado obtenha uma alta
10 1 Introducao
taxa de acerto (classifique corretamente pelo menos 90% dos gestos realizados, desde que sejam
gestos que a rede tenha sido treinada para reconhecer).
1.3 Organizacao do Trabalho
Esta monografia foi redigida segundo a seguinte estrutura: No capıtulo 2, ha uma Revisao
Bibliografica, que introduz, explica e exemplifica conceitos importantes para o desenvolvimento
do trabalho: Interfaces com usuario; detalhes do inovador dispositivo Kinect; ROS, uma ferra-
menta para utilizar o dispositivo, bem como a estrutura de comunicacao entre aplicativos que
a utilizam; a importancia e relevancia do reconhecimento de gestos em HCI; finalizando com
Redes Neurais artificiais, algumas tecnicas de melhoria de resultados e modo de avaliacao.
O Capıtulo 3 apresenta a descricao das etapas desenvolvidas, seguidas do detalhamento
de sua execucao e resultados obtidos. Descreve, tambem, as dificuldades encontradas para o
desenvolvimento do projeto.
Por fim, o capıtulo 4 conlui o projeto, citando as contribuicoes deste trabalho para o meio
academico e contribuicoes do desenvolvimento do projeto para o autor, como pessoa. Cita,
tambem, a visao do autor com relacao ao curso de graduacao da Engenharia da Computacao.
Alem disso, sugere-se algumas atividades que possam utilizar-se deste trabalho como base para
aplicacoes maiores.
11
2 Revisao Bibliografica
2.1 Consideracoes Iniciais
As secoes a seguir sao importantes para a compreensao deste projeto, fornecendo a base
teorica de seu funcionamento. Os assuntos tratados envolvem interfaces com usuarios, reco-
nhecimento de gestos, Redes Neurais do tipo MLP (Multi-Layer Perceptron) e o projeto ROS
(Robotic Operational System).
2.2 Interface com usuario
A area de HCI (Human Computer Interface, Interface Usuario-Computador ou usuario-
maquina) tem sido desenvolvida no sentido de facilitar a comunicacao entre usuarios e aplicacoes
eletronicas, facilitando o uso de computadores e maquinas e exigindo menos conhecimento
tecnico para uso dessas aplicacoes, atraves de interfaces mais naturais e intuitivas.
Desenvolvimentos recentes de dispositivos compostos por acelerometros, giroscopios e no-
vos meios de comunicacao sem fio permitiram a criacao de novos equipamentos eletronicos
para essa interface. Entre as eles, destacam-se:
Wii Remote c©: controle remoto do vıdeo-game Wii c©, da Nintendo c©, dotado de acelerometros
e sensores infra-vermelho; e capaz de comunicar ao console sua pose e posicao, permi-
tindo mimetizar os movimentos do jogador dentro do jogo. Para seu funcionamento no
jogo, e necessario um emissor de luz infravermelha localizado acima ou abaixo da tela.
Utilizando esse emissor, o controle remoto e capaz de estimar sua distancia. Para uso
somente dos acelerometros, contudo, nao se faz necessario esse emissor. O Wii Remote
12 2 Revisao Bibliografica
comunica-se utilizando a tecnologia sem fio Bluetooth.
Playstation Move c©: controle de aparencia similar a um microfone, desenvolvido para uso
com o console Playstation 3 c©, da Sony c©. Dotado de acelerometros, e capaz de estimar
sua posicao angular e, atraves de uma camera especial (Playstation Eye c©) localizada
acima ou abaixo da tela, estima-se tambem sua posicao. Esse conjunto realiza intenso uso
de processamento de imagens para realizar as estimativas. A comunicacao do controle e
feita atraves da tecnologia sem fio Bluetooth.
Kinect c©: dispositivo periferico do console XBOX 360 c©, da Microsoft c©, nao requer uso de
um dispositivo mecanico para interacao com usuario. Dotado de um sensor de profundi-
dade com uso de uma grade de pontos infra-vermelho, e capaz de mapear o ambiente a sua
frente, podendo reconhecer e rastrear os movimentos do usuario. Ha um detalhamento
mais aprofundado sobre este dispositivo na proxima secao.
2.3 O Kinect
Figura 2.1: Kinect e seus principais componentes. Fonte: (XBOX GAZETTE, 2011)
Conhecido previamente como “Project Natal” , o Kinect (Figura 2.1 e um dispositivo de-
senvolvido principalmente para uso em jogos eletronicos do console XBOX 360 c©, da Micro-
soft c©, lancado em Novembro de 2010. Atualmente, mantem o record mundial de disposi-
tivo eletronico mais rapidamente vendido, alcancando a marca de 8 milhoes de vendas em 60
2.3 O Kinect 13
dias (GUINNESS WORLD RECORDS, 2011). Dotado de uma camera RGB, um sensor de
profundidade capaz de mapear o ambiente em 3 dimensoes, microfones, um motor para alterar
seu angulo de visao e interface USB 2.0, outras areas, como a Robotica, podem fazer bom uso
do dispositivo. Em Junho de 2011, a Microsoft lancou um SDK nao comercial para Windows, e
outra versao comercial mais tarde. (MICROSOFT, 2011)
Os sensores de profundidade 3D, porem, foram desenvolvidos pela empresa PrimeSense
(PRIME SENSE, 2011), que juntou-se a outras duas empresas para desenvolver o projeto
openni kinect (RUSU; CONLEY; FOOTE, 2011), como um pacote para o ROS, disponi-
bilizando drivers e ferramentas open source para seus sensores, compatıvel com os sensores
presentes no Kinect. A primeira versao do openni kinect foi publicada em Marco de 2011,
para a versao Diamondback do ROS. Em Julho de 2011, foi lancado o openni tracker, capaz
de reconhecer um humano e acompanhar seus movimentos, estimando-se a posicao de algumas
juntas do corpo (como pescoco, ombros, cotovelos e maos). Esse modulo e amplamente utili-
zado em inumeras outras aplicacoes, pois e uma forma rapida e eficiente de rastrear o usuario.
A Figura 2.2 mostra uma captura de tela da aplicacao de rastrear humanos.
Figura 2.2: openni tracker, detector de humanos. Fonte: (RUSU; CONLEY; FOOTE, 2011)
De posse desses drivers e modulos, o Kinect torna-se uma ferramenta bastante flexıvel
quanto ao uso, podendo servir como scanner 3D para modelar ambientes ou objetos fısicos e
para reconhecer gestos e movimentos, fornecendo uma interface mais “natural” entre o usuario
e o computador.
14 2 Revisao Bibliografica
2.4 Ferramentas de Software para uso do Kinect - ROS
Segundo o site oficial, “ROS (Robot Operating System) prove bibliotecas e ferramentas
para auxiliar desenvolvedores de software na criacao de aplicativos roboticos. Ele disponibi-
liza abstracao de hardware, drivers para dispositivos, bibliotecas, visualizadores, passagem de
mensagem, gerenciador de pacotes e mais. ROS esta sob uma licenca open source, a BSD
license.” (WILLOW GARAGE, 2009) (em traducao livre).
O projeto ROS foi escolhido como base para o desenvolvimento deste projeto por disponibi-
lizar uma estrutura de comunicacao entre processos, por possuir drivers e ferramentas para uso
do dispositivo Kinect, por ser open source, possuir uma plataforma com suporte a mais de uma
linguagem (C++, python e lisp), por tratar-se de um projeto de suporte a robotica e por disponi-
bilizar acesso a outras bibliotecas populares no mundo da robotica, como a OpenNI e OpenCV.
Alem disso, e possıvel encontrar varias ferramentas desenvolvidas com uso do ROS que forne-
cem suporte ao desenvolvimento de outras aplicacoes, como o caso do pacote de demonstracoes
do MIT.
A seguir, explica-se a estrutura basica de comunicacao do ROS.
2.4.1 Estrutura de Comunicacao
A comunicacao entre processos e abstraıda como uma estrutura de “topicos” (topics) e
“nos” (nodes). Em baixo nıvel, a comunicacao e realizada ponto-a-ponto (peer-to-peer). Alem
disso, permite-se o uso de “servicos” (services) e “clientes” (clients). Em linhas gerais, toda
aplicacao e um “no”. Os nos podem enviar e receber mensagens atraves de topicos, similar-
mente a um forum da web: um no pode “inscrever-se” (subscribe) em um topico. Assim,
cada vez que uma mensagem for publicada (published) naquele topico, todos os nos nele inscri-
tos receberao a mesma mensagem, executando uma rotina de callback para tratar a mensagem
recebida.
O gerenciamento de inscricoes e publicacoes e realizado pelo ROS Master, um no que prove
servicos de nomeamento (naming) e registros (registering) para os demais nos: sempre que um
2.4 Ferramentas de Software para uso do Kinect - ROS 15
no declara sua intencao de publicar mensagens num determinado topico, ele notifica o mestre.
Sempre que um no se inscreve num topico, o mestre e notificado. Quando ha pelo menos um
no registrado para publicar e pelo menos um no para receber as mensagens no mesmo topico,
o mestre os notifica para que possam localizar um ao outro e realizar a troca de mensagens. O
papel do mestre, e “permitir que nos individuais encontrem um ao outro” (WILLOW GARAGE,
2009). A Figura 2.3 mostra um esquema de publicacao e inscricao com uso do Mestre, por um
no que representa uma camera digital (Camera) que publica imagens no topico “images”, e
outro no recebe essas imagens (Image viewer).
Figura 2.3: Sequencia tıpica de criacao de topicos, uso do no ROS Master
O no mestre tambem prove um servidor de parametros (Parameter Server), usado por ou-
tros nos para armazenar e recuperar parametros em tempo de execucao. Esses parametros sao
disponibilizados de forma global, facilitando que ferramentas inspecionem e alterem os valores
dos parametros, se necessario (WILLOW GARAGE, 2009).
Alguns comandos auxiliares para uso do ROS incluem:
roscd [pacote]: muda o diretorio de trabalho para o diretorio raiz do [pacote];
rostopic list: lista todos os topicos ativos no momento;
rosnode list: lista todos os nos ativos no momento;
rosservice list: lista todos os servicos disponıveis no momento;
rosrun [pacote] [alicativo]: Executa o [aplicativo] do [pacote];
16 2 Revisao Bibliografica
roslaunch [pacote] [script.launch]: Executa um script de lancamento de um aplicativo, po-
dendo conter a inicializacao de varios nos, requisitar servicos e ajustar ou ler parametros.
Os tipos de mensagens enviadas em topicos e utilizadas em servicos deve ser definido
quando o mesmo e criado. E possıvel utilizar tipos ja existentes ou definir novos tipos de
mensagem, criando-se um arquivo especıfico com a definicao da mesma. Essa definicao e feita
escrevendo-se num arquivo os tipos e nomes dos “componentes” da mensagem. Por exemplo,
uma mensagem para definir um ponto x,y,z do espaco teria 3 campos (um em cada linha) defi-
nindo seu tipo (por exemplo, float) com os nomes desses campos (x, y, z). O Codigo 2.1
apresenta um arquivo de mensagem do tipo Point.msg, do pacote geometry msgs:
Codigo 2.1: Exemplo de mensagem: Point.msg� �# Th i s c o n t a i n s t h e p o s i t i o n o f a p o i n t i n f r e e s p a c ef l o a t 6 4 xf l o a t 6 4 yf l o a t 6 4 z� �
Os componentes de uma mensagem podem ser tipos de dados primitivos, vetores de tipos
primitivos, outras mensagens ou mesmo vetores de outras mensagens. Para que um tipo de
mensagem seja utilizada como parte de outro tipo, deve-se declarar o pacote de origem e o
tipo da mesma. Se o tipo de mensagem for do mesmo pacote, nao e necessario informar o
pacote de origem. A excecao e o tipo Header (utilizado para controle de sequenciamento de
mensagens): se for inserido como primeiro componente da mensagem e considerado como
std msgs/Header. (WILLOW GARAGE, 2009)
O ROS tambem disponibiliza uma ferramenta para gravacao e reproducao de mensagens,
atraves do comando rosbag. Esse comando pode gravar uma sequencia de mensagens que
sejam enviadas em todos os topicos ou somente em um topico especıfico, gerando um arquivo
com extensao .bag. Esse arquivo pode ser reproduzido, gerando as mesmas mensagens na
mesma ordem e instantes (relativos ao inıcio da gravacao) em que ocorreram durante a gravacao,
sendo uma ferramenta util em testes e demonstracoes.
2.5 Reconhecimento de Gestos 17
2.4.2 O Pacote de Demonstracoes do MIT
O pacote de demonstracoes do Massachusets Institute of Technology (MIT) para o ROS
pode ser encontrado na web, tambem sob licenca BSD (SUENDERHAUF; NEUBERT; GAL-
LAGHER, 2011). Em seus destaques, encontram-se pacotes que fazem uso do Kinect, capazes
de identificar maos e dedos (de humanos), tocador de piano virtual, um robo acompanhante (que
acompanha um humano, tendendo a ficar sempre uma mesma distancia dele ou dela) e uma in-
terface com usuario para manipular imagens inspirada numa cena do filme Minority Report c©.
Como ferramental utilitario, o pacote do MIT disponibiliza pacotes de identificacao es-
queletica (skeletal tracker), alem de mensagens especıficas para para escrita em topicos
(pacote body msgs). A Figura 2.4 exibe uma captura de tela do aplicativo de deteccao de maos.
Figura 2.4: Captura de tela do detector de maos. Fonte: (SUENDERHAUF; NEUBERT; GAL-LAGHER, 2011)
2.5 Reconhecimento de Gestos
Em varias situacoes, seria conveniente que o computador compreendesse as intencoes do
usuario de formas mais simples que digitando comandos ou clicando em diversos menus su-
18 2 Revisao Bibliografica
cessivos. Por exemplo, um clique e um arrasto (um traco) com o mouse poderiam voltar uma
pagina do seu web browser, regular o zoom da imagem para que ajuste-se ao tamanho da ja-
nela ou mudar a formacao de suas unidades militares de um jogo de estrategia. Outro traco,
diferente, poderia salvar uma imagem da pagina visitada, salvar seu documento ou ordenar uma
nova construcao no jogo.
Embora comumente ja existam outros modos de se realizar essas acoes, novas formas, mais
rapidas, simples ou que utilize outro dispositivo, podem melhorar a experiencia do usuario
com a aplicacao, reduzindo o tempo gasto com tarefas simples que demandam muitos cliques,
troca de dispositivos (teclado e mouse, por exemplo) ou movimentos precisos e lentos. Uma
forma comum de acelerar essas tarefas sao as teclas de atalho/hotkey, combinacoes de teclas
que, quando pressionadas conjuntamente, realizam algumas dessas tarefas. Reconhecer gestos
podem, tambem, fornecer ao usuario uma imersao maior na aplicacao, principalmente no caso
de um jogo ou simulacao, fazendo com que sinta-se em outro ambiente.
Nesse sentido, um “gesto” e uma sequencia de movimentos que segue um determinado
padrao. Por exemplo, para reconhecimento de gestos com o mouse, um metodo encontrado em
extensoes e plug-ins de alguns web browsers e: pressionar e segurar o botao direito do mouse
(identifica inıcio de padrao), arrasta-lo seguindo formas pre-definidas (identificacao do padrao),
liberacao do botao direito (evento que encerra o padrao). Os deslocamentos do mouse enquanto
o botao direito do mouse e mantido pressionado sao registrados e comparados, de alguma forma,
aos padroes pre-definidos. Uma vez identificado o padrao realizado, alguma acao pre-definida
e realizada, por exemplo executando-se um script. Exemplos uteis incluem: “ir para a pagina
inicial”, “voltar uma pagina” ou “fechar uma aba”.
Porem, esses padroes dificilmente sao executados exatamente da mesma forma pelos usuarios:
um deslocamento horizontal dificilmente possui apenas componentes horizontais. Assim, para
tornar-se utilizavel, aplicativos de reconhecimento de gestos devem possuir uma tolerancia
aceitavel de erros no reconhecimento de padroes.
Uma ferramenta computacional atualmente popular utilizada para reconhecimento de padroes
sao as redes neurais artificiais, descritas na proxima secao. Entre suas caracterısticas, a classificacao
2.6 Redes Neurais Artificiais 19
aceita pequenas variacoes em suas entradas, mantendo uma alta taxa de acerto.
2.6 Redes Neurais Artificiais
Segundo (HAYKIN, 1998), “Redes Neurais Artificiais sao modelos matematicos que se
assemelham as estruturas neurais biologicas e que tem capacidade computacional adquirida
por meio de aprendizado e generalizacao”. Uma rede neural artificial e um sistema inspirado no
conceito do neuronio biologico e a rede formada por celulas desse tipo. Os neuronios biologicos
sao celulas do sistema nervoso, capazes de receber, processar e enviar sinais eletricos. A Fi-
gura 2.5 exibe uma representacao de um neuronio biologico, apresentando apenas o nome das
regioes mais importantes para os neuronios artificiais.
Figura 2.5: Representacao do neuronio biologico, adaptado de (JAROSZ, 2009)
Os dendritos sao terminais “de entrada” do neuronio, por onde recebe sinais eletricos, vin-
dos de outros neuronios ou outras celulas especiais, principalmente sensoriais (como celulas
sensıveis a luz, som ou toque) ou do sistema nervoso central (cerebro, cerebelo e medula es-
pinhal). O nucleo atua como uma unidade de processamento dos sinais de entrada recebi-
dos: os pulsos eletricos recebidos variam o potencial eletrico da membrana da celula. Quando
esse potencial ultrapassa um determinado limiar, o neuronio e “ativado”, emitindo um sinal
eletrico atraves do axonio. E importante salientar que os neuronios obedecem a regra do “tudo-
ou-nada”: se um neuronio responde aos estımulos, responde com intensidade maxima; caso
contrario, nao responde (observe a similaridade com a funcao matematica “degrau unitario”).
Isto e: mesmo com mais estımulos (ou mais intensos), sua resposta nao tera maior intensi-
20 2 Revisao Bibliografica
dade, embora possa ser enviada com maior frequencia. As respostas geradas seguem ao longo
do axonio, chegando a seus terminais, onde podem haver conexoes com dendritos de outros
neuronios ou celulas especiais (como musculos, indicando que devem ser contraıdos, por exem-
plo). Dessa forma, os terminais do axonio atuam como terminais “de saıdas” do neuronio.
Inspirado nesses conceitos, McCullouch e Pitts propuseram, em 1943, um modelo compu-
tacional baseado em neuronios, chamado “Threshold Logic” (a “logica do limiar”). Na decada
de 1940, o psicologo Hebb propos a hipotese de que seria possıvel aprender baseado na ca-
pacidade do cerebro de se remodelar em funcao das experiencias do sujeito, reformulando as
conexoes em funcao das necessidades e fatores do ambiente. Em 1958, o psicologo Rosenblatt
propos o modelo Perceptron, um classificador linear e binario.
2.6.1 O Perceptron
Um neuronio artificial, ou Perceptron, e um modelo matematico que representa o neuronio
biologico, adaptado para uso na matematica e na computacao. A Figura 2.6 exibe seu modelo
matematico.
Figura 2.6: Modelo do Perceptron
Esse modelo e capaz de classificar um conjunto de entrada entre duas classes, utilizando-se
a equacao de um hiperplano do espaco de busca. (Nota: um hiperplano e uma generalizacao de
um “plano”, que divide o espaco (3 dimensoes) em duas regioes; dessa forma, um hiperplano
para um espaco de 2 dimensoes (”plano”) e uma reta, pois divide o plano em 2 regioes).
Como caso ilustrativo, a Figura 2.7 apresenta a resposta de um Perceptron, capaz de dife-
renciar duas classes, num espaco de duas dimensoes. Por exemplo, o IMC (Indice de Massa
2.6 Redes Neurais Artificiais 21
Corporal) e uma medida internacional para estimar se uma pessoa apresenta-se dentro de seu
peso ideal. O IMC e calculado como sendo:
IMC[kg/m2] =Massa[kg]
Altura2[m2]
Dependendo do sexo da pessoa e da faixa de valores em que se encontra esse ındice, a
pessoa pode ser considerada “abaixo do peso”, “saudavel”, “acima do peso” ou diferentes graus
de “obeso”. Dessa forma, e possıvel implementar um Perceptron que receba como entrada a
altura ao quadrado e a massa de uma pessoa e determinar se esta “obesa” ou “nao-obesa” (duas
classes). Na figura 2.7, os pontos verdes (acima da reta tracejada) representariam pessoas obesas
e os vermelhos (abaixo da reta tracejada) pessoas nao-obesas. Observe como uma unica reta
(hiperplano) pode separar as entradas em dois grupos.
Figura 2.7: Exemplo de classificacao do Perceptron: IMC
As equacoes de hiperplanos para hiperespacos de n dimensoes sao da forma:
w1x1 +w2x2 + . . .+wnxn +b = 0
Para um caso de duas dimensoes, tem-se:
w1x+w2y+b = 0
22 2 Revisao Bibliografica
ou
y = wx+b
sendo x uma das dimensoes, y a segunda dimensao, w, w1 e w2 sao pesos das variaveis que
multiplicam e b uma constante denominada “bias”.
Dessa forma, pontos que estejam acima da reta sao rotulados como pertencendo a uma
classe e os pontos abaixo pertencem a outra classe. A figura 2.6 representa, tambem, o esquema
de um perceptron: valores reais sao fornecidos para o perceptron (entrada1 e entrada2);
esses valores sao multiplicados por pesos (w1 e w2) e somados ao bias. Sobre o resultado
dessa soma, aplica-se uma funcao de ativacao (funcao f (x) ). Essa funcao retorna um valor
1, caso a soma obtida seja maior que zero; retorna 0 caso contrario (funcao degrau unitario).
Esse resultado e, entao, emitido na saıda. A representacao da Figura 2.6 ilustra um caso com 2
entradas, mas pode-se generalizar para um numero qualquer de entradas.
Convem notar, tambem, que a equacao do hiperplano que classifica corretamente os dados
nao e unica: variacoes no vetor de pesos e no bias podem mudar a inclinacao e posicao do
hiperplano que separa as classes, mas, ainda assim, podem classificar as entradas corretamente.
A figura 2.8 ilustra essas situacoes, variando-se a) os pesos e b) o bias.
Figura 2.8: Efeito da variacao dos parametros a) pesos e b) bias
2.6 Redes Neurais Artificiais 23
2.6.2 O Aprendizado do Perceptron
O aprendizado do Perceptron e um algoritmo iterativo que, atraves de exemplos de classificacao
(contendo as entradas e as respectivas saıdas esperadas) varia os valores dos pesos e bias, de
modo a encontrar um conjunto de parametros capaz de classificar as entradas conforme as saıdas
esperadas.
Para o aprendizado, utiliza-se um conjunto de entradas e saıdas denominado “conjunto
de treinamento”, contendo exemplos do que deve ser classificado e suas classificacoes. Para
avaliar-se a eficiencia do perceptron para uma rodada de treinamento, utiliza-se o erro quadratico
medio ε:
erro j = res j− y j(t) = res j− f (net j)
ε =1N
N
∑j=1
((res j− y j)2)
onde j indica o numero da tuplas de entrada, N a quantidade de tuplas de entradas, y j e o
resultado obtido para a tupla j e res j e o resultado esperado para a entrada j.
Esta medida fornece uma estimativa do erro para cada classificacao. Utiliza-se um erro
quadratico para evitar que um caso que tenha um erro “positivo” e outro com erro “nega-
tivo” anulem-se ao calcular a soma dos erros. A quantidade de iteracoes necessarias para que
a rede seja bem treinada depende de varios fatores, como o tamanho do passo de aprendizado
(α), pesos iniciais e complexidade do conjunto de treinamento. Desse modo, o treinamento
pode levar um tempo longo para ser concluıdo. Abordagens tıpicas envolvem parar o treina-
mento apos um numero fixo de iteracoes ou aguardar ate que o erro quadratico medio esteja
abaixo de um determinado valor. O teste final utiliza-se de um conjunto de entradas e saıdas es-
peradas que nao estava no conjunto de treinamento, para avaliar-se a habilidade de classificacao
do Perceptron para casos desconhecidos.
O algoritmo e iniciado com um vetor de pesos e bias aleatorios (tipicamente com valores
entre−1.0 e +1.0). Entao, aplica-se uma entrada e compara-se a saıda obtida e a saıda esperada
24 2 Revisao Bibliografica
para aquela entrada. A diferenca entre elas e denominada “erro”. O objetivo do perceptron e,
entao, variar os parametros a que tem acesso (pesos e bias) de forma a minimizar esse erro
(obter respostas mais proximas das respostas esperadas). Para isso, utiliza-se o metodo do
gradiente descendente: utiliza-se da derivada da funcao a ser minimizada (no caso, o erro) para
encontrar seu ponto mınimo (ou, pelo menos, num mınimo local). Como o gradiente fornece
o sentido de maior crescimento da funcao, o metodo utiliza-se do oposto desse resultado, para
reduzir seu valor mais rapidamente. O erro e usado como uma proporcao de quanto cada peso
deve ser alterado, e um fator α (passo) indica quanto dessa proporcao, de fato, sera utilizada na
adaptacao dos parametros. Equacionando para a entrada x j,i no instante t tem-se:
net j =n
∑i=1
wi(t)x j,i +b j
y j(t) = f (net j)
E preciso encontrar, entao, a derivada da funcao erro com relacao aos pesos, para poder
minimiza-la. Deriva-se com relacao a cada peso wi. O procedimento e o mesmo para o bias.
∂erro2
∂wi= 2(res j− f (net j))
(∂ res j
∂wi− ∂ f (net)
∂wi
)=−2(res j− f (net j))
∂ f (net)∂wi
Aplicando-se a regra da cadeia,
∂ f (net)∂wi
=∂ f (net)
∂net∂net∂wi
∂net∂wi
=∂ (w1x1 +w2x2 + . . .+wnxn)
∂wi= xi
Resta definir a derivada da funcao de ativacao com relacao a net. Aqui, portanto, requer que a
funcao de ativacao seja diferenciavel. A funcao degrau, ate entao utilizada aqui, nao convem,
pois e descontınua em 0. Uma funcao de ativacao tıpica e a funcao sigmoide (MELLO, 2011):
sigmoid(x) =1
1+ e−x
2.6 Redes Neurais Artificiais 25
cuja forma e similar a degrau, mas nao igual: para valores negativos, o resultado tende a ser 0;
para positivos, tende a 1. A funcao atinge metade de seu valor maximo em x = 0. A derivada
da funcao sigmoide e dada por:
δ sigmoid(x)δx
= sigmoid(x)(1− sigmoid(x))
Ha outra funcao com comportamento semelhante, a tangente hiperbolica ou tanh(x). Sua
definicao e derivada sao:
tanh(x) =sinh(x)cosh(x)
=ex− e−x
ex + e−x
δ tanh(x)δx
=1
cosh2(x)= 1− tanh2(x)
A Figura 2.9 apresenta a forma dessas curvas:
Figura 2.9: Exemplos de funcoes de ativacao: sigmoid (vermelho) e tanh (verde)
Finalmente, tem-se que o novo valor do peso wi, no instante t +1, e dado por
wi(t +1) = wi(t)+α(res j− y j(t))∂ f (net j)
∂wix j,i
sendo wi o peso analisado.
26 2 Revisao Bibliografica
2.6.3 Aplicacoes do Perceptron
O modelo Perceptron demonstra bons resultados para classificacoes binarias e linearmente
separaveis, tais como algumas operacoes logicas (AND, OR, NOR, NAND). Contudo, uma
publicacao de 1969 (MINSKY; PAPERT, 1969) demonstrou que alguns problemas simples,
como a operacao logica “ou exclusivo” (XOR) nao poderiam ser classificadas corretamente
atraves do perceptron, dado que nao sao separaveis por um unico hiperplano. Esse fato, so-
mado ao limitado poder de processamento dos computadores da epoca, questionaram o uso real
do Perceptron, estagnando pesquisas nessa area. Alguns anos depois, em 1975, o algoritmo
Backpropagation foi proposto e, com alguns perceptrons conectados, foi possıvel classificar
situacoes como o XOR. Surgia a ideia do MLP - Multi-Layer Perceptron.
2.6.4 MLP - Multi-Layer Perceptron
Consiste de um conjunto de perceptrons (ou neuronios), agrupados em camadas, onde todos
os neuronios de uma camada conectam sua saıda a todos os neuronios da camada seguinte (rede
do tipo “feedforward”). Tipicamente, tem-se pelo menos 3 camadas: camada de entrada (input
layer), camada intermediaria ou escondida (hidden layer) e camada de saıda (output layer). Ex-
ceto pelos neuronios da camada de entrada, todos os neuronios sao tipicamente iguais quanto
ao funcionamento (mas poderiam nao se-lo, tendo, por exemplo, funcoes de ativacao diferentes
na camada escondida e saıda). A camada de entrada, porem, nao realiza processamento, sim-
plesmente aplicando na saıda o que recebe na entrada. Sua funcao e distribuir as entradas para
todos os neuronios da primeira camada escondida. E possıvel implementar uma rede neural
com varias camadas escondidas, mas a complexidade aumenta significativamente. Redes neu-
rais com 3 camadas, em geral, resolvem classificacoes complexas, desde que tenham neuronios
o suficiente na camada escondida.
A Figura 2.10 representa uma MLP com 3 camadas, de forma generalizada quanto a quan-
tidade de neuronios em cada camada ( n na de entrada, m na escondida e k na de saıda). Cada
aresta entre a camada de entrada e a escondida possui um “peso” associado, assim como entre
a escondida e a de saıda.
2.6 Redes Neurais Artificiais 27
Figura 2.10: Representacao de MLP de 3 camadas
Uma rede MLP e capaz de classificar entradas mais complexas e em regioes disjuntas, como
e o caso da funcao logica XOR. O algoritmo Backpropagation consiste de propagar erros no
sentido da ultima camada para a primeira. E possıvel utilizar esse metodo para qualquer numero
de camadas, mas aumenta-lo tambem aumenta a complexidade e, potencialmente, o tempo de
convergencia do sistema.
2.6.5 O Aprendizado da MLP
O funcionamento e aprendizado da rede MLP, em pseudocodigo, e fornecido no Codigo 2.2.
Codigo 2.2: Pseudocodigo de aprendizado de uma MLP� �Para cada v e t o r de e n t r a d a :
/∗ Feed fo rward ∗ /a p l i c a r s e u s v a l o r e s na camada de e n t r a d a ;p a r a cada n e u r o n i o da camada i n t e r m e d i a r i a :
n e t = 0 ;p a r a cada e n t r a d a :
m u l t i p l i c a r a e n t r a d a p e l o r e s p e c t i v o peso ;somar o r e s u l t a d o a n e t ;
somar o b i a s a n e t ;a p l i c a r a fu n ca o de a t i v a c a o em n e t ;o b t e r r e s u l t a d o , s e r a e n t r a d a da camada de s a i d a ;
p a r a cada n e u r o n i o da camada de s a i d a :n e t = 0 ;p a r a cada e n t r a d a :
28 2 Revisao Bibliografica
m u l t i p l i c a r a e n t r a d a p e l o r e s p e c t i v o peso ;somar o r e s u l t a d o a n e t ;
somar o b i a s a n e t ;a p l i c a r fu n ca o de a t i v a c a o em n e t ;o b t e r r e s u l t a d o , s e r a s a i d a da camada de s a i d a ;
/∗ B a c k p r o p a g a t i o n ∗ /p a r a cada n e u r o n i o da camada de s a i d a :
c a l c u l a r o e r r o o b t i d o , comparando a s a i d a com a s a i d a e s p e r a d a ;a j u s t a r os p e s o s do n e u r o n i o ;
p a r a cada n e u r o n i o da camada e s c o n d i d a :c a l c u l a r o a j u s t e n e c e s s a r i o p a r a s e u s p e s o s ;a j u s t a r s e u s p e s o s� �
As equacoes finais de adaptacao dos pesos das camadas de saıda e escondida sao fornecidas
abaixo, considerando-se a funcao de ativacao tanh(x):
f (x) =ex− e−x
ex + e−x
f ′(x) = 1− f 2(x)
Camada de saıda:
δoqk = (reso
qk− yqk) f ′(netoqk)
wok j(t +1) = wo
k j(t)+αδoqkresh
q j
sendo wok j(t) o peso do neuronio da camada de saıda (output) k para sua entrada j (que vem
do neuronio j da camada escondida) no instante t; δ oqk e um fator de erro do neuronio da camada
de saıda (output) k para a entrada de teste q; resoqk e o resultado (saıda, apos funcao de ativacao)
do neuronio da camada de saıda k para a entrada de teste q; netoqk e a soma dos produtos das
entradas reshq j por seus respectivos pesos, mais o bias; resh
q j e a saıda do neuronio j da camada
escondida para a entrada de teste q (que, aqui, tem papel de “entrada” para o neuronio k); f ′
representa a derivada da funcao f em relacao ao peso wok j. α e o passo de aprendizado.
Camada escondida:
δhq j = f ′hj (neth
q j)∑k
δoqkwo
k j
2.6 Redes Neurais Artificiais 29
whji(t +1) = wh
ji(t)+αδhq jxqi
sendo whji(t) o peso do neuronio j da camada escondida (hidden) para sua entrada i (que
vem da camada de entrada) no instante t; δ hq j o fator de erro da camada escondida (hidden)
j para a entrada de teste q; nethq j e a soma dos produtos das entradas xqi por seus respectivos
pesos, mais o bias; xqi e a entrada i para a entrada de teste q; os demais termos sao os mesmos
da camada de saıda.
Principais limitacoes
As redes neurais e outros algoritmos onde deseja-se encontrar “os melhores modelos” de
representar dados ou classificacoes apresentam algumas limitacoes comuns, que devem ser le-
vadas em consideracao. Entre eles, cita-se dois casos importantes:
Mınimos locais: Os algoritmos baseiam-se em gradientes descendentes, tendendo a seguir a
direcao que indica reducao de uma determinada funcao (no caso da MLP, deseja-se mi-
nimizar o erro, mas casos de otimizacao visariam reduzir custos, por exemplo). Esses
algoritmos obtem bons resultados quando a funcao possui somente um mınimo (que, por-
tanto, e global). Na maioria dos casos, contudo, problemas reais possuem varios mınimos
locais, que causam a convergencia do algoritmo antes de atingir resultados melhores.
Como exemplo, a figura 2.11 apresenta a) uma funcao com apenas um mınimo e b) outra
com alguns mınimos locais. Em a), observa-se que, se o algoritmo iniciar no ponto a
ou b, eventualmente o metodo do gradiente descendente leva a solucao para o mınimo
global m. Contudo, em b), dependendo de onde o algoritmo iniciar (como em a, ou c),
o gradiente descendente converge em um ponto de mınimo local, nao alcancando o me-
lhor resultado possıvel (m)(BUCKLAND, 2002). Depender das condicoes iniciais para
encontrar o melhor resultado nao e uma boa solucao.
Superajuste ou Overfitting: O treinamento da rede neural, em geral, e mantido “evoluindo”
ate que o erro para os casos de treinamento nao ultrapassem uma determinada marca.
Porem, e possıvel que ocorra o chamado overfitting, ou “superajuste”, isto e, o treina-
30 2 Revisao Bibliografica
Figura 2.11: Funcoes com a) um unico mınimo e b) varios mınimos
mento leva a uma solucao especıfica para os dados de treinamento, e nao para o caso geral
do problema tratado. Existe uma heurıstica cientıfica conhecida como Occam’s Razor, ou
“Navalha de Occam”, que cita: “se todos os resultados forem iguais, a explicacao mais
simples tende a ser a correta” (SAGAN, 1997) (THRUN, 2011). A Figura 2.12 ilustra
essa situacao: na subfigura a), observam-se duas explicacoes que passam exatamente por
todos os pontos amostrados (erro 0). Porem, a linha contınua apresenta uma explicacao
mais simples que a linha pontilhada, e provavelmente explica melhor o comportamento
das amostras. Na subfigura b), observa-se um caso de superajuste: a linha contınua e
mais simples que a pontilhada, mas apresenta um erro maior, enquanto a pontilhada passa
exatamente pelos pontos, mas descreve um comportamento complexo e improvavel. A
subfigura c) relaciona um exemplo de erros de treinamento e de teste em funcao da com-
plexidade da solucao. Observa-se o ponto de melhor desempenho destacado como best
epoch, provavelmente a melhor solucao.
Melhorias no aprendizado
Ao longo dos anos, algumas tecnicas foram desenvolvidas para melhorar o desempenho do
treinamento das redes neurais, seja para reduzir o tempo de convergencia ou para melhorar os
resultados obtidos, entre as quais cita-se:
2.6 Redes Neurais Artificiais 31
Figura 2.12: Navalha de Occam: selecionando a solucao correta
Momentum: Durante cada atualizacao dos pesos de um neuronio, uma fracao de sua ultima
atualizacao de peso e adicionada. Esta tecnica evita que os pesos mantenham-se em
mınimos locais, melhorando as chances de chegar ao mınimo global.
Limiar ou threshold: Saıdas com valores numerico acima de um determinado limiar sao
consideradas como “1”; abaixo desse valor (ou de outro limiar), sao consideradas como
“0”. Valores comuns para o limiar variam entre 0,7 e 0,9.
Validacao Cruzada ou Cross Validation: consiste em dividir-se o conjunto de treinamento
em partes de tamanhos diferentes, utilizar algumas para efetivamente treinar a rede neu-
ral e utilizar as restantes para analisar a capacidade da rede de classificar casos ineditos.
Tipicamente, divide-se o conjunto em 10 partes iguais, utilizando-se 1 parte para teste e
9 para treino, mas qualquer numero de partes poderia ser usado. Outra variacao, ainda,
32 2 Revisao Bibliografica
realiza esse procedimento utilizando como conjunto de teste cada uma das partes dis-
ponıveis, utilizando-se as outras para treino, de modo a obter resultados estatısticos sobre
o treinamento.
Best Epoch: Cada rodada de treinamento e chamada de “epoca” (epoch). Treinamentos que
tem como criterio de parada um erro muito pequeno correm um grande risco de cau-
sar um superajuste (overfitting), reduzindo a corretude na classificacao de casos ineditos.
Contudo, se fosse possıvel encerrar o treinamento na melhor epoca que nao causa over-
fitting, seria uma solucao com mais chances de ser melhor. Utilizando-se os conceitos da
validacao cruzada, pode-se utilizar 8 partes para treinar a rede, 1 para “testar” o desem-
penho para casos ineditos e, assim, encontrar a best epoch do treinamento. Ao termino
do treinamento, utiliza-se a 1 parte restante para validar a rede, com os pesos encontrados
na best epoch.
Winner takes it all: a saıda corretamente classificada como “1” e aquela que apresenta o
maior valor dentre todas as saıdas antes de aplicar o limiar. Valido para classificacoes
“binarias” onde pode haver no maximo uma saıda “1” e as demais sao “0”.
2.6.6 Usos da MLP
Ha diversas aplicacoes de MLP em varias areas, entre as quais cita-se: classificacao de ima-
gens de satelite, processo de laminacao, processo de flotacao de minerios, analise de credito (RE-
ZENDE, 2003), diagnostico de imagens medicas, classificacao de qualidade de madeira, jogos
eletronicos, compra e venda de acoes em bolsa de valores, reconhecimento de voz, aprendizado
de maquina, identificacao de sorrisos em maquinas fotograficas automaticas, identificacao de
rostos em fotografias, reconhecimento de texto (OCR) e reconhecimento de gestos.
2.7 Consideracoes Finais
De posse das ferramentas acima descritas, da-se inıcio ao projeto de reconhecimento de
gestos utilizando o dispositivo Kinect.
33
3 Desenvolvimento do Trabalho
3.1 Consideracoes Iniciais
Neste capıtulo, serao apresentadas as etapas de planejamento e desenvolvimento do projeto,
resultados obtidos, dificuldades e limitacoes encontradas.
3.2 Projeto
O objetivo deste trabalho e ser capaz de reconhecer gestos (sequencia de deslocamentos
tridimensionais) desenvolvidos pela mao direita do usuario, para que seja possıvel fornecer co-
mandos a computadores ou robos a distancia e sem o uso de instrumentos mecanicos. Planejou-
se 3 gestos para serem identificados, como mostra a Figura 3.1
Figura 3.1: Movimentos a serem classificados: a) circle, b come here e c) goodbye
Para cumprı-lo, e necessario compreender a estrutura de comunicacao do ROS, pois o uso
das mensagens enviadas e essencial para o cumprimento da tarefa. Alem disso, verifica-se
a necessidade de realizar algumas tarefas especıficas, tais como identificar a posicao da mao
34 3 Desenvolvimento do Trabalho
direita do usuario, verificar se ela deslocou-se significativamente e preparar os dados coletados
para que possam alimentar a rede neural.
Para a fase de treinamento, tambem e util gravar as mensagens enviadas durante a coleta de
amostras, para que possam ser reproduzidas mais tarde e se possa analisar os resultados obtidos.
Em linhas gerais, as atividades realizadas foram as seguintes: instalacao do ROS, tu-
torial do ROS, criacao de aplicacao teste, estudo das informacoes disponibilizadas pelo no
hand interaction, identificacao da posicao da mao direita do esqueleto das mensagens envia-
das, criacao do programa para analisar deslocamentos da mao direita, adaptacao de uma rede
neural (SCHEMENAUER, 2010) com entradas e saıdas o suficiente para classificar os movi-
mentos, gravacao de amostras para criar conjuntos de treinamento para a rede, criacao de um
programa para criar os conjuntos a partir das amostras gravadas, treinamento e teste da rede
neural, teste em tempo real da rede neural.
Essas atividades sao descritas em maiores detalhes na secao seguinte.
3.3 Descricao das Atividades Realizadas
Inicialmente, fez-se necessario instalar uma versao do ROS que fosse compatıvel com
os modulos de demonstracao do MIT. Atualmente, existem 4 versoes do ROS: Box Turtle
(mar/2010), C Turtle (ago/2010), Diamondback (mar/2011), Electric Emys (ago/2011). Em-
bora a versao mais recente seja a Electric, uma melhor compatibilidade com os modulos a
serem utilizados foi encontrada com a Diamondback. Essa versao foi instalada na distribuicao
Linux - Ubuntu 10.10.
Em seguida, para compreender o funcionamento do ROS, o tutorial disponıvel no site oficial
foi seguido, onde foram aprendidos os conceitos de no, topico, servico, cliente, parametro,
mensagem, ferramentas auxiliares para visualizar os topicos e comunicacao entre os nos e poder
ter uma visao mais abrangente do funcionamento das aplicacoes.
Em determinada secao do tutorial, foi requisitado escolher entre as linguagens C++ ou
python para continuar. A escolhida foi python, devido a sua programacao dinamica e agilidade
3.3 Descricao das Atividades Realizadas 35
de desenvolvimento (BARRY, 2010) (LUTZ, 2009). Para praticar os conceitos de publicacao
(publish) e inscricao (subscribe), foi desenvolvido um sistema simples de envio de mensagens
de texto (chat). Nesse sistema, um no receberia como entrada um texto digitado por linha de
comando, e esse texto (String) seria publicado num topico, onde outro no estaria inscrito. Ao
receber uma mensagem, o segundo no simplesmente o faria aparecer na tela.
Baseado nesse, desenvolveu-se um unico no que envia e recebe mensagens do mesmo
topico. Dessa forma, varias instancias do aplicativo poderiam trocar mensagens com todas
as outras instancias. Como exemplo, foi bastante ilustrativo desenvolve-lo.
O aplicativo de demonstracao do MIT hand interaction disponibiliza um conjunto de pro-
gramas que sao lancados em conjunto, capazes de identificar e rastrear um usuario (humano),
estimando a pose de seu esqueleto (utilizando posicoes estimadas das juntas do usuario, como
ombros, cotovelos e maos). Opcionalmente, e possıvel utilizar o visualizador rviz (outro pacote
padrao do ROS) para visualizar o esqueleto detectado e destacar as maos do usuario.
Um dos nos criados dessa forma e o skeletons, que envia mensagens contendo um vetor
com todos os esqueletos identificados em cada leitura de dados do Kinect. Desses esqueletos,
seleciona-se somente o primeiro (posicao 0), por simplificacao, pois supoe-se que apenas um
usuario por vez utilizara o software. Outros usuarios podem entrar em cena, tambem, mas suas
mensagens nao serao consideradas. Cada esqueleto contem um conjunto de posicoes tridimen-
sionais, indicando a posicao referente a cada junta do usuario. Uma dessas juntas e a mao direita
(right hand), que e o alvo da identificacao deste projeto.
Analisando-se o conteudo da mensagem de um esqueleto (comando rosmsg show [paco-
te/tipo de mensagem]), obtem-se a seguinte arvore do Codigo 3.1 (as reticencias referem-se a
segmentos da mensagem sem relevancia para este projeto):
Codigo 3.1: Segmento do tipo de mensagem body msgs/Skeletons� �rosmsg show body msgs / S k e l e t o n s. . .body msgs / S k e l e t o n [ ] s k e l e t o n s
. . .body msgs / S k e l e t o n J o i n t r i g h t h a n d
geomet ry msgs / P o i n t p o s i t i o n
36 3 Desenvolvimento do Trabalho
f l o a t 6 4 xf l o a t 6 4 yf l o a t 6 4 z
f l o a t 3 2 c o n f i d e n c e. . .� �Dessa forma, para extrair a posicao (x, y, z) da mao direita do primeiro esqueleto da
mensagem (do tipo body msgs/Skeletons) deve-se requisitar
data.skeletons[0].right hand.position e a essa linha, adicionar .x, .y ou .z, sendo
data a mensagem recebida pela funcao de callback.
Para analisar os deslocamentos da mao direita do usuario, um programa supervisor foi
desenvolvido, em linguagem python. Este programa analisa a posicao da mao direita, armaze-
nando pontos e deslocamentos em listas separadas. Caso a lista esteja vazia ou caso a distancia
do ponto atual e do ultimo ponto adicionado seja maior que 5 cm, a lista de pontos armazena a
posicao atual. Os pontos sao adicionados ao inıcio da lista. Este valor (5 cm) foi escolhido arbi-
trariamente, pois um valor pequeno poderia ser afetado por ruıdos e um valor grande tornaria os
gestos muito longos. Se ja houver pelo menos um ponto na lista quando outro ponto for adicio-
nado, calcula-se os “deslocamentos significativos” para cada eixo: se houve um deslocamento
maior que 5 cm no sentido positivo de x, o “deslocamento x” e +1; se for no sentido negativo,
−1; se o deslocamento no eixo x for menor que 5 cm, o “deslocamento x” e 0. Realiza-se essas
atribuicoes tambem para os eixos y e z. Esses tres deslocamentos sao adicionados ao inıcio da
lista de deslocamentos.
Quando a lista de deslocamentos atinge um tamanho de 20 (selecionado arbitrariamente,
longo o bastante para gerar um padrao reconhecıvel, alem de permitir aumentar a quantidade de
gestos a serem reconhecidos), uma mensagem do tipo Trace (Codigo 3.2) e enviada ao topico
“right hand trace”, contendo esses 20 deslocamentos. Se a lista ultrapassar a quantidade de
20, descarta-se os pontos mais antigos, ate retornar ao maximo de 20 permitidos. Se forem
realizadas 50 leituras de posicao sem que nenhum deslocamento significativo ocorra, as listas
sao esvaziadas. Esse recurso foi desenvolvido para “cancelar” um movimento sem precisar
pressionar botoes.
3.3 Descricao das Atividades Realizadas 37
Codigo 3.2: Mensagem do tipo: tcc/Trace.msg� �Header h e a d e rgeomet ry msgs / P o i n t [ ] t r a c e� �
Apos a criacao do analisador de deslocamentos, utilizou-se uma rede neural implemen-
tada em python e disponibilizada como domınio publico (SCHEMENAUER, 2010) (PYTHON,
1990), sobre a qual foram realizadas as adaptacoes necessarias para uso e analise neste projeto,
tais como funcoes para gravar erros de treinamento e teste. Essa rede necessita de um total de 60
neuronios na camada de entrada (pois ha 20 pontos de deslocamento, com 3 deslocamentos em
cada ponto), 3 na camada de saıda (pois ha 3 tipos de movimentos reconhecıveis) e um numero
arbitrario de neuronios na camada escondida (foram testados algumas quantidades e optou-se
por 20 neuronios). A funcao de ativacao da rede e:
f (net) = tanh(x) =ex− e−x
ex + e−x
que retorna valores no intervalo ]−1,+1[.
A rede MLP utilizada dispoe de metodos de treinamento, teste e uso. Para o treinamento,
um conjunto de treinamento (entradas e respostas esperadas) sao passados, devendo respeitar
as dimensoes da rede. Passa-se, tambem, o erro maximo permitido (condicao de parada do
treinamento: a soma dos erros quadraticos deve ser menor que esse valor), a taxa de aprendi-
zado α (aqui, empiricamente, observou-se que valores da ordem de 0,005 a 0,01 apresentam
resultados melhores) e um parametro m, de momentum: ao adaptar-se um peso, adiciona-se m
vezes a adaptacao da ultima iteracao, para evitar que os pesos fiquem estagnados numa regiao
de mınimo local. Opcionalmente, se mais um conjunto de entradas e saıdas esperadas for pas-
sado, sera utilizado para “validacao cruzada” (cross-validation) e determinacao da “melhor
epoca” (best epoch): a cada rodada de treinamento, esse conjunto de teste (que deve ser inedito,
isto e, disjunto do conjunto de treinamento) sera avaliado. Se sua avaliacao atual for melhor que
a melhor avaliacao ate entao, a atual passa a ser a melhor e os pesos da rede sao armazenados
como “melhores pesos”. Essa tecnica evita a ocorrencia de superajuste (overfitting), tendendo a
fornecer solucoes mais genericas e, provavelmente, mais acertadas.
38 3 Desenvolvimento do Trabalho
Alem disso, utiliza-se tambem os seguintes criterios de classificacao: Uma saıda so e consi-
derada valida (classificacao da entrada) se possuir um valor maior que um limiar, aqui adotado
como 0,8. Caso mais de uma saıda seja maior que 0,8, considera-se como verdadeira aquela
que tiver o melhor (maior) valor. Caso uma saıda seja considerada valida e verdadeira, as de-
mais saıdas recebem o valor 0.
Apos a preparacao da rede neural, e necessario criar um conjunto de treinamento. Para
isso, gravou-se, utilizando-se o comando rosbag record, amostras de um usuario realizando
somente 1 classe de gesto em cada secao. Outro programa (no) foi criado para receber as men-
sagens enviadas ao topico “right hand trace”, armazenar os deslocamentos como “entradas” e
associa-los com a resposta esperada sendo classificada. Por exemplo, se o usuario somente re-
alizara movimentos circulares, os gestos obtidos sao classificados como “cırculo”. O mesmo
deve ser realizado com os outros gestoss a serem classificados. A Figura 3.2 exibe os topicos e
nos ativos durante uma secao de gravacao de amostras, para fornecer ao leitor uma ideia do pro-
cessamento necessario para identificar as maos do usuario. Os nos hachurados representam os
desenvolvidos neste projeto e utilizados durante uma secao de gravacao ou uso da rede neural.
Figura 3.2: Visao dos topicos e nos do ROS durante aquisicao de dados
Uma vez obtidos conjuntos de treinamentos para cada tipo de gesto, cria-se um unico con-
junto de treinamento, contendo partes iguais de amostras de cada gesto. Um programa foi de-
3.4 Resultados Obtidos 39
senvolvido para realizar essa tarefa, o embaralhador, que obtem todos os conjuntos de entrada
(um de cada tipo de gesto), embaralha cada conjunto separadamente, seleciona as primeiras
amostras de cada um (aqui, foram usadas 300 amostras de cada gesto) e intercala-os em 3 novas
listas: conjunto de treinamento (80 %, 720 amostras), conjunto de teste cross-validation (10 %,
90 amostras) e conjunto de teste real (10 %, 90 amostras), selecionadas ao acaso. Finalmente,
cada uma dessas listas e armazenada em um arquivo separado. Essa tarefa foi realizada pelo
programa shuffler.py, desenvolvido neste projeto.
Quanto ao treinamento da rede, utilizou-se o conjunto de treinamento para treinar, ate que
a soma dos erros quadraticos atingisse 1 % da quantidade de exemplos de treinamento; a cada
rodada do treinamento, utilizou-se o conjunto de teste cross-validation para determinar a “me-
lhor epoca” da rede, onde classificou de maneira mais satisfatoria um conjunto de dados inedito
desde o inıcio do treinamento. Apos o termino do treinamento, o conjunto de testes real e apli-
cado a rede e avalia-se a quantidade de classificacoes corretas. Nessa fase, um codigo carrega os
melhores pesos encontrados (best epoch) e utiliza a rede para classificar. Havendo bom desem-
penho, e simulada uma situacao real, reproduzindo-se uma das gravacoes rosbag para estimar a
quantidade de acertos.
Finalmente, testa-se a rede neural numa situacao real, utilizando-se o Kinect, a aplicacao
do MIT hand detector, o programa supervisor e o programa que utiliza a rede neural. Em caso
de sucesso, novos testes serao realizados, variando-se os parametros da rede, tais como erro
maximo durante o treinamento, passo de aprendizado, fator de momento e numero de neuronios
da camada escondida. Esses testes permitem analisar os efeitos dessas variacoes de parametros
no desempenho da rede (tempo de convergencia, taxa de acerto etc).
3.4 Resultados Obtidos
Para a obtencao dos resultados, os seguintes programas (nos) foram desenvolvidos:
overseer: programa supervisor; observa os deslocamentos da mao direita do usuario e envia
ao topico right hand trace os ultimos 20 deslocamentos identificados. Os desloca-
40 3 Desenvolvimento do Trabalho
mentos possuem valores +1, 0 ou −1, dependendo de quanto foi deslocado em cada
eixo.
cnne: programa que recebe a mensagem do topico right hand trace e associa os deslo-
camentos a um dos 3 tipos de gesto, armazenando-os num arquivo. A cada execucao,
somente um tipo de gesto e associado.
shuffler: abre os arquivos de amostra (de cada gesto), seleciona as primeiras 300 amostras
de cada e armazena essas informacoes em 3 listas, uma para cada tipo de gesto. Entao,
embaralha cada lista separadamente. Em seguida, 3 novas listas sao criadas, que con-
terao os conjuntos de treinamento, validacao cruzada e teste final. Entao, as amostras
sao retiradas das listas dos gestos individuais e intercalados nas listas finais: a cada 10
amostras, a primeira vai para validacao cruzada, a segunda para teste final e as restantes
para treinamento. Por fim, as listas sao armazenadas em arquivos separados.
nn: cria uma rede neural com as dimensoes especificadas (60 de entrada, 20 escondidos, 3
de saıda), abre os arquivos gerados pelo shuffler referentes ao treinamento e validacao
cruzada, realizando testes da forma descrita no fim da secao anterior, armazenando-se
os pesos da rede sempre que a validacao cruzada apresenta resultados melhores que os
melhores ate entao (best epoch).
test nn: cria uma rede neural com as dimensoes especificadas, carrega os melhores pesos
obtidos na validacao cruzada e utiliza-os para avaliar os resultados dos casos de teste
final. Nessa fase, os resultados da rede sao avaliados em:
hit: significa, apenas, que houve pelo menos uma classificacao com resultado maior que
o limiar, indicando que a rede “classificou”, seja de forma correta ou incorreta;
correct: a classificacao foi a esperada (acerto)
missed: tanto para classificacoes erroneas quanto aquelas em que o limiar nao foi atin-
gido (erro).
use nn: cria uma rede neural com as dimensoes especificadas, carrega os melhores pesos
obtidos na validacao cruzada e utiliza-os para classificar os resultados vindos diretamente
3.4 Resultados Obtidos 41
do topico right hand trace. Os resultados sao emitidos na tela, e e realizada uma
medida de quantas classificacoes ja foram realizadas: c indica o numero de entradas
classificadas como “circle”, “k”as classificadas como “come here”, g as classificadas
como “goodbye” e out of, que indica o numero total de mensagens recebidas para
classificacao.
Foram realizados e gravados 3 ensaios em que um usuario moveu sua mao seguindo os
padroes pre-definidos. Em cada ensaio, o usuario realizou somente 1 tipo de gesto:
1 - (1, 0, 0) - circle: o usuario descreve um cırculo no sentido anti-horario para si mesmo
(ou horario para o Kinect)
2 - (0, 1, 0) - come here: com o braco esticado para frente e palma da mao para cima,
o usuario dobra o cotovelo, trazendo sua mao para perto do corpo, e esticando o braco
novamente.
3 - (0, 0, 1) - goodbye: o usuario acena, deslocando a mao alternadamente para a esquerda
e para a direita.
A camada de saıda possui 3 neuronios, fornecendo, portanto, 3 resultados binarios. A
numeracao e trios ordenados na descricao acima indicam os numeros esperados para cada tipo
de gesto.
Apos a gravacao de aproximadamente 300 amostras de cada classe de movimento, foram
criados 3 conjuntos de amostras: o de treinamento (80 % das amostras), o de validacao cruzada
(10 %) e o de teste final (10 %). Com eles, executaram-se varios treinamentos com a rede com
parametros fixos (20 neuronios, 1 % de erro maximo no treinamento, α = 0,01, m = 0,1). Os
resultados obtidos sao apresentados nas tabelas 3.1 e 3.2. A tabela 3.2 apresenta resultados em
que o usuario realizou apenas 1 movimento por secao.
Tabela 3.1: Resultado do teste de Validacao Cruzadacorrect missed hit total
83 7 85 90
42 3 Desenvolvimento do Trabalho
Tabela 3.2: Resultado do teste com dados de uso realMovimento realizado circle circle circle total taxa de acerto (%)circle 323 0 0 323 100,0come here 0 383 3 400 95,7goodbye 0 1 307 317 96,8
Com o resultado bem sucedido da classificacao real, observou-se a possibilidade de testar
a eficiencia da rede quanto a variacao de seus parametros. Rodadas de treinamento e validacao
cruzada foram realizadas, com varios parametros distintos, a fim de verificar o efeito na variacao
de cada um. Como o teste de todas as combinacoes possıveis seriam muito custosas e de difıcil
analise, variou-se apenas 1 parametro por secao de analise, mantendo os demais fixos com
os valores utilizados anteriormente, para manter uma referencia e poder observar as variacoes
causadas por cada parametro.
Os seguintes valores foram utilizados: erro maximo de treinamento (0,5 %; 1 %; 5 %; 10 %
da quantidade de amostras de treinamento), passo de aprendizado (α = 0,001; 0,01; 0,05; 0,1; 0,5),
fator de momento (m = 0,0; 0,05; 0,1; 0,5) e o numero de neuronios da camada escondida
(nhidden = 5; 10; 20; 30). Os resultados sao exibidos nas Figuras 3.3, 3.4, 3.5 e 3.6.1
Esses resultados permitem concluir que os efeitos de cada parametro sao:
Neuronios da camada escondida: Pode-se observar que, com apenas 5 neuronios, a rede nao
e capaz de convergir para um erro de treinamento de 1%, alem de causar erros de teste
altıssimos, indicando a ocorrencia de superajuste durante o treinamento. Aparentemente,
10 neuronios sao suficientes para classificar os movimentos aqui apresentados. Nao e
possıvel determinar se ha melhoria entre 20 e 30 neuronios;
Erro maximo para treino: Para este caso, considera-se que todas as redes apresentam a
mesma “taxa de aprendizado”, atribuindo-se eventuais diferencas aos valores iniciais
(aleatorios). E importante observar que uma taxa de erro mais alta faz com que o apren-
dizado seja concluıdo antes de se melhorar os resultados. Os resultados finais, em geral,
sao melhores com um erro de 1 % ou 0,5 %.1Em geral, as figuras apresentam apenas os detalhes mais relevantes dos graficos plotados. Se uma linha nao
aparece na figura, significa que seus erros foram muito mais altos que os demais, indicando situacoes que devemser evitadas.
3.4 Resultados Obtidos 43
Figura 3.3: Erros x epoca, variando-se o numero de neuronios da camada escondida
Figura 3.4: Erros x epoca, variando-se a taxa de erro maxima para treinamento
44 3 Desenvolvimento do Trabalho
Figura 3.5: Erros x epoca, variando-se o passo de aprendizado α
Figura 3.6: Erros x epoca, variando-se o fator de momento
3.5 Dificuldades e Limitacoes 45
Passo de aprendizado (α): Observa-se que o melhor valor testado foi α = 0,001, tendo
obtido os menores resultados de teste de validacao cruzada. Os outros valores, alem de
levarem mais tempo para convergir, nao obtiveram resultados tao bons. Assim, ha uma
grande chance de que este seja um problema melhor resolvido com ajustes finos. Valores
elevados de α podem comprometer a convergencia da rede.
Fator de momento: Um valor alto, como 0,5, manteve-se com erros altıssimos, comprome-
tendo a convergencia da rede. A Figura 3.6 mostra apenas um detalhe dos resultados
obtidos. Os erros de treinamento mantiveram-se em torno de 1 e o erro de teste nao che-
gou a ser inferior a 1,1. Para os demais valores, a rede convergiu em menos de 70 epocas.
Um valor m = 0,0 tornou a convergencia mais lenta que as demais, mas nao evitou que
alcancasse seu objetivo. Um fator menor que a referencia, contudo, demonstrou melhor
desempenho.
3.5 Dificuldades e Limitacoes
A maior dificuldade encontrada no desenvolvimento deste projeto foi relacionado a rede
neural e as melhorias necessarias para que obtivesse bons resultados. Inicialmente, apenas a
variacao de parametros (passo de aprendizado, erro, numero de neuronios e fator de momento)
nao permitiram bons resultados. Apos a implementacao de algumas melhorias, como a Win-
ner takes all em conjunto com o limiar, os resultados foram significativamente melhores. As
tecnicas de validacao cruzada e best epoch auxiliaram na analise de desempenho do projeto e
na obtencao de melhores resultados nos testes finais.
3.6 Consideracoes Finais
O objetivo deste trabalho foi cumprido, obtendo-se taxas de acerto acima do esperado para
o reconhecimento de alguns gestos simples: 99% de acerto na fase de treinamento, 93,77% na
validacao cruzada e 95,7% de acerto para teste em tempo real. Apos alguns testes com outros
usuarios, concluiu-se que seria uma boa pratica fornecer uma etapa de calibracao da rede antes
46 3 Desenvolvimento do Trabalho
de utiliza-la em aplicacoes reais. A calibracao seria realizada apenas requisitando ao usuario
que executasse os movimentos a serem reconhecidos e utiliza-los para treinar a rede neural com
os melhores parametros aqui encontrados.
Dessa forma, os metodos aqui descritos mostraram-se adequados para trabalhar reconheci-
mentos de gestos com o dispositivo Kinect.
47
4 Conclusao
Este trabalho foi realizado tendo como base conceitos atuais da area de tecnologias compu-
tacionais, como Redes Neurais Artificias, Sensores Inteligentes e Interacao Usuaro-Maquina. A
interdisciplinaridade deste trabalho e um exemplo da importancia de conhecer diferentes areas
da ciencia: a combinacao das partes pode realizar feitos incrıveis.
4.1 Contribuicoes
Este trabalho fornece contribuicoes tanto para a area de Interacao Usuario-Maquina quanto
para a robotica, exemplificando como o uso de redes neurais artificiais pode contribuir com
novas formas de comunicacao com robos e outras maquinas. Os bons resultados obtidos de-
monstram a viabilidade do uso das tecnicas aqui apresentadas em aplicacoes semelhantes..
Para o autor, este trabalho contribuiu fazendo-o aprofundar-se nas areas de conhecimento
envolvidas, principalmente quanto a robotica e computacao bioinspirada, areas essas de grande
interesse do autor. A familiarizacao com o sistema ROS sera util para o desenvolvimento de
futuras aplicacoes roboticas, dado o porte do projeto e quantidade de ferramentas disponıveis. O
trabalho tambem contribuiu demonstrando de forma empırica o verdadeiro potencial das redes
neurais artificiais, ate entao vista somente em fundamentacoes teoricas e resultados obtidos em
outras aplicacoes.
A experiencia obtida certamente foi muito enriquecedora, fixando importantes conceitos
que, certamente, serao usados tambem fora da universidade.
48 4 Conclusao
4.2 Consideracoes sobre o Curso de Graduacao
O curso de graduacao em Engenharia da Computacao da USP de Sao Carlos mostrou-
se enriquecedor para o conhecimento tecnico do autor, oferecendo disciplinas diversificadas e
abrangentes sobre temas diversos relacionados a computacao, numa boa medida entre discipli-
nas basicas e avancadas.
Durante a graduacao, algumas atividades extra-curriculares (tais como a participacao no
grupo de estudos The Fellowship of the Game e Iniciacao cientıfica) foram importantes para
descobertas mais profundas sobre assuntos de interesse pessoal. Nesse sentido, sugere-se um
maior incentivo aos alunos para que participem de grupos de estudo e/ou Iniciacao Cientıfica,
para que possam ter uma compreensao maior sobre os assuntos de interesse pessoal. Ainda,
se possıvel, fornecer creditos (optativos livres, por exemplo) por tais atividades, fornecendo um
incentivo para a formacao de alunos mais interessados e, provavelmente, melhores profissionais.
Sugere-se, no entanto, uma analise da viabilidade de se reduzir a quantidade de creditos
obrigatorios e aumento da quantidade de creditos optativos eletivos, permitindo uma melhor
flexibilidade quanto a escolha das disciplinas a serem cursadas. Essa ideia permitiria aos alunos
matricular-se em mais disciplinas de interesse proprio, provavelmente melhorando a taxa de
aprendizado das aulas para ambas partes: alunos e professores.
Sugere-se, tambem, a criacao de uma disciplina que conscientize os alunos sobre a res-
ponsabilidade de um profissional formado pela USP para a sociedade, instigando-os a aplicar
os conhecimentos do curso a projetos sociais, retribuindo, de alguma forma, as pessoas que
contribuıram para os estudos do aluno.
Por fim, sugere-se tambem analisar a viabilidade de realizar visitas tecnicas relacionadas a
computacao. Ao que consta ao autor, somente uma viagem dessas e oferecida durante todo o
curso, e, para a turma do autor, essa viagem nao ocorreu.
49
Referencias Bibliograficas
BARRY, P. Head First Python. Sebastopol, CA, USA: O’Reilly Media, 2010.
BUCKLAND, M. AI techniques for game programming. Portland, OR, USA: Premier Press,2002. (The Premier press game development series). ISBN 9781931841085.
GUINNESS WORLD RECORDS. Kinect. 2011. Acesso em 06 nov. 2011. Disponıvel em:<community.guinnessworldrecords.com/ Kinect-Confirmed-As-Fastest-Selling-Consumer-Electronics-Device/blog/3376939/7691.html>.
HAYKIN, S. Neural Networks: A Comprehensive Foundation. 2nd. ed. Upper Saddle River,NJ, USA: Prentice Hall PTR, 1998. ISBN 0132733501.
JAROSZ, Q. Neuron Hand-tuned. 2009. Acesso em 06 nov. 2011. Disponıvel em:<commons.wikimedia.org/wiki/File:Neuron Hand-tuned.svg>.
LUTZ, M. Learning Python, 4th Edition. Sebastopol, CA, USA: O’Reilly Media, 2009.
MELLO, R. F. Aula - Redes Neurais Artificiais. 2011. Acesso em 13 out. 2011. Disponıvel em:<www.icmc.usp.br/˜mello/courses.php>.
MICROSOFT. Kinect for Windows. 2011. Acesso em 06 nov. 2011. Disponıvel em:<kinectforwindows.org/>.
MINSKY, M.; PAPERT, S. Perceptron. The MIT Press, 1969.
PRIME SENSE. Prime Sense Natural Interaction. 2011. Acesso em 05 nov. 2011. Disponıvelem: <www.primesense.com/>.
PYTHON. Python Programming Language. 1990. Acesso em 06 nov. 2011. Disponıvel em:<python.org>.
REZENDE, S. Sistemas Inteligentes: Fundamentos e Aplicacoes. Barueri, SP, Brasil: Manole,2003. ISBN 9788520416839.
RUSU, R. B.; CONLEY, K.; FOOTE, T. OpenNI Kinect. 2011. Acesso em 06 nov. 2011.Disponıvel em: <www.ros.org/wiki/openni kinect>.
SAGAN, C. Contato. Sao Paulo, SP, Brasil: Schwarcz ltda, 1997.
SCHEMENAUER, N. Back-Propagation Neural Network. 2010. Acesso em 06 nov. 2011.Disponıvel em: <python.ca/nas/python/>.
SUENDERHAUF, N.; NEUBERT, P.; GALLAGHER, G. MIT ROS pkg. 2011. Acesso em 06nov. 2011. Disponıvel em: <www.ros.org/wiki/mit-ros-pkg>.
50 Referencias Bibliograficas
THRUN, S. Video, Unit 5 7 Occam’s Razor. 2011. Acesso em 05 nov. 2011. Disponıvel em:<www.ai-class.com/course/video/videolecture/50>.
WILLOW GARAGE. Robot Operating System. 2009. Acesso em 06 nov. 2011. Disponıvelem: <www.ros.org>.
XBOX GAZETTE. Kinect. 2011. Acesso em 06 nov. 2011. Disponıvel em: <www-.xboxgazette.com/>.