Você está na página 1de 76

UNIVERSIDADE FEDERAL DO AMAPÁ

DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS


CURSO DE ENGENHARIA ELÉTRICA

IURI LENO PEREIRA DA SILVA

MONITORAMENTO DE VEÍCULOS VIA REDES NEURAIS CONVOLUCIONAIS

MACAPÁ
2022
IURI LENO PEREIRA DA SILVA

MONITORAMENTO DE VEÍCULOS VIA REDES NEURAIS CONVOLUCIONAIS

Trabalho de Conclusão de Curso


apresentado à Universidade Federal do
Amapá como exigência parcial para obtenção
do título de Bacharel em Engenharia Elétrica.

Orientador(a): Prof.ª Dra. Fernanda Regina


Smith Neves Côrrea
Coorientador(a): Eng.ª Amanda Thais dos
Reis Fernandes

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

Silva, Iuri Leno Pereira da.


S586m Monitoramento de veículos via redes neurais convolucionais / Iuri Pereira da
Silva - 2022.
1 recurso eletrônico. 75 folhas : ilustradas.

Trabalho de Conclusão de Curso (Graduação em Engenharia Elétrica) –


Campus Marco Zero, Universidade Federal do Amapá, Coordenação do Curso de
Bacharelado em Engenharia Elétrica, Macapá, 2022.
Orientadora: Professora Doutora Fernanda Regina Smith Neves Corrêa
Coorientadora: Professora Amanda Thais dos Reis Fernandes
Modo de acesso: World Wide Web.

Formato de arquivo: Portable Document Format (PDF).

Inclui referências e anexo.

1. T r áfe go ur b a no - Mo n ito ra me nto 2. Imagens digitais. 3. Redes


neurais convolucionais (computação). 4. Visão computacional. I. Corrês, Fernanda
regina Smith Neves, orientadora. II. Fernandes, Amanda Thais dos Reis,
coorientadora. III. Título.

Classificação Decimal de Dewey, 22 edição, 621.367


SILVA, Iuri Leno Pereira da. Monitoramento de veículos via redes neurais convolucionais.
Orientadora: Fernanda Regina Smith Neves Corrêa. Coorientadora: Amanda Thais dos reis
Fernanades. 2022. 75 f. Trabalho de Conclusão de Curso (Graduação em Engelharia Elétrica)
– Campus Marco Zero, Universidade Federal do Amapá, Coordenação do Curso de
Bacharelado em Engenharia Elétrica, Macapá, 2022.
Amanda Thais dos Seis Fernandes .
Dedico este trabalho àquele que me ensinou
sobre o amor e que nem tudo são flores.
Se você for mudar o mundo, não peça
permissão.
- Arcane
RESUMO

Com o crescimento da frota automotiva no Brasil, o monitoramento do tráfego urbano


tem se mostrado um recurso eficiente para garantir uma circulação segura entre os
modos motorizados e não motorizados. Câmeras de monitoramento conjuntamente
com softwares e algoritmos de visão computacional baseados em redes neurais têm
se estabelecido no estado da arte como uma alternativa em busca de soluções na
redução de acidentes. Estes sistemas inteligentes de monitoramento têm se
destacado devido ao crescente estudo na área de processamento digital de imagens
que fornece uma melhor percepção de informações contidas em imagens e vídeo,
bem como na habilidade de fornecer dados para aprendizado de redes neurais
convolucionais, redes estas que nos últimos anos tem se destacado pela sua
finalidade de detectar e classificar objetos. Portanto, neste trabalho é proposto a
utilização do modelo YOLOv4, que na sua arquitetura possui redes neurais
convolucionais, para fazer a detecção de veículos. Bem como o desenvolvimento de
software para realizar monitoramento de infrações cometidas por esses veículos
detectados. Os resultados do algoritmo treinado, apresentou métricas de desempenho
satisfatórias com uma taxa de precisão média de 92,86%. O software tem exibido boa
performance no auxílio para a detecção e classificação de uma forma acessível para
o usuário.

Palavras-chave: Monitoramento. Tráfego urbano. Visão computacional.


Processamento digital de imagens. Redes neurais convolucionais.
ABSTRACT

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.

Keywords: Monitoring. Urban traffic. Computer vision. Digital image processing.


Convolutional neural networks.
LISTA DE FIGURAS

Figura 1 – Representação da disposição dos pixels em uma imagem digital. .......... 15


Figura 2 – Processo de transformação de imagem em escala de cinza (a) Imagem
original; (b) Imagem convertida. ................................................................................ 17
Figura 3 – Histograma da Figura 2 (b). ..................................................................... 18
Figura 4 – Ilustração do processo de limiarização de uma imagem em escalas de
cinza. ......................................................................................................................... 18
Figura 5 – Processo de limiarização (a) Imagem em escalas de cinza; (b) Imagem
limiarizada. ................................................................................................................ 19
Figura 6 – Processo de dilatação (a) Imagem limiarizada; (b) Imagem dilatada. ...... 21
Figura 7 – Processo de erosão (a) Imagem limiarizada; (b) Imagem erudita. ........... 22
Figura 8 – Processo de abertura morfológica (a) Imagem limiarizada; (b) Imagem
aplicado abertura morfológica. .................................................................................. 23
Figura 9 – Modelo de um neurônio biológico humano. .............................................. 24
Figura 10 – Modelo do neurônio artificial. ................................................................. 25
Figura 11 – Representação da arquitetura de uma rede neural convolucional. ........ 27
Figura 12 – Representação da camada convolucional com stride igual 1. ................ 28
Figura 13 – Representação do processo de padding com stride igual 1. .................. 29
Figura 14 – (a) Função Sigmóide; (b) Função Tangente Hiperbólica; (c) Função ReLU;
(d) Função Softmax. .................................................................................................. 30
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. ............................... 31
Figura 16 – Representação da conversão de uma matriz de característica para um
vetor coluna. .............................................................................................................. 32
Figura 17 – Representação do processo de Flattening conectado a camada densa.
.................................................................................................................................. 33
Figura 18 – Arquitetura dos modelos de detecção de objetos................................... 33
Figura 19 – Descrição da arquitetura do YOLOv4. Composta por quatro blocos
principais, CSPDarknet53, SPP, PANet e Detection Head. ...................................... 35
Figura 20 – Exemplos visuais da sobreposição de diferentes valores de IoU. .......... 38
Figura 21 – Representação dos dados no arquivo txt. .............................................. 40
Figura 22 – Clonagem do repositório Darknet. .......................................................... 42
Figura 23 – Repositório Darknet clonado na VM do Colab. ...................................... 42
Figura 24 – Pasta training. ........................................................................................ 42
Figura 25 – Terceira etapa e suas subdivisões ......................................................... 43
Figura 26 – Pasta cfg no diretório Darknet. ............................................................... 43
Figura 27 – Arquivo de configuração. ........................................................................ 44
Figura 28 – Personalização do arquivo de configurações. ........................................ 45
Figura 29 – Personalizando o número de classes e filtros no arquivo de configuração.
.................................................................................................................................. 46
Figura 30 – Arquivo obj.data. .................................................................................... 46
Figura 31 – Arquivo obj.data personalizado. ............................................................. 47
Figura 32 – Arquivo obj.names personalizado. ......................................................... 47
Figura 33 – Upload de arquivos da etapa 3 para o Drive. ......................................... 48
Figura 34 – Vinculação do Drive com o Colab. ......................................................... 48
Figura 35 – Permissão de acesso ao Google Drive. ................................................ 48
Figura 36 – Acesso aos arquivos no Drive pela VM. ................................................. 49
Figura 37 – Alteração dos makefiles para habilitar OpenCV e a GPU. ..................... 49
Figura 38 – Construção da Darknet. ......................................................................... 50
Figura 39 – Comando para depuração do diretório Darknet na VM. ......................... 50
Figura 40 – Comando para cópia do arquivo obj.zip do Drive para o diretório Darknet
na VM do Colab......................................................................................................... 50
Figura 41 – Comando para cópia do arquivo yolov4-tiny-custom.cfg do Drive para o
diretório Darknet na VM do Colab. ............................................................................ 51
Figura 42 – Comando para cópia do arquivo obj.names e obj.data do Drive para o
diretório Darknet na VM do Colab. ............................................................................ 51
Figura 43 – Comando para cópia do arquivo process.py do Drive para o diretório
Darknet na VM do Colab. .......................................................................................... 51
Figura 44 – Comando para execução do arquivo process.py. .................................. 52
Figura 45 – Comando para download de pesos pré-treinados .................................. 52
Figura 46 – Treinamento do modelo YOLOv4-tiny. ................................................... 52
Figura 47 – Comando para retorno de treinamento do modelo. ................................ 53
Figura 48 – Análise gráfica do desempenho do modelo treinado.............................. 53
Figura 49 – Análise das métricas de desempenho dos arquivos de pesos treinados.
.................................................................................................................................. 54
Figura 50 – Visualização do primeiro frame do vídeo. .............................................. 55
Figura 51 – Obtenção de valores (x, y) de pixels. ..................................................... 55
Figura 52 – Incremento dos valores (x, y) de pixels no software............................... 56
Figura 53 – Delimitação de área para análise. .......................................................... 56
Figura 54 – Aplicação de escalas de cinza na área delimitada. ................................ 57
Figura 55 – Aplicação de abertura morfológica e dilatação do objeto em movimento.
.................................................................................................................................. 57
Figura 56 - Função Leaky ReLU. .............................................................................. 60
Figura 57 – Detecção do motorista infrator transitando na ciclovia. .......................... 61
Figura 58 – Relatório com tipo de veículo, data e hora do momento da infração...... 62
Figura 59 – Delimitação da área do segundo caso de infração em escalas de cinza.
.................................................................................................................................. 62
Figura 60 – Aplicação das técnicas de processamento de imagens na área delimitada
do segundo caso. ...................................................................................................... 63
Figura 61 – Detecção do motorista infrator do segundo caso. .................................. 63
LISTA DE ABREVIATURAS E SIGLAS

SINDIPEÇAS Sindicato Nacional da Indústria de Componentes para Veículos


Automotores

OMS Organização Mundial da Saúde

Pixel Picture element

MB Megabyte

GB Gigabyte

ReLU Rectified Linear Unit

GPU Graphics Processing Unit

VPU Vision Processing Unit

CIoU Complete Interaction Over Union

JPEG Joint Photographic Experts Group

AP Average Precision

mAP Mean Average Precision

VM Virtual Machine

CTB Código De Trânsito Brasileiro


SUMÁRIO

1 INTRODUÇÃO ....................................................................................................... 12

2 PROCESSAMENTO DIGITAL DE IMAGENS ....................................................... 14

