Escolar Documentos
Profissional Documentos
Cultura Documentos
Serra
2020
CAIO ABELAR KINUPP MONTEIRO
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
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.
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.
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
O objetivo geral deste trabalho é desenvolver um sistema baseado nos conceitos de DATMO
capaz de reconhecer e rastrear objetos móveis em vídeo.
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.
2 REFERENCIAL TEÓRICO
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.
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
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).
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<θ
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
É 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
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
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
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).
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.
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
δ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
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
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.
Na Figura 12 é apresentado uma simples arquitetura de uma CNN com suas três principais
camadas: convolucionais, pooling e totalmente conectada.
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
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.
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.
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).
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
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.
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|
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).
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).
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).
53 96 37
A = 47 87 41
(10)
60 92 36
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.
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
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
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).
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.
3 DESENVOLVIMENTO
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.
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
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).
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.
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
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
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
3.5 ASSOCIAÇÃO
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.
3.6 ATUALIZAÇÃO
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
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
3.7 RASTREAMENTO
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.
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
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.
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.
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
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.
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.
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
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.
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
5 CONSIDERAÇÕES FINAIS
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.
• 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.
REFERÊNCIAS
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.
REDMON, J. et al. You Only Look Once: Unified, Real-Time Object Detection. 2015.
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.