Você está na página 1de 56

INSTITUTO FEDERAL DO ESPÍRITO SANTO

BACHARELADO EM SISTEMAS DE INFORMAÇÃO

CAIO ABELAR KINUPP MONTEIRO

DETECÇÃO E RASTREAMENTO DE OBJETOS UTILIZANDO REDES


NEURAIS E FILTRO DE PARTÍCULAS

Serra
2020
CAIO ABELAR KINUPP MONTEIRO

DETECÇÃO E RASTREAMENTO DE OBJETOS UTILIZANDO REDES


NEURAIS E FILTRO DE PARTÍCULAS

Trabalho de Conclusão de Curso apresentado à Co-


ordenadoria do Curso de Sistemas de Informação do
Instituto Federal do Espírito Santo, Campus Serra,
como requisito parcial para a obtenção do título de
Bacharel em Sistemas de Informação.

Orientador: Prof. Me. Eduardo Max Amaro Amaral

Serra
2020
Aos meus pais
À todos aqueles que me acompanharam nessa jornada
AGRADECIMENTOS

Agradeço a Deus por ter sempre me guiado, a minha família que sempre me deu forças
para continuar na minha caminhada, aos meus professores que me proporcionaram o
conhecimento para chegar até aqui, e a meus amigos que sempre me apoiaram nos
momentos difíceis.
You are what you think
(KURZWEIL, 2012)
RESUMO

Com a crescente disseminação da tecnologia em nosso cotidiano, a área de visão compu-


tacional vem se tornando cada vez mais acessível no meio científico. Essa acessibilidade
possibilitou que projetos na área de DATMO estejam presentes nas mais variadas ati-
vidades que antes eram realizadas por seres humanos, como, por exemplo os veículos
autônomos que atuam em um ambiente de alto risco e grande propensão à falha humana.
Neste trabalho foi desenvolvido um sistema de detecção e rastreamento de objetos móveis
no campo visual de uma câmera. Para a realização da tarefa, primeiramente é realizado
uma etapa de captura e pré-processamento dos dados para que tenha as características
necessárias que possibilite serem utilizados como entrada para uma rede neural. Posterior-
mente, foi utilizado redes neurais convolucionais para detecção e classificação dos objetos.
Na etapa de rastreamento, foi utilizado o algoritmo de filtro de partículas para predição de
movimento dos objetos. Os resultados experimentais mostraram que o sistema proposto
foi capaz de detectar e rastrear com bom desempenho múltiplos objetos em movimento no
campo visual.

Palavras-chave: Visão Computacional. Redes Naurais Convolucionais. Filtro de Partículas.


ABSTRACT

With the increasing spread of technology in our daily lives, the area of computer vision has
become increasingly accessible in the scientific world. This accessibility allowed projects
in the field of DATMO to be present in the most varied activities that were previously
carried out by human beings, such as, for example, autonomous vehicles that operate in
a high risk environment and high propensity to human failure. In this work a system
was developed to detect and track mobile objects in the visual field of a camera. For the
accomplishment of the task, a step of capturing and pre-processing the data is first carried
out so that it has the necessary characteristics that can be used as input to a neural
network. Subsequently, convolutional neural networks were used to detect and classify
objects. In the tracking step, the particle filter algorithm was used to predict the motion
of the objects. The experimental results showed that the proposed system was able to
detect and track with good performance multiple moving objects in the visual field.

Keywords: Computer Vision. Convolutional Neural Network. Particle Filter.


LISTA DE FIGURAS

Figura 1 – Tesla Autopilot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9


Figura 2 – Caminhão autônomo da Vale . . . . . . . . . . . . . . . . . . . . . . . 10
Figura 3 – IARA (Intelligent Autonomous Robotic Automobile) . . . . . . . . . . 10
Figura 4 – Rede neural simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Figura 5 – Neurônio biológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Figura 6 – Modelo MCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Figura 7 – Função de ativação threshold . . . . . . . . . . . . . . . . . . . . . . . 16
Figura 8 – Função de ativação sigmoid . . . . . . . . . . . . . . . . . . . . . . . . 17
Figura 9 – Linearmente e não linearmente separáveis . . . . . . . . . . . . . . . . 17
Figura 10 – Multilayer Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Figura 11 – Descida de gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Figura 12 – Rede neural convolucional . . . . . . . . . . . . . . . . . . . . . . . . . 20
Figura 13 – Filtro da rede convolucional . . . . . . . . . . . . . . . . . . . . . . . . 21
Figura 14 – Filtro com 3 camadas de profundidade . . . . . . . . . . . . . . . . . . 21
Figura 15 – Camada de pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Figura 16 – Processo de achatamento . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figura 17 – Bounding box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figura 18 – Intersection over Union . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Figura 19 – Kernel de detecção do YOLO . . . . . . . . . . . . . . . . . . . . . . . 25
Figura 20 – Processo de detecção do YOLO . . . . . . . . . . . . . . . . . . . . . . 25
Figura 21 – Supressão não máxima . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Figura 22 – Possíveis combinações de somas . . . . . . . . . . . . . . . . . . . . . 27
Figura 23 – Representação de uma distribuição de probabilidades através de partí-
culas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Figura 24 – Ilustração de uma iteração do algoritmo Sampling Importance Resam-
pling, mostrando partículas com diferentes pesos. . . . . . . . . . . . . 29
Figura 25 – Convergência do filtro de partículas no rastreamento. . . . . . . . . . 30
Figura 26 – Fluxo de funcionamento do sistema . . . . . . . . . . . . . . . . . . . 31
Figura 27 – Exibição dos objetos detectados no terminal. . . . . . . . . . . . . . . 34
Figura 28 – Exibição dos objetos detectados no vídeo processado. . . . . . . . . . 35
Figura 29 – Representação de um objeto sendo rastreado pelas partículas. . . . . . 36
Figura 30 – Representação da movimentação das partículas e a predição do estado
futuro do objeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Figura 31 – Associação entre predições e novas detecções. . . . . . . . . . . . . . . 38
Figura 32 – Matriz de IoU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Figura 33 – Matriz de alocação resultante do algoritmo Húngaro. . . . . . . . . . . 40
Figura 34 – Representação da reamostragem de partículas. . . . . . . . . . . . . . 42
LISTA DE QUADROS

Quadro 1 – Algoritmo de Pré-processamento das imagens. . . . . . . . . . . . . . 33


Quadro 2 – Algoritmo de detecção de objetos. . . . . . . . . . . . . . . . . . . . . 34
Quadro 3 – Representação das partículas em Python. . . . . . . . . . . . . . . . . 35
Quadro 4 – Posição média das partículas. . . . . . . . . . . . . . . . . . . . . . . . 36
Quadro 5 – Modelo de movimentação das partículas. . . . . . . . . . . . . . . . . 37
Quadro 6 – Algoritmo de associação. . . . . . . . . . . . . . . . . . . . . . . . . . 39
Quadro 7 – Modelo de observação das partículas. . . . . . . . . . . . . . . . . . . 40
Quadro 8 – Reamostragem das partículas. . . . . . . . . . . . . . . . . . . . . . . 41
Quadro 9 – Algoritmo de rastreamento. . . . . . . . . . . . . . . . . . . . . . . . . 43
SUMÁRIO

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.3 Limitações do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2 ESTRUTURA DO TRABALHO . . . . . . . . . . . . . . . . . . . . . . . 12
2 REFERENCIAL TEÓRICO . . . . . . . . . . . . . . . . . . . . . 13
2.1 REDES NEURAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Neurônio biológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2 Modelo MCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.3 Função de ativação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4 Multilayer Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5 Treinamento da rede neural . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 REDES NEURAIS CONVOLUCIONAIS . . . . . . . . . . . . . . . . . . 20
2.2.1 Camada convolucional . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Camada de pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3 BOUNDING BOX e IoU . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 YOLO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5 NON-MAX SUPPRESSION . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6 MÉTODO HÚNGARO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7 FILTRO DE PARTÍCULAS . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1 PRÉ-PROCESSAMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 DETECÇÃO DE OBJETOS . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 INICIALIZAÇÃO DO FILTRO DE PARTÍCULAS . . . . . . . . . . . . . 35
3.4 PREDIÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5 ASSOCIAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6 ATUALIZAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.7 RASTREAMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4 EXPERIMENTOS, RESULTADOS E DISCUSSÃO . . . . . . . 44
4.1 MÉTRICAS DE AVALIAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2 RESULTADOS DE ACORDO COM O RCLL . . . . . . . . . . . . . . . . 44
4.3 RESULTADOS DE ACORDO COM O MOTA . . . . . . . . . . . . . . . 45
4.4 RESULTADOS DE ACORDO COM O MOTP . . . . . . . . . . . . . . . 46
4.5 DISCUSSÃO SOBRE OS RESULTADOS . . . . . . . . . . . . . . . . . . 47
5 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . 49
5.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
9

1 INTRODUÇÃO

O termo robótica, segundo Thrun, Burgard e Fox (2005) é a ciência de perceber e manipular
o mundo físico através de dispositivos mecânicos controlados por computador. A esses
dispositivos damos o nome de robô. Já o termo automação vem do latim Automatus, cujo
significado é mover-se por si. Segundo PRIBERAM (2018), automação pode ser definida
como execução automática de tarefas industriais ou científicas sem intervenção humana
intermediária. Ou seja, robótica autônoma é a ciência de perceber e manipular o ambiente
através de robôs para realização de tarefas, sem a intervenção humana.

O uso de robôs autônomos se mostra cada vez mais presente nos dias atuais, como, por
exemplo em tarefas repetitivas ou em atividades críticas que oferecem risco ao ser humano,
e uma dessas tarefas é a de dirigir veículos automotores. No percurso até o destino, o
condutor está sujeito a inúmeros riscos e distrações que podem causar acidentes a ele
mesmo ou a terceiros. Para se ter uma ideia, segundo o Ministério da saúde (2018), somente
no Brasil em 2017, foram registradas 32.615 mortes por acidente de trânsito. Diante do
cenário observado, é possível afirmar que o transporte utilizando veículos conduzidos por
seres humanos pode se tornar inseguro, uma vez que o condutor precisa estar atento a um
ambiente com uma alta quantidade de variáveis, como prestar atenção e acompanhar o
movimento de vários objetos a sua volta enquanto guia o veículo.

Essa atividade aos poucos está sendo exercida por sistemas automatizados com maior
capacidade de processamento e uma melhor tomada de decisão. Como os carros da
montadora Tesla (TESLA, 2019) mostrado na Figura 1, que já apresentam condução
autônoma através do sistema Autopilot.

Figura 1 – Tesla Autopilot

Fonte: Hyatt (2017)

Outros exemplos de veículos autônomos são apresentados na Figura 2 onde um caminhão


10

opera de forma autônoma na mina de Brucutu em Minas Gerais (VALE, 2018) e na


Figura 3 onde é mostrado o IARA (Intelligent Autonomous Robotic Automobile) que
é utilizado para pesquisas científicas no LCAD (Laboratório de Computação de Alto
Desempenho) da Universidade Federal do Espirito Santo (LCAD, 2018).

Figura 2 – Caminhão autônomo da Vale

Fonte: Vale (2018)

Figura 3 – IARA (Intelligent Autonomous Robotic Automobile)

Fonte: LCAD (2018)

No transporte autônomo, a detecção de múltiplos objetos no ambiente é fundamental,


