<?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>YOLO &#8211; Visão Computacional</title>
	<atom:link href="https://visaocomputacional.com.br/tag/yolo/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:16 +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>YOLO &#8211; Visão Computacional</title>
	<link>https://visaocomputacional.com.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>YOLO Versões 3 e 4 (Arquitetura)</title>
		<link>https://visaocomputacional.com.br/yolo-versoes-3-e-4-arquitetura/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yolo-versoes-3-e-4-arquitetura</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Sat, 30 Mar 2024 14:23:25 +0000</pubDate>
				<category><![CDATA[Visão computacional]]></category>
		<category><![CDATA[Anchor Box]]></category>
		<category><![CDATA[Caixa delimitadora]]></category>
		<category><![CDATA[Caixas de âncora]]></category>
		<category><![CDATA[Camada Convolucional]]></category>
		<category><![CDATA[Darknet]]></category>
		<category><![CDATA[Feature Pyramid Networks]]></category>
		<category><![CDATA[FPN]]></category>
		<category><![CDATA[PAN]]></category>
		<category><![CDATA[Path Aggregation Network]]></category>
		<category><![CDATA[ResNet]]></category>
		<category><![CDATA[Spatial Pyramid Polling]]></category>
		<category><![CDATA[SSP]]></category>
		<category><![CDATA[YOLO]]></category>
		<guid isPermaLink="false">https://visaocomputacional.com.br/?p=5157</guid>

					<description><![CDATA[<p>Este artigo, explana o funcionamento das versões 3 e 4 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-3-e-4-arquitetura/">YOLO Versões 3 e 4 (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 3 e 4 do YOLO, conforme descrito em artigos científicos, com foco em suas redes neurais, detalhando quais são as camadas ocultas destas duas redes neurais e uma breve descrição de como é o funcionamento dessas camadas. </p>



<p>Alguns dos comportamentos realizados pela rede neural do YOLO v3 e v4 são idênticos ao das suas versões 1 e 2, que serão apresentadas de forma resumida neste artigo, destacando assim as melhorias das versões 3 e 4. Antes de prosseguir, recomendo a leitura dos artigos:  <a href="https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/">YOLO para Detecção de Objetos – Visão Geral</a> e <a href="https://visaocomputacional.com.br/yolo-versoes-1-e-2-arquitetura/">YOLO Versões 1 e 2 (Arquitetura)</a>.</p>



<h2>Como funciona?</h2>



<p>O YOLO utiliza uma rede neural profunda (DNN – Deep Neural Network), rede neural convolucional, cuja a arquitetura é chamada de Darknet, com o mesmo nome do framework utilizado para implantá-la. 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. 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, a fim 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>. </p>



<p>Nem todo o processo do YOLO é realizado dentro da Rede Neural, como por exemplo, a supressão não máxima, que elimina detecções repetidas de um mesmo objeto, é realizada fora da rede neural. O redimensionamento da imagem também é realizado fora da rede neural, assim como normalizar a quantidade e ordem de canais de cores da imagem.</p>



<p>É Importante lembrar, que atualmente a função de perda, responsável por treinar a rede neural YOLO, faz parte da biblioteca DarkNet, ou seja, independente de qual tecnologia for utilizada para usar o YOLO, será necessária a biblioteca DarkNet para treinar os classificadores. </p>



<h2>YOLO V3</h2>



<p>Em relação às suas versões anteriores, a versão 3 não possui grandes mudanças segundo o próprio autor, ao mencionar o seguinte texto na introdução do seu artigo <a href="https://pjreddie.com/media/files/papers/YOLOv3.pdf">YOLO v3</a>: <em>&#8220;Consegui fazer algumas melhorias no YOLO. Mas, honestamente, nada como super interessante, apenas um monte de pequenas mudanças que o tornam melhor.&#8221;</em> </p>



<p>Uma das principais melhorias no YOLO v3 é o uso de uma nova arquitetura CNN chamada Darknet-53. O Darknet-53 é uma variante com arquitetura ResNet que foi projetada especificamente para tarefas de detecção de objetos. Possui 53 camadas convolucionais, capaz de alcançar melhores precisões na detecção de objetos <a href="#refs">[KR]</a>.</p>



<p>Outra melhoria no YOLO v3 são as caixas de âncora (anchor boxes) com diferentes escalas e proporções. No YOLO v2, as caixas de âncora eram todas do mesmo tamanho, o que limitava a capacidade do algoritmo de detectar objetos de diferentes tamanhos e formas. No YOLO v3, as caixas de âncora são dimensionadas e suas proporções são variadas, para melhor corresponder ao tamanho e à forma dos objetos que estão sendo detectados <a href="#refs">[KR]</a>.</p>



<p>YOLO v3 também introduz o conceito de &#8220;redes de pirâmide de recursos&#8221; (FPN). FPNs são arquiteturas CNN usadas para detectar objetos em múltiplas escalas. Elas constroem uma pirâmide de mapas de características, com cada nível da pirâmide sendo usado para detectar objetos em uma escala diferente. Isso ajuda a melhorar o desempenho de detecção em objetos pequenos, pois o modelo é capaz de perceber objetos em escalas maiores <a href="#refs">[KR]</a>. No final deste artigo, o FPN, é melhor descrito.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="570" src="https://visaocomputacional.com.br/wp-content/uploads/2024/02/yolov3-1024x570.webp" alt="" class="wp-image-5588" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/02/yolov3-1024x570.webp 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/02/yolov3-300x167.webp 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/02/yolov3-768x427.webp 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/02/yolov3.webp 1100w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 1 &#8211; Arquitetura YOLO v3</figcaption></figure>



<h3 id="3888">Detecção em três escalas</h3>



<p id="c4e0">A arquitetura mais recente possui conexões de salto residuais (ResNet) e aumento da resolução<span class="has-inline-color has-black-color"> <a href="#refs">[KA]</a></span>.  Essas conexões de salto permitem que informações de gradiente passem pelas camadas, criando &#8220;rodovias&#8221; de informações, onde a saída de uma camada/ativação anterior seja adicionada à saída de uma camada mais profunda <a href="#refs">[DST]</a>. Isto permite que as informações das partes anteriores da rede sejam passadas para as partes mais profundas da rede, ajudando a manter a propagação do sinal mesmo em redes mais profundas. As conexões de salto são um componente crítico que permitiu o treinamento bem-sucedido de redes neurais mais profundas.</p>



<p>Você pode observas nas Figuras 1, os saltos residuais pelas camadas 36 e 61. Note que no final de cada salto existe o simbolo &#8220;*&#8221;, indicando que as informações do início do salto foram adicionadas (normalizadas) às informações da última camada dentro do bloco.</p>



<p id="c4e0">A característica mais notável da v3 é que ela faz detecções em três escalas diferentes, fornecidas precisamente pela redução da resolução das dimensões da imagem de entrada em 32, 16 e 8, respectivamente. A detecção é feita aplicando kernels de detecção 1 x 1 em mapas de recursos de três tamanhos diferentes em três locais diferentes na rede<span class="has-inline-color has-black-color"> <a href="#refs">[KA]</a></span><strong>.</strong></p>



<p id="dc79">A forma do kernel de detecção do YOLO v3 é <strong>1 x 1 x (B x (5 + C) )</strong>, onde B é o número de caixas delimitadoras que uma célula no mapa de recursos pode prever, o “5” corresponde aos 4 primeiros atributos da caixa delimitadora mais a confiança de um objeto, e o C é o número de classes treinadas. Por exemplo, na rede neural YOLO v3 treinado com COCO DataSet, com 3 caixas delimitadoras(B=3) e capacidade pra classificar 80 objetos (C=80),  teremos o tamanho de um kernel de 1 x 1 x (3 * (5 + 80)) = 255 <a href="#refs">[KA]</a>.</p>



<p id="99dd">A primeira detecção é feita pela 82ª camada. Para as primeiras 81 camadas, a imagem é amostrada pela rede, de modo que a 81ª camada tenha um passo(Stride) de filtro de 32. Se tivermos uma imagem de 416 x 416, o mapa de características resultante teria o tamanho de 13 x 13. Uma detecção é feito aqui usando o kernel de detecção 1 x 1, fornecendo um mapa de recursos de detecção de 13 x 13 x 255 <a href="#refs">[KA]</a>.</p>



<p id="6736">Em seguida, o mapa de características da camada 79 é submetido a algumas camadas convolucionais antes de ser amostrado em 2x para dimensões de 26 x 26. Este mapa de características é então concatenado em profundidade com o mapa de características da camada 61. Em seguida, os mapas de características combinados são novamente submetidos a algumas camadas convolucionais 1 x 1 para mesclar os recursos da camada anterior (61). Então, a segunda detecção é feita pela 94ª camada, produzindo um mapa de características de detecção de 26 x 26 x 255 <a href="#refs">[KA]</a>.</p>



<p id="2ccf">Um procedimento semelhante é seguido novamente, onde o mapa de características da camada 91 é submetido a algumas camadas convolucionais antes de ser concatenado em profundidade com um mapa de características da camada 36. Como antes, algumas camadas convolucionais 1 x 1 seguem para fundir as informações da anterior camada (36). A terceira e ultima detecção na 106ª camada é realizada, produzindo um mapa de características de tamanho 52 x 52 x 255 <a href="#refs">[KA]</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1-1024x500.png" alt="" class="wp-image-5928" width="840" height="410" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1-1024x500.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1-300x146.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1-768x375.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1-1536x750.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida1.png 1602w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>Figura 2 &#8211; Primeira saída YOLO v3 [DPB].</figcaption></figure></div>



<p>Cada kernel de detecção corresponde a apenas a um bloco de cada saída do Yolo. Observe na Figura 2, o tensor da primeira saída, onde cada célula da <strong>grade 13&#215;13</strong>, é responsável por prever <strong>3 caixas delimitadoras</strong>, que possuí as informações de suas <strong>coordenas</strong>, nas suas 4 primeiras posições,  seguida da <strong>pontuação de confiança</strong> (probabilidade da caixa conter um objeto), e uma <strong>pontuação de predição para cada classe</strong> de objeto treinado. </p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="501" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2-1024x501.png" alt="" class="wp-image-5929" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2-1024x501.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2-300x147.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2-768x375.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2-1536x751.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida2.png 1604w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 3 &#8211; Segunda saída YOLO v3 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>A mesma estrutura de classificação ocorre na segunda saída, porém agora com uma <strong>grade de 26&#215;26</strong>, maior que a saída anterior, pois nesta houve um aumento de resolução.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="500" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3-1024x500.png" alt="" class="wp-image-5930" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3-1024x500.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3-300x146.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3-768x375.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3-1536x750.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov3_saida3.png 1602w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 4 &#8211; Terceira saída YOLO v3 <a href="#refs">[DPB]</a>.</figcaption></figure>



<p>Não diferente das saídas anteriores, ocorre a mesma estrutura de classificação, porém com uma <strong>grade de 52&#215;52</strong>.</p>



<p><strong>Caixas de âncora</strong></p>



<p>Assim como a versão 2, a versão 3 também usa 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 píxel&nbsp;<a href="#refs">[SA]</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 5 – Caixas âncora&nbsp;<a href="#refs">[DPB2]</a>.</figcaption></figure></div>



<p>A versão do YOLO v2 não prevê diretamente as caixas delimitadoras, mas sim as probabilidades que correspondem às caixas âncoras 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&nbsp;<a href="https://visaocomputacional.com.br/yolo-versoes-1-e-2-arquitetura/#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>



<figure class="wp-block-image 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 6 – Caixas de ancoragem com supressão não máxima&nbsp;<a href="#refs">[DPB2]</a>.</figcaption></figure>



<h3 id="a3f8">Mais caixas delimitadoras por imagem</h3>



<p id="b947">Para uma imagem de entrada do mesmo tamanho, o YOLO v3 prevê mais caixas delimitadoras do que o YOLO v2. Por exemplo, com sua resolução nativa de 416 x 416, o YOLO v2 previu 13 x 13 x 5 = 845 caixas. Em cada célula da grade, 5 caixas foram detectadas utilizando 5 âncoras.</p>



<p id="ba89">Por outro lado, o YOLO v3 prevê caixas em 3 escalas diferentes. Para a mesma imagem de 416 x 416, o número de caixas previstas é 10.647. Isso significa que&nbsp;<strong>o YOLO v3 prevê 10x o número de caixas previstas pelo YOLO v2.</strong>&nbsp;Você pode facilmente imaginar por que é mais lento que o YOLO v2. Em cada escala, cada grade pode prever 3 caixas usando 3 âncoras. Como existem três escalas, o número de caixas de ancoragem utilizadas no total é 9, 3 para cada escala <a href="#refs">[KA]</a>.</p>



<h3>Remoção da função SoftMax</h3>



<p id="bc13">Anteriormente no YOLO, os autores costumavam suavizar as pontuações da classe e considerar a classe com pontuação máxima, como a classe do objeto contido na caixa delimitadora. Isso foi modificado no YOLO v3 <a href="#refs">[KA]</a>.</p>



<p id="f1c0">As classes Softmaxing baseiam-se na suposição de que as classes são mutuamente exclusivas, ou seja, se um objeto pertence a uma classe, então ele não pode pertencer à outra <a href="https://visaocomputacional.com.br/wp-admin/post.php?post=5157&amp;action=edit#refs">[KA]</a>. Isso funciona bem para determinadas bases de dados<a href="#refs">.</a> No entanto, quando temos classes semelhantes, como&nbsp;homem&nbsp;e mulher, em um conjunto de dados, esta suposição falha. Esta é a razão pela qual os autores do YOLO se abstiveram de usar softmaxing nas classes. Em vez disso, cada pontuação de classe é prevista e um limite é usado para prever vários rótulos para um objeto. As classes com pontuação superior a esse limite são atribuídas à caixa <a href="#refs">[KA]</a>.</p>



<h3>Diferença da arquitetura YOLO v2 e YOLO v3</h3>



<p>Para facilitar o entendimento na mudança de arquitetura do yolo v2 e v3, observe na figura 5, a arquitetura do YOLO v2, descrita no artigo <a href="http://yolo-versoes-1-e-2-arquitetura">YOLO Versões 1 e 2</a>, ao lado da arquitetura do YOLO v3.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3-964x1024.png" alt="" class="wp-image-5927" width="840" height="892" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3-964x1024.png 964w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3-282x300.png 282w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3-768x816.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3-1445x1536.png 1445w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov2_x_yolov3.png 1594w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>Figura 5 &#8211; Comparação arquitetura YOLO v2 e YOLO v3 <a href="#refs">[DPB]</a>.</figcaption></figure>



<h2>YOLO v4</h2>



<p>O YOLO v4, passou a ser desenvolvido por outros desenvolvedores, pois o autor original parou suas pesquisas em visão computacional, devido a percepção do impacto dela na sociedade. Quem assumiu a continuadade do YOLO foram os autores Alexey Bochkovskiy, Chien-Yao Wang e Hong-Yuan Mark Liao.</p>



<p>O objetivo desta versão foi projetar um sistema rápido para funcionar em ambientes produdivos e otimizado para computação paralela, para que qualquer pessoa com uma GPU (Processador gráfico) convencional possa treinar e testar com resultados satisfatórios <a href="#refs">[ACH]</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="303" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura-1024x303.png" alt="" class="wp-image-6000" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura-1024x303.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura-300x89.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura-768x227.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura-1536x454.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_arquitetura.png 1691w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 6 &#8211; Arquitetura YOLO v4 <a href="#refs">[ACH]</a>. </figcaption></figure>



<p>Podemos dizer que o YOLO v4, 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.</p>



<h4>Backbone (Espinha dorsal)</h4>



<p>O backbone YOLO é uma pilar de rede neural convolucional que agrupa pixels de imagem para formar recursos em diferentes granularidades. O Backbone normalmente é pré-treinado em um conjunto de dados de classificação, normalmente ImageNet. Backbone é a arquitetura de aprendizagem profunda que atua basicamente como um extrator de recursos. Todos os modelos de backbone são basicamente modelos de classificação.</p>



<p>Três backbones diferentes foram selecionados, durante o estudo do YOLO v4. Após análise rigorosa de diferentes parâmetros em benchmarks padrão, os autores finalizaram o CSPDarknet53 como a espinha dorsal e extrator de características da arquitetura YOLO v4 <a href="#refs">[ACH]</a>.</p>



<h4>Neck (Pescoço)</h4>



<p>O Neck do YOLO combina e mistura as representações da camada ConvNet antes de passar para o pilar de previsão Head. Neck é um subconjunto do pilar backbone, basicamente coleta mapas de recursos de diferentes estágios do backbone. Em termos simples, é um agregador de recursos.</p>



<p>Neste pilar, os autores acoplaram camadas SPP (Spatial Pyramid Pooling) modificadas para aumentar o campo receptivo da rede, e PAN (Path Aggregation Networks) modificado para melhor concatenação de texturas locais e características globais da CSPDarknet53. No final do artigo, SSP e PAN, são melhor descritos. </p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="727" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/YoloV4_simplificado-1024x727.png" alt="" class="wp-image-6028" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/YoloV4_simplificado-1024x727.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/YoloV4_simplificado-300x213.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/YoloV4_simplificado-768x545.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/YoloV4_simplificado.png 1242w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 7 &#8211; Fluxo simplificado do YOLO v4 <a href="#refs">[DPB3]</a>.</figcaption></figure>



<h4>Head (Cabeça)</h4>



<p>Esta é a parte da rede que faz a caixa delimitadora e a previsão da classe. É guiado pelas três funções de perda YOLO para classe, caixa e objetividade.</p>



<p>Head também é conhecido como detector de objetos, encontra basicamente a região onde o objeto pode estar presente, mas não informa qual objeto está presente naquela região. No YOLO v4, temos detectores de dois estágios e detectores de um estágio, que são subdivididos em detectores baseados em âncora e detectores sem âncora.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="824" height="1024" src="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02-824x1024.jpeg" alt="" class="wp-image-6029" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02-824x1024.jpeg 824w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02-241x300.jpeg 241w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02-768x955.jpeg 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02-1235x1536.jpeg 1235w, https://visaocomputacional.com.br/wp-content/uploads/2024/03/yolov4_simplificado_02.jpeg 1554w" sizes="(max-width: 824px) 100vw, 824px" /><figcaption>Figura 8 &#8211; Fluxo simplificado do YOLO v4  <a href="#refs">[DPB3]</a></figcaption></figure>



<p>Se observar na imagem acima, a versão 4 é bastante semelhante ao YOLO v3. A maior diferença é que CSPDarknet é usado no Backbone e SPP e PANet são usados ​​no Neck, e todo o resto é quase igual. Se você analisar isso com muita profundidade, poderá ver uma pequena diferença, mas no geral, se você entender as três coisas acima corretamente, poderá entender o YOLO v4 <a href="#refs">[DPB]</a>.</p>



<h3>Diferença da arquitetura YOLO v3 e YOLO v4</h3>



<p>Para facilitar o entendimento na mudança de arquitetura do YOLO v2 e v3, a seguir, a Figura 9 ilustra as duas arquiteturas.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="947" height="1024" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4-947x1024.png" alt="" class="wp-image-6119" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4-947x1024.png 947w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4-278x300.png 278w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4-768x830.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4-1421x1536.png 1421w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/yolov3_x_yolov4.png 1604w" sizes="(max-width: 947px) 100vw, 947px" /><figcaption>Figura 9 &#8211; Comparação arquitetura YOLO v3 e YOLO v4 <a href="#refs">[DPB]</a>.</figcaption></figure>



<h2>Material Complementar</h2>



<h3>FPN &#8211; Feature Pyramid Networks</h3>



<p>Ao fazer previsões para uma escala específica, o FPN aumenta a amostragem (2×) do fluxo descendente anterior e o adiciona à camada vizinha do fluxo ascendente, conforme Figura 11 <a href="#refs">[ST]</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="898" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/fpn-1024x898.webp" alt="" class="wp-image-6126" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/fpn-1024x898.webp 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/fpn-300x263.webp 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/fpn-768x674.webp 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/fpn.webp 1100w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 11 &#8211; Estrutura da FPN original <a href="#refs">[ST]</a>.</figcaption></figure>



<p>A FPN é composta por um caminho ascendente e descendente. O caminho bottom-up é a rede convolucional usual para extração de características. À medida que subimos, a resolução espacial diminui. Com mais estruturas de alto nível detectadas, o valor semântico de cada camada aumenta <a href="#refs">[JH]</a>.</p>



<p>No caminho de cima para baixo, para construir camadas de resolução mais alta a partir de uma camada semântica rica. Embora as camadas reconstruídas sejam semânticas fortes, as localizações dos objetos não são precisas após toda a redução e aumento da resolução. Para contornar isto, são adicionadas conexões laterais entre as camadas reconstruídas e os mapas de características correspondentes para ajudar o detector a prever melhor a localização <a href="#refs">[JH]</a>. </p>



<p>No YOLOv4, o conceito FPN é gradualmente implementado/substituído pelo SAM, PAN e SPP modificados.</p>



<h3>SPP &#8211; Spatial Pyramid Pooling</h3>



<p>A camada Spatial Pyramid Pooling permite gerar recursos de tamanho fixo, qualquer que seja o tamanho de nossos mapas de recursos. Para gerar um tamanho fixo, ele usará camadas de pooling (exemplo Max Pooling) e gerará diferentes representações dos mapas de recursos.</p>



<p>Observe na figura 10, e suponha que a saída da camada convolicional (parte preta da figura) tenha 256 mapas de recursos.</p>



<ol><li>Primeiro, cada mapa de características é agrupado para se tornar um valor único (parte cinza). Então, o tamanho do vetor é (1, 256)</li><li>Em seguida, cada mapa de características é agrupado para ter 4 valores (par verde). Então, o tamanho do vetor é (4, 256)</li><li>Da mesma forma, cada recurso é agrupado para ter 16 valores (parte azul). Então, o tamanho do vetor é (16, 256)</li><li>Os 3 vetores criados nas 3 etapas anteriores são então concatenados para formar um vetor de tamanho fixo que será a entrada da próxima camada conectada.</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="567" height="402" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/ssp.png" alt="" class="wp-image-6122" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/ssp.png 567w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/ssp-300x213.png 300w" sizes="(max-width: 567px) 100vw, 567px" /><figcaption>Figura 10. Uma estrutura de rede com uma camada de pooling de pirâmide espacial &#8211; SSP <a href="#refs">[KXSJ]</a>.</figcaption></figure></div>



<p>YOLOv4 usa um bloco SPP após CSPDarknet53 para aumentar o campo receptivo e separar os recursos mais importantes do backbone. O pool de pirâmide espacial consiste em pegar uma imagem de entrada e usar camadas convolucionais para extrair seu mapa de recursos, em seguida, usar o pool máximo de tamanho de janela 1 para gerar um conjunto de recursos e, em seguida, usar novamente o pool máximo de tamanho de janela 2. Repetindo este processo n vezes, você terá mapas de recursos de diferentes alturas e larguras, formando uma pirâmide. YOLO v4, em vez de aplicar SPP em uma única camada, divide o recurso ao longo da dimensão de profundidade da rede, aplica SPP em cada parte e, em seguida, combina-o novamente para gerar um mapa de recursos de saída <a href="#refs">[DPB]</a>.</p>



<h3>PAN &#8211; Path Aggregation Network</h3>



<p>O PANet, semelhante ao FPN, segue um caminho ascendente adicional ao caminho descendente seguido pela FPN. Isso ajuda a encurtar esse caminho usando conexões laterais limpas das camadas inferiores às superiores. Isso é chamado de conexão de&nbsp;<strong><em>“atalho”</em></strong>.</p>



<p>Na imagem abaixo, tirada do artigo Path Aggregation Network (PAN), um caminho de baixo para cima (b) é aumentado para tornar as informações da camada inferior mais fáceis de propagar para o topo. Na FPN, a informação espacial localizada viaja para cima na seta vermelha. Não está claramente demonstrado na imagem, mas o caminho vermelho passa por cerca de mais de 100 camadas. O PAN introduziu um caminho de atalho (o caminho verde) que leva apenas cerca de dez camadas para chegar à camada N₅ superior. Esses conceitos de curto-circuito disponibilizam informações localizadas refinadas para as camadas superiores.</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="341" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/pan_original-1024x341.png" alt="" class="wp-image-6131" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/pan_original-1024x341.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/pan_original-300x100.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/pan_original-768x256.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/pan_original.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 12 &#8211; Figura 1. Ilustração do nosso framework. (a) Estrutura principal da FPN. (b) Aumento do caminho de baixo para cima. (c) Agrupamento de recursos adaptativos. (d) Caixa filial. (e) Fusão totalmente conectada <a href="#refs">[SLHJJ]</a>.</figcaption></figure>



<p>PANet convencionalmente adiciona as camadas vizinhas para fazer previsões de máscara usando o pool de recursos adaptativos. No entanto, esta abordagem é ligeiramente distorcida quando o PANet é empregado no YOLOv4, de modo que, em vez de adicionar as camadas vizinhas, uma operação de concatenação é aplicada a elas, o que melhora a precisão das previsões <a href="#refs">[MR]</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="720" height="355" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_concat.png" alt="" class="wp-image-6134" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_concat.png 720w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_concat-300x148.png 300w" sizes="(max-width: 720px) 100vw, 720px" /><figcaption>Figura 13 &#8211; PAN modificado para o YOLO v4 <a href="#refs">[ACH]</a></figcaption></figure></div>



<p>Os PANs funcionam de forma semelhante aos FPNs, mas adicionaram um caminho de aumento de baixo para cima, como mostrado na Figura. 12, para que respostas de textura fortes de níveis baixos possam ser fundidas diretamente com respostas semanticamente ricas presentes em N5 usando um caminho de atalho <a href="#refs">[DPB]</a>.</p>



<p>No YOLO v4, <strong>o PAN Neck</strong> modificado é usado para agregação de recursos. Em vez de adição, a abordagem de concatenação é usada entre cada camada ascendente. Isso ajuda a conservar os recursos perdidos conforme Figura 15.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="867" src="https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_yolo4-1024x867.png" alt="" class="wp-image-6124" srcset="https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_yolo4-1024x867.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_yolo4-300x254.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_yolo4-768x651.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2024/04/panmodificado_yolo4.png 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Figura 14 &#8211; Estrutura do PAN original e modificado <a href="#refs">[DPB]</a>.</figcaption></figure></div>



<p><strong>Referências:</strong></p>



<p>[RJFA] YOLOv3: Redmon, Joseph and Farhadi, Ali, YOLO: An Incremental Improvement. <a href="https://pjreddie.com/media/files/papers/YOLOv3.pdf">Artigo.</a></p>



<p>[ACH] Alexey Bochkovskiy; Chien-Yao Wang; Hong-Yuan Mark Liao. YOLOv4: Optimal Speed and Accuracy of Object Detection. <a href="https://arxiv.org/pdf/2004.10934.pdf">Artigo</a></p>



<p>[KA] Kathuria, Ayoosh What’s new in YOLO v3? <a href="https://towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b">Acessado em 09/06/2024</a></p>



<p>[KR] Kundu, Rohit. YOLO: Algorithm for Object Detection Explained. <a href="https://www.v7labs.com/blog/yolo-object-detection#:~:text=In%20YOLO%20v2%2C%20the%20anchor,of%20the%20objects%20being%20detected.">Acessado em 08/02/2024</a>.</p>



<p>[DPB] Deep Learning Bible. Yolo V1 – EN –&nbsp;<a href="https://wikidocs.net/177719">Acessado em 15/02/2024</a>.</p>



<p>[DPB2] Deep Learning Bible. Anchor Boxes EN  <a href="https://wikidocs.net/188051">Acessado em 20/03/2024,</a></p>



<p>[DST] Data Science Team. Uma Visão Geral da ResNet e suas Variantes &#8211; <a href="https://datascience.eu/pt/aprendizado-de-maquina/uma-visao-geral-da-resnet-e-suas-variantes/">Acessado em 15/02/2024</a></p>



<p>[DPB3] Deep Learning Bible. V4 explicado em todos os detalhes <a href="https://wikidocs.net/167833">Acessado em 25/03/2024</a></p>



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



<p>[KXSJ] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognitio. <a href="https://arxiv.org/abs/1406.4729v4">Artigo</a>.</p>



<p>[ST] Shreejal Trivedi; DetectoRS — A Comprehensive Review. <a href="https://medium.com/visionwizard/detectors-state-of-the-art-object-detector-from-google-research-e0b89abdd1fc">Acessado em 11/04/2024</a>.</p>



<p>[JH] Jonathan Hui. Understanding Feature Pyramid Networks for object detection (FPN). <a href="https://jonathan-hui.medium.com/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c">Acessado em 12/04/2024.</a></p>



<p>[SLHJJ] Shu Liu; Lu Qi; Haifang Qin; Jianping Shi; Jiaya Jia†; Path Aggregation Network for Instance Segmentation. <a href="https://arxiv.org/pdf/1803.01534v4.pdf">Artigo</a>.</p>



<p>[MR] Milagre R. PANet: Path Aggregation Network In YOLOv4. <a href="https://medium.com/clique-org/panet-path-aggregation-network-in-yolov4-b1a6dd09d158">Acessado em 12/04/2024.</a></p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/yolo-versoes-3-e-4-arquitetura/">YOLO Versões 3 e 4 (Arquitetura)</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<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>
		<item>
		<title>YOLO para Detecção de Objetos  &#8211; Visão Geral</title>
		<link>https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yolo-para-deteccao-de-objetos-visao-geral</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 22:45:45 +0000</pubDate>
				<category><![CDATA[Visão computacional]]></category>
		<category><![CDATA[Anchor Box]]></category>
		<category><![CDATA[Âncoras]]></category>
		<category><![CDATA[Bounding box]]></category>
		<category><![CDATA[Caixa delimitadora]]></category>
		<category><![CDATA[Detecção de Objetos]]></category>
		<category><![CDATA[Non maximum suppression]]></category>
		<category><![CDATA[Redes Neurais]]></category>
		<category><![CDATA[Supressão não máxima]]></category>
		<category><![CDATA[YOLO]]></category>
		<guid isPermaLink="false">https://visaocomputacional.com.br/?p=3305</guid>

					<description><![CDATA[<p>Neste primeiro post de 5, é abordado uma visão geral sobre o YOLO, como é a estrutura base de seu funcionamento e um pouco de sua história. Nos próximos posts serão detalhados como são as arquiteturas de cada uma das 4 primeiras versões do YOLO e, como Bônus, textos e materiais de apoio ensinando a [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/">YOLO para Detecção de Objetos  &#8211; Visão Geral</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Neste primeiro post de 5, é abordado uma visão geral sobre o YOLO, como é a estrutura base de seu funcionamento e um pouco de sua história. Nos próximos posts serão detalhados como são as arquiteturas de cada uma das 4 primeiras versões do YOLO e, como Bônus, textos e materiais de apoio ensinando a utilizar e treinar está técnica com diversos frameworks diferentes.  </p>



<p><strong>Observação: </strong>Para melhor entender este Post e os demais sobre YOLO, é necessário ter uma conhecimento geral sobre Inteligência Artificial e Redes Neurais.</p>



<p>O YOLO foi lançado em 2015,  por Joseph Redmon e Ali Farhadi, durante o seu doutorado e em uma demonstração da sua primeira versão no&nbsp;<em>TED Talks</em>. O YOLO foi reconhecido como uma técnica inovadora, que foi capaz de obter uma precisão igual ou superior a de outros métodos de detecção de objetos da época <a href="#refs">[AG]</a>.</p>



<p>Durante a apresentação, ele faz uma demonstração ao vivo, provando que o detector é capaz de executar em sua GPU a detecção de até 80 categorias de objetos simultaneamente, a uma taxa de mais ou menos 30 FPS, e mantendo uma ótima precisão, o que foi revolucionário para a época <a href="#refs">[AG]</a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ratio ratio-16x9"><iframe loading="lazy" title="How computers learn to recognize objects instantly | Joseph Redmon" width="800" height="450" src="https://www.youtube.com/embed/Cgxsv1riJhI?start=1&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></div>
</div><figcaption>Video 1. Como os computadores aprendem a reconhecer objetos instantaneamente.</figcaption></figure>



<p>Durante esta exposição, foi apresentado a versão V3 do YOLO v3. Caso tenha curiosidade, os artigos científicos referentes as suas 3 primeiras versões são os seguintes: <a href="https://pjreddie.com/media/files/papers/yolo_1.pdf" rel="noreferrer noopener" target="_blank">YOLO v1</a>; <a href="https://pjreddie.com/media/files/papers/YOLO9000.pdf" rel="noreferrer noopener" target="_blank">YOLO v2</a> e <a href="https://pjreddie.com/media/files/papers/YOLOv3.pdf">YOLO v3</a>. </p>



<h2>O Diferencial YOLO</h2>



<p>Os sistemas de detecção de objetos anteriores ao YOLO, redirecionam classificadores ou localizadores para realizar a detecção. Eles aplicam o modelo (IA) a uma imagem em vários locais e escalas, onde as regiões de alta pontuação da imagem são consideradas detecções <a href="#refs">[RJPA2]</a>. Essas regiões menores, extraídas da imagem, são denominadas Bounding Box &#8211; &#8220;Regiões Delimitadoras&#8221; e cada uma dessas regiões detecta um único objeto. A Figura 1, ilustra como as técnicas de classificação, normalmente, percorrem a imagem em varias regiões e escalas diferentes para realizar a classificação do objeto.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="256" height="377" src="https://visaocomputacional.com.br/wp-content/uploads/2022/04/sliding_window_example.gif" alt="" class="wp-image-3284"/><figcaption>Fig 1 – Exemplo de como os Bounding Box percorrem a imagem em regiões menores para identificar um objeto.</figcaption></figure></div>



<p>Diferente dos algoritmos que percorrem a imagem, em busca dos objetos treinados, o YOLO apenas precisa olhar pela imagem uma única vez e enviá-la para a rede neural. Foi a partir desse conceito que ele ganhou seu nome You Only Look Once (YOLO), que significa &#8220;Você só olha uma vez&#8221;.</p>



<p>O YOLO usa uma abordagem totalmente diferente, onde é aplicado uma única rede neural à imagem completa. Para isso a rede neural divide a imagem em regiões menores e prevê caixas delimitadoras, probabilidades de existir um objeto naquela caixa e também qual a probabilidade de ser determinado objeto <a href="#refs">[RJPA2</a>]. Todo este processo é descrito a seguir.</p>



<h2>Como Funciona?</h2>



<p>O YOLO utiliza uma rede neural profunda (DNN &#8211; 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á é disponível em várias outras linguagens de programação.</p>



<p>Existem diversas versões do YOLO publicadas, a seguir demonstraremos o funcionamento básico/geral do YOLO, e nos próximos posts o funcionamento detalhado de cada uma das primeiras versões dele. </p>



<p>O primeiro passo que o YOLO executa é dividir a imagem em uma grade de S por S células. A grade utilizada nas primeiras versões é de 13&#215;13, 13 colunas e 13 linhas, contendo 169 células, conforme exemplo na Figura 2 abaixo. Nas versões mais recentes esse tamanho é de 19&#215;19 <a href="http://%refs">[AG]</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_dog_grid.png" alt="" class="wp-image-3454" width="457" height="457" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_dog_grid.png 457w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_dog_grid-300x300.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_dog_grid-150x150.png 150w" sizes="(max-width: 457px) 100vw, 457px" /><figcaption>Figura 2 &#8211; YOLO Divisão da imagem em grades.</figcaption></figure></div>



<p>Cada uma destas células é responsável por realizar a predição/detecção de 5 caixas delimitadoras, pois podem existir mais de um objeto nesta célula. Cada caixa é responsável por analisar um pedaço da imagem e extrair informações da região. Na versão do YOLO utilizado como exemplo, existem um total de 845 (13x13x5) caixas delimitadoras.</p>



<h3>Caixas delimitadoras/Bounding box</h3>



<p>O retângulo que contém a localização do objeto é chamado de caixa delimitadora (bounding box). Durante o processo de detecção de objetos, podem ser encontradas diversas caixas delimitadoras para um mesmo objeto. Estas caixas também podem possuir diversos tamanhos diferentes. </p>



<p>Cada caixa possui uma pontuação de confiança, indicando a quantidade de certeza que o algoritmo tem que aquela caixa possui um objeto. Porém, esta pontuação não identifica qual tipo é esse objeto.</p>



<p>Na Figura 3 abaixo, foram destacadas as caixas detectadas pelo algoritmo YOLO. Também foi destacado na imagem a pontuação de confiança através da espessura da caixa, ou seja, quanto maior a confiança que o YOLO tem que existe um objeto naquela caixa maior é a borda da caixa. A quantidade de possíveis objetos identificados nesta etapa do algoritmo é imensa.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="466" height="466" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes_black.png" alt="" class="wp-image-3470" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes_black.png 466w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes_black-300x300.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes_black-150x150.png 150w" sizes="(max-width: 466px) 100vw, 466px" /><figcaption>Figura 3 &#8211; Resultado da detecção das caixas delimitadoras.</figcaption></figure></div>



<p>Para cada caixa delimitadora encontrada, também é executado o processo classificação dos objetos. Esse processo consiste em fornecer um valor de probabilidade para cada uma das possíveis classes/objetos que o algoritmo foi treinado a encontrar. Na Figura 4 abaixo, foram destacados em cores diferentes os possíveis objetos de cada caixa.  </p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="#refs"><img loading="lazy" width="458" height="458" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes.png" alt="" class="wp-image-3464" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes.png 458w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes-300x300.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_boundingboxes-150x150.png 150w" sizes="(max-width: 458px) 100vw, 458px" /></a><figcaption>Figura 4 &#8211; Resultado da classificação das caixas delimitadoras.</figcaption></figure></div>



<p>A combinação da confiança da caixa, com a probabilidade da classe, geram a pontuação final. Essa pontuação indica qual a probabilidade de uma determinada caixa delimitadora conter um objeto <a href="#refs">[JO]</a>.</p>



<p>Boa parte das caixas detectadas, possuem um grau de confiança muito baixo. Para eliminar a maioria das caixas podemos atribuir uma limiar de confiança, de 70% por exemplo, e remover o que estiver abaixo deste valor. Nesta etapa a confiança atribuída é de 30%.</p>



<p>A rede neural usa recursos de toda a imagem para prever cada caixa delimitadora, ela também prevê todas as caixas delimitadoras em todas as classes para uma imagem simultaneamente. Isso significa que a rede raciocina globalmente sobre a imagem completa e todos os objetos na imagem <a href="#refs">[MC].</a></p>



<h3>Resultado caixas delimitadoras:</h3>



<p>Cada caixa delimitadora no YOLO contém 3 grupos de informações/atributos:</p>



<ul><li><strong>Probabilidade de confiança</strong>: Atributo com a probabilidade de existir um objeto na determinada caixa;</li><li><strong>Coordenadas</strong>: Contém a localização da caixa delimitadora/objeto. A localização no YOLO é representada com posição  central do objeto, sua altura e sua largura;</li><li><strong>Probabilidade da classe</strong>: Atributo com a probabilidade de ser determinado objeto. Para cada tipo de objeto que a rede neural do YOLO foi treinada é acrescentado um novo atributo.</li></ul>



<p>Na Figura 5 abaixo, é representado esses 3 grupos de atributos.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2022/07/yolo_mapa_filtro_precisao.png" alt="" class="wp-image-3437" width="395" height="521" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/07/yolo_mapa_filtro_precisao.png 600w, https://visaocomputacional.com.br/wp-content/uploads/2022/07/yolo_mapa_filtro_precisao-228x300.png 228w" sizes="(max-width: 395px) 100vw, 395px" /><figcaption>Figura 5 &#8211; Mapa de saída do YOLO <a href="#refs">[AG2]</a>.</figcaption></figure></div>



<p>Finalizada a coleta/predição das probabilidades de cada caixa delimitadora, agora é preciso decidir quais caixas de fato são ou não são objetos. Para realizar esta decisão/predição, em sua última etapa de detecção, o YOLO realiza o processo de supressão não máxima.  </p>



<h3>Supressão não máxima/Non maximum suppression</h3>



<p>Durante o processo de detecção de objetos, são identificadas varias caixas delimitadoras contendo objetos. Porém, a maioria das caixas não vai conter um objeto, ou compartilham a mesma região de um mesmo objeto. Portanto é necessário realizar uma etapa para remover as caixas com baixas probabilidade e/ou que possuem uma área compartilhada.</p>



<p>A Figura 6 abaixo, ilustra esse processo de tomada de decisão realizada pelo YOLO e diversas outras redes neurais.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" width="629" height="419" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/supressao_nao_maxima.png" alt="" class="wp-image-3447" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/08/supressao_nao_maxima.png 629w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/supressao_nao_maxima-300x200.png 300w" sizes="(max-width: 629px) 100vw, 629px" /><figcaption>Figura 6 &#8211; Supressão não máxima.</figcaption></figure></div>



<h3>Âncoras/Anchor Box</h3>



<p>As ancoras são retângulos de tamanhos pré-definidos, que foram incluídas a partir da versão 2 do YOLO. Estes retângulos são utilizados, para que as caixas delimitadoras previstas, possuam maior relação com as caixas delimitadoras esperadas como resultado. </p>



<p>Estas âncoras possuem tamanhos altura e largura próximos aos tamanhos dos objetos identificados. Elas são criadas durante o processo de treinamento da rede neural, com base nas classes de objetos. </p>



<p>A partir das coordenadas das caixas dos objetos detectadas, são selecionadas as âncoras de cada objeto, redimensionadas para a proporção dos objetos identificados e utilizadas como saída da rede neural YOLO.  </p>



<p>A rede neural YOLO não prevê o tamanho final do objeto, ela apenas ajusta o tamanho da âncora mais próxima ao tamanho do objeto.</p>



<p>Na Figura 7 abaixo, é exibido o resultado de todo o processo de detecção com o YOLO.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img loading="lazy" src="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_result.jpg" alt="" class="wp-image-3511" width="456" height="342" srcset="https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_result.jpg 768w, https://visaocomputacional.com.br/wp-content/uploads/2022/08/yolo_result-300x225.jpg 300w" sizes="(max-width: 456px) 100vw, 456px" /><figcaption>Figura 7 &#8211; Resultado da detecção com YOLO.</figcaption></figure></div>



<h2>Resumo</h2>



<p>O YOLO cria diversas caixas delimitadoras. Para cada caixa, é atribuido um valor de confiaça, com a porcentagem (0 até 1) de existir uma objeto. Também é realizado 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 é realizada o processo de supressão não máxima afim de &#8220;filtrar&#8221;/&#8221;Eliminar&#8221; falsos objetos e mesclar regiões de um mesmo objeto que assumem o tamnho conforme o tamanho da âncora <a href="#refs">[AG]</a>.</p>



<p>O processo de predição do YOLO é realizado a partir de uma grid de 13×13 células, o que no final resulta em 169 células. Para cada uma dessas células, são detectadas 5 caixas delimitadoras, o que resulta em 845 caixas com possíveis objetos <a href="#refs">[AG]</a>.&nbsp;</p>



<p></p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://cdn.shortpixel.ai/spai/w_722+q_+ret_img+to_webp/https://iaexpert.academy/wp-content/uploads/2020/10/processo-yolo.jpg" alt="" class="wp-image-21488"/><figcaption>Figura 8 &#8211; Resumo das operações YOLO.</figcaption></figure></div>



<h2>Um pouco de história</h2>



<p>Joseph Redmon introduziu a primeira versão em seu paper publicado em junho de 2015:&nbsp;<a href="https://arxiv.org/pdf/1506.02640.pdf">You Only Look Once: Unified, Real-Time ObjectDetection</a>.</p>



<p>Em dezembro de 2016, Redmon e Ali Farhadi introduziram o YOLOv2 com o paper: “<a href="https://arxiv.org/abs/1612.08242">YOLO9000: Better, Faster, Stronger</a>, mais preciso e mais rápido que a versão anterior <a href="#refs">[AG]</a>.</p>



<p>Em abril de 2018, o YOLOv3 (“<a href="https://arxiv.org/pdf/1804.02767.pdf">YOLOv3: An Incremental Improvement</a>“) demonstrou uma grande melhora na eficiência da predição. No entanto, no geral ele não é mais rápido que a versão anterior. A principal novidade é a predição da imagem em 3 diferentes escalas, o que resolveu o principal problema da versão anterior, que era a dificuldade para reconhecer objetos muito pequenos na imagem. Essa novidade também é o principal motivo de não ser mais rápido que o seu antecessor, já que tal função exigiu mudanças na arquitetura e funcionamento, que tornaram o processo mais pesado <a href="#refs">[AG]</a>.</p>



<p>A quarta versão do YOLO foi lançada em abril de 2020, sendo oficializada após a publicação do paper<em>&nbsp;“YOLOv4: Optimal Speed and Accuracy of Object Detection”</em>&nbsp;por Alexey Bochkovskiy, Chien-Yao Wang e Hong-Yuan Mark Liao<em>.</em></p>



<p>As principais características que podem ser destacadas nessa versão são melhorias na velocidade e precisão. Outra característica importante é o fato de ser mais eficiente para rodar em GPUs, pois foi otimizado para utilizar menos memória <a href="#refs">[AG]</a>.</p>



<p>Nos próximos posts, serão detalhadas estas 4 versões. Espero que tenha gostado do post, deixe seu comentário abaixo.</p>



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



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



<p>[RJFA] Redmon, Joseph and Farhadi, Ali, YOLO: Real-Time Object Detection. <a href="https://pjreddie.com/darknet/yolo/">Acessado em 29/06/2022,</a></p>



<p>[MC] Manish Chablani, YOLO — You only look once, real time object detection explained<a href="https://towardsdatascience.com/yolo-you-only-look-once-real-time-object-detection-explained-492dc9230006">. Acessado em 29/06/2022.</a></p>



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



<p>[AK] Ayoosh Kathuria &#8211; What’s new in YOLO v3.  <a href="https://towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b">Acessado em 26/07/2022.</a></p>



<p>[AK2] Ayoosh Kathuria &#8211; How to implement a YOLO (v3) object detector from scratch in PyTorch: Part 1. <a href="https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/">Acessado em 26/07/2022</a></p>



<p>[JP] Jilvan Pinheiro; Módulo OCR de leitura e reconhecimento de documentos. Acessado em <a href="https://medium.com/softwrap/m%C3%B3dulo-ocr-de-leitura-e-reconhecimento-de-documentos-dbe8703f6bb5">12/08/2022</a></p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/yolo-para-deteccao-de-objetos-visao-geral/">YOLO para Detecção de Objetos  &#8211; Visão Geral</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