2.1 IMAGEM DIGITAL ............................................................................................... 14

2.2 LIMIARIZAÇÃO E BINARIZAÇÃO ...................................................................... 16

2.3 DILATAÇÃO ........................................................................................................ 20

2.4 EROSÃO ............................................................................................................. 21

2.5 ABERTURA MORFOLÓGICA ............................................................................. 22

3 REDES NEURAIS CONVOLUCIONAIS ................................................................ 23

3.1 CAMADA CONVOLUCIONAL ............................................................................. 27

3.2 CAMADA DE AGRUPAMENTO .......................................................................... 31

3.3 CAMADA DENSA ................................................................................................ 32

4 MODELO DETECTOR ........................................................................................... 33

4.1 ESPINHA DORSAL ............................................................................................. 35

4.1.1 Saco de Brindes e Saco de Especiais .......................................................... 36

4.2 PESCOÇO .......................................................................................................... 37

4.3 CABEÇA.............................................................................................................. 37

4.4 MÉTRICAS DE DESEMPENHO ......................................................................... 38

5 METODOLOGIA .................................................................................................... 40

5.1 SOFTWARE ........................................................................................................ 54

6 RESULTADOS E DISCUSSÕES ........................................................................... 58

7 CONCLUSÃO ........................................................................................................ 64

REFERÊNCIAS......................................................................................................... 66

ANEXO A: Arquitetura do modelo personalizado treinado ................................. 70


12

1 INTRODUÇÃO

Com o evento da pandemia do novo coronavírus (COVID-19) que se iniciou em


março de 2020, a produção e o crescimento da frota de automotivos foram afetados
diretamente. Contudo, houve um crescimento da frota automotiva no Brasil de 3,7%
em 2020 em comparação com os últimos três anos, conforme analisado por Erazo
(2021). Isso equivale a um total de 59,1 milhões de unidades em circulação, entre
veículos leves, veículos pesados e motocicletas (SINDIPEÇAS, 2021). O que
representa um crescimento econômico ao país, apesar dos efeitos negativos de
paralização e quarentena causado pela pandemia. Entretanto traz consigo o aumento
de congestionamentos e acidentes no trânsito urbano.

A OMS aponta os acidentes de trânsito como nona causa de morbidade no


mundo. São 1,2 milhões de vítimas fatais, principalmente pedestres, ciclistas e
motociclistas (ANDRADE; CARVALHO, 2021). Com a necessidade de garantir a
trafegabilidade urbana segura, diversas soluções vêm sendo adotadas ao redor do
mundo (COSTA, 2015). Uma dessas soluções é a mobilidade inteligente, em que
Opitek (2014) menciona ser uma área que propõe soluções para a acessibilidade
local, nacional e internacional, utilizando recursos das tecnologias da informação e
comunicação, inovações e novas estratégias de segurança.

Uma destas inovações está na área de processamento digital de imagens


conjuntamente com visão computacional, em que segundo Kamkar e Safabakhsh
(2016) e Song et al. (2019) tem se destacado por ser uma abordagem de baixo custo
e não intrusiva que apresenta bom desempenho. A eficiência dos sistemas de visão
computacional para classificação de veículos está em grande parte relacionada à boa
detecção (ERAZO, 2021). E para isto, é empregado nesses sistemas redes neurais
convolucionais para a detecção de veículos, e Zhao et al. (2019) citam sua principal
vantagem que é de reconhecer padrões complexos que permitem uma melhor
compreensão semântica das imagens.

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.

O modelo detector YOLOv4, um dos mais recentes modelos de detecção de


objetos que envolve na sua arquitetura redes neurais convolucionais, neste trabalho
tem a finalidade de detectar veículos infratores no trânsito. Para seu carregamento,
conta-se com o suporte de um software em linguagem de programação Python,
aplicando técnicas de processamento digital de imagens e visão computacional a fim
de garantir uma interpretação efetiva e hábil ao modelo YOLOv4 em busca da alta
performance em tempo real.

A estratégia é promover a todos os modos, motorizados ou não, um acesso


amplo e democrático do espaço urbano permitindo a circulação segura aos modos
não motorizados, que são os ciclistas e os pedestres, evitando acidentes e/ou
transtornos em razão de que são os indivíduos mais frágeis, e respeitando as leis do
Código de Trânsito Brasileiro. Isto porque os modelos tradicionais de planejamento de
transportes não são capazes de tratar desse problema, pois praticamente ignoram os
modos não motorizados (CHAPADEIRO, 2011).

Este trabalho é divido em Seções. Na Seção 2 apresenta-se o tópico sobre


processamento digital de imagens, algumas técnicas de processamento e operações
morfológicas aplicados em imagens digitais. Na Seção 3 discorre-se o tema sobre as
redes neurais convolucionais. Na Seção 4 sobre o modelo YOLOv4, explicando sua
arquitetura, funcionamento, técnicas empregadas e métricas de desempenho. Na
Seção 5 é exposto a metodologia, subdivido nos tópicos de banco de imagens e
rotulação, aprendizagem do YOLOv4 e o desenvolvimento do software que servirá
como suporte para o modelo detector. Na Seção 6 retrata-se os resultados deste
trabalho. E por fim, na Seção 7, a conclusão.
14

2 PROCESSAMENTO DIGITAL DE IMAGENS

A área de estudo de processamento digital de imagens surgiu com o intuito de


melhorar o processamento de informações contidas em imagens e vídeos a partir do
que o observador ver. O sentido de visão pode ser considerado o meio mais eficiente
que o ser humano dispõe para captar as informações originadas no ambiente que o
cerca (MOLZ, 2001). Essa capacidade de processar e interpretar um grande volume
de dados que se dispõe em sua volta, foi objeto de estudo para múltiplas aplicações
(GONZALES; WOODS, 2010).

Estas aplicações foram atribuídas aos sistemas de visão computacional que


envolvem técnicas de processamento digital de imagens (FELICIANO; SOUZA; LETA,
2010). Filho e Neto (1999) citam algumas das características do sistema visual
humano relevantes para o projeto de sistemas de visão computacional, entre elas está
a faixa de valores de intensidade luminosa aos quais o olho pode se adaptar, a relação
logarítmica entre os níveis de intensidade luminosa presentes na cena e a sensação
subjetiva de brilho.

Na área de processamento de imagens se obtém inúmeras vantagens, a de se


obter tanto uma melhoria significativa da informação visual para a interpretação
humana, quanto um ajuste de condições que permitem uma análise eficiente por
sistemas computacionais (FILHO; NETO, 1999; GONZALEZ; WOODS, 2010).

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.

2.1 IMAGEM DIGITAL

As imagens, por muito tempo, eram apenas elementos pictóricos criados a


partir do talento de um pintor ou desenhista, que serviam apenas para o propósito de
representar, de forma física, eventos, lugares ou pessoas (ALMEIDA, 2015). Com o
15

avanço tecnológico e o desenvolvimento dos computadores, as imagens passaram


pelo processo de digitalização. Portanto, pode-se entender uma imagem digital como
uma representação discreta de um dado contínuo do mundo real, como uma
paisagem, que contém informações de cor e de localização espacial (ALMEIDA,
2015).

A imagem digital é caracterizada por uma matriz onde a largura da imagem


seria associada à quantidade de colunas da matriz e a altura da imagem estaria
relacionada à quantidade de linhas. Neste caso, cada elemento da matriz seria a
unidade fundamental da imagem, rotineiramente chamada de pixel (GONZALEZ;
WOODS, 2010). As imagens digitais são compostas de milhares, às vezes milhões,
de pixels. Um pixel ocuparia uma posição no espaço bidimensional da imagem e
estaria associado a uma informação relativa à quantidade de luz que foi absorvida
pelos sensores de luz que ocupavam exatamente aquela posição, no momento da
captura da imagem (ALMEIDA, 2015). Um pixel é uma área retangular de cor e é a
menor área de cor que um monitor de computador pode exibir (MONTEIRO, 2012). A
Figura 1 mostra a organização dos pixels, cada um com um tom de cor diferente que
resulta em uma imagem digital.

Figura 1 – Representação da disposição dos pixels em uma imagem digital.

Fonte: Monteiro (2012).

Apesar de não necessitar de armazenamento físico, a imagem digital precisa


ser armazenada de alguma forma no dispositivo eletrônico, e a forma de
16

armazenamento é o primeiro problema encontrado durante o tratamento de imagens


digitais (ALMEIDA, 2015). Uma imagem digital pode ocupar um espaço significativo
dependendo do seu tamanho. Por exemplo, uma imagem com 1700 pixels de largura
e 2400 pixels de altura pode ocupar até cerca de 4 MB de espaço em disco, se não
for implementado nenhuma operação de compressão. Para armazenar um livro de
500 páginas com esses tipos de imagens seriam necessários pelo menos 2 GB de
espaço em disco, algo que, há dez anos era impensável (ALMEIDA, 2015).

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.

Logo, a partir disto, houve a necessidade de se analisar as características das


imagens digitais bem como o conteúdo contida nelas, abrindo espaço para os estudos
das técnicas de processamento digital de imagens com o objetivo de melhor transmitir
e/ou observar as informações inclusas.

2.2 LIMIARIZAÇÃO E BINARIZAÇÃO

Em técnicas de processamento digital de imagens apresenta-se o princípio de


limiarização (Thresholding), que consiste em separar as regiões de uma imagem
quando esta apresenta duas classes, o fundo e o objeto (FILHO; NETO, 1999). A
limiarização consiste em produzir uma imagem resultante em binário, em que devido
a isto, este processo também é denominado de binarização.

Para que se possa aplicar o processo de limiarização, é necessário que os


pixels da imagem sejam convertidos em níveis de cinza. Esses níveis variam entre
valores de 0 à 255, onde o valor 0 representa a cor preta pura e o valor 255 a cor
branca pura. Para isto, implementa-se em linguagem de programação Python
incorporando a biblioteca OpenCV1, e para fins didáticos, os códigos são
apresentados a cada técnica de processamento como segue a diante.

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

import cv2 #biblioteca opencv

imagem = cv2.imread("imagem.jpg") #carregar imagem


imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
#convertendo imagem para escalas de cinza

cv2.imshow("Imagem original", imagem) #exibir imagem original


cv2.imshow("Imagem em escala de cinza", imagem_escala_de_cinza) #exibir
imagem em escalas de cinza

if cv2.waitKey(0) & 0xff == 27: #manter as janelas abertas


cv2.destroyAllWindows()

A Figura 2 apresenta o resultado desta implementação, em que exibe a imagem


original e a imagem convertida em escalas de cinzas.

Figura 2 – Processo de transformação de imagem em escala de cinza (a) Imagem original; (b)
Imagem convertida.

Fonte: Elaborada pelo autor (2022).