em vista disto, os robôs utilizam inúmeros sensores para percepção do ambiente em que
estão atuando, tais como: laser, sonar e câmera. As câmeras são muito utilizadas pelo
fato de serem capazes de entregar uma enorme variedade de informações sobre o universo
observável e serem mais acessíveis.

Além de reconhecer objetos no campo visual do sensor, também é necessário rastreá-los


conforme o passar do tempo, de modo que o observador saiba que o objeto que foi visto
11

no tempo anterior é o mesmo que é visto no momento atual.

Este problema, na robótica autônoma, é conhecido como DATMO (Detection and Tracking
of Moving Objects). DATMO envolve a detecção de objetos em movimento no ambiente
ao redor do robô e o seu rastreamento, por exemplo a estimativa do seu estado (posição,
orientação e velocidade) ao longo do tempo. Essa habilidade é acompanhada de alta
complexidade de implementação e custo elevado, tanto de processamento quanto dos
sensores utilizados. O trabalho visa o desenvolvimento de um sistema com boa eficiência
no rastreamento e uma implementação mais acessível para robôs autônomos.

Para resolver o problema de DATMO, em Redmon et al. (2015) é utilizada uma técnica
de aprendizado de máquina chamada deep learning, que consiste na implementação de
uma rede neural artificial na qual atua como extratora de características da imagem. Tais
características são utilizadas para determinar a posição e classificação dos objetos presentes
na imagem.

Já em Thrun (2002) é proposto o uso do filtro de partículas para a associação temporal entre
as detecções feitas. O método consiste na utilização de uma amostra gerada aleatoriamente
com probabilidade de observação conhecida para aproximar o valor da função de interesse
através de seu valor estimado (AMARAL, 2015).

Para atingir o objetivo de rastreamento de objetos móveis no campo visual de uma câmera,
este trabalho propõe a utilização de deep learning, mais especificamente a implementação
de redes neurais convolucionais seguindo a arquitetura YOLO (You Only Look Once)
(REDMON; FARHADI, 2018), com a função de determinar a posição dos objetos presentes
em uma imagem para posteriormente poder estimar sua posição futura com o uso do
algoritmo de filtro de partículas que fará a predição do movimento de tais objetos. Após a
predição, a região estimada é comparada com a região de um objeto detectado no momento
posterior utilizando a abordagem IOU (Intersection Over Union) (ROSEBROCK, 2016)
de tal maneira que é possível fazer associações temporais entre os objetos em diferentes
momentos e por consequência o seu rastreamento.

1.1 OBJETIVOS

1.1.1 Objetivo Geral

O objetivo geral deste trabalho é desenvolver um sistema baseado nos conceitos de DATMO
capaz de reconhecer e rastrear objetos móveis em vídeo.

1.1.2 Objetivos Específicos

Os objetivos específicos identificados para se atingir o objetivo geral proposto são:


12

• Desenvolver um modelo de pré-processamento de dados de vídeo.

• Estudo e implementação de um modelo de detecção e classificação de objetos em vídeo


utilizando redes neurais convolucionais.

• Estudo e implementação de um modelo de associação temporal entre objetos utilizando


filtro de partículas e IOU (Intersection Over Union).

• Avaliar o desempenho dos modelos desenvolvidos na base de dados MOTC (Multiple


Object Tracking Challenge).

1.1.3 Limitações do Trabalho

Não foi objetivo deste trabalho desenvolver um sistema para uso embarcado em plataformas
robóticas. Também não se coletou, nem se avaliou os dados referentes à performance
computacional da execução do sistema.

1.2 ESTRUTURA DO TRABALHO

O trabalho está dividido da seguinte forma: No capítulo 2 são apresentados os conceitos


e trabalhos correlatos importantes para o entendimento do sistema. No capítulo 3 é
apresentada a metodologia de desenvolvimento em cada etapa do projeto. No capítulo 4
são apresentados os resultados dos testes feitos. Por fim, no capítulo 5 é apresentada a
conclusão sobre os resultados obtidos e o método aplicado.
13

2 REFERENCIAL TEÓRICO

Neste capítulo serão descritos os conceitos necessários para entendimento do trabalho. A


partir da seção 2.1 até a seção 2.4 são abordados os conceitos de redes neurais e redes
neurais convolucionais, bem como a arquitetura de rede neural utilizada para detecção
e classificação de objetos. Nas seções 2.5 e 2.6 são apresentadas as técnicas utilizadas
no rastreamento para associação entre os objetos. Por fim, na seção 2.7 demonstra o
funcionamento do algoritmo de filtro de partículas, necessário para a predição de movimento
dos objetos na tarefa de rastreamento e representação do estado do objeto.

2.1 REDES NEURAIS

Aprendizado de máquina é fundamentalmente a utilização de algoritmos na construção


de modelos matemáticos baseado em dados. Esses modelos são usados posteriormente
para fazer inferências a partir de novos conjuntos de dados (ACADEMY, 2019). Uma das
técnicas de Aprendizado de máquina que vem ganhando destaque nos dias atuais são as
Redes Neurais Artificiais (RNA). De acordo com Haykin (1998), na sua forma mais geral,
uma rede neural é uma máquina que é projetada para modelar a maneira como o cérebro
realiza uma tarefa particular.

As redes possuem uma ou mais camadas compostas por nodos, nós ou neurônios, que são
baseados em neurônios biológicos e servem como unidade simples de processamento. Os
nós de cada camada são interligados de forma ponderada, representando um peso sináptico.
Com a topologia adequada, a rede é capaz de gerar resultados ótimos em sua camada de
saída para os dados fornecidos na camada de entrada. Essa topologia é obtida através
de algoritmos de aprendizagem que buscam minimizar o erro na camada de saída através
de pequenos ajustes nos pesos sinápticos das conexões entre os nós de cada camada. Na
Figura 4 está representado uma simplificação de uma RNA genérica.

Figura 4 – Rede neural simples

Fonte: Silva e Junior (2017)


14

2.1.1 Neurônio biológico

A unidade fundamental do cérebro humano é o neurônio, representado na Figura 5. Por


possuir propriedades de excitabilidade e condução de impulsos nervosos, são responsáveis
pela transmissão de sinais. Segundo Braga, Carvalho e Ludemir (2007), os neurônios são
divididos em três secções: o corpo da célula, os dendritos e o axônio, cada um com funções
específicas, porém complementares.

O processo de comunicação entre neurônios ocorre através das sinapses, que é a região
localizada entre neurônios onde agem os neurotransmissores, que são mediadores químicos,
transmitindo o impulso nervoso das ramificações terminais do axônio de um neurônio para
o dendrito do próximo neurônio. No corpo celular essa informação é processada no núcleo
gerando um novo impulso nervoso que é transmitido através do axônio seguindo o sentido
do impulso nervoso.
Figura 5 – Neurônio biológico

Fonte: Silva e Junior (2017)

Para que o neurônio dispare um impulso nervoso para os neurônios seguintes, é necessário
que os sinais recebidos, através das suas sinapses, sejam processados e atinjam um limiar
de excitação. Se em um determinado momento esse limiar for atingido, o impulso nervoso
é disparado, do contrário, são bloqueados e não prosseguem (BRAGA; CARVALHO;
LUDEMIR, 2007).

2.1.2 Modelo MCP

O modelo mais bem aceito em simular o neurônio biológico é o proposto em McCulloch


e Pitts (1943). É uma abordagem matemática que implementa os componentes e o
funcionamento do neurônio biológico.

Neste modelo, é proposto que os impulsos nervosos recebidos pelo neurônio são repre-
sentados por n entradas, x1 , x2 , ..., xn , similarmente ao funcionamento dos dendritos em
um neurônio biológico, e possui apenas um terminal de saída que é representado por y,
fazendo a mesma função do axônio. As sinapses entre axônio e dendritos, nesse caso,
entre os valores de entrada e o neurônio, são emuladas fazendo uma associação ponderada,
15

w1 , w2 , ..., wn , para cada valor de entrada x. Desta forma, o efeito sináptico se dá por wi xi
(BRAGA; CARVALHO; LUDEMIR, 2007).

O corpo celular é emulado por uma fórmula simples que soma todos os valores de entrada
de neurônio, multiplicados pelos seus respectivos pesos sinápticos, wi xi . Assim, é possível
representar o funcionamento do corpo celular de um neurônio k pela Equação 1, onde n é
o número de entradas do neurônio e wi é o peso associado à entrada xi .

n
X
uk = w i xi (1)
i=1

Para que o neurônio dispare, ou seja, ele seja ativado, é necessário que o resultado da soma
ultrapasse o limiar de excitação, ou threshold. Sendo a saída igual a 1 ou 0, dependendo
se o limiar é atingido ou não, respectivamente. A ativação do neurônio é obtida através
da aplicação de uma função de ativação, representada por ϕ. Na descrição original do
modelo MCP, a função de ativação é dada pela função de limiar, threshold. O nodo MCP
terá sua saída ativada obedecendo a Equação 2, onde θ é o limiar (threshold) do neurônio
(HAYKIN, 2008).


1

u≥θ
ϕ(uk ) = (2)
0

u<θ

Figura 6 – Modelo MCP

Fonte: Adaptação feita a partir de Haykin (2008)

2.1.3 Função de ativação

Diversos modelos diferentes foram originados com base em McCulloch e Pitts (1943). Tais
modelos possuem funções de ativação diferentes, e por consequência, saídas diferentes. O
16

principal objetivo de uma função de ativação é limitar a amplitude do valor de saída de


um neurônio (HAYKIN, 2008).

É muito comum incluir um valor à função de ativação chamado de bias, denotado por bk .
Segundo Haykin (2008), o bias tem o efeito de incrementar ou reduzir o valor de entrada
recebido pela função de ativação ϕ, logo, podemos representar a saída yk de um neurônio
a partir da Equação 3 e a Equação 4.

vk = (uk + bk ) (3)

yk = ϕ(vk ) (4)

Como citado anteriormente, o modelo MCP utiliza a função de limiar, threshold, como
função de ativação. Esta função retorna apenas o valor 1 ou 0, por consequência, pequenas
alterações nos pesos e no bias podem causar uma alta mudança no valor de saída do
neurônio.
Figura 7 – Função de ativação threshold

Fonte: Haykin (2008)

Por outro lado, existem outras funções de ativação com diferentes características e utilida-
des, uma delas é a função sigmoid. Esta função tem como resultado infinitos valores entre
0 e 1.

Essa característica possibilita que sejam feias pequenas alterações nos pesos e bias fazendo
com que o resultado tenha uma resposta mais suave a tais alterações. A função sigmoid é
expressa na Equação 5.

1
ϕ(v) = =σ (5)
1 + e−av
17

Figura 8 – Função de ativação sigmoid

Fonte: Haykin (2008)

A função de ativação é uma ferramenta matemática com o objetivo de auxiliar na solução


de problemas complexos. É um área de pesquisa ativa e existem diversos outros tipos de
funções, como Sigmoid, Softmax, ReLU e Tanh (SHULGA, 2017).

2.1.4 Multilayer Perceptron

O modelo MCP introduziu a ideia de um neurônio como uma máquina computacional


em 1943, mas só em Rosenblatt (1957), baseado no modelo MCP, propôs a primeira
abordagem de rede neural com aprendizado supervisionado, o Perceptron. Basicamente, é
uma rede neural de camada única com pesos e bias ajustáveis, de acordo com um algoritmo
de aprendizagem, com o objetivo de classificar padrões que são linearmente separáveis
(gráfico à esquerda da Figura 9).

