Escolar Documentos
Profissional Documentos
Cultura Documentos
MACAPÁ
2022
IURI LENO PEREIRA DA SILVA
MACAPÁ
2022
Dados Internacionais de Catalogação na Publicação (CIP)
Biblioteca Central da Universidade Federal do Amapá
Jamile da Conceição da Silva – CRB-2/1010
With the growth of the automotive fleet in Brazil, urban traffic monitoring has proved to
be an efficient resource to ensure safe circulation between motorized and non-
motorized modes. Monitoring cameras, software, and computer vision algorithms
based on neural networks have established themselves in state of the art as an
alternative in search of solutions to reduce accidents. These intelligent monitoring
systems have been highlighted due to the growing study in digital image processing.
It provides a better perception of information contained in images and video and the
ability to provide data for learning convolutional neural networks. These networks have
stood out for their purpose of detecting and classifying objects. Therefore, this work
proposes using the YOLOv4 model, which in its architecture has convolutional neural
networks, to detect vehicles. This work also provides the development of software to
monitor infractions committed by the detected vehicles. The results of the trained
algorithm presented good performance metrics with an average accuracy rate of
92.86%. The software has shown good performance in aiding detection and
classification user-friendly.
MB Megabyte
GB Gigabyte
AP Average Precision
VM Virtual Machine
1 INTRODUÇÃO ....................................................................................................... 12
4.3 CABEÇA.............................................................................................................. 37
5 METODOLOGIA .................................................................................................... 40
7 CONCLUSÃO ........................................................................................................ 64
REFERÊNCIAS......................................................................................................... 66
1 INTRODUÇÃO
Neste contexto, este trabalho vem a contribuir com a redução dos acidentes
relacionados ao tráfego urbano. Com o objetivo de desenvolver um sistema de visão
computacional baseado em redes neurais convolucionais para detecção de infrações
de veículos, como por exemplo o estacionamento e transitar em ciclovias e ciclofaixas
desrespeitando o Art. 193 do CTB, estacionar ou adentrar em calçadas de forma
13
imprudente desrespeitando o Art. 181 do CTB, entre outros casos que de alguma
forma refreia o fluxo do tráfego urbano ou que traz transtornos para terceiros. Como
trabalhos relacionados podemos citar de Goyal e Kaur (2016) que utilizaram os
sistemas de vigilância urbana para rastreamento e classificação de objetos veiculares
utilizando rede neural profunda, e Erazo (2021) que desenvolveu um sistema de
contagem e classificação de veículos em distintos cenários de tráfego urbano na
cidade de Florianópolis (SC) utilizando o modelo detector YOLOv4.
Filho e Neto (1999) também mencionam outras duas áreas de importância que
são a melhoria da disposição dos dados da imagem para transmissão,
armazenamento e representação automática por um computador, e o aprimoramento
de informações pictóricas para interpretação humana ou classificação automática.
Estas duas áreas servem para se extrair o máximo de informação contida na imagem,
sendo que a visão computacional está relacionada com a percepção de informação e
o processamento digital de imagens apenas possibilita essa percepção.
E os vídeos, conforme Felício (2019), nada mais são do que uma sequência de
imagens digitais, denominada frames, que usualmente apresentam uma taxa de
atualização de 30 frames por segundo, ou seja, para cada segundo de vídeo são
mostradas 30 imagens.
1 Open Source Computer Vision Library ou Biblioteca de Visão Computacional de Código Aberto, é
utilizada para aplicar técnicas de processamento digital de imagens e visão computacional.
17
Figura 2 – Processo de transformação de imagem em escala de cinza (a) Imagem original; (b)
Imagem convertida.
2 Matplotlib é uma biblioteca utilizada para elaboração e exibição de dados e plotagem gráfica.
18
Figura 5 – Processo de limiarização (a) Imagem em escalas de cinza; (b) Imagem limiarizada.
1, 𝑠𝑒 𝑓 (𝑥, 𝑦) ≥ 𝑇
𝑔(𝑥, 𝑦) = { (1)
0, 𝑠𝑒 𝑓(𝑥, 𝑦) < 𝑇
cinza abaixo de 199 tiveram sua intensidade igual a 0 representado pela cor branca.
Como a função 𝑔(𝑥, 𝑦) só possui dois valores possíveis para a intensidade do pixel,
a limiarização é denominada binarização e a imagem resultante é, de fato, em preto e
branco (ALMEIDA, 2015).
2.3 DILATAÇÃO
3Numerical Python ou Python numérico, é uma biblioteca que suporta o processamento de grandes
arranjos e matrizes, juntamente com uma grande coleção de funções matemáticas de alto nível para
operar sobre estas matrizes.
21
2.4 EROSÃO
o que, em outras palavras, significa dizer que a erosão de 𝐴 por 𝐵 resulta no conjunto
de pontos 𝑥 tais que 𝐵 , transladado de 𝑥 , está contido em 𝐴 (FILHO; NETO, 199).
Para analisar esta operação, da mesma forma que o código de dilatação, o que muda
neste caso é se utiliza a função cv2.erode atribuindo a ela a imagem limiarizada, o
kernel no qual será convoluido com a imagem e o seu número de iterações:
22
Figura 8 – Processo de abertura morfológica (a) Imagem limiarizada; (b) Imagem aplicado abertura
morfológica.
Dentritos Entradas
Sinapse Pesos
Axônio Saída
pesos nas conexões para e obter uma saída desejada. Enquanto a fase de teste
contém os 25% dos dados restantes, utilizado apenas para calcular o erro total da
rede, e tem a finalidade de diminuir este erro.
𝑦 = 𝑥 ∗ 𝑤 (5)
𝑦 = (𝑥1,1 × 𝑤1,1 ) + (𝑥1,2 × 𝑤1,2 ) + (𝑥1,3 × 𝑤1,3 ) + (𝑥2,1 × 𝑤2,1 ) + ⋯ + (𝑥3,3 × 𝑤3,3 ) (6)
O filtro se comporta como uma pequena janela ou região que realiza operações
ao longo de uma imagem (RODRIGUES, 2019). E possui dois parâmetros principais
que é o preenchimento e o passo com o qual o filtro irá percorrer toda a imagem de
entrada (MASSUCATTO, 2018). O passo, comumente conhecido como stride, é um
parâmetro que controla os saltos que o filtro realiza quando é deslocado sobre a
imagem no processo de convolução (ERAZO, 2021). Se usado um valor baixo para o
stride, resulta na sobreposição entre os campos receptivos e grandes volumes na
saída. No entanto, quando utilizado um valor alto para o stride, menor é a
28
Ao utilizar stride com um valor muito alto ocorre a perda de informação pois o
filtro deixará de passar por algumas colunas na imagem, e pouca profundidade da
rede, ocasionando em um mapa de caraterísticas menor a cada camada de
convolução. Para resolver estes problemas, emprega-se o preenchimento, conhecido
como padding. Este tem por finalidade preencher com zeros o contorno da imagem e
que, conforme Erazo (2021), permite um tamanho de entrada maior controlando a
saída da camada de convolução, facilitando a construção de redes mais profundas, e
com os zeros permite obter mais informações ajustando o centro filtro aos elementos
mais externos, sem que ocorra a perda de informação. A Figura 13 mostra como
ocorre o processo de padding, tendo uma matriz de entrada 5x5, e mesmo após o
processo de convolução com o filtro, o mapa de características permanece sendo 5x5
evitando grandes perdas de informação.
29
𝑛 + 2𝑝 − 𝑚
𝑂= [ + 1] (7)
𝑆
1
• Função Sigmoide: dada pela equação 𝐹(𝑥) = , sendo essa a mais
1+ 𝑒 −𝑥
• Função ReLU: dada pela equação 𝐹(𝑥) = max (0, 𝑥), ela transforma valores
negativos em 0 e mantém os outros valores positivos inteiros sem modificá-
los, seus valores está dentro de um intervalo de 0 a infinito. Muito utilizada pois
não requer operações complexas, tem baixo custo computacional e converge
mais rápido, fazendo com que a aprendizagem da rede seja mais rápida.
𝑒 𝑧𝑗
• Função Softmax dada pela equação 𝐹(𝑥) = , conhecida também
∑𝑘
𝑘=1 𝑒
𝑧𝑘
Figura 14 – (a) Função Sigmóide; (b) Função Tangente Hiperbólica; (c) Função ReLU; (d) Função
Softmax.
Figura 15 – Exemplo de max-pooling e average-pooling com filtro 2x2 sobre uma matriz 4x4, obtendo
um mapa de características de 2x2 pixels.
4O erro de sobreajuste (overfitting) é causado pela alta variância que pode fazer com que o algoritmo
modele ruídos aleatórios nos dados de treinamento, em vez de saídas pretendidas (MICHEL, s.d.).
32
4 MODELO DETECTOR
Como mostra a Figura 18, existem dois tipos de algoritmos para detecção de
objetos usando CNN: detectores de duas etapas e detectores de uma etapa (ERAZO,
2021).
Cada camada CSP contém um bloco denso e uma camada de transição, e cada
bloco denso é composto por k camadas densas. Matematicamente temos a seguinte
equação:
𝑋𝑇 = 𝑊𝑇 ∗ [𝑋0′′ , 𝑋1 , … , 𝑋𝐾 ] (9)
𝑋𝑈 = 𝑊𝑈 ∗ [𝑋0′ , 𝑋𝑇 ] (10)
36
parte passará pela camada densa 𝑋0′′ , a segunda parte 𝑋0′ será concatenada no final
com o resultado na saída da camada densa de 𝑋0′′ . Isso consequentemente faz com
que diferentes camadas densas aprendem de forma repetitiva as informações de
gradientes copiadas.
4.2 PESCOÇO
Por conseguinte, emprega-se a PANet, que de acordo com LIU et al. (2018)
tem o objetivo de aumentar o fluxo de informações em um framework. A PANet é
utilizada como um método de agregação de parâmetros em diferentes níveis do
modelo. Segundo Erazo (2021) permite que os mapas de características vindas do
fluxo descendente da espinha dorsal e o fluxo de características de cima para baixo
sejam concatenados antes de entrar nos blocos de predição (Detection Head).
4.3 CABEÇA
das caixas delimitadoras e o número de seções que uma imagem deve ser dividida,
matematicamente:
Ao validar o modelo detector, temos que definir um limiar para previsões dos
boxes em que, se esse valor for muito alto haverá perda de previsões relevantes, e
caso utilizado um limiar muito baixo resultaria em boxes sem informações relevantes.
A Figura 20 mostra como acontece o processo de cálculo do IoU, e Erazo (2021)
explicita que os boxes verdes representam as etiquetas do ground truth marcados
manualmente nos objetos de interesse, enquanto os boxes vermelhos representam a
previsão dada pelo modelo.
O valor do IoU dada por essas previsões tem por finalidade se tal detecção é
considerada positiva ou negativa. A previsão será dada como Verdadeiro Positivo (VP)
se o valor for maior ou igual que o valor determinado para IoU e a classe prevista
39
𝑉𝑃
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = (12)
𝑉𝑃 + 𝐹𝑃
𝑉𝑃
𝑅𝑒𝑐𝑎𝑙𝑙 = (13)
𝑉𝑃 + 𝐹𝑁
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 𝑥 𝑟𝑒𝑐𝑎𝑙𝑙
𝐹1 − 𝑠𝑐𝑜𝑟𝑒 = 2 𝑥 (14)
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑟𝑒𝑐𝑎𝑙𝑙
𝑁
1
𝑚𝐴𝑃 = ∑ 𝐴𝑃𝑖 (15)
𝑁
𝑖=1
40
5 METODOLOGIA
5 https://public.roboflow.com/object-detection/vehicles-openimages/1
41
6 https://github.com/techzizou/yolov4-tiny-custom_Training
7 https://colab.research.google.com/drive/1hQO4nOoD6RDxdbz3C1YSiifTsyZjZpYm?usp=sharing
8 https://github.com/AlexeyAB/darknet/
9 https://github.com/pjreddie/darknet
42
2. Logo após na segunda etapa, elabora-se uma pasta no Google Drive com o
nome yolov4-tiny, e adentro outra pasta chamada training, onde ficará salvo os
arquivos de pesos treinados, como ilustra a Figura 24.
E se obtém o seguinte arquivo resultante como mostra a Figura 31. Este arquivo
indica o número de classes a ser treinado, o caminho para os arquivos train.txt e
test.txt que será explicado mais adiante, e o caminho para a pasta training onde os
arquivos de pesos de treinamento serão salvos.
d) Por fim, na quarta parte, fazer o upload do arquivo do script process.py, também
disponível no Git de TechZizou, para a pasta yolov4-tiny no Drive.
No fim, fazer upload dos arquivos mencionados da etapa 3 para o Drive como
ilustra a Figura 33.
48
Adiante, abrirá uma nova guia para selecionar a conta Gmail onde o pasta com
os arquivos estão armazenados, e em seguida realizar a permissão ao Google Drive.
Após isso aparecerá a seguinte mensagem como aparece na Figura 36, analise se
todos os arquivos foram carregados para sua VM. Em alguns casos é necessário
inserir um código de autorização.
5. A quinta etapa, ilustrado na Figura 37, não necessita fazer nenhuma alteração,
apenas execute o comando para habilitar OpenCV e GPU fazendo alterações no
makefile10 CUDNN, CUDNN_HALF e LIBSO, bibliotecas utilizadas para acelerar a
GPU para redes neurais profundas.
10Arquivo contendo um conjunto de instruções compilados do código fonte em binário, servindo para
especificar como obter o arquivo de destino.
50
a) Após isso, o próximo comando, como apresenta a Figura 40, serve para copiar
o arquivo obj.zip do Drive para o diretório Darknet e descompactar na pasta de dados
na VM do Colab.
Figura 40 – Comando para cópia do arquivo obj.zip do Drive para o diretório Darknet na VM do Colab.
b) Seguidamente, o próximo comando como exibe a Figura 41, serve para copiar
o arquivo yolov4-tiny-custom.cfg do Drive para a pasta em /darknet/cfg/ na VM do
Colab.
Figura 41 – Comando para cópia do arquivo yolov4-tiny-custom.cfg do Drive para o diretório Darknet
na VM do Colab.
c) Posteriormente, o próximo comando como ilustra a Figura 42, serve para copiar
os arquivos obj.names e obj.data do Drive para a pasta em /darknet/data/ na VM do
Colab.
Figura 42 – Comando para cópia do arquivo obj.names e obj.data do Drive para o diretório Darknet na
VM do Colab.
d) E por fim, o próximo comando como mostra a Figura 43, serve para copiar o
arquivo process.py do Drive para o diretório Darknet atual no VM do Colab.
Figura 43 – Comando para cópia do arquivo process.py do Drive para o diretório Darknet na VM do
Colab.
Este script tem por finalidade de criar os arquivos train.txt e test.txt dentro da
pasta data e fazer a divisão das imagens e dados, onde 90% destes servirá para
treinamento e 10% para teste. Neste caso teremos 1129 imagens e dados para teste
e 125 imagens e dados para treinamento.
Caso o treinamento seja interrompido por quais seja o motivo, logo depois tem
um comando para retorna o treinamento de onde foi interrompido, como exibe a Figura
47.
11. A etapa onze, tem por objetivo de analisar o desempenho do arquivo de peso
treinado, essa análise se dar graficamente pelo arquivo chart.png resultante do
comando de execução, como mostra a Figura 48. Entretanto, o arquivo apresenta
resultados somente se o treinamento não for interrompido.
12. A última etapa tem por finalidade testar o modelo personalizado treinado em
uma imagem ou vídeo de preferência. Esta etapa serve para verificação de que se o
modelo treinado está fazendo as detecções e classificações que deveria.
5.1 SOFTWARE
A Figura 53 apresenta como seria essa área delimitada, esta que somente é
relevante para fazer a detecção de veículos infratores.
cinza, como mostra a Figura 54, com objetivo de tornar o processamento do software
com menos inferências.
nomes_classes = []
with open('obj.names', 'r') as f:
nomes_classes = [cname.strip() for cname in f.readlines()]
6 RESULTADOS E DISCUSSÕES
Carro de
grande 100,0 0,25 18 3
porte
Nota-se que, para a classe de Carro de grande porte obteve o melhor AP com
100% de precisão. Já as classes Moto e Caminhão apresentaram os menores AP com
valores abaixo de 90% de precisão, todavia esse parâmetro não significa que o
modelo não possui bom desempenho. Os FP dessas duas classes têm valores
inferiores aos de VP, bem como que o Recall geral apresentou um valor de 90,83%,
o que indica que os valores de FN são quase imperceptíveis no momento da detecção.
O F1-score geral apresentou um resultado de 0,88, quase próximo de 1,
representando ser um bom classificador. Por fim o mAP do modelo apresenta uma
precisão de 92,86%.
O relatório é uma ferramenta importante pois serve para que quando ocorrer a
detecção nessas áreas, o usuário possa verificar se de fato o motorista infringiu
alguma lei do CTB.
Em ambos os casos, os motoristas infringiram o Art. 186 do CTB, que diz sobre
transitar na contramão em vias com sinalização de regulamentação de sentido único
de circulação, sendo uma infração gravíssima com pena de multa de R$ 293,47. Já
no primeiro caso, além de transitar na contramão, o motorista transitou pela ciclovia
para ter fácil acesso a outra rua, infringindo o Art. 193 do CTB, que diz sobre transitar
com o veículo em calçadas, passeios, passarelas, ciclovias, ciclofaixas, entre outros
64
locais destinados a pedestres e ciclistas, sendo uma infração gravíssima com pena
de multa de R$ 880,41.
7 CONCLUSÃO
REFERÊNCIAS
WANG, C. Y., MARKLIAO, H. Y., WU, Y. H., CHEN, P. Y., HSIEH, J. W., YEH, I. H.
CSPNet: A new backbone that can enhance learning capability of cnn. In:
PROCEEDINGS of the IEEE/CVF Conference on Computer Vision and Pattern
Recognition Workshops. [S.l.: s.n.], 2020, p..390–391.
ZHAO, Z. Q., ZHENG, P., XU, S., WU, X. Object detection with deep learning: A
review. IEEE transactions on neural networks and learning systems, IEEE, v. 30,
n. 11, p. 3212–3232, 201.
70