Com isto, cria-se o histograma da imagem convertida, que é definido como um


conjunto de números dispostos num gráfico indicando o percentual de pixels que
apresentam determinado nível de cinza (SILVA; NASCIMENTO, 2020). Através da
visualização do histograma de uma imagem obtemos uma indicação de sua qualidade
quanto ao nível de contraste e quanto ao seu brilho médio, se a imagem é
predominantemente clara ou escura (FILHO; NETO, 1999). Para visualizar o
histograma da imagem em escala de cinzas da Figura 2, atribui-se a biblioteca
Matplotlib2 para plotar o gráfico de histograma:

import cv2 #biblioteca opencv


from matplotlib import pyplot as plt #biblioteca matplotlib

imagem = cv2.imread("imagem.jpg") #carregar imagem


imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
#convertendo imagem para escalas de cinza

2 Matplotlib é uma biblioteca utilizada para elaboração e exibição de dados e plotagem gráfica.
18

histograma = cv2.calcHist([imagem_escala_de_cinza], [0], None, [256], [0,


256])
#imagem, cor do gráfico, None para histograma inteiro da imagem, escala,
intervalo de escala
plt.plot(histograma) #plotar histograma
plt.show() #exibir histograma

Neste caso, a Figura 2 (b) é predominantemente escura como mostra a Figura


3, onde o eixo vertical representa o número de pixels da imagem e o eixo horizontal
os níveis de cinza de 0 a 255.

Figura 3 – Histograma da Figura 2 (b).

Fonte: Elaborada pelo autor (2022).

A forma mais simples de limiarização consiste na bipartição do histograma,


convertendo os pixels cujos tom de cinza é maior ou igual a um certo valor limiar T em
brancos e os demais em pretos (FILHO; NETO, 1999). Na Figura 4, um exemplo
comum de aplicação de um certo limiar T a todo domínio de uma imagem, já que as
distribuições de intensidades do fundo e do objeto são diferentes, acentuando a
tonalidade do objeto em preto, este processo é conhecido como Limiarização Global.

Figura 4 – Ilustração do processo de limiarização de uma imagem em escalas de cinza.

Fonte: Filho; Neto (1999).


19

Para a implementação na Figura 2 (b), é utilizado um limiar adaptável. Na


implementação utiliza-se a função cv2.adaptiveThreshold em que é atribuído
respectivamente a imagem em escalas de cinza, o valor máximo de um pixel, o
método adaptativo que neste caso é o limiar adaptável gaussiano, que representa uma
soma ponderada em Gauss dos valores de vizinhança menos o valor da constante,
tamanho da vizinhança, e a constante que será subtraída da soma ponderada.

import cv2 #biblioteca opencv

imagem = cv2.imread("imagem.jpg") #carregar imagem


imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)
#convertendo imagem para escalas de cinza

limiarizacao = cv2.adaptiveThreshold(imagem_escala_de_cinza, 255,


cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 199, 5)

cv2.imshow("Gaussiano adaptativo", limiarizacao) #exibir imagem limiarizada

if cv2.waitKey(0) & 0xff == 27: #manter as janelas abertas


cv2.destroyAllWindows()

Com o processamento temos como resultado a Figura 5.

Figura 5 – Processo de limiarização (a) Imagem em escalas de cinza; (b) Imagem limiarizada.

Fonte: Elaborada pelo autor (2022).

A Equação (1) representa a operação de limiarização:

1, 𝑠𝑒 𝑓 (𝑥, 𝑦) ≥ 𝑇
𝑔(𝑥, 𝑦) = { (1)
0, 𝑠𝑒 𝑓(𝑥, 𝑦) < 𝑇

onde 𝑔(𝑥, 𝑦) é o valor de intensidade do pixel na imagem limiarizada que será


produzida, 𝑓 (𝑥, 𝑦) é o valor de intensidade do pixel na imagem original e T é o valor
do limiar (ALMEIDA, 2015). No processo de limiarização da Figura 5(b) foi utilizado
um limiar de valor 199, logo todos os pixels em nível de cinza entre 199 e 255 tiveram
sua intensidade igual a 1 representado pela cor preta, e todos os pixels em nível de
20

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

As operações de morfologia matemática, são utilizadas para suprir uma


deficiência dos métodos de processamento de imagem, que tem como principal
característica a sua linearidade (ALMEIDA, 2015). O objetivo da operação morfológica
é extrair informações relativas à geometria e a topologia de um elemento
desconhecido, no caso, a imagem avaliada, utilizando informações obtidas a partir de
um elemento conhecido como elemento estruturante (GONZALEZ; WOODS, 2010).

Uma das principais operações morfológicas é a dilatação. Para entender como


ocorre este processamento, analisa-se a sua operação morfológica matemática:

𝐷𝑖𝑙𝑎𝑡𝑎çã𝑜 (𝐴, 𝐵) = 𝐴 ⨁ 𝐵 = {𝑥 | 𝐵𝑥 ⋂ 𝐴 ≠ ∅} (2)

em que 𝐴 é a imagem e 𝐵 é o elemento estruturante, também conhecido como kernel


ou filtro. A dilatação de 𝐴 por 𝐵 é, então, o conjunto de todos os 𝑥 deslocamentos para
quais a intersecção de 𝐵𝑥 e 𝐴 inclui pelo menos um elemento diferente de zero
(FILHO; NETO, 1999). O principal objetivo da utilização de filtros em imagens é fazer
com que a imagem resultante seja mais adequada que a imagem original para uma
aplicação específica (FILHO; NETO, 1999). Para visualizar como ocorre esta
operação, segue o seguinte código em que se utiliza a função cv2.dilate atribuindo a
ela a imagem limiarizada, o kernel no qual será convoluido com a imagem e o seu
número de iterações. A elaboração do kernel se dá pela utilização da biblioteca
numpy3 para desenvolver um filtro 9x9 de uns.

import cv2 #biblioteca opencv


import numpy as np #biblioteca numpy

imagem = cv2.imread("imagem.jpg") #carregar imagem

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

kernel = np.ones((9, 9), np.uint8) #elemento estruturante

imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)


#convertendo imagem para escalas de cinza
limiarizacao = cv2.adaptiveThreshold(imagem_escala_de_cinza, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 129, 5)
dilatacao = cv2.dilate(limiarizacao, kernel, iterations=1) #proceso de
dilatacao

cv2.imshow("Imagem com dilatacao", dilatacao) #exibir imagem dilatada


if cv2.waitKey(0) & 0xff == 27: #manter as janelas abertas
cv2.destroyAllWindows()

A dilatação, em geral, faz com que o objeto cresça de tamanho, buracos


menores do que o elemento estruturantes são eliminados (QUEIROZ; GOMES, 2006).
A Figura 6 (b) exemplifica isso acentuando os pixels de tonalidade branca.

Figura 6 – Processo de dilatação (a) Imagem limiarizada; (b) Imagem dilatada.

Fonte: Elaborada pelo autor (2022).

2.4 EROSÃO

Ao contrário da dilatação, o processo morfológico de erosão é utilizado para


diminuir as características de uma imagem. A sua operação morfológica é da pela
Equação (3):

𝐸𝑟𝑜𝑠ã𝑜 (𝐴, 𝐵) = 𝐴 ⊝ 𝐵 = {𝑥 | 𝐵𝑥 ⊆ 𝐴} (3)

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

import cv2 #biblioteca opencv


import numpy as np #biblioteca numpy

imagem = cv2.imread("imagem.jpg") #carregar imagem


kernel = np.ones((9, 9), np.uint8) #elemento estruturante

imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)


#convertendo imagem para escalas de cinza
limiarizacao = cv2.adaptiveThreshold(imagem_escala_de_cinza, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 129, 5)
erosao = cv2.erode(limiarizacao, kernel, iterations=1) #proceso de erosao

cv2.imshow("Imagem com erosao", erosao) #exibir imagem erodida


if cv2.waitKey(0) & 0xff == 27: #manter as janelas abertas
cv2.destroyAllWindows()

A erosão tende a contrair as regiões, no caso os pixels em tons brancos. A


Figura 7 (b) exemplifica isso acentuando os pixels de tonalidade preta.

Figura 7 – Processo de erosão (a) Imagem limiarizada; (b) Imagem erudita.

Fonte: Elaborada pelo autor (2022).

2.5 ABERTURA MORFOLÓGICA

O processo de abertura morfológica é semelhante ao processo de erosão no


sentindo de que também remove os pixels do primeiro plano das bordas das imagens.
Sua operação morfológica é dada pela equação (4):

𝐴𝑏𝑒𝑟𝑡𝑢𝑟𝑎 (𝐴, 𝐵) = 𝐴 ∘ 𝐵 = (𝐴 ⊝ 𝐵) ⊕ 𝐵 (4)

O que equivale a dizer que a abertura de 𝐴 por 𝐵 é simplesmente a erosão de


𝐴 por 𝐵 seguida de uma dilatação do resultado por 𝐵 (FILHO; NETO, 1999). Seguindo
o mesmo raciocínio das duas operações morfológicas anteriores para a
implementação em Python para a visualização deste processo, o que difere neste
23

caso é a utilização da função cv2.morphologyEx no qual é atribuída a imagem


limiarizada, o método de operação de abertura morfológica e o kernel:

import cv2 #biblioteca opencv


import numpy as np #biblioteca numpy

imagem = cv2.imread("imagem.jpg") #carregar imagem


kernel = np.ones((9, 9), np.uint8) #elemento estruturante

imagem_escala_de_cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)


#convertendo imagem para escalas de cinza
limiarizacao = cv2.adaptiveThreshold(imagem_escala_de_cinza, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 129, 5)
abertura_morfologica = cv2.morphologyEx(limiarizacao, cv2.MORPH_OPEN,
kernel) #proceso de abertura

cv2.imshow("Abertura Morfologica", abertura_morfologica) #exibir imagem


if cv2.waitKey(0) & 0xff == 27: #manter as janelas abertas
cv2.destroyAllWindows()

A abertura em geral suaviza o contorno de uma imagem (QUEIROZ; GOMES,


2006). Isto é mostrado na Figura 8 (b) onde os elementos menos significativos e/ou
menores que o kernel são removidos, bastante útil para a remoção de ruídos.

Figura 8 – Processo de abertura morfológica (a) Imagem limiarizada; (b) Imagem aplicado abertura
morfológica.

Fonte: Elaborada pelo autor (2022).

3 REDES NEURAIS CONVOLUCIONAIS

Para entendermos as redes neurais convolucionais primeiro temos que


compreender o conceito de redes neurais artificiais. A rede neural artificial é uma das
áreas de investigação científica no domínio da criação de Inteligência Artificial (IA),
que se baseia no desejo de imitar o sistema nervoso humano, incluindo a capacidade
24