Figura 9 – Linearmente e não linearmente separáveis

Fonte: Haykin (2008)

Para a classificação de padrões que não são linearmente separáveis (gráfico à direita da
Figura 9) é preciso usar uma abordagem diferente, chamada de Multilayer Perceptron.
Nesta abordagem, os Perceptrons são organizados em múltiplas camadas, sendo que cada
neurônio de qualquer camada está conectado a todos neurônios da camada anterior. Ou
seja, o input de um neurônio são os valores de output de todos os neurônios da camada
anterior.
18

Figura 10 – Multilayer Perceptron

Fonte: Haykin (2008)

As características básicas de uma rede neural multilayer são que cada neurônio precisa
ter uma função de ativação não linear e que seja diferenciável, que tenha uma ou mais
camadas que são ocultas (First hidden layer e Second hidden layer da Figura 10) às
camadas de entrada e saída (Input layer e Output layer da Figura 10, respectivamente), e
a rede possuir um alto grau de conectividade que é determinado pelos pesos sinápticos da
rede (HAYKIN, 2008).

2.1.5 Treinamento da rede neural

Para que uma rede neural alcance a acurácia desejada nos valores da camada de saída em
comparação aos valores esperados, é necessário que a rede aprenda com cada resultado
obtido. Um método popular para treinamento de redes com múltiplas camadas é o
backpropagation, que consiste, basicamente, em duas fases.

A primeira fase é chamada de forward phase, na qual o sinal de entrada é propagado ao


longo da rede, camada por camada até atingir a camada de saída, sofrendo transformações
por conta dos pesos sinápticos e das funções de ativação.

Na backward phase, como é chamada a segunda etapa do processo, uma função calcula o
sinal de erro comparando o valor de saída da rede com a resposta desejada. Esse sinal
é propagado pela rede camada por camada, mas dessa vez fazendo o caminho contrário.
Durante a propagação, sucessivos ajustes são feitos nos pesos sinápticos e bias da rede
(HAYKIN, 2008). Esse processo é repetido diversas vezes até a rede neural atingir um valor
ideal para cada peso sináptico e bias, portanto, fornecendo saídas com maior acurácia.

É possível definir a função de erro como E(W ), que nos fornece a informação de acurácia
da saída da rede neural em comparação ao que é esperado (representado pelo eixo Cost do
gráfico na Figura 11). Esta função tem como parâmetro todos os pesos sinápticos e bias (b)
da rede neural (representado pelo eixo Weight do gráfico na Figura 11). Os parâmetros da
19

(L)
função de erro podem ser definidos como Wjk , sendo L a camada em que o neurônio em
questão está, j a identificação do neurônio na camada L, e k a identificação do neurônio
na camada L − 1. A função de erro é descrita na Equação 6

(1) (1) (L)


E(W ) = E(W11 , W12 , ..., Wjk , b) (6)

Na Equação 7 é representado o gradiente ∇E (Gradient na Figura 11), calculado a partir


da função de erro, que é um vetor e indica o sentido e a direção na qual obtém-se o maior
incremento possível. É simplesmente um vetor formado por todas as derivadas parciais da
função de erro em relação aos seus parâmetros.

δE δE δE
∇E = ( (1)
, ..., (L)
, ) (7)
δW11 δWjk δb

Por sua vez a descida de gradiente é um método de otimização para encontrar um mínimo
local de uma função. Se o gradiente indica o maior incremento possível, o seu negativo
representa o contrário. Para chegar a esse mínimo local é necessário que o processo de
descida do gradiente seja feito em passos pequenos, para isso é aplicado um fator de
aprendizado, α, ao −∇E, que indica o melhor sentido e direção até o mínimo local.
Figura 11 – Descida de gradiente

Fonte: Kapil (2019)

Como apresentado na Equação 8, os ajustes são feitos, passo a passo, nos pesos e bias de
cada neurônio de acordo com a descida de gradiente, apresentado como Incremental Step
na Figura 11, até chegar ao mínimo local, representado por Minimum Cost na Figura 11.

‘(L) (L) δE
Wjk ←− Wjk − α (L)
(8)
δWjk
20

2.2 REDES NEURAIS CONVOLUCIONAIS

Dentro do campo de redes neurais, existe uma classe chamada de Redes Neurais Convolu-
cionais (Convolutional Neural Network - CNN ). Muito comumente usada em aplicações
de análise de imagens, esse tipo de rede busca a identificação de características dentro de
subconjuntos de dados. O que torna essa abordagem uma boa opção para aplicações de
reconhecimento de objetos em imagens é sua invariância quanto a escala, a translação ou
orientação dos objetos, tonando-a mais eficiente em reconhecer padrões em um conjunto
de dados (BONNER, 2019).

A CNN possui uma arquitetura formada por camadas convolucionais que são responsáveis
pela extração de características e as camadas de pooling que reduzem a dimensionalidade
da rede e aparecem, geralmente, logo após uma camada convolucional. Por fim, o resultado
gerado serve de entrada para uma rede completamente conectada com o intuito de
apresentar as probabilidades de cada classe que foi inferida.

Figura 12 – Rede neural convolucional

Fonte: Stewart (2019)

Na Figura 12 é apresentado uma simples arquitetura de uma CNN com suas três principais
camadas: convolucionais, pooling e totalmente conectada.

2.2.1 Camada convolucional

As camadas convolucionais (CL), responsáveis por fazer a convolução, são conjuntos de


filtros que percorrem sequencialmente o volume de entrada (representado por Input Image
na Figura 13) fazendo a multiplicação matricial elemento a elemento. Os resultados dessas
multiplicações são os mapas de características (feature maps). A distância que o filtro se
move é definido pelo stride, ou seja, se o stride for igual a 2, o filtro vai se mover duas
posições para fazer o próximo cálculo.

Cada filtro é chamado de kernel e tem seu tamanho reduzido se comparado ao volume
de entrada, mas tem sua profundida do mesmo tamanho. Por exemplo, se o filtro tem
seu tamanho igual a 3 x 3 e a imagem que está sendo analisada for colorida, na qual
21

Figura 13 – Filtro da rede convolucional

Fonte: Kirillov (2018)

possui por definição 3 feature maps, um para cada cor RGB, então o filtro tem dimensões
iguais a 3(largura) x 3(altura) x 3(profundidade). A quantidade de filtros em uma
camada convolucional define a quantidade de feature maps geradas. Esses mapas são
então empilhados e passam por uma função de ativação para posteriormente servirem de
entrada para próxima camada, sua profundidade agora é igual a quantidade de feature
maps gerados.

Figura 14 – Filtro com 3 camadas de profundidade

Fonte: Saha (2018)

Durante o processo de treinamento da rede, os valores dos filtros são ajustados para que
sejam ativados na presença de características relevantes, como orientação de bordas ou
manchas de cores (KARPATHY, 2017). A Figura 14 é a representação de uma imagem
sendo processada pelo filtro da camada convolucional. A imagem, por ser colorida, tem 3
feature maps de entrada (representadas por Input Channel #1, Input Channel #2 e Input
Channel #3 na Figura 14), e o filtro da camada convolucional também possui profundidade
igual a 3 (representadas por Kernel Channel #1, Kernel Channel #2 e Kernel Channel
#3 na Figura 14).
22

Os ajustes nos valores dos filtros são feitos utilizando a mesa técnica de aprendizado de
uma rede neural totalmente conectada, ou seja, é através da descida de gradiente e do
backpropagation que se chega a um valor ideal dos filtros para extraírem as características
relevantes na imagem.

Para que ao final de uma camada convolucional a imagem não tenha seu tamanho alterado,
é necessário que o stride tenha tamanho igual a 1, e que a imagem possua bordas (paddings).
Do contrário, a imagem irá passar por uma redução do seu tamanho. Mas tais parâmetros
variam de acordo com o objetivo da rede neural.

2.2.2 Camada de pooling

Geralmente, após uma camada convolucional existe a camada de pooling que tem como
objetivo principal reduzir aos poucos as dimensões (largura e altura) do volume de entrada
para a próxima camada convolucional, consequentemente, diminui o custo computacional
da rede. Com essa abordagem é possível evitar o overfitting e manter as informações mais
importantes para próxima camada. Os dois tipos principais de pooling são o Max pooling
(Figura 15) que utiliza o maior valor do kernel e o Average pooling (Figura 15) que retorna
a média dos valores dentro do kernel. A abordagem de Max Pooling é a mais utilizada por
eliminar valores desprezíveis que as vezes podem ser interpretados como ruídos além criar
uma invariância a pequenas mudanças e distorções locais (GOODFELLOW; BENGIO;
COURVILLE, 2016).

Figura 15 – Camada de pooling

Fonte: Saha (2018)

Por fim, o volume de dados com várias dimensões resultante passa por uma transformação
chamada flattening (achatamento) na qual os dados são dispostos na forma de um único
vetor. Esse vetor é utilizado como dados de entrada para uma rede neural profunda
totalmente conectada (fully-connected) que irá classificar o objeto de acordo com as
características encontradas na CNN. Esse processo é demonstrado na Figura 16.
23

Figura 16 – Processo de achatamento

Fonte: Jeong (2019)

2.3 BOUNDING BOX e IoU

IoU (Intersection over Union), também conhecido como índice de Jaccard (CONTRI-
BUTORS, 2019), é uma medida muito usada em detecção de objetos que representa a
similaridade entre dois conjuntos de dados. No contexto de visão computacional, esses
conjuntos de dados são representados por bounding boxes, que são referências que definem
a região do objeto detectado, podendo a região ser em duas ou três dimensões. Na primeira
coluna da Figura 17, o bounding box é representado como um retângulo envolvendo a área
do objeto, diferente da segunda coluna da Figura 17 na qual o bounding box é representado
como uma caixa envolvendo o objeto em 3 dimensões. A terceira coluna da Figura 17 foi
utilizado um vetor de 3 dimensões para fazer a mesma representação.

Figura 17 – Bounding box

Fonte: Sochor, Špaňhel e Herout (2017)


24

Sendo A e B bounding boxes, o IoU é calculado através da interseção entre eles, dividido
pela união, ou seja, a proporção da intersecção entre duas regiões em relação a união das
mesmas. O cálculo é mostrado na Equação 9 e sua representação gráfica em Figura 18.

|A ∩ B|
IoU (A, B) = (9)
|A ∪ B|

Figura 18 – Intersection over Union

Fonte: Rosebrock (2016)

Desta forma, neste trabalho será utilizado bounding boxes para determinar a região em que
um objeto se encontra na imagem e o IoU será usado para associar a predição do estado
futuro de um objeto com a sua detecção em um tempo futuro, e com isso poder rastrear o
objeto através do tempo.

2.4 YOLO

YOLO (You Only Look Once) é uma rede neural convolucional criada para detecção de
objetos em imagens e se encontra em sua terceira versão (YOLOv3). O modelo é capaz
de determinar a localização de um objeto na imagem, e também classifica-lo. YOLO
foi construído a partir de uma rede neural chamada Darknet, que a princípio possui
53 camadas já treinadas utilizando o conjunto de dados Imagenet, e partir desta rede
subjacente, foram adicionadas mais 53 camadas, totalizando 106 camadas convolucionais
que são utilizadas para a detecção dos objetos (KATHURIA, 2018).

A Figura 19 demonstra o processo de detecção, no qual a rede divide a imagem em células,


formando uma grid cells de dimensões S x S. Cada célula é responsável por fazer B
predições de objetos. Cada predição retorna a chance de ter um objeto nessa determinada
célula (Objectness Score na Figura 19), as 4 coordenadas do bounding box do objeto e
as probabilidades para cada classe de objetos. Posteriormente, apenas as detecções com
maior Objectness Score são mantidos (REDMON; FARHADI, 2018). Na Figura 20 é
possível visualizar a confiança (Objectness Score) da detecção de acordo com a espessura
do bounding box.
25

Figura 19 – Kernel de detecção do YOLO

Fonte: Kathuria (2018)

Como demonstrado na Figura 20, paralelamente, cada célula define a classe do objeto
presente, criando um mapa de classes de objetos. Essa informação é então combinada
com as predições de objetos para o refinamento das detecções. Esse processo é realizado
em 3 momentos diferentes com dimensões S x S diferentes, essa abordagem serve para
identificar objetos de diferentes tamanhos na imagem (REDMON et al., 2015).

Figura 20 – Processo de detecção do YOLO

Fonte: Redmon et al. (2015)


26

2.5 NON-MAX SUPPRESSION

Modelos de detecção de objetos fornecem proposições, que são regiões candidatas que
podem conter um objeto. Mas, é possível que um mesmo objeto seja detectado mais de
uma vez, por isso é necessária a utilização de uma técnica para filtrar essas proposições
baseado em um critério determinado, resultando em um refinamento das detecções. A
técnica é chamada de supressão não máxima (non-max suppression).

Figura 21 – Supressão não máxima

Fonte: Sambasivarao (2019)

O algoritmo, primeiramente, descarta todas as detecções que possuem um grau de confiança


inferior a um limiar determinado. Posteriormente calcula o IoU de uma detecção com
todas as detecções da mesma classe, as que tiverem o IoU maior que o limiar de supressão
não máxima são eleitos para descarte, a detecção que tiver o menor grau de confiança
é descartado. Esse processo é repetido para todas as detecções até que não haja mais
objetos a serem suprimidos. Dessa forma, somente as detecções que melhor representarem
o bounding box do objeto são mantidas (BODLA et al., 2017).

2.6 MÉTODO HÚNGARO

O método Húngaro é um algoritmo de otimização combinatória que resolve o problema de


designação. O problema consiste em determinar a menor soma dos valores contidos em
uma dada matriz quadrada, uma vez que se um valor qualquer for utilizado para soma,
todos os outros valores da mesma coluna e linha não podem ser utilizados, e para cada
coluna e linha é necessário ter apenas um valor selecionado. Se uma matriz tem dimensões
n x n, existem n! combinações possíveis. Utilizando a matriz A da Equação 10 como
exemplo, é possível visualizar na Figura 22 os possíveis resultados para essa matriz. Nesse
exemplo, o valor mínimo obtido é 176, mas para grandes matrizes fica difícil encontrar tal
27

valor mínimo, para isso é usado o método húngaro.

 

53 96 37
A = 47 87 41

 (10)
 
60 92 36

Figura 22 – Possíveis combinações de somas

Fonte: Elaborado pelo autor (2019)

O método húngaro, criado pelos húngaros Dénes König e Jenő Egerváry, é um procedimento
de cinco passos para resolver o problema apresentado e obter outra matriz com uma alocação
ótima (KUHN, 1955). São eles:

1. Subtração da menor entrada de cada linha de todas as entradas da mesma linha. Dessa
forma, cada linha terá pelo menos uma entrada zero e todas as outras entradas são não
negativas.

2. Subtração da menor entrada de cada coluna de todas as entradas de mesma coluna.


Dessa forma, cada coluna terá pelo menos uma entrada zero e todas as outras entradas
são não negativas.

3. Seleção de um número mínimo de linhas e colunas de tal forma que contenha todos os
valores iguais a 0 da matriz.

4. Teste de otimização

a) Se o número mínimo de linhas e colunas selecionadas necessárias para cobrir os zeros


é n, então uma alocação ótima de zeros é possível e encerramos o procedimento.

b) Se o número mínimo de traços necessários para cobrir os zeros é menor do que n,


