<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Camada Totalmente Conectada &#8211; Visão Computacional</title>
	<atom:link href="https://visaocomputacional.com.br/tag/camada-totalmente-conectada/feed/" rel="self" type="application/rss+xml" />
	<link>https://visaocomputacional.com.br</link>
	<description>Tecnologias, teorias e testes.</description>
	<lastBuildDate>Thu, 28 Aug 2025 18:27:11 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.1</generator>

<image>
	<url>https://visaocomputacional.com.br/wp-content/uploads/2021/12/cropped-logo-150x150-1-32x32.png</url>
	<title>Camada Totalmente Conectada &#8211; Visão Computacional</title>
	<link>https://visaocomputacional.com.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>YOLO Versões 1 e 2 (Arquitetura)</title>
		<link>https://visaocomputacional.com.br/yolo-versoes-1-e-2-arquitetura/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yolo-versoes-1-e-2-arquitetura</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Sun, 08 Oct 2023 19:53:46 +0000</pubDate>
				<category><![CDATA[Visão computacional]]></category>
		<category><![CDATA[Camada Convolucional]]></category>
		<category><![CDATA[Camada Totalmente Conectada]]></category>
		<category><![CDATA[Convolutional Neural Network]]></category>
		<category><![CDATA[Darknet]]></category>
		<category><![CDATA[Full Connected]]></category>
		<category><![CDATA[Intersection over Union]]></category>
		<category><![CDATA[IoU]]></category>
		<category><![CDATA[Non maximum suppression]]></category>
		<category><![CDATA[Normalização em Lote]]></category>
		<category><![CDATA[Supressão não máxima]]></category>
		<category><![CDATA[YOLO]]></category>
		<guid isPermaLink="false">https://visaocomputacional.com.br/?p=3424</guid>

					<description><![CDATA[<p>Este artigo, explana o funcionamento das versões 1 e 2 do YOLO, conforme descrito em seus artigos científicos, com foco no detalhamento de suas redes neurais. Detalhando quais são as camadas ocultas destas duas redes neurais e uma breve descrição de como é o funcionamento destas camadas.</p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/yolo-versoes-1-e-2-arquitetura/">YOLO Versões 1 e 2 (Arquitetura)</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Este artigo, explana o funcionamento das versões 1 e 2 do YOLO, conforme descrito em seus artigos científicos, com foco no detalhamento de suas redes neurais. Detalhando quais são as camadas ocultas destas duas redes neurais e uma breve descrição de como é o funcionamento destas camadas. Uma introdução ao YOLO está disponível em <a href="https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/">YOLO para Detecção de Objetos  – Visão Geral</a>.</p>



<p><strong>Observação:&nbsp;</strong>Para melhor entender este artigo e os demais sobre YOLO, é necessário ter uma conhecimento geral sobre inteligência artificial e redesnNeurais.</p>



<p>Antes de detalhar esta rede neural, capaz de detectar diversos objetos em uma imagem, nos próximos 3 parágrafos é apresentado um resumo de seu funcionamento, para melhor entendimento.</p>



<h2>Como funciona?</h2>



<p>O YOLO utiliza uma rede neural profunda (DNN – Deep Neural Network), uma rede neural convolucional, cuja a arquitetura é chamado de Darknet, com o mesmo nome do framework utilizado para implantá-lo. Sua implementação foi desenvolvida na linguagem C, porém, com a ajuda da comunidade e empresas, já está disponível em várias outras linguagens de programação.</p>



<p>O YOLO cria diversas caixas delimitadoras, para cada caixa é atribuído um valor de confiança, com a porcentagem (0 até 1) de existir um objeto, também é realizada a predição de que tipo de objeto existe na caixa.&nbsp;O valor de confiança para a caixa delimitadora e a predição da classe são combinados em uma pontuação final, que vai informar a probabilidade dessa caixa conter um objeto específico. Por fim, é realizado o processo de supressão não máxima afim de “filtrar”/”eliminar” falsos objetos e mesclar regiões de um mesmo objeto <a href="https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/#refs">[AG]</a>. <span class="has-inline-color has-black-color">Todo esse processo</span>, é realizado dentro da própria rede neural? A resposta é não, nem toda a mágica acontece dentro dela, conforme explicações a seguir.</p>



<h2>Nem Tudo é Rede Neural</h2>



<p>Apesar da maior parte do processamento ser realizada em uma rede neural, duas etapas de processamento são realizados fora dela: a supressão não máxima e o redimensionamento da imagem para detecção.</p>



<p>A Supressão Não Máxima (Non Maximum Suppression), é uma etapa de pós-processamentos realizado pelo YOLO, por meio de algoritmos especializados. NMS é uma etapa de pós-processamento usada para melhorar a precisão e a eficiência da detecção de objetos. Na detecção de objetos, é comum que várias caixas delimitadoras sejam geradas para um único objeto em uma imagem. Essas caixas delimitadoras podem se sobrepor ou estarem localizadas em posições diferentes, mas todas representam o mesmo objeto. O NMS é usado para identificar e remover caixas delimitadoras redundantes ou incorretas e gerar uma única caixa delimitadora para cada objeto na imagem <a href="#refs">[KR]</a>. A Figura 1 ilustra o resultado deste processo.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/supressao_nao_maxima.png" alt="" width="329" height="219"/><figcaption>Figura 1 &#8211; Sem e com supressão não máxima.</figcaption></figure></div>



<p>Na outra ponta da rede neural, é realizado um pré-processamento responsável por redimensionar a imagem, a fim de ter exatamente o mesmo tamanho (mesma quantidade de pixeis) que a camada de entrada desta rede neural. </p>



<p>Agora que eliminamos estas duas etapas, ficará menos complexo entender o que acontece dentro do YOLO.</p>



<h2>Rede Neural &#8220;Dinâmica&#8221;</h2>



<p>Outro ponto importante a entender é que a Darknet, responsável por treinar a rede neural do YOLO a partir do YOLO 2, também é responsável por dimensionar o tamanho da rede neural, durante seu treinamento, conforme o arquivo de configurações yolo.cfg.</p>



<p>Para se ter ideia, por meio deste arquivo, é possível informar a quantidade de classes que serão treinadas e também a quantidade de filtros que as camadas (layers) CNN possuirão. A modificação destas configurações, alterará a estrutura da rede neural, como a quantidade de layers ocultos e principalmente a quantidade de neurônios de saída.</p>



<p>Entender esse dinamismo, ajuda a entender que o YOLO não é uma rede neural de tamanho fixo e sim uma arquitetura de rede neural que pode ter tamanhos diferentes, para atender diferentes bases de dados com quantidades diferentes de classes.</p>



<h2>Função de Perda</h2>



<p>Caso você ainda não esteja acostumado a treinar redes neurais e não conhece esse termo, a função de perda (loss-function) ou de custo, tem o objetivo de “levar” o resultado do treinamento em direção à convergência, atuando no processo de ajuste dos pesos da rede neural <a href="#refs">[GFT]</a>. Em resumo, é a função/cálculo que ajusta os pesos da rede neural.</p>



<p>Esta função é crucial pra treinar qualquer rede neural e cada versão do YOLO possui sua própria função de perda, responsável por treinar a rede. As funções de perda do YOLO fazem parte da Darknet e estão descritas em seus artigos. Podemos dizer, que para utilizar o YOLO com qualquer outra biblioteca (Opencv, OpenVino, Tensorflow, etc), possuímos a dependência da Darknet para treiná-lo.</p>



<p>Mais detalhes sobre cada função de perda serão apresentado nas próximas seções.</p>



<h2>YOLO v1</h2>



<p>O YOLO v1 é representado na Figura 2, ele consiste em uma rede neural com 24 camadas de convolução (CNN), que atuam como um extrator de características, s<span class="has-inline-color has-black-color">eguidas</span> por 2 camadas totalmente conectadas, que são responsáveis pela classificação de objetos e regressão de caixas delimitadoras, e a saída final é um tensor de 7 x 7 x 30. Uma breve descrição do comportamento de cada uma das camadas (layer) do YOLO, é apresentada na última sessão deste artigo.</p>



<p>YOLO é uma CNN simples de caminho único e usa convoluções 1&#215;1 seguidas por convoluções 3&#215;3. A ativação Leaky ReLU é usada para todas as camadas, exceto a camada final, em que é usada uma função de ativação linear <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[TAV]</a>. No final do artigo são apresentadas breves descrições de como funciona cada um destes tipos de camadas.</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="720" height="302" src="https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_v1_autor.webp" alt="" class="wp-image-4965" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_v1_autor.webp 720w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_v1_autor-300x126.webp 300w" sizes="(max-width: 720px) 100vw, 720px" /><figcaption>Figura 2 &#8211; Rede Neural YOLO v1. Autor Joseph Redmon et al. <a href="#refs">[RJ1]</a>.</figcaption></figure>



<p>Podemos dizer que o YOLO, em essência, consiste em três pilares principais, o backbone (espinha dorsal) para extração de recursos, o neck (pescoço) focado na agregação de recursos e a head (cabeça) para gerar detecções. A imagem da Figura 3 ilustra essa ideia, que foi apresentada pelo autor 고민수 em <a href="#refs">DPB]</a>. Observar essa divisão de estrutura irá ajudar a entender as divisões de detecção do YOLO.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head-969x1024.png" alt="" class="wp-image-4958" width="840" height="887" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head-969x1024.png 969w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head-284x300.png 284w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head-768x812.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head-1453x1536.png 1453w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/yolo_backbone_neck_head.png 1612w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>Figure 3 &#8211; Rede neural YOLO v1 <a href="#refs">[DPB]</a>. </figcaption></figure>



<p><strong>A arquitetura do YOLO v1 não é complicada</strong>, na verdade, é apenas um backbone convolucional com duas camadas totalmente conectadas, muito parecido com uma arquitetura de rede de classificação de imagens.&nbsp;A parte inteligente do YOLO (a parte que o torna um detector de objetos) está na interpretação das saídas (head), dessas camadas totalmente conectadas <a href="#refs">[DPB]</a>.</p>



<p>Para fixar ainda mais a estrutura desta rede neural, observe nas imagens 4 e 5, que o fluxo do <strong>pilar backbone (<strong>espinha dorsal</strong>) </strong>vai afunilando até uma pequena saída. Este é um processo comum em camadas CNNs, que extraem características ou recursos. Na seção &#8220;Camada CNN&#8221;, será apresentada uma ferramenta que ilustra os efeitos deste tipo de camada.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="842" src="https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet-1024x842.png" alt="" class="wp-image-4957" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet-1024x842.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet-300x247.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet-768x631.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet-1536x1263.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet.png 1562w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 4 &#8211; CNNs Yolo v1 <a href="#refs">[DPB]</a>.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="734" height="1024" src="https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-734x1024.png" alt="" class="wp-image-4956" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-734x1024.png 734w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-215x300.png 215w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-768x1071.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-1101x1536.png 1101w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag-1468x2048.png 1468w, https://visaocomputacional.com.br/wp-content/uploads/2023/08/darknet_diag.png 1564w" sizes="(max-width: 734px) 100vw, 734px" /><figcaption>Figura 5 &#8211; CNNs YOLO v1 <a href="#refs">[DPB]</a> .</figcaption></figure>



<p>Uma nota rápida sobre o backbone (espinha dorsal), é que&nbsp; os autores projetaram seu próprio backbone convolucional inspirado no GoogLeNet <a href="#refs">[DPB]</a>, mas vale ressaltar que é apenas um extrator de recursos.</p>



<p><strong>O pilar seguinte <strong>neck</strong> (<strong>pescoço)</strong></strong>, é um subconjunto que basicamente coleta mapas funcionais de diferentes estágios do backbone, ou seja, é um coletor de recursos. Estas camadas basicamente transformam os dados de entrada para o pilar head conseguir realizar sua tarefa de detecção de objeto.</p>



<p><strong>Vamos ampliar o</strong> <strong>último pilar head (cabeça)</strong> com um pouco mais de detalhes, nos referindo a ele como tensor de saída. A primeira coisa que você pode notar é que ele é uma camada totalmente conectada, mas com certeza não se parece com uma. Não se deixe enganar pela forma 3D, ela está totalmente conectada, não é produzida por uma convolução, apenas a remodelam, porque é mais fácil de interpretar em 3D. Alternativamente, você pode imaginar e enfileirar o tensor 3D em um longo vetor de comprimento. Seja como for que você imagine, está totalmente conectado, cada neurônio de saída está conectado a cada neurônio, no vetor antes dele <a href="#refs">[DPB]</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="320" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor-1024x320.png" alt="" class="wp-image-4984" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor-1024x320.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor-300x94.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor-768x240.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor-1536x480.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/output_tensor.png 1762w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 6 &#8211; Tensor de saída do YOLO v1 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>Portanto, cada célula é responsável por prever caixas de uma única parte da imagem, mais especificamente, cada célula é responsável por prever com precisão duas caixas para cada parte da imagem.&nbsp;Observe que existem 49 células e cada célula está prevendo duas caixas, então toda a rede irá prever apenas 98 caixas, esse número é fixo.</p>



<p>Para prever uma única caixa, a rede deve gerar uma série de coisas.</p>



<ul><li>Em primeiro lugar, deve codificar as coordenadas da caixa que o YOLO codifica como (x, y, w, h), onde x e y são o centro da caixa.&nbsp;O YOLO não gera as coordenadas reais da caixa, mas sim as coordenadas parametrizadas.&nbsp;A largura e a altura são normalizadas em relação à largura da imagem, portanto, se a rede gerar um valor de 1,0 para a largura, significa que a caixa deve abranger toda a imagem, da mesma forma, 0,5 significa que é metade da largura da imagem. Observe que a largura e a altura não têm nada a ver com a própria célula da grade, os x ésimos valores são parametrizados em relação à célula da grade, pois eles representam deslocamentos da posição da mesma.&nbsp;A célula da grade tem largura e altura iguais a 1/S.&nbsp;Se a rede gerar um valor de 1,0 para x, isso significa que o valor x da caixa é a posição x da célula da grade, mais a largura da célula da grade <a href="#refs">[DPB]</a>.</li><li>Em segundo lugar, o YOLO também prevê uma pontuação de confiança para cada caixa que representa a probabilidade da caixa conter um objeto.&nbsp;</li><li>Por último, o YOLO prevê uma pontuação (predição) para cada classe treinada, que é representada por um vetor de C valores, e a classe prevista é aquela com o maior valor.&nbsp;Agora, aqui está o problema, o YOLO não prevê uma classe para cada caixa, ele prevê uma classe para cada célula, mas cada célula está associada a duas caixas, portanto essas caixas terão a mesma classe prevista, embora possam ter formas e posições diferentes <a href="#refs">[DPB]</a>.</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" width="796" height="1024" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output-796x1024.png" alt="" class="wp-image-4983" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output-796x1024.png 796w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output-233x300.png 233w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output-768x988.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output-1194x1536.png 1194w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/Yolo_V1_output.png 1574w" sizes="(max-width: 796px) 100vw, 796px" /><figcaption>Figura 7 &#8211; Tensor de saída do YOLO v1 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>Os primeiros cinco valores codificam a localização e a confiança da primeira caixa, os próximos cinco codificam a localização e a confiança da próxima caixa e os 20 finais codificam as 20 classes. No total, o tamanho do vetor é 5 X B + C, onde B é o número de caixas, e C é o número de classes.</p>



<p>A maneira como o YOLO realmente prevê as caixas, é prevendo a escala alvo e os valores de desvio para cada precedente, estes são parametrizados<span class="has-inline-color has-vivid-red-color"> </span>pela<span class="has-inline-color has-vivid-red-color"> </span>normalização, largura e altura da imagem. Por exemplo, pegue a célula superior direita destacada no tensor de saída, da Figura 6, esta célula específica corresponde à célula superior direita na imagem de entrada,  ela representa uma caixa anterior, que terá largura e altura iguais à largura da imagem dividida por 7 e altura da imagem dividida por 7 respectivamente, sendo a localização no canto superior direito. As saídas desta única célula irão, portanto, deslocar e esticar a caixa precedente para novas posições que, esperançosamente, conterão o objeto <a href="#refs">[DPB]</a>.</p>



<p>Como a célula prevê duas caixas, ela deslocará e ampliará a caixa anterior de duas maneiras diferentes, possivelmente para cobrir dois objetos diferentes (mas ambos são restritos a ter a mesma classe). Você pode se perguntar por que ele está tentando fazer duas caixas, a resposta é porque provavelmente 49 caixas não são suficientes, especialmente quando há muitos objetos próximos uns dos outros, embora o que tende a acontecer durante o treinamento é que as caixas previstas se especializem. Sendo assim, uma caixa pode aprender a encontrar coisas grandes, a outra pode aprender a encontrar coisas pequenas, o que pode ajudar a generalização da rede para outros domínios <a href="#refs">[DPB]</a>.</p>



<p>Como nota final para ajudar no seu aprendizado, é razoável perguntar por que eles não previram uma classe para cada caixa e como seria a saída. Ainda teria 7 x 7 células, mas em vez de cada célula ter tamanho de 5 X B + C, você teria (5 + C) X B. Portanto, para duas caixas, você teria 50 saídas, e não 30. Isso não parece irracional e dá à rede a flexibilidade de prever duas classes diferentes no mesmo local <a href="#refs">[DPB]</a>.</p>



<h3>Treinamento YOLO v1</h3>



<p>YOLO é treinado de ponta a ponta, com uma arquitetura simples, que significa menos problemas para que coisas dêem errado. Os autores começam pré-treinando sua arquitetura no ImageNet e para fazer isso, eles usam as primeiras 20 camadas convolucionais, seguidas por um pool médio e depois, uma camada totalmente conectada com 1.000 saídas para as 1.000 classes ImageNet. Isso é algo padrão em classificação de imagens e eles afirmam que podem chegar perto da precisão de última geração (para a época) no ImageNet. Lembre-se de que eles estão fazendo isso apenas para pré treiná-lo <a href="#refs">[DPB]</a>.</p>



<p>Eles convertem a arquitetura para detecção de objetos descartando o pool médio e a camada totalmente conectada, adicionam mais algumas camadas convolucionais e configuram as camadas totalmente conectadas conforme descrito acima. A outra coisa que é feita é dobrar o tamanho da entrada, este é um truque comum para detectores de objetos, pois ajuda a ter uma resolução de entrada refinada, especialmente para encontrar objetos pequenos <a href="#refs">[DPB]</a>. O procedimento de treinamento em si não é notável, a parte inteligente do YOLO está na interpretação dos resultados, nas camadas que destaquei como <strong>head</strong> e tensor de saída.</p>



<p>O mais interessante do YOLO é a <strong>função de perda</strong>, que é o método que treina as saídas da rede da maneira que desejarmos, ou seja, responsável por treinar a parte que realiza a detecção de objetos na rede neural. A função de perda do YOLO foram criadas por seus autores. Na Figura 8, segue sua impressão retirada do artigo que deu origem ao YOLO.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="478" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/yolo_loss_total-1024x478.png" alt="" class="wp-image-5019" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/yolo_loss_total-1024x478.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/yolo_loss_total-300x140.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/yolo_loss_total-768x358.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/yolo_loss_total.png 1372w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 8 &#8211; Função de Perda YOLO v1. Autor: Joseph Redmon et al. <a href="#refs">[RJ1]</a>.</figcaption></figure>



<p>De modo geral, o YOLO prevê múltiplas caixas delimitadoras por célula da grade. Para calcular a perda do verdadeiro positivo, é desejado que apenas um delas seja responsável pelo objeto, para tanto, é selecionado aquele com maior IoU (intersecção sobre união) como a verdade fundamental. Esta estratégia leva à especialização entre as previsões da caixa delimitadora, onde cada previsão fica melhor em prever determinado tamanho e proporção.</p>



<p>O artigo <a href="https://wikidocs.net/167690">Yolo Loss Training</a> e <a href="https://pyimagesearch.com/2022/04/11/understanding-a-real-time-object-detection-network-you-only-look-once-yolov1/">Understanding &#8230; YOLOv1</a> detalham, por partes, a lógica e os cálculos da função de perda do YOLO v1.</p>



<h2>YOLO v2</h2>



<p>O objetivo do YOLO v2 foi reduzir os erros de localização e ao mesmo tempo superar a precisão da classificação. A ideia de Redmon e Farhadi era desenvolver um detector de objetos que fosse mais preciso que seus antecessores e mais rápido que eles. Porém, construir redes maiores e mais profundas ou reunir várias redes não era o desejado. Em vez disso, com uma abordagem simplificada de arquitetura de rede, eles se concentraram em reunir muitas ideias de outros trabalhos combinadas com suas novas técnicas. Como resultado, melhoraram o desempenho do YOLO em termos de velocidade e precisão <a href="#refs">[SA2]</a>.</p>



<p>A seguir alguns pontos que fizeram a versão 2 ter um desempenho melhor.</p>



<h3>Normalização em lote</h3>



<p>Foi adicionada uma camada de normalização em lote em todas as camadas convolucionais, que melhorou o mAP em 2% <a href="#refs">[RJ2].</a> A normalização ajudou a melhorar a convergência do treinamento da rede e eliminou a necessidade de outras técnicas de regularização, sem que a rede ficasse sobrecarregada com os dados de treinamento <a href="#refs">[SA2]</a>.</p>



<p>Na seção &#8220;Material Complementar&#8221;, será apresentada uma breve descrição sobre esta técnica.</p>



<h3>Caixas de âncora</h3>



<p>Uma das principais melhorias no YOLO v2 é o uso de caixas de ancoragem. As caixas âncora são um conjunto de caixas delimitadoras predefinidas com diferentes proporções e escalas. Ao prever caixas delimitadoras, o YOLO v2 usa uma combinação das caixas âncora e os deslocamentos previstos para determinar a caixa delimitadora final, isso permitiu o algoritmo lidar com uma ampla gama de tamanhos de objetos e proporções <a href="#refs">[KR].</a> YOLO v1 era um modelo sem âncora que previa as coordenadas das caixas diretamente, usando camadas totalmente conectadas em cada célula da grade <a href="#refs">[SA2]</a>.</p>



<p>Inspirado no Faster-RCNN, que prevê caixas de âncora, conhecidas como caixas B, o YOLO v2 também funciona com o mesmo princípio. Na versão 2 o YOLO remove as camadas totalmente conectadas e usa caixas de âncora para prever caixas delimitadoras, tornando-o totalmente convolucional <a href="#refs">[SA2]</a>.</p>



<p>O que exatamente são caixas de âncora? Caixas de âncora são um conjunto de caixas predefinidas com altura e largura específicas; eles atuam como uma estimativa. São múltiplas caixas delimitadoras predefinidas com diferentes proporções e tamanhos centralizados em cada pixel <a href="#refs">[SA2]</a>. As caixas de ancoragem contêm a proporção de determinado objeto conforme ilustrado na Figura 9 e 10.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="554" height="404" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/image-1.png" alt="" class="wp-image-5042" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/image-1.png 554w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/image-1-300x219.png 300w" sizes="(max-width: 554px) 100vw, 554px" /><figcaption>Figura 9 &#8211; Caixas âncora <a href="#refs">[DPB]</a>.</figcaption></figure></div>



<p>YOLO v2 não prevê diretamente as caixas delimitadoras, mas sim as probabilidades que correspondem às caixas âncora lado a lado, e retorna um conjunto exclusivo de previsões para cada caixa de âncora definida. O uso de caixas de âncora permite que uma rede detecte vários objetos, podendo ser de diferentes escalas ou sobrepostos <a href="#refs">[DPB]</a>.</p>



<p>Para gerar as detecções finais de objetos, as caixas de âncora lado a lado que pertencem à classe de fundo são removidas, e as demais são filtradas por sua pontuação de confiança. As caixas de âncora com a maior pontuação de confiança são selecionadas usando supressão não máxima <a href="#refs">[DPB]</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="864" height="208" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/image.png" alt="" class="wp-image-5041" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/image.png 864w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/image-300x72.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/image-768x185.png 768w" sizes="(max-width: 864px) 100vw, 864px" /><figcaption>Figura 10 &#8211; Caixas de ancoragem com supressão não máxima <a href="#refs">[DPB]</a>.</figcaption></figure></div>



<p> </p>



<figure class="wp-block-image size-full"><img loading="lazy" width="850" height="356" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/YoloV2.png" alt="" class="wp-image-4989" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/YoloV2.png 850w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YoloV2-300x126.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YoloV2-768x322.png 768w" sizes="(max-width: 850px) 100vw, 850px" /><figcaption>Figura 11 &#8211;  Rede neural YOLO v2.</figcaption></figure>



<p>A Figura 12 ilustra estrutura do Darknet-19, as camadas convolucionais extratoras de características da imagem do YOLO v2.</p>



<figure class="wp-block-image"><img src="https://wikidocs.net/images/page/167664/Darknet_19_1.png" alt=""/><figcaption>Figura 12 &#8211; Arquitetura Base Darknet-19 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>A Figura 13 mostra a arquitetura de detecção de objetos, com a rede base mostrada no bloco Darknet-19 (pré-treinada com pesos ImageNet) e uma camada de passagem (concatenação) do bloco 5, do Darknet-19, à penúltima camada convolucional, para que o modelo aprenda recursos refinados e tenha um bom desempenho em objetos menores <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[SA2]</a>.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector-936x1024.png" alt="" class="wp-image-4986" width="840" height="918" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector-936x1024.png 936w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector-274x300.png 274w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector-768x840.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector-1404x1536.png 1404w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector.png 1592w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>Figura 13 &#8211; YOLO v2 <a href="#refs">[DPB]</a>.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="539" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2-1024x539.png" alt="" class="wp-image-4987" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2-1024x539.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2-300x158.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2-768x404.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2-1536x808.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/V2_Feature_Vector_2.png 1604w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 14 &#8211; Saída YOLO v2 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>Na camada de saída, da versão 2, foi movida a previsão de classe do nível da célula para o nível da caixa delimitadora.&nbsp;Agora, cada previsão inclui 4 parâmetros para a caixa delimitadora, 1 pontuação de confiança da caixa e 20 probabilidades de classe,&nbsp;ou seja, 5 caixas delimitadoras com 25 parâmetros: 125 parâmetros por célula da grade.&nbsp;Assim como o YOLO v1, a previsão da confiança ainda prevê o IoU da verdade básica e da caixa proposta.</p>



<p>YOLO v2 imprime um mapa de recursos de tamanho 13 x 13.&nbsp;Desta forma, quando o tamanho do mapa de características é pequeno, é fácil prever um objeto grande, mas há um problema porque é difícil prever um objeto pequeno <a href="#refs">[DPB]</a>, como as dimensões espaciais do mapa de características de resolução mais alta, não combinam com o mapa de características de baixa resolução, o mapa de características de alta resolução 26 x 26 x 512 é transformado em 13 x 13 x 2048, que é então concatenado com o original 13 x 13 x 1024 características <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[SA2]</a>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="875" height="189" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/1_RuW-SCIML8SHc5_PrIE9-g.jpg" alt="" class="wp-image-5050" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/1_RuW-SCIML8SHc5_PrIE9-g.jpg 875w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/1_RuW-SCIML8SHc5_PrIE9-g-300x65.jpg 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/1_RuW-SCIML8SHc5_PrIE9-g-768x166.jpg 768w" sizes="(max-width: 875px) 100vw, 875px" /><figcaption>Figura 15 &#8211; Concatenando os recursos de alta resolução com os recursos de baixa resolução <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[SA2]</a>.</figcaption></figure>



<p>Para resolver este problema, a versão 2 extrai o mapa de características antes do último agrupamento para obter um mapa de características de tamanho 26 x 26 (x 512).&nbsp;Então, o mapa de características é dividido em 4, mantendo o canal, e então combinado (concatenação) para obter um mapa de características com tamanho de 13 x 13 (x 2048). Adicione isso ao 13 x 13 (x 1024) mapa de recursos para obter um mapa de recursos de tamanho 13 x 13(x 3072) <a href="#refs">[DPB]</a>. </p>



<p>Para facilitar o entendimento, imagine que em vez de ter apenas 2048 característica para analisar cada grade terá 3072 características, unindo o mapa de características de baixa (1024) e alta (2048) resolução.</p>



<h2>Treinamento </h2>



<p>O treinamento YOLO v2 é composto por 2 fases, onde primeiro é treinada uma rede classificadora como VGG16 e em seguida, substituídas as camadas totalmente conectadas por uma camada de convolução, então o YOLO é treinado novamente de ponta a ponta para a detecção de objetos.&nbsp;O YOLO v2 começa o treinamento com imagens (224 x 224) para o treinamento do classificador, mas depois reajusta o classificador novamente com imagens (448 x 448) usando muito menos épocas, isso facilita o treinamento do detector e aumenta o mAP em 4% <a href="#refs">[DPB]</a>.</p>



<h3>Treinamento multiescala</h3>



<p>Depois de remover as camadas totalmente conectadas, o YOLO v2 pode capturar imagens de tamanhos diferentes.&nbsp;Se a largura e a altura forem duplicadas, estaremos apenas fazendo 4 x células da grade de saída e portanto, 4 x previsões.&nbsp;Como a rede YOLO reduz a resolução da entrada em 32, só precisamos ter certeza de que a largura e a altura são múltiplos de 32 <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[SA2]</a>. </p>



<p>Para cada 10 lotes, o YOLO v2 seleciona aleatoriamente outro tamanho de imagem para treinar o modelo, isso atua como um aumento de dados e força a rede a prever bem as diferentes dimensões e escalas da imagem de entrada.&nbsp;Além disso, podemos usar imagens de resolução mais baixa para detecção de objetos em detrimento da precisão <a href="#refs">[DPB]</a>.</p>



<p>Este tipo de treinamento permite que a rede faça previsões em diferentes resoluções de imagem.&nbsp;A rede prevê muito mais rápido com entradas de tamanho menor, oferecendo uma compensação entre velocidade e precisão.&nbsp;A entrada de tamanho maior prevê uma previsão relativamente mais lenta em comparação com a menor, mas atinge a precisão máxima <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=3424&amp;action=edit#refs">[SA2]</a>.&nbsp;</p>



<p>A abordagem de treinamento multiescala produziu um aumento de 1,5% no mAP <a href="#refs">[</a><span class="has-inline-color has-vivid-red-color"><a href="#refs">RJ2].</a></span></p>



<h2>Diferença Entre YOLO v1 e v2</h2>



<p>Na Figura 16, são apresentadas ilustrações das arquiteturas do YOLO v1 e v2 retiradas de <a href="https://wikidocs.net/167699">Deep Learning Bible</a>, para comparação.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="981" height="1024" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1-981x1024.png" alt="" class="wp-image-5046" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1-981x1024.png 981w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1-287x300.png 287w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1-768x802.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1-1471x1536.png 1471w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/YOLOVO_V2_vs_V1.png 1582w" sizes="(max-width: 981px) 100vw, 981px" /><figcaption>Figura 16 &#8211; Diagrama YOLO v1 e v2 <a href="#refs">[DPB]</a>.</figcaption></figure>



<h2>Material Complementar</h2>



<h3>IoU (Intersection over Union)</h3>



<p>IoU é uma métrica crucial para avaliar modelos de segmentação, comumente chamada de Índice de Jaccard, pois quantifica quão bem o modelo pode distinguir objetos de seus planos de fundo em uma imagem. O IoU é usado em inúmeras aplicações de visão computacional, como veículos autônomos, sistemas de segurança e imagens médicas <a href="#refs">[SD]</a>.</p>



<p>Intersecção sobre União é uma métrica popular para medir a precisão da localização e calcular erros de localização em modelos de detecção de objetos. Ele calcula a quantidade de sobreposição entre duas caixas delimitadoras – uma caixa delimitadora prevista e uma caixa delimitadora da verdade básica <a href="#refs">[SD]</a>.</p>



<p>IoU é a razão entre a intersecção das áreas das duas caixas e suas áreas combinadas. A caixa delimitadora da verdade básica e a caixa delimitadora antecipada abrangem a área de união, que é o denominador <a href="#refs">[SD]</a>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="854" height="608" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/IoU_boundingbox-1.webp" alt="" class="wp-image-5016" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/IoU_boundingbox-1.webp 854w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/IoU_boundingbox-1-300x214.webp 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/IoU_boundingbox-1-768x547.webp 768w" sizes="(max-width: 854px) 100vw, 854px" /><figcaption>Figura 17 &#8211; Intersecção sobre União (IoU) <a href="#refs">[SD]</a></figcaption></figure>



<p>Caso queira entender mais sobre IoU, acesse os artigos <a href="#refs">Intersection over Union (IoU): Definition, Calculation, Code</a> e <a href="https://wikidocs.net/177706">IoU (Intersection over Union) and GIoU</a> que detalham até questões de cálculos matemáticos.</p>



<h3>Normalização em Lote</h3>



<p><em>&#8220;A normalização em lote é um método usado durante o treinamento de redes neurais, onde a camada de entrada é normalizada ou padronizada. Esse processo envolve ajustar e escalar as ativações dos neurônios na rede, garantindo assim que eles tenham uma ativação média de saída zero e um desvio padrão de um. Essa técnica ajuda a reduzir a quantidade de desvio covariante interno, um problema que surge quando a distribuição das ativações da rede muda durante o treinamento&#8221;</em> <a href="#refs">[TS]</a>.</p>



<h3>Camada CNN &#8211; Rede Neural Convolucional</h3>



<p>Em resumo, as convoluções funcionam como filtros que enxergam pequenos quadrados e vão percorrendo por toda a imagem captando os traços mais marcantes. O filtro, que também é conhecido por kernel, é formado por pesos inicializados aleatoriamente, atualizando-os a cada nova entrada durante o processo de treinamento.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2023/08/cnn.gif" alt="" class="wp-image-4949" width="282" height="283"/><figcaption>Figura 18 &#8211; Ilustração processo de convolução de uma imagem por um núcleo.</figcaption></figure></div>



<p>Acesse <a href="https://en.wikipedia.org/wiki/Kernel_(image_processing)">kernel (núcleo) de processamento de imagens</a> para visualizar alguns efeitos de kernel 3 x 3 e o final da página <a href="https://setosa.io/ev/image-kernels/">Image Kernels</a> para reproduzir e simular estes efeitos.</p>



<h3>Camada Totalmente Conectada</h3>



<p>Como o próprio nome diz a camada totalmente conectada é uma camada, onde cada neurônio é conectado a todos os neurônios da camada anterior. </p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2023/09/camada_totalmente_conectada.webp" alt="" class="wp-image-5052" width="408" height="256" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/09/camada_totalmente_conectada.webp 699w, https://visaocomputacional.com.br/wp-content/uploads/2023/09/camada_totalmente_conectada-300x188.webp 300w" sizes="(max-width: 408px) 100vw, 408px" /><figcaption>Figura 19 &#8211; Camada totalmente conectada.</figcaption></figure></div>



<p id="refs"><strong>Referências:</strong></p>



<p>[AG] Alvez, Gabriel. Detecção de Objetos com YOLO – Uma abordagem moderna.&nbsp;<a href="https://iaexpert.academy/2020/10/13/deteccao-de-objetos-com-yolo-uma-abordagem-moderna/">Acessado em 15/07/2022</a>.</p>



<p>[RJ1] Redmo, Joseph; Divvala, Santosh; Girshick, Ross; Farhadi, Ali, You Only Look Once: Unified, Real-Time Object Detection. <a href="https://pjreddie.com/media/files/papers/yolo_1.pdf">Artigo.</a></p>



<p>[RJ2] Redmon, Joseph and Farhadi, Ali, YOLO9000: Better, Faster, Stronger.&nbsp;<a href="https://arxiv.org/pdf/1612.08242v1.pdf">Artigo</a>.</p>



<p>[KR] Kundu, Rohit. YOLO: Algorithm for Object Detection Explained [+Examples]. <a href="https://www.v7labs.com/blog/yolo-object-detection">Acessado em 15/08/2023</a>. </p>



<p>[TAV] Thatte, Abhijit V. Evolution of YOLO — YOLO version 1. <a href="https://towardsdatascience.com/evolution-of-yolo-yolo-version-1-afb8af302bd2">Acessado em 15/08/2023</a>.</p>



<p>[HC] Hsin, Carol.  Yolo Object Detectors: Final Layers and Loss Functions. <a href="https://medium.com/oracledevs/final-layers-and-loss-functions-of-single-stage-detectors-part-1-4abbfa9aa71c">Acessado em 23/08/2023</a>.</p>



<p>[GFT] GFT. Função de Perda na Rede Neural. <a href="https://blog.gft.com/br/2022/04/26/funcao-de-perda-na-rede-neural/">Acessado em 23/08/2023.</a></p>



<p>[SD] Shah, Deval. Intersection over Union (IoU): Definition, Calculation, Code . <a href="https://www.v7labs.com/blog/intersection-over-union-guide#:~:text=Intersection%20over%20Union%20(IoU)%20is,ranging%20from%200%20to%201.">Acessado em 23/09/2023</a>.</p>



<p>[SA] Sharma, Aditya. Understanding a Real-Time Object Detection Network: You Only Look Once (YOLOv1).  <a href="https://pyimagesearch.com/2022/04/11/understanding-a-real-time-object-detection-network-you-only-look-once-yolov1/">Acessado em 16/09/2023</a>.</p>



<p>[SA2] Sharma, Aditya. Um detector de objetos melhor, mais rápido e mais forte (YOLOv2). <a href="https://pyimagesearch.com/2022/04/18/a-better-faster-and-stronger-object-detector-yolov2/">Acessado em 16/09/2023</a>.</p>



<p>[TS] TS2. Como a Normalização em Lote de IA Melhora o Treinamento de Redes Neurais. <a href="https://ts2.space/pt/como-a-normalizacao-em-lote-de-ia-melhora-o-treinamento-de-redes-neurais-explorando-o-impacto-da-normalizacao-em-lote-de-ia-na-eficiencia-do-treinamento-de-redes-neurais/">Acessado em 16/09/2023</a></p>



<p>[DPB] Deep Learning Bible &#8211; Yolo V1 &#8211; EN &#8211; <a href="https://wikidocs.net/167699">https://wikidocs.net/167699</a>.</p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/yolo-versoes-1-e-2-arquitetura/">YOLO Versões 1 e 2 (Arquitetura)</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