de corrigir erros e de autoestudo (CHAIKA, 2020). Na Figura 9 temos a representação


do modelo do neurônio biológico humano.

Figura 9 – Modelo de um neurônio biológico humano.

Fonte: Azevedo (2016).

O cérebro humano é composto por bilhões de células conhecidas como


neurônios. Cada neurônio conecta-se a milhares de outros através de conexões
conhecidas como sinapses, formando o sistema nervoso humano. O neurônio humano
pode ser descrito através dos seguintes elementos: os dendritos, um corpo celular e
os axônios (AZEVEDO, 2016). Os dendritos são responsáveis por receber o sinal de
outros neurônios, conduzindo-os até o corpo celular, em que após a somatória dos
sinais de entrada atingir um limiar, o sinal viaja através do axônio para atingir outros
neurônios (MASSUCATTO, 2018).

A partir desse conceito foi construído um modelo matemático denominado


redes neurais artificiais que são um conjunto de neurônios simples agrupados
(HAYKIN, 2009). A Figura 10 mostra como seria o neurônio artificial baseado em um
neurônio biológico humano, onde os valores de 𝑥 são os sinais de entrada, neste
trabalho sendo os valores de pixel, os valores de 𝑤 são os pesos sinápticos, em que
conforme Barrera (2016), podem assumir valores positivos atuando como um
excitador, negativos atuando como inibidor ou zero quando não há comunicação entre
o par de neurônios, o valor de 𝑣 seria o resultado do processamento após a junção
soma dos pesos, 𝜑 a função de ativação que serve para fazer uma transformação não
linear dos sinais de entrada e 𝑦 a saída da rede.
25

Figura 10 – Modelo do neurônio artificial.

Fonte: Adaptado de Haykin (2014).

Com isto, as redes neurais artificiais possuem algumas características de


desempenho em comum com as redes neurais biológicas (FERNANDES et. al, 2021).
O processamento da informação ocorre com o auxílio dos neurônios e cada neurônio
possui uma função de ativação, os sinais são propagados de um elemento a outro
através de conexões que possuem um peso associado (FERNANDES et. al, 2021). A
Tabela 1 mostra a correlação entres os elementos mais importantes da rede neural
biológica e a artificial, assim como a função relacionada de cada um.

Tabela 1 - Correlação entre a rede neural biológica e a artificial.


Rede neural biológica Rede Neural Artificial

Dentritos Entradas

Sinapse Pesos

Corpo celular Soma

Axônio Saída

Fonte: Elaborada pelo autor (2022).

A aprendizagem de uma rede neural dá-se pela modificação sistemática dos


pesos sinápticos das conexões entre os neurônios das diversas camadas, de modo a
armazenar o conhecimento apresentado à rede (SILVA, 2002). O processo de
aprendizagem de uma rede neural artificial pode ser dividido em duas etapas,
conhecidas como fase de treinamento e fase de teste. A fase de treinamento engloba
geralmente 75% dos dados a serem aprendidos na rede, utilizado para a correção dos
26

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.

À medida que a taxa de aprendizagem aumenta, o tempo necessário para a


rede neural adquirir certo volume de conhecimento tende a diminuir, onde cada ciclo
de aprendizagem constituídas das fases de treinamento e teste é conhecida como
Época. No entanto, um aumento excessivo na taxa de aprendizagem pode acarretar
instabilidade, pois os pesos seriam corrigidos abruptamente, prejudicando a
convergência da rede, isto é, a minimização do erro (SILVA, 2002).

As Redes Neurais Convolucionais (Convolutional Neural Network – CNN) que


são redes artificiais, mas possuem em uma de suas camadas a operação de
convolução (OLIVEIRA; CÂMARA, 2019). As CNNs fazem parte de uma área do
aprendizado profundo que teve sua inspiração baseada no córtex visual, voltada para
o desenvolvimento do campo de visão computacional, para classificação de imagens
(MASSUCATTO, 2018). As camadas de convolução são caracterizadas por serem
compostas por N neurônios, cuja tarefa é baseada na busca e aprendizagem de
características específicas dos dados de entrada, geralmente em imagens e vídeos
digitais (ERAZO, 2021).

Essa rede tem se mostrado eficaz no reconhecimento e classificação de


imagens visuais (CHAIKA, 2020). O processo de classificação consiste em dada uma
imagem de entrada, a saída seja a classe à qual a imagem de entrada pertence ou a
probabilidade de pertencer a uma determinada classe (MASSUCATTO, 2018).

A arquitetura de uma rede neural convolucional é definida em 3 camadas:


camada convolucional, camada de agrupamento e camada densa como exibe a
Figura 11.
27

Figura 11 – Representação da arquitetura de uma rede neural convolucional.

Fonte: Elaborada pelo autor (2022).

3.1 CAMADA CONVOLUCIONAL

Para compreender como funciona a camada convolucional dessas redes, é


preciso saber como ocorre a operação de convolução. O funcionamento da operação
de convolução pode-se supor a existência de dois vetores 𝑥 e 𝑤, sendo 𝑦 denotado
como se fosse a convolução entre eles (MASSUCATTO, 2018). Ou seja:

𝑦 = 𝑥 ∗ 𝑤 (5)

Onde o vetor 𝑥 é a imagem de entrada da camada convolucional e 𝑤 o filtro de


características. As camadas convolucionais são compostas por um número "n" de
filtros. Esses filtros são uma matriz de valores, e seus valores dependem do objetivo
a ser aplicado (RODRIGUES, 2019). Se por exemplo o filtro for uma matriz 3x3, a
operação de convolução se dá por:

𝑦 = (𝑥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

sobreposição dos campos receptivos e o volume da saída. A Figura 12 faz uma


ilustração do processo da camada convolucional, onde o filtro vai percorrendo ao
longo da imagem realizando a operação de convolução com stride igual a 1.

Figura 12 – Representação da camada convolucional com stride igual 1.

Fonte: Elaborado pelo autor (2022).

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

Figura 13 – Representação do processo de padding com stride igual 1.

Fonte: Elaborada pelo autor (2022).

A partir desses conceitos dos processos que ocorrem na camada convolutiva,


o tamanho da matriz resultante da camada de convolução será a entrada da próxima
camada da CNN, que pode ser obtido através da equação:

𝑛 + 2𝑝 − 𝑚
𝑂= [ + 1] (7)
𝑆

onde 𝑂 é o tamanho da matriz de saída em linhas x colunas; 𝑛 sendo o tamanho da


imagem de entrada em linhas x colunas; 𝑚 o tamanho do filtro; 𝑝 o preenchimento e
𝑆 o passo.

Ainda na camada convolucional, existe uma subcamada de ativação que está


conectada ao mapa de características, ou seja, será aplicado uma função de ativação
no qual decidirá se os neurônios deverão ser ativados a fim de ter uma saída
relevante. As funções de ativação mais utilizadas para CNNs são:

1
• Função Sigmoide: dada pela equação 𝐹(𝑥) = , sendo essa a mais
1+ 𝑒 −𝑥

utilizada em redes neurais, e tem como objetivo transformar valores de entrada


em 1 se forem positivos muito grandes e 0 para valores negativos muito baixos,
gerando valores dentro de um intervalo de 0 a 1, bastante útil em problemas
de classificação binária.
2
• Função Tangente Hiperbólica: dada pela equação 𝐹(𝑥) = − 1 , tendo
1+ 𝑒 2𝑥

seus valores de saída dentro de um intervalo entre -1 e 1, e com o


comportamento semelhante ao da função sigmoide, sua desvantagem está na
demora para convergir.
30

• 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 𝑒
𝑧𝑘

como função exponencial normalizada, é utilizada para problemas de


classificação multi-classe.

A Figura 14 mostra o comportamento dessas funções no plano cartesiano


Eficiência x Velocidade.

Figura 14 – (a) Função Sigmóide; (b) Função Tangente Hiperbólica; (c) Função ReLU; (d) Função
Softmax.

Fonte: Erazo (2021).

Nota-se que a função ReLU é mais rápida em treinamento em comparação com


outras funções de ativação, convergindo mais rápido e não satura na região positiva,
além de não necessitar de um alto custo computacional. Seguindo isto, a aplicação
de detectores de características emprega-se uma função de ativação de acordo com
os objetivos propostos, porém é possível que o pixel resultante sofrerá uma hiper
31

dimensionalidade como mostra na Figura 12, e para reduzi-la e ainda preservando as


informações significativas segue-se para a camada de agrupamento.

3.2 CAMADA DE AGRUPAMENTO

A camada de agrupamento (Pooling) tem como objetivo de reduzir o tamanho


espacial das matrizes resultantes da convolução, reduzindo assim os parâmetros a
serem aprendidos na rede, contribuindo para o controle de sobreajuste 4
(MASSUCATTO, 2018). Esta redução de parâmetros permite reduzir a carga
computacional, limita o risco de sobreajuste e fornece alguma invariância a rotações
e translações (ERAZO, 2021). As camadas de pooling diminuem a amostra de cada
mapa de características de forma independente, reduzido a altura e a largura, mas
mantendo a profundidade intacta (KHAN et al., 2018).

Existem diferentes funções para implementar o pooling, as operações mais


utilizadas são o max-pooling e o average-pooling (ERAZO, 2021). A Figura 15 ilustra
como ocorre este processo, tendo a matriz resultante do estágio convolucional. Erazo
(2021) explica que essas operações são responsáveis por dividir a imagem de entrada
em várias regiões de acordo com o tamanho do filtro, e selecionar o valor mais alto se
no max-pooling ou valor médio no average-pooling.

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.

Fonte: Elaborado pelo autor (2022).

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

3.3 CAMADA DENSA

A camada densa, também conhecidas como camadas totalmente conectadas


(Full Connected Layer), se encontram no final da rede conjuntamente com os
neurônios e as classes de objetos a serem identificadas. Na camada densa é
necessário realizar a conversão das matrizes de características resultantes da
camada de agrupamento em um vetor coluna que servirá de entrada para uma rede
neural artificial (MASSUCATTO, 2018). Esse processo de transformação para vetor
coluna é chamado de Flattening (achatamento) da matriz do mapa de características.
A Figura 16 exibe o processo para se obter um vetor coluna de pixels.

Figura 16 – Representação da conversão de uma matriz de característica para um vetor coluna.

Fonte: Elaborada pelo autor (2022).

As camadas totalmente conectadas, tipicamente são utilizadas como camadas


finais, onde diferente das camadas convolucionais, todos os pesos são totalmente
conectados com a camada anterior (MASSUCATTO, 2018). Desta forma, vale dizer
que toda rede neural artificial é adicionada ao final da CNN, em que cada elemento
após a operação de Flattening servirá como entrada para a rede neural artificial, que
consequentemente são interligadas às camadas densas escondidas até a última
camada que resultará na classificação do objeto em análise como mostra a Figura 17.
33

Figura 17 – Representação do processo de Flattening conectado a camada densa.

Fonte: Elaborado pelo autor (2022).

4 MODELO DETECTOR

A detecção de objetos é um dos problemas fundamentais amplamente


estudados no campo da visão computacional, devido à integração de diferentes
subtarefas que permitem extrair informações valiosas para a semântica das imagens
e vídeos (ERAZO, 2021). O principal objetivo da detecção de objetos é determinar a
localização dos objetos em uma imagem por meio de uma caixa delimitadora
(bounding box) e estabelecer a qual categoria cada um deles pertence, localização +
classificação (ZHAO et al., 2019).

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).