então ainda não é possível uma alocação ótima de zeros. Nesse caso, é necessário ir
para o passo 5.

5. Determinar a menor entrada que não está em alguma coluna ou linha selecionada.
Subtração desta entrada de todas as entradas que não estão em alguma coluna ou linha
28

selecionada e depois a adição desta mesma entrada a todas as entradas de colunas e


linhas selecionadas. Retornar ao passo 3.

Ao fim deste processo é possível obter alocação ótima entre dois recursos, ou, no caso
da tarefa de rastreamento, é possível fazer associações entre objetos rastreados e novas
detecções. Nesse caso, os valores da matriz são os obtidos através do IoU de cada objeto
rastreado para cada nova detecção. A única diferença é que para essa tarefa é necessário
obter o maior valor. Por isso, antes de se iniciar o método húngaro, todos os valores da
matriz devem ser multiplicados por -1 (GUIRADO; ROCHA, 2014).

2.7 FILTRO DE PARTÍCULAS

O filtro de partículas pertence a uma classe de algoritmos denominada de Métodos Sequen-


cias de Monte Carlo, que é apresentada na literatura por diversas outras nomenclaturas,
como filtros bootstrap, condensação, filtro de Monte Carlo. O filtro de partículas funciona
como um método probabilístico que visa a resolução de problemas em que se deve estimar
o estado interno de sistemas dinâmicos não lineares e não gaussianos com observações
parciais (AMARAL, 2015).

Consiste na utilização de um conjunto de amostragem gerado aleatoriamente, onde cada


elemento do conjunto é uma partícula, com probabilidade de observação conhecida para
aproximar o valor da função de interesse através de seu valor estimado. A probabilidade a
posteriori é representada não mais por uma gaussiana, mas por uma distribuição discreta
de probabilidade, definida através de um conjunto amostral de partículas e seus respectivos
pesos, conforme visto na Figura 23. A distribuição da Figura 23 pode ser representada
por partículas com peso (centro) ou sem peso (abaixo), neste último caso a concentração
de partículas é o único indicador da probabilidade.

Figura 23 – Representação de uma distribuição de probabilidades através de partículas.

Fonte: Amaral (2015)


29

Para a tarefa de rastreamento, ou seja, a estimativa do estado (posição, orientação e


velocidade) dos objetos, neste trabalho, utilizou-se uma variante do filtro de partícu-
las denominada bootstrap ou re-amostragem por importância da amostragem (sampling
importance re-sampling – SIR).

O filtro de partículas representa a função de densidade de probabilidade do estado do


objeto por um conjunto de amostras aleatórias (ou partículas), ao invés de uma função
sobre o espaço de estados. A cada iteração, a variante bootstrap opera em três fases:
predição, correção e re- amostragem. Na fase de predição, um estado é estimado para cada
partícula com base no estado anterior da partícula por meio da amostragem de um modelo
de transição de estado; o estado é uma amostra de uma distribuição de probabilidade
de transição de estados dado o estado anterior. O estado anterior e o estado estimado
são representados por Particle set e Evaluate prediction na Figura 24, respectivamente.
Na fase de correção, um peso é calculado para cada partícula com base em uma medida
por meio de um modelo de observação; o peso é a probabilidade da medida sob o estado
estimado na fase de predição. Finalmente, na fase de re-amostragem, M partículas são re-
amostradas com reposição, onde M é o número de partículas no conjunto de partículas.
A probabilidade de amostrar uma partícula é dada pelo seu peso. A re-amostragem
transforma um conjunto de M partículas em um outro conjunto de partículas de mesmo
tamanho (esse processo é representado por Resample na Figura 24). O novo conjunto
usualmente possui muitas duplicatas, porque as partículas são amostradas com reposição.
Além disso, as partículas contidas pelo novo conjunto tendem a ser aquelas com maior peso.
Ao final, esse processo é propagado para que se possa aproximar a função de interesse
(Propagate na Figura 24).

Figura 24 – Ilustração de uma iteração do algoritmo Sampling Importance Resampling,


mostrando partículas com diferentes pesos.

Fonte: Amaral (2015)

A utilização do filtro de partículas na área da robótica é bastante comum, como mostrado


em Thrun (2002). Sua aplicação se justifica demonstrando ser capaz de amenizar o
30

problema de oclusão de objetos e leituras falhas de sensores, visto que funciona por
inferência probabilística, e possui uma excelente eficácia devido ao fato de não ser um
método determinístico. Um Exemplo de aplicação pode ser visto na Figura 25.

Figura 25 – Convergência do filtro de partículas no rastreamento.

Fonte: Thrun (2002)


31

3 DESENVOLVIMENTO

Nesse trabalho foi desenvolvido um protótipo de um sistema cujo objetivo é rastrear


objetos presentes em um vídeo fornecido como entrada, utilizando redes neurais e filtro
de partículas. A rede neural YOLO é utilizada para detecção dos objetos presentes na
imagem (caixas azuis na Figura 26), com ele é possível obter dados da classe e localização
de cada objeto. O algoritmo de filtro de partículas, por sua vez, é capaz de estimar o
estado futuro de cada objeto (processo de predição das partículas na Figura 26). Dado os
objetos que estão sendo estimados e novas detecções, é possível fazer associações entre
eles e determinar três categorias de objetos, são eles: Objetos associados, detecções não
associadas e objetos rastreados não associados.

As detecções não associadas recebem um novo conjunto de partículas e passam a ser


rastreadas, recebendo uma identificação (processo vermelho na Figura 26). Os objetos
que já estão sendo rastreados mas não foram associados a nenhuma nova detecção tem
sua idade acrescida (processo amarelo na Figura 26), caso essa idade chegue a um limite,
o rastreamento desse objeto é encerrado. Por fim, os objetos que foram associados com
sucesso, têm suas partículas atualizadas, ou seja, é calculada a importância de cada
partícula (com base nos dados da detecção) e é feita a re-amostragem. Esse processo é
repetido ao longo do tempo para cada frame do vídeo.

Figura 26 – Fluxo de funcionamento do sistema

Fonte: Elaborado pelo autor (2019)

O sistema foi adaptado do trabalho apresentado em Bewley et al. (2016), no qual utiliza
filtro de Kalman para a etapa de predição (KALMAN, 1960). As adaptações feitas foram
a substituição do filtro de Kalman pelo filtro de partículas e o uso de redes neurais como
fornecedora dos dados de detecção.

Neste capítulo é descrito os detalhes da implementação do sistema proposto. O sistema


32

foi desenvolvido na linguagem Python, utilizando o OpenCV (OpenCV team, 2019) para
a leitura e exibição dos vídeos e a biblioteca Pytorch (Torch Contributors, 2019) para a
implementação da rede neural YOLO e também para o pré-processamento dos dados de
entrada.

3.1 PRÉ-PROCESSAMENTO

Neste trabalho foi usado arquivos de vídeo como dado de entrada para o sistema proposto.
Mesmo com a possibilidade de se utilizar streaming de dados gerado direto de um dispositivo
eletrônico, como uma câmera, optou-se por utilizar um vídeo já gravado pois necessita de
uma quantidade menor de recursos computacionais para o funcionamento do sistema. Em
ambos os casos, a etapa de pré-processamento da imagem é o mesmo, que é o conteúdo
desta seção.

Um vídeo nada mais é do que uma série de imagens que proporcionam a sensação de
movimento se exibidas de forma sequencial, e essas imagens, também chamadas de frames,
são utilizadas como dados de entrada para o sistema de rastreamento. Para que se possa
extrair os frames é necessário utilizar o OpenCV, uma biblioteca da linguagem Python
para manipulação de imagens. Na linha 24 do Quadro 1 é demonstrado a utilização do
OpenCV para a criação de um objeto chamado “vid” que é o responsável pela leitura do
arquivo de vídeo. O comando de leitura, na linha 27, retorna um frame do vídeo, de forma
sequencial, a cada chamada.

Após a leitura do frame, é necessário que ele passe por um processo de transformação
para que possa servir, adequadamente, como dado de entrada do sistema de rastreamento.
Esse processo começa na linha 28 do Quadro 1, na qual o método “cv2.cvtColor” altera o
padrão de cor do frame para o padrão adequado ao sistema. Posteriormente, na linha 29
(Quadro 1), o objeto “frame” fornecido pela leitura do arquivo de vídeo é transformado em
um objeto de imagem através do método “pilimage” que utiliza a biblioteca PIL (LUNDH;
CLARK; CONTRIBUTORS, 2019).

Por fim, na linha 30 (Quadro 1), são feitas as transformações necessárias para que a imagem
sirva de input para o modelo de detecção. Nesta etapa, através do método “preprocess”,
é utilizado o Pytorch para as transformações, que são o redimensionamento da imagem
segundo o parâmetro na linha 4 (Quadro 1), o acréscimo de bordas a imagem e a conversão
do tipo de dado para tensores, que são estrutura de dados matricial multidimensional
(Torch Contributors, 2019). Uma última transformação é feita na linha 21 (Quadro 1), na
qual modifica as dimensões do tensor para 1 x 173056, ou seja, causa um “achatamento”,
uma vez que a imagem possui dimensões 416 x 416 após a etapa de redimensionamento.
O motivo do achatamento é devido ao fato de que a rede neural recebe como input uma
estrutura de dados nessas exatas dimensões.
33

Quadro 1 – Algoritmo de Pré-processamento das imagens.


1 from t o r c h v i s i o n import t r a n s f o r m s
2 import cv2
3 from PIL import Image
4 img_size = 416 # Tamanho da imagem
5
6 d e f p i l i m a g e ( frame ) :
7 r e t u r n Image . f r o m a r r a y ( frame )
8
9 d e f p r e p r o c e s s ( img ) :
10 r a t i o = min ( img_size /img . s i z e [ 0 ] , img_size /img . s i z e [ 1 ] )
11 imw = round ( img . s i z e [ 0 ] ∗ r a t i o )
12 imh = round ( img . s i z e [ 1 ] ∗ r a t i o )
13 img_transforms=t r a n s f o r m s . Compose ( [
14 t r a n s f o r m s . R e s i z e ( ( imh , imw) ) ,
15 t r a n s f o r m s . Pad ( ( max( i n t ( ( imh−imw) / 2 ) , 0 ) ,
16 max( i n t ( ( imw−imh ) / 2 ) , 0 ) , max( i n t ( ( imh−imw) / 2 ) , 0 ) ,
17 max( i n t ( ( imw−imh ) / 2 ) , 0 ) ) , ( 1 2 8 , 1 2 8 , 1 2 8 ) ) ,
18 t r a n s f o r m s . ToTensor ( ) ] )
19
20 image_tensor = img_transforms ( img )
21 input_img = image_tensor . unsqueeze_ ( 0 )
22 r e t u r n input_img
23
24 v i d = cv2 . VideoCapture ( ’ t e s t . mp4 ’ )
25
26 w h i l e ( True ) :
27 r e t , frame = v i d . r e a d ( ) # Lendo o a r q u i v o de v í deo
28 frame = cv2 . c v t C o l o r ( frame , cv2 .COLOR_BGR2RGB)
29 p i l i m g = p i l i m a g e ( frame )
30 input_img = p r e p r o c e s s ( p i l i m g )

Fonte: Elaborado pelo autor (2019)

3.2 DETECÇÃO DE OBJETOS

Após os dados passarem pela etapa de pré-processamento, estarão prontos para servirem de
input para o modelo de detecção. Para criação do modelo, primeiramente, é preciso definir
os arquivos que contém a arquitetura da rede neural e o arquivo com as configurações
dos pesos desta rede. O arquivo “yolov3.cfg” na linha 5 (Quadro 2) contém a definição
da arquitetura da rede neural YOLO. Os pesos da rede, já treinados, se encontram no
arquivo “yolov3.weights” (linha 6 do Quadro 2). Com esses arquivos é possível instanciar
um objeto da classe “Darknet” que será o modelo para detecção (linha 5 a linha 10 do
Quadro 2).

A função “detect_image” (linha 12 a linha 17 do Quadro 2) é a responsável por retornar


as detecções. Ela recebe como parâmetro o tensor resultante do procedimento de pré-
processamento do frame, e o utiliza como entrada para o modelo da rede neural instanciado.
O modelo retorna uma lista dos objetos detectados, contendo informações da classe, grau
de confiança do objeto e sua localização (linha 14 do Quadro 2). O último passo é
o refinamento das detecções através da função “utils.non_max_suppression” (linha 15
34

do Quadro 2) que aplica a técnica de supressão não máxima (non-max suppression) às


detecções. Por fim a função retorna uma lista com todas as detecções feitas.

Quadro 2 – Algoritmo de detecção de objetos.


1 from models import ∗
2
3 c o n f _ t h r e s =0.8 # Grau de c o n f i a n ç a n e c e s s á r i o
4 nms_thres =0.4 # non−maximum s u p p r e s s i o n t h r e s h o l d
5 c o n f i g _ p a t h= ’ c o n f i g / y o l o v 3 . c f g ’
6 weights_path= ’ c o n f i g / y o l o v 3 . w e i g h t s ’
7 img_size = 416 # Tamanho da imagem
8
9 model = Darknet ( config_path , img_size=img_size ) # from models
10 model . l o a d _ w e i g h t s ( weights_path )
11
12 d e f detect_image ( input_img ) :
13 with t o r c h . no_grad ( ) :
14 d e t e c t i o n s = model ( input_img )
15 d e t e c t i o n s = u t i l s . non_max_suppression ( d e t e c t i o n s , 8 0 , c o n f _ t h r e s ,
nms_thres )
16
17 return detections [ 0 ]
18
19 d e t e c t i o n s = detect_image ( input_img )

Fonte: Elaborado pelo autor (2019)

Na Figura 27 é apresentado o tensor que a função de detecção retorna para cada frame
processado. Para cada detecção, são fornecidas as coordenadas do canto superior esquerdo
e canto inferior direito do bounding box, o grau de confiança na detecção, o grau de
confiança da classe do objeto e também a classe do objeto em si.

Figura 27 – Exibição dos objetos detectados no terminal.

Fonte: Elaborado pelo autor (2020)

Na Figura 28 é exibido o bounding box de cada objeto detectado e também a sua respectiva
classe. Nesta etapa do desenvolvimento, os objetos são apenas detectados e classificados,
não é possível fazer uma distinção entre cada objeto. A diferenciação entre os objetos,
mesmo que da mesma classe, é feita na etapa de rastreamento.
35

Figura 28 – Exibição dos objetos detectados no vídeo processado.

Fonte: Elaborado pelo autor (2020)

3.3 INICIALIZAÇÃO DO FILTRO DE PARTÍCULAS

Com as informações do bounding box do objeto detectado é possível inicializar um conjunto


de partículas que serão a representação do estado do objeto. A partir desse ponto, a
posição do objeto não é mais representada pelo bounding box e sim pelo conjunto de
partículas do algoritmo de filtro de partículas.

Uma partícula possui uma série de atributos, como, as coordenadas (linhas 4 e 5 do


Quadro 3), a velocidade em que a partícula se movimenta (linha 6 do Quadro 3), a direção
do seu movimento (linha 7 do Quadro 3) e a importância da partícula perante a todo o
conjunto (linha 7 do Quadro 3).

Quadro 3 – Representação das partículas em Python.


1 class Particle :
2
3 d e f __init__ ( s e l f , pos_x , pos_y , v e l o c i t y , t h e t a , w e i g h t ) :
4 s e l f . pos_x = pos_x
5 s e l f . pos_y = pos_y
6 self . velocity = velocity
7 s e l f . theta = theta
8 s e l f . weight = weight

Fonte: Elaborado pelo autor (2019)

Cada objeto rastreado tem seu próprio conjunto de partículas que possuem seus atributos
inicializados de forma aleatória, exceto pelas coordenadas que são as mesmas da detecção.
A partir deste momento as partículas são utilizadas para representação da posição do
objeto através da média das posições do conjunto. A função “mean_pos” (Quadro 4) é a
responsável por obter a posição.
36

Quadro 4 – Posição média das partículas.


1 d e f mean_pos ( s e l f , p a r t i c l e s ) :
2 sum_x = 0 .
3 sum_y = 0 .
4
5 for p a r t i c l e in p a r t i c l e s :
6 sum_x += p a r t i c l e . pos_x
7 sum_y += p a r t i c l e . pos_y
8
9 r e t u r n (sum_x/ s e l f . num_of_particles , sum_y/ s e l f . num_of_particles )

Fonte: Elaborado pelo autor (2019)

Figura 29 – Representação de um objeto sendo rastreado pelas partículas.

Fonte: Elaborado pelo autor (2020)

Na Figura 29, diferente da Figura 28, os objetos estão identificados com um número, isso
mostra que neste momento os objetos estão sendo rastreados e já há uma diferenciação
entre eles. Também é exemplificado o conjunto de partículas de um determinado objeto.

3.4 PREDIÇÃO

Para cada objeto rastreado existe um conjunto de partículas que são as responsáveis por
determinar o estado do objeto. Esse estado representa a posição do objeto e seu movimento
pois cada partícula possui velocidade e a direção para onde está se movimentando. Para que
se possa predizer o estado futuro do objeto, as partículas são movimentadas na velocidade
e direção determinada por um tempo específico e posteriormente são adicionados ruídos
aos seus atributos para que as partículas não convirjam tão rápido para o estado que
queremos determinar ao longo do tempo. Esse processo é feito pelo método “motion_model”
(Quadro 5).
37

Quadro 5 – Modelo de movimentação das partículas.


1 import numpy a s np
2
3 min_vel = −500.0
4 max_vel = 5 0 0 . 0
5 velo_stdev = 200.0
6 theta_stdev = 0.5
7 delta_time = 0.05
8
9 d e f motion_model ( p a r t i c l e s ) :
10 for p a r t i c l e in p a r t i c l e s :
11 new_theta = p a r t i c l e . t h e t a + np . random . normal ( 0 . , t h e t a _ s t d e v )
12
13 n e w _ v e l o c i t y = p a r t i c l e . v e l o c i t y + np . random . normal ( 0 . ,
velo_stdev )
14 i f ( n e w _ v e l o c i t y > max_vel ) :
15 n e w _ v e l o c i t y = max_vel
16 e l i f ( n e w _ v e l o c i t y < min_vel ) :
17 n e w _ v e l o c i t y = min_vel
18
19 new_x = p a r t i c l e . pos_x + ( p a r t i c l e . v e l o c i t y ∗ d e l t a _ t i m e ∗ np .
cos ( p a r t i c l e . theta ) )
20 new_y = p a r t i c l e . pos_y + ( p a r t i c l e . v e l o c i t y ∗ d e l t a _ t i m e ∗ np .
sin ( p a r t i c l e . theta ) )
21
22 particle . pos_x = new_x
23 particle . pos_y = new_y
24 particle . v e l o c i t y = new_velocity
25 particle . t h e t a = new_theta
26
27 return p a r t i c l e s