Figura 18 – Arquitetura dos modelos de detecção de objetos.

Fonte: Adaptado de Bochkovskiy; Wang; Liao (2020).


34

Os detectores baseados em duas etapas são divididos entre a entrada, espinha


dorsal, pescoço, previsão densa e previsão dispersa. Esses modelos realizam a
detecção utilizando o estágio preliminar de previsão dispersa para gerar propostas de
regiões relevantes para que depois sejam classificadas em diferentes categorias de
objetos. Por outro lado, os detectores de uma etapa, ou detectores de disparo único,
não necessitam da etapa preliminar de previsão dispersa e com isso realizam a
detecção dos objetos como um problema de regressão e classificação, inferindo em
uma única etapa a localização e classificação de cada objeto, permitindo previsões
rápidas mesmo em tempo real.

A maioria dos modelos de detecção de objetos requer muitas GPUs, o que


consequentemente torna o treinamento lento. E para este trabalho, foi utilizado o
modelo detector YOLOv4, que resolve esse problema, pois pode ser treinado em uma
única GPU (ANKA, 2020). O YOLOv4 como o próprio nome indica, You Only Look
Once, você só precisa olhar a imagem uma vez para prever os objetos dentro dela e
suas respectivas localizações (ERAZO, 2021). Esta versão é uma melhoria do
YOLOv3 e se consolidou no estado da arte por apresentar uma boa precisão e
velocidade. Sua arquitetura é baseada principalmente no Darknet53 do YOLOv3,
porém com a integração de mais blocos de convolução (ERAZO, 2021), entre eles
estão o Spatial Pyramid Pooling (SPP) (HE et al., 2015), DenseNet (HUANG et al.,
2017), Path Aggregation Network (PANet) (LIU et al., 2018) e Cross Stage Partial
Connections (CSP) (WANG et al., 2020). A Figura 19 descreve a arquitetura do
YOLOv4.
35

Figura 19 – Descrição da arquitetura do YOLOv4. Composta por quatro blocos principais,


CSPDarknet53, SPP, PANet e Detection Head.

Fonte: Erazo (2021).

4.1 ESPINHA DORSAL

Na espinha dorsal do modelo YOLOv4 se utiliza a CNN CSPDarknet53 como


modelo extrator de recursos para a versão GPU. Para outras versões como a VPU é
considerado outros modelos de acordo com os seus objetivos. Esta CNN atua para
viabilizar um tamanho de rede de entrada maior para detecção de objetos de pequeno
porte, com mais camadas para um campo receptivo mais alto (BOCHKOVSKIY;
WANG; LIAO, 2020). A CSPDarknet53 contém 29 camadas convolucionais 3x3 e uma
725 x 725 para campo receptivo. A influência do campo receptivo se dá pelo tamanho
do objeto e sua visualização, o tamanho da rede para a visualização de características
em torno do objeto, e quando o tamanho da rede é excedido, aumentando o número
de conexões entre o ponto de imagem e a ativação final.

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 , … , 𝑋𝐾−1 ] (8)

𝑋𝑇 = 𝑊𝑇 ∗ [𝑋0′′ , 𝑋1 , … , 𝑋𝐾 ] (9)

𝑋𝑈 = 𝑊𝑈 ∗ [𝑋0′ , 𝑋𝑇 ] (10)
36

em que ∗ representa a operação de convolução, [𝑋0′′ , 𝑋1 , … ] significa concatenar


𝑋0 , 𝑋1 , …, temos que o 𝑊 representa os pesos e 𝑋 são a saída da i-ésima camada
densa. Vale dizer que a entrada i-ésima é dividida em duas partes 𝑋0′′ e 𝑋0′, onde uma

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.

O YOLOv4 apresenta dois pacotes que integram um conjunto de técnicas que


facilitam o treinamento do modelo a fim de obter o melhor desempenho, Sacos de
Brindes (Bag of Freebies – BoF) e Saco de Especiais (Bag of Specials – BoS)
(ERAZO, 2021).

4.1.1 Saco de Brindes e Saco de Especiais

Geralmente os modelos detectores de objetos são treinados de forma offline.


Desta forma, os pesquisadores sempre gostam de aproveitar essa vantagem e
desenvolver melhores métodos de treinamento que possam fazer com que o detector
de objetos receba melhor precisão sem aumentar o custo de inferência
(BOCHKOVSKIY; WANG; LIAO, 2020).

O BoF é um método que aumenta a capacidade de generalização do modelo,


podendo fazer distorções fotométricas como alterar o brilho, saturação, contraste e
ruído ou fazer distorções geométricas numa imagem como girá-la e recortá-la. (ANKA,
2020). Isso faz com que haja um aumento de dados devido a essas alterações. O
objetivo do aumento de dados é aumentar a variabilidade das imagens de entrada, de
modo que o modelo de detecção de objetos projetado tenha maior robustez às
imagens obtidas de diferentes ambientes (BOCHKOVSKIY; WANG; LIAO, 2020).

Já o BoS é um método de pós-processamento que apenas aumenta o custo de


inferência em uma pequena quantidade, mas podendo melhorar significativamente a
precisão da detecção de objetos (BOCHKOVSKIY; WANG; LIAO, 2020). Ainda
Bochkovskiy; Wang; Liao (2020) reiteram que o BoS serve para aprimorar certos
atributos do modelo, como ampliar o campo receptivo, introduzir mecanismo de
atenção, etc., e o pós-processamento é um método para triagem de resultados de
previsão do modelo.
37

4.2 PESCOÇO

Sobre o CSPDarknet53 emprega-se a SPP, uma camada de agrupamento com


o objetivo de remover as restrições de entrada da CNN que antes permitia apenas
imagens de tamanho fixo, ou seja, com a SPP pode-se entrar com imagens
independentemente da escala, além de que não causa redução de velocidade da
rede. Este bloco permite a extração de características em vários níveis através da
combinação de pirâmides espaciais; em cada pirâmide é utilizado um campo receptivo
diferente (filtros diferentes) que, ao agrupá-los, facilita a combinação de informações
globais e sub-regionais (ERAZO, 2021).

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

O YOLOv4 usa a perda de CIoU como perda para as bounding boxes,


principalmente porque leva a uma convergência mais rápida e melhor desempenho
(ANKA, 2020). O CIoU integra aspectos geométricos dos boxes tais como, área de
sobreposição, relação de aspecto e distância entre os pontos centrais dos boxes
(ERAZO, 2021).

A cabeça é responsável pela classificação e regressão das caixas


delimitadoras, são aplicados em diferentes escalas da rede para detectar objetos de
diferentes tamanhos (ANKA, 2020). O número de canais é 255 por conta de que o
YOLOv4 pode detectar até 80 classes de objetos, mais 1 para objetividade, em 4
coordenadas (x, y, h, w), que de acordo com Souza, Avila e Santos (2019), (x, y)
representam o centro da bounding box em relação às extremidades da célula, (h, w)
são relativos às dimensões da imagem original. São aplicados em 3 âncoras, que são
treinamentos predefinidos com super parâmetros, que são por exemplo a proporção
38

das caixas delimitadoras e o número de seções que uma imagem deve ser dividida,
matematicamente:

Canais = (80 classes + 1 objetividade + 4 coordenadas) ∗ 3 âncoras (11)

4.4 MÉTRICAS DE DESEMPENHO

Ao treinar um modelo detector baseado em CNN é apresentado alguns


parâmetros que diz respeito ao seu desempenho. Primeiramente, é importante tomar
conhecimento do conceito de Intersecção sobre União (Intersction over Union – IoU).
O IoU é uma medida utilizada para avaliar a sobreposição entre bounding box da
verdade de base (ground truth) e o bounding box prevista pelo modelo, com pontuação
que varia entre 0 e 1, que quanto maior a similaridade dos boxes maior a pontuação
(ERAZO, 2021).

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.

Figura 20 – Exemplos visuais da sobreposição de diferentes valores de IoU.

Fonte: Adaptado de Erazo (2021).

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

corresponder à classe à qual o ground truth pertence, caso contrário é classificado


como Falso Positivo (FP). Já os Falso negativo (FN) é quando não ocorre a detecção
do objeto mesmo presentes no ground truth ou quando ocorre a detecção, mas a
classificação do objeto é incorreta. Os Verdadeiro negativos (VN) são definidos como
cada parte da imagem onde nenhum objeto foi previsto, portanto, está métrica não é
usada para detecção de objetos (ERAZO, 2021).

Logo, pode-se calcular o AP em que, conforme Azevedo (2016), tem por


objetivo calcular a proporção de itens que foram classificados como positivos que são
realmente positivos. É baseado em duas métricas subjacentes, precisão (precision) e
revocação (recall). A precision é definida como a relação entre o número de predições
atribuídas corretamente sobre todas as predições conforme a equação abaixo
(ERAZO,2021).

𝑉𝑃
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = (12)
𝑉𝑃 + 𝐹𝑃

O recall indica a proporção de amostras classificadas corretamente como


positivas (VP) sobre todas as amostras efetivamente positivas como mostra a
equação abaixo (SANTOS, 2017).

𝑉𝑃
𝑅𝑒𝑐𝑎𝑙𝑙 = (13)
𝑉𝑃 + 𝐹𝑁

E têm-se a métrica F1-Score, sendo a média harmônica entre os resultados


obtidos de precisão e recall, e quanto mais próximo ao valor 1, melhor é o classificador
(AZEVEDO, 2016).

𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 𝑥 𝑟𝑒𝑐𝑎𝑙𝑙
𝐹1 − 𝑠𝑐𝑜𝑟𝑒 = 2 𝑥 (14)
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑟𝑒𝑐𝑎𝑙𝑙

Por fim, levando em consideração a definição acima, o mAP é definido como a


média de todos os APs em todas as classes em diferentes valores de IoU (JEKYLL,
2019). Matematicamente o mAP é dado pela equação.