Fonte: Elaborado pelo autor (2019)

Figura 30 – Representação da movimentação das partículas e a predição do estado futuro


do objeto.

Fonte: Elaborado pelo autor (2020)


38

A etapa de predição da Figura 26 é a aplicação do método “motion_model” para cada


conjunto de partícula dos objetos rastreados. A Figura 30 ilustra a movimentação das
partículas do objeto rastreado "person-1"(setas vermelhas) e a predição do estado futuro
deste objeto (caixa vermelha próxima a "person-1"). É essa predição que será associada às
detecções do frame posterior para dar continuidade ao rastreamento.

3.5 ASSOCIAÇÃO

Neste ponto do desenvolvimento, o próximo frame é processado e novas detecções são


feitas, sendo necessário associa-las às predições dos objetos que já estão sendo rastreados.
O resultado destas associações são três categorias de objetos:

1. Objeto rastreado associado a uma detecção. Esse objeto vai ter seu estado atualizado.

2. Detecção não associada. Para essa detecção vai ser inicializado um conjunto de partículas
e passa a ser um objeto rastreado.

3. Objeto rastreado mas não associado. Esse objeto tem sua idade acrescida até que se
atinja um limite e o rastreamento seja interrompido, ou que seja associado a alguma
detecção futura.

A Figura 31 exemplifica o funcionamento desta etapa. As caixas vermelhas em (b) são as


predições das respectivas caixas em (a), já as caixas verdes em (b) são as detecções do
novo frame. Em (b) é mostrado um alto grau de IoU entre a detecção B e a predição 1 e
também entre a detecção C e a predição 2, portanto, as predições 1 e 2 terão suas partículas
atualizadas em relação as suas respectivas detecções e vão possuir um novo estado em (c).
Já a predição 3 não foi associada a nenhuma detecção e terá sua idade acrescida. Por fim,
um novo conjunto de partículas será criado para o início do rastreamento da detecção A.

Figura 31 – Associação entre predições e novas detecções.

Fonte: Cohen (2019)


39

O Quadro 6 apresenta o algoritmo utilizado para associação entre as detecções e os objetos


rastreados. Primeiramente é calculado a matriz de IoU de cada objeto detectado para
cada objeto rastreado (Linha 8). Posteriormente é utilizado o método Húngaro na matriz
de IoU para definir a melhor alocação entre as detecções e os objetos rastreados (Linha 9).
O restante do código é responsável pela separação dos objetos nas três categorias possíveis
apresentadas na lista anterior.

Quadro 6 – Algoritmo de associação.


1 def associate_detections_to_trackers ( detections , trackers , iou_threshold =
0.3) :
2 i f ( l e n ( t r a c k e r s )==0) :
3 r e t u r n np . empty ( ( 0 , 2 ) , dtype=i n t ) , np . a r a n g e ( l e n ( d e t e c t i o n s ) ) , np . empty
( ( 0 , 5 ) , dtype=i n t ) # Matriz v a z i a
4 iou_matrix = np . z e r o s ( ( l e n ( d e t e c t i o n s ) , l e n ( t r a c k e r s ) ) , dtype=np . f l o a t 3 2 )
5
6 f o r d , d e t i n enumerate ( d e t e c t i o n s ) :
7 f o r t , t r k i n enumerate ( t r a c k e r s ) :
8 iou_matrix [ d , t ] = i o u ( det , t r k )
9 matched_indices = linear_sum_assignment (−iou_matrix ) # Hungariaan
algorithm
10 matched_indices = np . c o n c a t e n a t e ( ( matched_indices [ 0 ] . r e s h a p e ( −1 ,1) ,
matched_indices [ 1 ] . r e s h a p e ( −1 ,1) ) , a x i s =1)
11
12 unmatched_detections = [ ]
13 f o r d , d e t i n enumerate ( d e t e c t i o n s ) :
14 i f ( d not i n matched_indices [ : , 0 ] ) :
15 unmatched_detections . append ( d )
16 unmatched_trackers = [ ]
17 f o r t , t r k i n enumerate ( t r a c k e r s ) :
18 i f ( t not i n matched_indices [ : , 1 ] ) :
19 unmatched_trackers . append ( t )
20
21 # f i l t e r out matched with low IOU
22 matches = [ ]
23 f o r m i n matched_indices :
24 i f ( iou_matrix [m[ 0 ] ,m[ 1 ] ] < i o u _ t h r e s h o l d ) :
25 unmatched_detections . append (m[ 0 ] )
26 unmatched_trackers . append (m[ 1 ] )
27 else :
28 matches . append (m. r e s h a p e ( 1 , 2 ) )
29 i f ( l e n ( matches )==0) :
30 matches = np . empty ( ( 0 , 2 ) , dtype=i n t )
31 else :
32 matches = np . c o n c a t e n a t e ( matches , a x i s =0)
33
34 r e t u r n matches , np . a r r a y ( unmatched_detections ) , np . a r r a y (
unmatched_trackers )

Fonte: Elaborado pelo autor (2019)

A Figura 32 é a representação da matriz de IoU do exemplo apresentado na Figura 31. Já


a Figura 33 é o resultado das associações entre detecções e predições após a utilização do
algoritmo húngaro.
40

Figura 32 – Matriz de IoU.

Fonte: Cohen (2019)

Figura 33 – Matriz de alocação resultante do algoritmo Húngaro.

Fonte: Cohen (2019)

3.6 ATUALIZAÇÃO

Para os objetos detectados mas não associados, é inicializado um novo conjunto de


partículas para começar seu rastreamento. Mas, para os objetos já rastreados que foram
associados com sucesso a um objeto detectado, é dito que houve uma combinação, ou
seja, houve um match. Nesse caso, é dado início ao processo de atualização do estado
desse objeto. Esse processo é, mais precisamente, a atualização do estado do conjunto de
partículas responsável pelo rastreamento do objeto. O processo começa com a chamada do
modelo de observação (linha 7 do Quadro 7), que recebe como parâmetro as coordenadas
centrais do objeto detectado e o conjunto de partículas do objeto rastreado.

Quadro 7 – Modelo de observação das partículas.


1 def calculate_weight ( s e l f , particle , center ) :
2 d i s t _ x = p a r t i c l e . pos_x − c e n t e r [ 0 ]
3 d i s t _ y = p a r t i c l e . pos_y − c e n t e r [ 1 ]
4 d i s t = np . s q r t ( ( d i s t _ x ∗ ∗ 2 ) +( d i s t _ y ∗ ∗ 2 ) )
5 r e t u r n np . exp(− d i s t )
6
7 d e f o b s e r v a t i o n _ m o d e l ( s e l f , p a r t i c l e s , measurement ) :
8 for p a r t i c l e in p a r t i c l e s :
9 p a r t i c l e . w e i g h t = s e l f . c a l c u l a t e _ w e i g h t ( p a r t i c l e , measurement )
10
11 weight_sum = np . sum ( [ p a r t . w e i g h t f o r p a r t i n p a r t i c l e s ] )
12 f o r p a r t i n p a r t i c l e s : # Normalizacao dos p e s o s
13 p a r t . w e i g h t = p a r t . w e i g h t / weight_sum
14
15 return p a r t i c l e s

Fonte: Elaborado pelo autor (2019)


41

Nesta função é calculado o peso de cada partícula em relação ao centro da detecção.


Partículas posicionadas mais próximas a coordenada central, tem maior chance de esta-
rem corretas, por isso recebem um peso maior. O cálculo do peso é feito pela função
“calculate_weight” (linha 1). Ao final os pesos são normalizados.

Após cada partícula receber seu grau de importância, é feita a reamostragem. Nesta etapa,
cada partícula é representada por uma faixa de valores, com limite inferior e superior,
sendo que, logo após o limite superior de uma partícula é o limite inferior da próxima
partícula, de tal forma que todo o conjunto, concatenado, é representado por várias regiões
delimitadas que se conectam de forma cíclica (linha 1 até linha 7 do Quadro 8).
Quadro 8 – Reamostragem das partículas.
1 def resample ( s e l f , p a r t i c l e s ) :
2 f o r i i n r a n g e ( s e l f . num_of_particles ) :
3 # S e t t i n g t h e boundings o f p a r t i c l e s
4 i f i == 0 :
5 p a r t i c l e s [ i ] . resample_weights = (0 , p a r t i c l e s [ i ] . weight )
6 else :
7 p a r t i c l e s [ i ] . resample_weights = ( p a r t i c l e s [ i −1].
resample_weights [ 1 ] , p a r t i c l e s [ i −1]. resample_weights [1]+
p a r t i c l e s [ i ] . weight )
8
9 r e f e r e n c e = np . random . random ( ) # F i r s t p a r t i c l e w i l l be random
particle
10
11 k = s e l f . mean_weight ( p a r t i c l e s ) # Mean o f t h e w e i g h t s
12
13 new_sample = [ ]
14 f o r i i n r a n g e ( s e l f . num_of_particles ) :
15
16 i f r e f e r e n c e > 1 : # Making a " c i r c u l a r " e f f e c t on t h e a r r a y
17 r e f e r e n c e −= 1
18
19 new_particle = s e l f . copy_particle ( s e l f .
get_particle_by_reference_weight ( reference , p a r t i c l e s ) )
20 new_sample . append ( n e w _ p a r t i c l e )
21 r e f e r e n c e += k
22
23 r e t u r n new_sample

Fonte: Elaborado pelo autor (2019)

Com as fronteiras definidas, é criado um valor aleatório de referência que vai ser o
responsável pelo início da reamostragem (linha 9 do Quadro 8). A esse valor é somado
a média dos pesos, e a partícula que contém dentro de suas fronteiras o valor resultante
será a escolhida da reamostragem. Esse processo é repetido até que todo o conjunto seja
reamostrado (linha 13 até linha 23 do Quadro 8).

É subtraído 1 da referência toda vez que seu resultado ultrapassa o valor 1, desta forma
o avanço do valor de referência é cíclico, uma vez que a faixa de valores das partículas
variam de 0 até 1, pois os pesos foram normalizados no modelo de observação.
42

Figura 34 – Representação da reamostragem de partículas.

Fonte: Elaborado pelo autor.

A Figura 34 demonstra o funcionamento do algoritmo de reamostragem. Neste exemplo,


após cada uma das 5 partículas terem seus pesos calculados e normalizados, esses valores
são concatenados de forma que sejam estabelecidas fronteiras entre eles. É escolhida uma
posição de referência inicial e essa posição é deslocada a uma distância igual à média dos
pesos. O deslocamento ocorre de forma cíclica e é repetido até que se tenha a mesma
quantidade de partículas do conjunto inicial. Essa técnica permite que um novo conjunto
de partículas seja criado de forma que as partículas com maior peso, ou seja, mais perto do
objeto detectado, tenham mais chances de serem escolhidas. Esse novo conjunto formado
será a representação atual do objeto rastreado.

3.7 RASTREAMENTO

O Quadro 9 mostra de forma simplificada o algoritmo de rastreamento de objetos. Na


linha 5 é criado o “tracker”, uma instância da classe “Sort” que será o responsável pelo
rastreamento dos objetos. Nessa instância está armazenada os conjuntos de partículas
de cada objeto rastreado e os métodos para manipulação das partículas. Após as etapas
de leitura e pré-processamento do frame, os dados são passados para o modelo, no qual
faz as detecções que posteriormente serão usadas pelo rastreador para fazer as predições,
associações e atualizações através do método “update” na linha 14 do Quadro 5.

O método “update”, primeiramente, faz a predição das partículas dos objetos já rastreados
(através do modelo de movimento), e depois a associação com as novas detecções. Detecções
não associadas tem seu conjunto de partículas inicializado e detecções associadas passam
pelo processo de atualização, na qual tem o peso das partículas calculado e a reamostragem
43

do conjunto realizada.

Quadro 9 – Algoritmo de rastreamento.


1 from s o r t import ∗
2 import cv2
3 from PIL import Image
4
5 t r a c k e r = S o r t ( ) # R a s t r e a d o r de o b j e t o s
6
7 w h i l e ( True ) :
8 r e t , frame = v i d . r e a d ( ) # Lendo o a r q u i v o de v í deo
9 frame = cv2 . c v t C o l o r ( frame , cv2 .COLOR_BGR2RGB)
10 p i l i m g = p i l i m a g e ( frame )
11 input_img = p r e p r o c e s s ( p i l i m g )
12 d e t e c t i o n s = detect_image ( input_img )
13 i f d e t e c t i o n s i s not None :
14 t r a c k e d _ o b j e c t s = t r a c k e r . update ( d e t e c t i o n s . cpu ( ) )

Fonte: Elaborado pelo autor (2019)

O método “update” retorna a localização dos objetos presentes na imagem com um valor de
identificação. A partir do momento que um objeto recebe esse valor é porque o algoritmo
identificou o mesmo objeto em frames diferentes consecutivos e foi capaz de distinguir de
outros objetos presentes na imagem. O resultado final é a distinção dos objetos presentes
na imagem, mesmo que da mesma classe, e seu rastreamento ao longo do tempo. O fluxo
de funcionamento do método “update” é o mesmo apresentado na Figura 26.
44

4 EXPERIMENTOS, RESULTADOS E DISCUSSÃO

Neste capítulo serão apresentados e discutidos os experimentos e os resultados obtidos


após a aplicação da metodologia apresentada no capítulo anterior.

O sistema proposto possui diversas variáveis que podem ser ajustadas e por consequência
obter diferentes resultados através dos testes. Mas, neste trabalho, foram utilizadas apenas
três variáveis para serem analisadas através dos experimentos, são elas: o número de
partículas para cada objeto rastreado, o ruído acrescido na velocidade de cada partícula
no modelo de movimento e o tempo máximo que um objeto rastreado pode ficar sem
associação antes do seu rastreamento ser interrompido.

Os experimentos foram realizados utilizando os dados de Leal-Taixé et al. (2015), o qual


fornece uma série de vídeos para teste de rastreamento de objetos e também a posição
real de tais objeto (ground truth). Nas seções posteriores os resultados serão apresentados
de acordo com 3 variações de métricas, são elas: RCLL, MOTA e MOTP.

4.1 MÉTRICAS DE AVALIAÇÃO

Para avaliar a performance do rastreamento de múltiplos objetos, foi utilizado as métricas


definidas em Zeiler e Fergus (2013) e juntamente com o padrão de Bernardin e Stiefelhagen
(2008). São elas:

1. MOTA(↑): Acurácia no rastreamento de vários objetos.

2. MOTP(↑): Precisão no rastreamento de vários objetos.

3. RCLL(↑): Precisão na detecção dos objetos, quanto mais próximo do 1, maior é a taxa
de objetos detectados positivamente.

Quando a seta da avaliação está apontando para cima, significa que quanto maior a
pontuação, melhor é o resultado. Quando aponta para baixo, quanto menor a pontuação,
melhor é a avaliação.

4.2 RESULTADOS DE ACORDO COM O RCLL

A métrica RCLL mede a precisão na detecção dos objetos, ou seja, mede a quantidade
de objetos detectados pelo modelo (YOLO) no frame em comparação a quantidade de
objetos que realmente existem no frame.
45

Número de Ruído da Tempo máximo


RCLL
partículas velocidade sem associação
1 52,4%
100 2 52,2%
3 52,2%
1 51,6%
100 150 2 51,6%
3 51,4%
1 51,2%
200 2 51,0%
3 51,0%
1 53,3%
100 2 53,1%
3 53,2%
1 52,7%
200 150 2 52,8%
3 52,6%
1 52,6%
200 2 52,4%
3 52,1%
1 54,0%
100 2 53,9%
3 53,6%
1 53,9%
500 150 2 53,6%
3 53,6%
1 53,6%
200 2 53,3%
3 53,2%

A média dos resultados foi de 52,7% em comparação aos 49,5% apresentado no trabalho
de Bewley et al. (2016), demonstrando que o uso do YOLO para detecção gerou uma
melhoria na quantidade de objetos detectados.

Era esperado que os diferentes parâmetros utilizados nos testes não influenciariam nesta
métrica, uma vez que estes parâmetros influenciam apenas o rastreamento. Os diferentes
valores dos resultados se dá pela maneira como funciona o processo de detecção.

4.3 RESULTADOS DE ACORDO COM O MOTA

A métrica MOTA visa mensurar a acurácia no rastreamento de múltiplos objetos, ou seja,


o quão assertivo o algoritmo é em associar os objetos rastreados às novas detecções durante
toda a movimentação deste objeto. É uma das métricas mais importantes e serve como
benchmark principal de comparação entre os diferentes algoritmos de rastreamento.
46

Número de Ruído da Tempo máximo


RCLL
partículas velocidade sem associação
1 34,2%
100 2 33,9%
3 34,1%
1 33,3%
100 150 2 33,6%
3 33,3%
1 33,0%
200 2 33,0%
3 33,1%
1 35,4%
100 2 35,2%
3 35,4%
1 34,7%
200 150 2 35,1%
3 34,7%
1 34,7%
200 2 34,9%
3 34,4%
1 36,3%
100 2 36,3%
3 36,0%
1 36,4%
500 150 2 35,9%
3 36,0%
1 36,0%
200 2 35,7%
3 35,3%

Os resultados obtiveram uma média de 34,8% em comparação aos 34,0% apresentado no


trabalho de Bewley et al. (2016), sendo que o maior valor atingido durante os testes foi
de 36,4%. Desta forma, fica evidente a melhora nos resultado se for utilizado o filtro de
partículas ao invés do filtro de Kalman.

Ao analisar a tabela, é perceptível que o parâmetro que mais contribuiu para uma melhora
nos resultados foi a quantidade de partículas que representam o estado de cada objeto.
Esse é um resultado esperado pois quanto maior a quantidade de partículas, maior é a
probabilidade que os modelos do algoritmo convirjam para o ground-truth do objeto.

4.4 RESULTADOS DE ACORDO COM O MOTP

A métrica MOTP tem como objetivo avaliar a precisão do algoritmo em rastrear os objetos,
ou seja, o quão assertivo o bounding box do objeto rastreado está em relação à localização
real (ground truth) deste objeto.
47

Número de Ruído da Tempo máximo


RCLL
partículas velocidade sem associação
1 71,1%
100 2 71,0%
3 71,1%
1 71,0%
100 150 2 71,0%
3 71,0%
1 71,0%
200 2 71,0%
3 71,0%
1 71,4%
100 2 71,4%
3 71,4%
1 71,4%
200 150 2 71,3%
3 71,4%
1 71,2%
200 2 71,3%
3 71,4%
1 71,6%
100 2 71,7%
3 71,5%
1 71,5%
500 150 2 71,6%
3 71,6%
1 71,6%
200 2 71,6%
3 71,6%

Nesta etapa dos testes, a média foi de 71,32% em comparação aos 73,3% apresentado no
trabalho de Bewley et al. (2016). Este tipo de métrica necessita de refinamentos mais
precisos nos parâmetros do algoritmo para que se possa obter resultados melhores, uma
vez que foi a métrica que menos obteve variações nos valores.

4.5 DISCUSSÃO SOBRE OS RESULTADOS

Este trabalho é o resultado de uma adaptação do sistema proposto em Bewley et al. (2016),
e visa melhores resultados nos mesmos testes através da utilização de redes neurais e filtro
de partículas em substituição às técnicas apresentadas.

Para a avaliação do desempenho dos algoritmos, foram utilizadas três métricas de compa-
ração. Este trabalho obteve melhores resultados em duas dessas métricas, sendo elas as
principais medidas de avaliação entre os algoritmos de rastreamento.

As ferramentas e dados utilizados para realização dos testes foram as fornecidas pelo
48

MOTChallenge (2020), e o mesmo também possui um ranking com resultados de 102


trabalhos que utilizaram os mesmos dados e métricas. A principal métrica utilizada neste
ranking é a MOTA, e este trabalho obteve um resultado bom o suficiente para ficar na 20◦
colocação.
49

5 CONSIDERAÇÕES FINAIS

Nesse trabalho foi implementado um sistema de rastreamento de objetos em vídeo utili-


zando redes neurais convolucionais e filtro de partículas, com o intuito de analisar o seu
desempenho de acordo com 3 métricas diferentes, dessa forma sendo possível identificar
uma combinação de parâmetros que se destacam na tarefa de rastreamento de objetos.

Esse trabalho demandou que vários conceitos fossem estudados, tais como: funcionamento
de redes neurais e o processo de aprendizagem de máquina, extração de características
baseado em redes convolucionais, otimização do problema de alocação utilizando o método
húngaro, algoritmo de filtro de partículas, além da biblioteca PyTorch e a compreensão
de alguns conceitos básicos como detecção, classificação e rastreamento, que foram muito
importantes para uma melhor elaboração do trabalho e realização dos testes.

O YOLO foi utilizado para fazer detecções de objetos a cada frame do vídeo enquanto o
algoritmo de filtro de partículas juntamente com o método húngaro foram os responsáveis
por realizar as associações entre os objetos e seu rastreamento. Esse sistema possui diversos
parâmetros a serem ajustados para obtenção de diferentes resultados, mas neste trabalho
foram comparados apenas 3 deles: Quantidade de partículas por objeto rastreado, ruído
aplicado a velocidade de cada partícula no modelo de movimento e o tempo máximo em
que um objeto rastreado pode ficar sem associação a alguma detecção antes de ter seu
rastreamento interrompido.

O algoritmo implementado é uma adaptação de Bewley et al. (2016) que visa resultados
melhores através de técnicas diferentes. O algoritmo proposto foi melhor em duas das três
métricas utilizadas para avaliação, sendo a terceira a mais complexa de se obter melhores
resultados devido ao fato que o algoritmo de filtro de partículas possui mais parâmetros a
serem ajustados para se obter melhores resultados. Mas mesmo com essa dificuldade em
ajustar os parâmetros, no pior dos casos, o algoritmo proposto teve um resultado apenas
2,3% menor.

Com isso, conclui-se que utilizar YOLO para detecção e filtro de partículas para o
rastreamento, podem gerar resultados satisfatórios se os parâmetros forem ajustados
adequadamente.

5.1 TRABALHOS FUTUROS

Embora os objetivos propostos no trabalho tenham sido alcançados, algumas melhorias


são possíveis visando trabalhos futuros:

• Otimização do algoritmo de filtro de partículas para que seu processamento seja


50

executado em paralelo e ,por consequência, possa ser utilizado mais partículas no


rastreamento.

• Aprimorar a associação entre os objetos utilizando, além da interseção, a comparação