𝑁
1
𝑚𝐴𝑃 = ∑ 𝐴𝑃𝑖 (15)
𝑁
𝑖=1
40

5 METODOLOGIA

O processo metodológico deste trabalho é caracterizado pelo treinamento do


modelo detector YOLOv4, todavia foi adotado uma versão customizada devido ao
equipamento fornecer poucos recursos computacionais como memória e CPU, ou
seja, um modelo YOLOv4-tiny. A diferença para o YOLOv4 convencional é que
apresenta uma menor precisão, porém com processamento em FPS mais rápido por
causa de seu tempo de influência, o que torna ideal para detecção em vídeo, bem
como que seu treinamento ocorre em um intervalo de tempo menor. Por fim, o
desenvolvimento do software para carregar o modelo detector e aplicar as técnicas de
processamento digital de imagens para que haja um bom desempenho do modelo.

De maneira inicial, é realizado o carregamento de um banco de imagens e


dados rotulados5 que servirão para o treinamento do modelo detector YOLOv4-tiny. É
necessário que as imagens estejam na extensão jpg, requisito para o treinamento. Os
dados rotulados são parâmetros a serem fornecidos a rede para a classificação do
objeto como mostra a Figura 21, em que o primeiro índice representa a classe do
objeto e os dados restantes são parâmetros da bounding box.

Figura 21 – Representação dos dados no arquivo txt.

Fonte: Elaborada pelo Autor (2022).

Para o treinamento, utilizou-se em 1254 imagens com dimensões 416x416


distribuídas entre as classes carro, moto, carro de grande porte, ônibus e caminhão,
em diferentes posições (vista lateral, cima, frente, etc.) e em diferentes turnos do dia
(diurno e noturno) para que, em condições aceitáveis, independentemente da hora do
dia e posição da câmera de vídeo, o modelo identifique e detecte o veículo de forma
eficiente. Vale destacar que usar imagens com alta resolução resulta numa detecção
e classificação mais precisa.

5 https://public.roboflow.com/object-detection/vehicles-openimages/1
41

Dispondo do banco de imagens e dados, a aprendizagem do modelo


customizado é realizado por um código fonte disponível no GitHub 6, uma plataforma
de código aberto onde os usuários podem publicar seus projetos ou colaborar com
projetos de outros programadores. O código foi elaborado por TechZizou (2021) de
forma intuitiva e explicativa de como executar no Google Colaboratory (Colab).

O Colab é um produto da Google Research ideal para escrever em linguagem


Python e para treinamento de algoritmos de aprendizado de máquinas, isto
possibilitado pelo acesso gratuito a uma GPU. O Colab é bastante útil, pois todo poder
computacional utilizado para executar o software que você escreve é fornecido pela
nuvem de computadores da Google (ROVEDA, 2019). O Google Colab conta com
processadores Intel® Xeon® 2.30GHz, GPU modelo Tesla T4 com 12GB de RAM.
Além disso, possui algumas bibliotecas pré-instaladas como o CUDA, Python e
TensorFlow.

Assim sendo, acessa-se o código7 por um computador a partir de uma conta


pessoal da Google (Gmail) para acessar o Colab. Por conseguinte, é necessário
realizar uma cópia na aba de Arquivo da barra de menu e clicar Salvar uma cópia no
Drive, isso abrirá uma cópia no Colab do navegador e uma cópia será salva no seu
Google Drive. Em seguida, na aba de Ambiente de execução precisa-se Alterar o tipo
de ambiente de execução, selecionar a opção GPU e Salvar. Após finalizar estes
procedimentos, o processo para o treinamento do modelo YOLOv4-tiny é dividido em
12 etapas.

1. A primeira etapa caracteriza-se pela execução do comando para realizar a


clonagem do repositório Git8 de AlexeyAB do Darknet pra modelos YOLO, neste caso,
na VM do Colab, como mostra a Figura 22. A Darknet foi desenvolvida por Joseph
Redmon em 2016 e é uma estrutura de rede neural escrito em C e CUDA, suportando
computação em CPU e GPU (REDMON, 2018). A Darknet possui código aberto e está
disponível no repositório do GitHub9.

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

Figura 22 – Clonagem do repositório Darknet.

Fonte: Elaborada pelo Autor (2022).

A documentação clonada se encontra no canto esquerdo em arquivos na pasta


Content, como apresenta a Figura 23.

Figura 23 – Repositório Darknet clonado na VM do Colab.

Fonte: Elaborada pelo Autor (2022).

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.

Figura 24 – Pasta training.

Fonte: Elaborada pelo Autor (2022).

3. Ademais, a terceira etapa é subdividida em 4 partes, como exibe a Figura 25 e


tem que ser executada com atenção.
43

Figura 25 – Terceira etapa e suas subdivisões

Fonte: Elaborada pelo Autor (2022).

a) Na primeira parte é necessário organizar todas as imagens rotuladas junto com


seus respectivos dados txt em uma pasta para que se possa fazer o processo de
zipagem de todo os arquivos. O arquivo zip tem que ser nomeado como obj.zip e fazer
upload para a pasta yolov4-tiny no Drive.
b) Já na segunda parte, é preciso fazer o download do arquivo yolov4-tiny-
custom.cfg do diretório Darknet. A Figura 26 indica a pasta cfg onde se encontra o
arquivo de configuração.

Figura 26 – Pasta cfg no diretório Darknet.

Fonte: Elaborada pelo Autor (2022).

A Figura 27 indica o arquivo de configuração a ser feito o download.


44

Figura 27 – Arquivo de configuração.

Fonte: Elaborada pelo Autor (2022).

É imprescindível fazer as seguintes alterações de acordo com as finalidades


deste trabalho como mostra a Figura 28. Primeiramente na linha 6 de lotes (batch)
altera-se batch=64. Na linha 7 modifica-se o número de subdivisões para
subdivisions=16, essas subdivisões é o número de mini-lotes em que será dividido o
lote, ou seja, para este caso teremos 4 imagens para cada mini-lote que serão
enviadas para o processamento para 4 iterações. Na linha 7 e 8, muda-se o tamanho
e largura de entrada para 416 pixels de acordo com as imagens de entrada do banco
de imagens, ou qualquer valor que seja múltiplo de 32. Na linha 20 altera-se o máximo
de lotes para max_batches = 10000, isso de acordo com este trabalho que está
trabalhando com 5 classes, o max_batches é calculado pela equação:

𝑚𝑎𝑥_𝑏𝑎𝑡𝑐ℎ𝑒𝑠 = 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑐𝑙𝑎𝑠𝑠𝑒𝑠 ∗ 2000 (16)

Este valor representa a quantidade de iterações, ou épocas, de treinamento e


não pode ser menor que o número de imagens de treinamento. Na linha 22, as etapas
de linha têm que ser de 80% e 90% respectivamente do máximo de lotes, que neste
caso seria steps=8000,9000.
45

Figura 28 – Personalização do arquivo de configurações.

Fonte: Elaborada pelo Autor (2022).

Ademais, é necessário trocar o número de classes e filtros como exibe a Figura


29. Nas linhas 220 e 269 altera-se o número de classes de 80 para 5. Nas linhas 212
e 263 altera-se o número filtros de 255 para 30, o número de filtro é calculado pela
equação:

𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑓𝑖𝑙𝑡𝑟𝑜𝑠 = (𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑐𝑙𝑎𝑠𝑠𝑒𝑠 + 5) 𝑥 3 (17)

Essas alterações são feitas nas duas camadas YOLO do arquivo de


configuração.
46

Figura 29 – Personalizando o número de classes e filtros no arquivo de configuração.

Fonte: Elaborada pelo Autor (2022).

c) Na terceira parte, realiza-se o download dos arquivos obj.datas e obj.names


disponíveis no Git de TechZizou. No arquivo obj.datas copiar o texto da Sesão 3(c)
como mostra a Figura 30, e fazer as alterações no número de classes, que neste caso
é igual a 5.

Figura 30 – Arquivo obj.data.

Fonte: Elaborada pelo Autor (2022).


47

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.

Figura 31 – Arquivo obj.data personalizado.

Fonte: Elaborada pelo Autor (2022).

As alterações para o arquivo obj.names se dá pela inserção dos nomes das


classes a ser treinado como apresenta a Figura 32.

Figura 32 – Arquivo obj.names personalizado.

Fonte: Elaborada pelo Autor (2022).

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

Figura 33 – Upload de arquivos da etapa 3 para o Drive.

Fonte: Elaborada pelo Autor (2022).

4. A quarta etapa, exige-se fazer a vinculação da pasta do Drive onde se encontra


os arquivos com a VM do Colab executando o código como exibe a Figura 34.

Figura 34 – Vinculação do Drive com o Colab.

Fonte: Elaborada pelo Autor (2022).

Após executado o comando será projetado a seguinte mensagem como mostra


a Figura 35, e escolhe-se a opção para Conectar ao Google Drive.

Figura 35 – Permissão de acesso ao Google Drive.

Fonte: Elaborada pelo Autor (2022).


49

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.

Figura 36 – Acesso aos arquivos no Drive pela VM.

Fonte: Elaborada pelo Autor (2022).

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.

Figura 37 – Alteração dos makefiles para habilitar OpenCV e a GPU.

Fonte: Elaborada pelo Autor (2022).

6. Adiante, na sexta etapa ocorre apenas a execução do comando make para


construir a Darknet na VM, como mostra a Figura 38.

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

Figura 38 – Construção da Darknet.

Fonte: Elaborada pelo Autor (2022).

7. Seguindo para sétima etapa, copia-se os arquivos da pasta yolov4-tiny para o


diretório Darknet no Colab da VM, porém para isto, é preciso limpar o diretório Darknet
dos arquivos que não serão necessários, permanecendo assim apenas aqueles
elaborados até esta etapa como segue a Figura 39.

Figura 39 – Comando para depuração do diretório Darknet na VM.

Fonte: Elaborada pelo Autor (2022).

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.

Fonte: Elaborada pelo Autor (2022).


51

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.

Fonte: Elaborada pelo Autor (2022).

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.

Fonte: Elaborada pelo Autor (2022).

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.

Fonte: Elaborada pelo Autor (2022).

8. A oitava etapa, de acordo com a Figura 44, se dá pela execução do script


python process.py.
52

Figura 44 – Comando para execução do arquivo process.py.

Fonte: Elaborada pelo Autor (2022).

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.

9. Na etapa nove, realiza-se o download de pesos pré-treinados do diretório Git


Alexey AB, como apresenta o comando da Figura 45. Ao invés de treinar um modelo
do zero, é utilizado pesos pré-treinados utilizando o método de aprendizado por
transferência.

Figura 45 – Comando para download de pesos pré-treinados

Fonte: Elaborada pelo Autor (2022).

10. Prontamente na etapa 10, ocorre o treinamento do modelo customizado, como


apresenta a Figura 46 junto com a sua descrição para obter bons resultados.

Figura 46 – Treinamento do modelo YOLOv4-tiny.

Fonte: Elaborada pelo Autor (2022).


53

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.

Figura 47 – Comando para retorno de treinamento do modelo.

Fonte: Elaborada pelo Autor (2022).

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.

Figura 48 – Análise gráfica do desempenho do modelo treinado.

Fonte: Elaborada pelo Autor (2022).


54

Para analisar as métricas de desempenho dos arquivos de pesos treinados,


apresenta-se um comando logo em seguida que permite essa análise, como mostra a
Figura 49.

Figura 49 – Análise das métricas de desempenho dos arquivos de pesos treinados.

Fonte: Elaborada pelo Autor (2022).

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

Para o desenvolvimento do software, foram utilizadas as bibliotecas OpenCV,


Numpy, Datetime11 e Matplotlib.

Utilizando a linguagem de programação Python, implementa-se a biblioteca


OpenCV para reproduzir um vídeo gravado ou integrar o software a uma câmera em
tempo real. A Figura 50 exibe a entrada do primeiro frame do vídeo através do módulo
Pyplot de Matplotlib. Este é um caso em um ambiente controlado, utilizando câmeras
de segurança residencial, ocorrido no dia 18 de Junho de 2022 às 20h21, onde um
motorista transita em uma ciclovia e na contramão na Rua Presidente Costa e Silva,
na cidade de Santana-AP.

11 Este Módulo tem por finalidade de fornecer informações de data e hora.


55

Figura 50 – Visualização do primeiro frame do vídeo.

Fonte: Elaborada pelo autor (2022).

A resolução do vídeo é de 720x420, e como já citado, a imagem digital é uma


matriz (i, j) de pixels, tornando fácil obter as coordenadas dos pixels nos pontos (x, y),
como mostra a Figura 51. Por exemplo os valores de (x1, y1) são (400, 210), como
exibe a Figura 50 no canto inferior direito, para este caso. Portanto, é realizado a
busca dos pixels ponto a ponto no sentido anti-horário, como se estivesse dividindo a
imagem em quatro quadrantes.

Figura 51 – Obtenção de valores (x, y) de pixels.

Fonte: Elaborada pelo autor (2022).


56

Após coletados os valores, é preciso inseri-los no software um a um os valores


(x, y) dos pixels para criar uma área delimitada, em que para isto foi utilizado a
biblioteca Numpy, como apresenta a Figura 52.

Figura 52 – Incremento dos valores (x, y) de pixels no software.

Fonte: Elaborada pelo autor (2022).

A Figura 53 apresenta como seria essa área delimitada, esta que somente é
relevante para fazer a detecção de veículos infratores.

Figura 53 – Delimitação de área para análise.

Fonte: Elaborada pelo autor (2022).

Em seguida, uma imagem auxiliar receberá os dados da área especificada, em


que posteriormente é tonalizado em branco para depois sobrepor tons em escala de
57

cinza, como mostra a Figura 54, com objetivo de tornar o processamento do software
com menos inferências.

Figura 54 – Aplicação de escalas de cinza na área delimitada.

Fonte: Elaborado pelo autor (2022)

Por conseguinte, realiza-se a limiarização da área delimitada da Figura 54, em


que os objetos em movimento serão dados pela cor branca e fundo em cor preta. Para
aperfeiçoar a exibição e detecção, utiliza-se um filtro elíptico 3x3 para apurar a
imagem binária, aplicando a técnica de abertura morfológica para remover os ruídos
e posteriormente a técnica de dilatação para aumentar o tamanho dos pixels
relevantes resultantes, como mostra a Figura 55.

Figura 55 – Aplicação de abertura morfológica e dilatação do objeto em movimento.

Fonte: Elaborada pelo autor (2022).


58

Ocorrem fatores que interferem no desempenho do modelo detector, como a


qualidade da câmera de vídeo, condições climáticas, como por exemplo em dias de
chuva ou nublado, assim como a falta de iluminação em horário noturno e obstrução
da lente por falta de limpeza, entre outros fatores.

Todo esse processamento e aplicações das técnicas de processamento digital


de imagens tem por finalidade de tornar a detecção do modelo mais eficiente e
diminuir o tempo de classificação, bem como reduzir o custo operativo de CPU.
Ademais, também se realiza o carregamento dos arquivos obj.names e yolov4-tiny-
custom.cfg e o arquivo de peso treinado yolov4-tiny-custom_10000.weights, como
apresenta parte da código abaixo.

nomes_classes = []
with open('obj.names', 'r') as f:
nomes_classes = [cname.strip() for cname in f.readlines()]

# Carregando os pesos e as configurações da rede neural