de classes dos objetos e também das características presentes dentro do bounding box.

• Utilização de uma segunda rede neural convolucional que fosse responsável pela extração
de características de dentro do bounding box para ser utilizada na associação.

• Modificação da implementação para que os dados de entrada sejam fornecidos direta-


mente por uma câmera e o rastreamento possa ser feito em tempo real.
51

REFERÊNCIAS

ACADEMY, D. S. Deep Learning e a Tempestade Perfeita. 2019. Disponível em:


<http://deeplearningbook.com.br/deep-learning-a-tempestade-perfeita/>. Acesso em: 29
oct. 2019.
AMARAL, E. M. A. Detecção e rastreamento de veículos em movimento para automóveis
robóticos autônomos. In: . [S.l.: s.n.], 2015.
BERNARDIN, K.; STIEFELHAGEN, R. Evaluating multiple object tracking performance:
The CLEAR MOT metrics. EURASIP Journal on Image and Video Processing, Springer
Nature, v. 2008, p. 1–10, 2008. Disponível em: <https://doi.org/10.1155/2008/246309>.
BEWLEY, A. et al. Simple online and realtime tracking. 2016.
BODLA, N. et al. Soft-NMS – Improving Object Detection With One Line of Code. 2017.
BONNER, A. The Complete Beginner’s Guide to Deep Learning: Convolutional Neural
Networks and Image Classification. 2019. Disponível em: <https://towardsdatascience.
com/wtf-is-image-classification-8e78a8235acb>. Acesso em: 29 oct. 2019.
BRAGA, A. de P.; CARVALHO, A. P. de Leon F. de; LUDEMIR, T. B. Redes Neurais
Artificiais. Teoria e Aplicações. [S.l.]: LTC, 2007. ISBN 8521615647.
COHEN, J. Computer Vision for tracking. 2019. Disponível em: <https://
towardsdatascience.com/computer-vision-for-tracking-8220759eee85>. Acesso em: 15 mar.
2020.
CONTRIBUTORS, W. Jaccard index. 2019. Disponível em: <https://en.wikipedia.org/
wiki/Jaccard_index>. Acesso em: 29 oct. 2019.
GOODFELLOW, I.; BENGIO, Y.; COURVILLE, A. Deep Learning. [S.l.]: MIT Press,
2016. <http://www.deeplearningbook.org>.
GUIRADO, J. C.; ROCHA, M. R. da. O método húngaro para resolução de problemas
de otimização. Encontro paranaense de educação amtemática, 2014. ISSN 2175 - 2044.
Disponível em: <http://sbemparana.com.br/arquivos/anais/epremxii/ARQUIVOS/
MINICURSOS/autores/MCA016.pdf>.
HAYKIN, S. Neural Networks: A Comprehensive Foundation (2nd Edition).
Prentice Hall, 1998. ISBN 0132733501. Disponível em: <https://www.amazon.com/
Neural-Networks-Comprehensive-Foundation-2nd/dp/0132733501?SubscriptionId=
AKIAIOBINVZYXZQZ2U3A&tag=chimbori05-20&linkCode=xm2&camp=2025&
creative=165953&creativeASIN=0132733501>.
HAYKIN, S. O. Neural Networks and Learning Machines (3rd Edition). Pe-
arson, 2008. ISBN 0131471392. Disponível em: <https://www.amazon.
com/Neural-Networks-Learning-Machines-3rd/dp/0131471392?SubscriptionId=
AKIAIOBINVZYXZQZ2U3A&tag=chimbori05-20&linkCode=xm2&camp=2025&
creative=165953&creativeASIN=0131471392>.
HYATT, N. Autonomous driving is here, and it’s going to change
everything. 2017. Disponível em: <https://www.vox.com/2017/4/19/15364608/
autonomous-self-driving-cars-impact-disruption-society-mobility>. Acesso em: 24 sep.
2019.
52

JEONG, J. The Most Intuitive and Easiest Guide for Convolutional Neu-
ral Network. 2019. Disponível em: <https://towardsdatascience.com/
the-most-intuitive-and-easiest-guide-for-convolutional-neural-network-3607be47480>.
Acesso em: 17 dec. 2019.
KALMAN, R. E. A new approach to linear filtering and prediction problems. Transactions
of the ASME–Journal of Basic Engineering, v. 82, n. Series D, p. 35–45, 1960.
KAPIL, D. Stochastic vs Batch Gradient Descent. 2019. Disponível em: <https:
//medium.com/@divakar_239/stochastic-vs-batch-gradient-descent-8820568eada1>.
Acesso em: 22 oct. 2019.
KARPATHY, A. Convolutional Neural Networks (CNNs / ConvNets). 2017. Disponível
em: <http://cs231n.github.io/convolutional-networks/>. Acesso em: 22 oct. 2019.
KATHURIA, A. What’s new in YOLO v3? 2018. Disponível em: <https:
//towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b>. Acesso em: 22 oct.
2019.
KIRILLOV, A. ANNT : Convolutional neural networks. 2018. Disponível em: <https:
//www.codeproject.com/Articles/1264962/ANNT-Convolutional-neural-networks>.
Acesso em: 22 oct. 2019.
KUHN, H. W. The hungarian method for the assignment problem. Naval
Research Logistics Quarterly, v. 2, n. 1-2, p. 83–97, 1955. Disponível em:
<https://onlinelibrary.wiley.com/doi/abs/10.1002/nav.3800020109>.
KURZWEIL, R. How to Create a Mind: The Secret of Human Thought Revealed.
Penguin Books, 2012. ISBN 9780670025299. Disponível em: <https://www.amazon.
com/How-Create-Mind-Thought-Revealed-ebook/dp/B007V65UUG?SubscriptionId=
AKIAIOBINVZYXZQZ2U3A&tag=chimbori05-20&linkCode=xm2&camp=2025&
creative=165953&creativeASIN=B007V65UUG>.
LCAD. Intelligent Autonomous Robotic Automobile - IARA. 2018. Disponível em:
<http://www.lcad.inf.ufes.br/wiki/index.php/IARA>. Acesso em: 24 sep. 2019.
LEAL-TAIXé, L. et al. MOTChallenge 2015: Towards a benchmark for multi-target
tracking. arXiv:1504.01942 [cs], abr. 2015. ArXiv: 1504.01942. Disponível em:
<http://arxiv.org/abs/1504.01942>.
LUNDH, F.; CLARK, A.; CONTRIBUTORS. Pillow. 2019. Disponível em:
<https://pillow.readthedocs.io/en/stable/>. Acesso em: 05 nov. 2019.
MCCULLOCH, W.; PITTS, W. A logical calculus of the ideas immanent in nervous
activity. The bulletin of mathematical biophysics, v. 5, 1943. ISSN 1522-9602. Disponível
em: <https://doi.org/10.1007/BF02478259>.
Ministério da saúde. Mortes em acidentes de trânsito caem 14 por cento nos últimos dez
anos. 2018. Disponível em: <http://legado.brasil.gov.br/noticias/seguranca-e-justica/
2018/06/mortes-em-acidentes-de-transito-caem-14-nos-ultimos-dez-anos>. Acesso em: 24
sep. 2019.
MOTCHALLENGE. MOTChallenge: The Multiple Object Tracking Benchmark. 2020.
Disponível em: <https://motchallenge.net/>. Acesso em: 19 mar. 2020.
53

OpenCV team. Open Source Computer Vision Library. 2019. Disponível em:
<https://opencv.org/>. Acesso em: 30 oct. 2019.

PRIBERAM. AUTOMAÇÃO. 2018. Disponível em: <https://dicionario.priberam.org/


automacao>. Acesso em: 24 sep. 2019.

REDMON, J. et al. You Only Look Once: Unified, Real-Time Object Detection. 2015.

REDMON, J.; FARHADI, A. YOLOv3: An Incremental Improvement. 2018.

ROSEBROCK, A. Intersection over Union (IoU) for object detection.


2016. Disponível em: <https://www.pyimagesearch.com/2016/11/07/
intersection-over-union-iou-for-object-detection/>. Acesso em: 22 oct. 2019.

ROSENBLATT, F. The Perceptron, a Perceiving and Recognizing Automaton. Cornell


Aeronautical Laboratory, 1957. (Report: Cornell Aeronautical Laboratory). Disponível
em: <https://books.google.com.br/books?id=P\_XGPgAACAAJ>.

SAHA, S. A Comprehensive Guide to Convolutional Neural


Networks. 2018. Disponível em: <https://towardsdatascience.com/
a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53>.
Acesso em: 22 oct. 2019.

SAMBASIVARAO. Non-maximum Suppression (NMS). 2019. Disponível em:


<https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c>. Acesso
em: 08 nov. 2019.

SHULGA, D. Exploring Activation Functions for Neural


Networks. 2017. Disponível em: <https://towardsdatascience.com/
exploring-activation-functions-for-neural-networks-73498da59b02>. Acesso em:
29 oct. 2019.

SILVA, A. L. S. da; JUNIOR, V. B. de S. Aplicações e benefícios obtidos através das redes


neurais artificiais (RNA). 2017. Disponível em: <http://www.facima.edu.br/instituto/
revista/arquivos/ano2/revista_facima_ano_2_aplicacoes_beneficios.pdf>. Acesso em:
07 oct. 2019.

SOCHOR, J.; ŠPAňHEL, J.; HEROUT, A. Boxcars: Improving vehicle fine-grained


recognition using 3d bounding boxes in traffic surveillance. ArXiv, abs/1703.00686, 2017.

STEWART, M. Simple Introduction to Convolutional Neural


Networks. 2019. Disponível em: <https://towardsdatascience.com/
simple-introduction-to-convolutional-neural-networks-cdf8d3077bac>. Acesso
em: 22 oct. 2019.

TESLA. Tesla Autopilot. 2019. Disponível em: <https://www.tesla.com/autopilot>.


Acesso em: 17 dec. 2019.

THRUN, S. Particle filters in robotics. In: Proceedings of the Eighteenth Conference


on Uncertainty in Artificial Intelligence. San Francisco, CA, USA: Morgan Kaufmann
Publishers Inc., 2002. (UAI’02), p. 511–518. ISBN 1-55860-897-4. Disponível em:
<http://dl.acm.org/citation.cfm?id=2073876.2073937>.
54

THRUN, S.; BURGARD, W.; FOX, D. Probabilistic Robotics (Intelligent Robotics and
Autonomous Agents series). The MIT Press, 2005. ISBN 0262201623. Disponível em:
<https://www.amazon.com/Probabilistic-Robotics-Intelligent-Autonomous-Agents/
dp/0262201623?SubscriptionId=AKIAIOBINVZYXZQZ2U3A&tag=chimbori05-20&
linkCode=xm2&camp=2025&creative=165953&creativeASIN=0262201623>.

Torch Contributors. An open source machine learning framework. 2019. Disponível em:
<https://pytorch.org/>. Acesso em: 30 oct. 2019.

VALE. Vale terá a primeira mina operando somente com caminhões autônomos no
Brasil. 2018. Disponível em: <http://www.vale.com/brasil/PT/aboutvale/news/Paginas/
vale-tera-a-primeira-mina-operando-somente-com-caminhoes-autonomos-no-brasil.
aspx>. Acesso em: 24 sep. 2019.

ZEILER, M. D.; FERGUS, R. Visualizing and understanding convolutional networks.


CoRR, abs/1311.2901, 2013. Disponível em: <http://arxiv.org/abs/1311.2901>.

Você também pode gostar