rna = cv2.dnn.readNet('yolov4-tiny-custom_10000.weights', 'yolov4-tiny-
custom.cfg')

6 RESULTADOS E DISCUSSÕES

Nesta Seção, apresenta-se os resultados do treinamento do modelo YOLOv4-


tiny e do funcionamento do software.

Após o treinamento do modelo personalizado YOLOv4-tiny, na etapa 11 da


Seção 5, apresenta-se o comando para analisar o desempenho do arquivo
personalizado treinado para localização, detecção e classificação de objetos. Para
isto, o algoritmo nos fornece parâmetros que informam sua eficiência, são estes o AP,
VP, FP, FN, recall, F1-score e mAP. A Tabelas 2 apresenta os resultados das métricas
de desempenho.
59

Tabela 2 – Métricas de desempenho do arquivo treinado com 10000 épocas.


Verdadeiros Falsos Falsos
Classe AP(%) Limiar Recall(%) F1(%) mAP(%)
Positivos Positivos Negativos

Carro de
grande 100,0 0,25 18 3
porte

Ônibus 99,28 0,25 23 2


20 90,83 88,0 92,86
Carro 92,87 0,25 116 20

Moto 83,23 0,25 18 4

Caminhão 88,93 0,25 23 5

Fonte: Elaborada pelo autor (2022).

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 Gráfico 1 nos fornece uma visualização do processo de aprendizagem do


modelo durante as 10000 épocas de treinamento até a estabilização de seu mAP.
60

Gráfico 1 – Análise de desempenho do peso com 10000 épocas graficamente.

Fonte: Elaborada pelo autor (2022).

A rede YOLOv4-tiny personalizada deste trabalho conta com 21 camadas de


convolução, com diferentes valores de filtros, padding e stride. A função de ativação
da rede é Leaky ReLU, baseada na função ReLU mas tem uma pequena inclinação
para valores de pixels negativos, como exibe a Figura 57. Em vez de uma inclinação
plana como mostra Figura 14(c), este coeficiente de inclinação é determinado antes
do treinamento.

Figura 56 - Função Leaky ReLU.

Fonte: Elaborada pelo autor (2022).


61

Por conseguinte, a rede desenvolvida possui 3 camadas de max pooling, 2


camadas YOLO, que são as camadas densas nas quais fornecem a classe de cada
objeto, e por fim obtém 11 camadas de rota12. Para a visualização da rede vide Anexo
1.

Finalizado o aprendizado do modelo personalizado, o software foi executado


utilizando um computador Intel® Core® i3 da 3ª geração com 8 GB de memória RAM
operando CPU. O software tem por finalidade de que, se não houvesse essa
delimitação de área, o custo operacional seria elevado e, assim como, o modelo faria
a detecção de veículos em todo o dominío do frame. Como apresenta a Figuras 57, é
exibido uma mensagem no topo da janela o tipo de veículo detectado quando
adentrado na áre em análise.

Figura 57 – Detecção do motorista infrator transitando na ciclovia.

Fonte: Elaborada pelo autor (2022).

Neste caso, mesmo em condições não favoráveis de luminosidade e qualidade


da câmera, ainda foi possível detectar o veículo com precisão de 83,3%, mesmo que
apenas parte do veículo tenha adentrado na área delimitada, implicando em que o
modelo personalizado treinado apresenta bons resultados em detecção e
classificação.

12 Pacote de dados encaminhada para uma determinada camada de convolução.


62

Quando algum veículo é detectado, o software conta com o suporte de


elaboração de um relatório, contendo informações do tipo de veículo, precisão, data e
hora, como exibe a Figura 58, isto para casos quando o usuário estiver ausente para
que possa checar essas informações em um outro momento.

Figura 58 – Relatório com tipo de veículo, data e hora do momento da infração.

Fonte: Elaborada pelo autor (2022).

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.

Adiante, um segundo caso onde o carro andou de ré na contramão no mesmo


local, no dia 28 de Junho de 2022 às 16h13. Para este caso, foi aumentado a área
delimitada para abranger o espaço do estacionamento para ter uma melhor análise
do evento. A Figura 59 mostra a área delimitada em escalas de cinza.

Figura 59 – Delimitação da área do segundo caso de infração em escalas de cinza.

Fonte: Elaborada pelo autor (2022).

A Figura 60 exibe as aplicações das técnicas de processamento de imagens


para a área delimitada.
63

Figura 60 – Aplicação das técnicas de processamento de imagens na área delimitada do segundo


caso.

Fonte: Elaborada pelo autor (2022).

Por fim, a Figura 61 apresenta a detecção do caso ocorrido.

Figura 61 – Detecção do motorista infrator do segundo caso.

Fonte: Elaborada pelo autor (2022).

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

Neste trabalho desenvolve-se um software para realizar a detecção de veículos


em vídeo em tempo real em áreas infracionais, em que utiliza-se o modelo detector
YOLOv4 para classificação, aplicando técnicas de processamento digital de imagens
para melhorar a eficiência do algoritmo.

A construção do trabalho possibilitou analisar o funcionamento e o treinamento


do modelo detector na sua versão customizada, ao estudar cada etapa e personalizar
seus parâmetros aos objetivos esperados em busca de melhores resultados de suas
métricas de desempenho. Além disso, possibilitou a compreensão dos estudos de
CNNs, em observa-se seu comportamento e as finalidades de cada camada no que
diz respeito a eficiência do modelo que se encontra inclusas na sua arquitetura.

A importância das aplicações das técnicas de processamento digital de


imagens foi o fator significativo para obter resultados preferíveis, estando presente
nas etapas de treinamento do modelo assim como na sofisticação do desempenho do
software.

Ainda com poucos recursos computacionais, o software, mesmo em seu


estágio inicial, teve desempenho capaz de alcançar os objetivos deste trabalho no que
diz respeito na detecção e classificação de veículos em áreas infracionais delimitadas
supracitadas, e, a partir de seus testes, se mostrou bastante promissor. Por se tratar
de um software de baixo nível, seu valor monetário é baixo ao ser comparado aos
modelos existentes no mercado com as mesmas finalidades, podendo ser usado por
pessoas que queiram esse suporte de segurança em ruas e avenidas em volta de sua
residência ou ponto comercial.

Para os trabalhos futuros, recomenda-se um treinamento do modelo YOLOv4


com um banco de imagens e dados com maior quantidade e qualidade, a fim de
diminuir os FP e obter uma melhor precisão de detecção. Ademais, seria possível
realizar o aperfeiçoamento do software para se obter menor custo operacional,
transformá-lo em um produto de baixo custo e comercializável, realização de mais
65

testes em ambientes controlados e em grande escala com maior número de câmeras


de monitoramento, além de desenvolver um ambiente interativo e dinâmico para
usuários, e fazer o uso devido de aplicação das leis para motoristas infratores, a fim
de garantir segurança aos pedestres e ciclistas nos seus espaços dentro da
mobilidade urbana.
66

REFERÊNCIAS

ALMEIDA, L. H. E. V. Binarização de imagens de documentos utilizando


estimativa local de largura de traço. Dissertação (Mestrado em Ciência da
Computação) – Centro de Informática, Universidade Federal de Pernambuco, 2015.
ANDRADE, S. A. L., CARVALHO, M. D. S. Agenda 2030 - Traffic in Brazil: Education
and Continuing Training. New Trends in Qualitative Research, Oliveira de
Azeméis. Portugal, v. 9, p. 163–171, 2021.
ANKA, A. YOLO v4: Optimal Speed & Accuracy for object detection, 2020.
Disponível em: < https://towardsdatascience.com/yolo-v4-optimal-speed-accuracy-
for-object-detection-79896ed47b50#56ff>. Acesso em: 13 dez. 2021.
AZEVEDO, L. P. Aplicação de redes neurais artificiais no processo de
classificação de orquídeas do gênero Cattleya. Trabalho de Conclusão de Curso
(Bacharel em Sistemas de Informação) – Instituto Federal de Educação, Ciência e
Tecnologia de Minas Gerais, Sabará, 2016.
BARRERA, J. A. T. Redes Neuronales, 2016. Disponível em:
<http://www.cucei.udg.mx/sites/default/files/pdf/toral_barrera_jamie_areli.pdf>.
Acesso em: 22 jun. 2022.
BOCHKOVSKIY, A., WANG, C.Y., LIAO, H. Y. M. YOLOv4: Optimal speed and
accuracy of object detection. Revista ArXiv, abr. 2020.
CHAIKA, P. Neural Networks, 2020. Disponível em: <
https://www.poznavayka.org/en/science-and-technology/neural-networks/ >. Acesso
em: 14 dez. 2021.
CHAPADEIRO, F. C. Limites e potencialidades do planejamento cicloviário: um
estudo sobre a participação cidadã. Dissertação (Mestrado em Transportes) –
Faculdade de Tecnologia, Universidade de Brasília, Distrito Federal, 2011.
COPPIN, B. Inteligência Artificial. Rio de Janeiro: LTC, 2010.
COSTA, C. A. Cidades Inteligentes e Big Data. Cadernos FGV Projetos, v. 10, n.
24, p. 108-123, out. 2015.
ERAZO, J. J. M. Desenvolvimento de um sistema de contagem e classificação
de carros utilizando redes neurais convolucionais. Dissertação (Mestrado em
Engenharia de Automação e Sistemas) – Universidade Federal de Santa Catarina,
Florianópolis, 2021.
FELICIANO, F. F., SOUZA I. L, LETA, F. R. Visão computacional aplicada à
metrologia dimensional automatizada: considerações sobre sua exatidão. Revista
ENGEVISTA, v. 7, n. 2, fev. 2010.
FELICIO, A. B. Identificação automática de motociclistas através de
processamento de imagens de vídeo de tráfego. Dissertação (Mestrado em
Ciências) – Escola de Engenharia de São Carlos, Universidade de São Paulo, São
Carlos, 2019.
FERNANDES, A. T. R., FONSECA, J. L. T., SILVA, I. L. P., ARIAS, P. D. M. A.,
RAMOS, R. A., OLIVEIRA, W. D. Avaliação da influência das tensões de barra na
67

previsão de cargas via redes neurais. Revista Research, Society and


Development, v. 10, n. 12, out. 2021.
FILHO, O. M., NETO, H. V. Processamento digital de imagens. Rio de Janeiro:
Brasport, 1999.
GONZALES, R. C., WOODS, R. E. Processamento de imagens digitais. São
Paulo: Pearson Prentice Hall, 2010.
GOYAL, K., KAUR, D. A novel vehicle classification model for urban traffic
surveillance using the deep neural network model. Resvista Internacional de
Educação e Engenharia de Gestão (IJEME), v. 6, n. 1, jan. 2016.
HAYKIN, S. A comprehensive foundation. Neural Networks, v. 2, n. 2004, p. 41,
2004.
HAYKIN, S. Neural Networks and Learning Machines. Prentice Hall, 2009.
HE, K., ZHANG, X., REN, S., SUN, J. Spatial pyramid pooling in deep convolutional
networks for visual recognition. IEEE transactions on pattern analysis and machine
intelligence, IEEE, v. 37, n. 9, p. 1904–1916, 2015.
HUANG, G., LIU, Z., VANDERMAATEN, L., WEINBERGER, K. Densely connected
convolutional networks. In: PROCEEDINGS of the IEEE conference on computer
vision and pattern recognition. [S.l.: s.n.], 2017, p. 4700–4708.
JEKYLL. Evaluating object detection models: guide to performance metrics,
2019. Disponível em: < https://manalelaidouni.github.io/Evaluating-Object-Detection-
Models-Guide-to-Performance-Metrics.html >. Acesso em: 30 mai. 2022.
KAMKAR, S., SAFABAKHSH, R. Vehicle detection, counting and classification in
various conditions. IET Intelligent Transport Systems, IET, v. 10, n. 6, p. 406–413,
2016.
KHAN, S.; RAHMANI, H.; SHAH, S. A. A.; BENNAMOUN, M. A guide to Convolutional
neural networks for Computer vision. Synthesis Lectures on Computer Vision,
Morgan & Claypool Publishers, v. 8, n. 1, p. 1–207, 2018.
LIU, S., QI, L., QIN, H., SHI, J., JIA. J. Path aggregation Network for instance
segmentation. Revista ArXiv, set. 2018.
MASSUCATTO, J. D. P. Aplicação de conceitos de redes neurais
convolucionais na classificação de imagens de folhas. Trabalho de Conclusão
de Curso (Bacharel em Engenharia da Computação) – Universidade Tecnológica
Federal do Paraná, Pato Branco, 2018.
MICHEL, J. Overfitting e Underfitting, s.d. Disponível em: <
https://www.3dimensoes.com.br/post/overfitting-e-underfitting>. Acesso em: 15 dez.
2021.
MOLZ, R. F. Uma metodologia para o desenvolvimento de aplicações de Visão
computacional utilizando um projeto conjunto de hardware e software. Tese
(Doutorado em Ciência da Computação) – Instituto de Informática, Universidade
Federal do Rio Grande do Sul, Porto Alegre, 2001.
68

MONTEIRO, O. Noções de pixel e cores digitais, 2012. Disponível em:


<https://oliviamonteiro.wordpress.com/2012/10/12/nocoes-de-pixel-e-cores-digitais/>.
Acesso em: 8 mar. 2022.
OLIVEIRA, P. F., CÂMARA, C. E. Análise de desempenho de um algoritmo
desenvolvido para solução de deep learning utilizando redes neurais convolucionais
para análise de contraste de imagens. Revista Ubiquidade, v. 2, n. 1, p. 84-105,
jan./jul. 2019.
OPITEK, A. D. Smart City – The citizen’s perspective. In: XIV INTERNATIONAL
CONFERENCE ON TRANSPORT SYSTEMS TELEMATICS. Anais Telematics –
Support for Transport. TST 2014. Polônia, 2014, p. 331-340.
QUEIROZ, J. E. R., GOMES, H. M. Introdução ao processamento digital de imagens.
Revista de Informática Teórica e Aplicada – RITA, v. 13, n. 2, p. 11- 42, 2006.
RODRIGUES, V. Conhecendo a visão do computador: Redes Neurais
Convolucionais, 2019. Disponível em:<
https://vitorborbarodrigues.medium.com/conhecendo-a-vis%C3%A3o-do-
computador-redes-neurais-convolucionais-e1c2b14bf426>. Acesso em: 15 de jan.
2022.
ROVEDA, U. Google Colab: o que é, como usar e quais as vantagens?, 2019.
Disponível em: <https://kenzie.com.br/blog/google-colab/>. Acesso em: 19 de jan.
2022.
SANTOS, A., AIRES, K., VERAS, R., UCHÔA, V., SANTOS, L. Uma abordagem de
classificação de imagens dermatoscópicas utilizando aprendizado profundo com
redes neurais convolucionais. In: Anais do XVII Workshop de Informática Médica.
SBC, 2017.
SILVA, A. F. Previsão da evapotranspiração de referência utilizando redes
neurais. Dissertação (Mestrado em Engenharia Agrícola) – Universidade Federal de
Viçosa, Viçosa, 2002.
SILVA, A. J. J., NASCIMENTO, A. V. Implementação de uma metodologia prática de
segmentação e binarização de imagens utilizando o software comercial IMAGE-PRO
PLUS 6.0. Revista de Engenharia e Tecnologia, v. 12, n. 4, 2020.
SINDIPEÇAS. Relatório da Frota Circulante. 2021.Disponível em:
https://www.sindipecas.org.br/sindinews/Economia/2021/
RelatorioFrotaCirculante_Marco_2021.pdf. Acesso em: 31. mar. 2022.
SONG, H., LIANG, H., LI, H., DAI, Z., YUN, X. Vision-based vehicle detection and
counting system using deep learning n highway scenes. European Transport
Research Review, Springer, v. 11, n. 1, p. 1–16, 2019.
SOUZA, L. L., AVILA, S., SANTOS, T. T. Detecção de fruto em viticultura utilizando
redes neurais profundas. In: 13º CONGRESSO INTERINSTITUCIONAL DE
INICIAÇÃO CIENTÍFICA, 2019, Campinas. ISBN: 978-85-7029-149-3.
TECHZIZOU. Train a custom YOLOv4-tiny detector using Google Colab.
Disponível em: < https://techzizou.com/train-a-custom-yolov4-tiny-object-detector-
using-google-colab-tutorial-for-beginners/ Acesso em 25 mai. 2022.
69

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

ANEXO A: Arquitetura do modelo personalizado treinado


71
72
73
74

Você também pode gostar