Ultralytics YOLO27:
Ultralytics YOLO

Como tornamos os modelos YOLO mais rápidos no teu chip favorito na Ultralytics

Como a Ultralytics otimiza modelos YOLO para obter velocidade em CPUs, GPUs e dispositivos de periferia. Vamos explicar os chips, a memória e técnicas inteligentes como quantização, fusão e poda.

FRFrancesco Mattioli27 min read
Otimização de modelos YOLO em CPUs, GPUs e chips de periferia

Na Ultralytics, criamos modelos de visão computacional; basicamente, ensinamos os computadores a ver! Pensa nestes modelos como enormes receitas matemáticas. São compostos por operações (a que chamamos camadas) e por uma enorme quantidade de números a que chamamos pesos.

Os nossos modelos Ultralytics YOLO processam as imagens como elas realmente são: arrays de números! Cada píxel é, na verdade, apenas valores de cor, a quantidade de Vermelho, Verde e Azul (daí RGB) de cada ponto que compõe a imagem. Chamamos a estes arrays de números “tensores” porque parece muito mais fixe do que “matrizes multidimensionais”, que parece muito mais fixe do que “números empilhados sobre números empilhados sobre números”.

Quando introduzes uma imagem no nosso modelo, ela embarca numa viagem épica pela rede. Imagina o teu tensor a surfar por camada após camada, sendo transformado, convoluído e manipulado matematicamente da forma mais bonita possível. Pensa nisso como uma festa onde os números se misturam e interagem, extraindo a essência do que faz com que um gato seja um gato ou um carro seja um carro. Chamamos a este processo extração de características.

O que sai do outro lado? Mais números! Números com significado. Nas tarefas de deteção, indicam exatamente onde estão os objetos na tua imagem e o que esses objetos provavelmente são. “Ei, há 95% de probabilidade de ser um cão nas coordenadas (x, y)!” Chamamos a este processo mágico inferência.

Agora, antes de os nossos modelos poderem fazer a sua magia, precisam de ir à escola; precisam de ser treinados. A parte do treino é quando as coisas ficam intensas.

Durante o treino, sempre que apresentamos uma imagem à rede, não estamos apenas a obter uma resposta. Estamos a fazer duas coisas particularmente exigentes. Primeiro, calculamos o quão errada estava a rede (chamamos a isso perda, basicamente a distância em relação ao alvo). Segundo, e esta é a parte importante, atualizamos cada número (ou peso) da rede com base nessa perda. Pensa nisso como afinar milhares de pequenos botões ao mesmo tempo, em que cada ajuste é calculado para tornar a rede mais precisa a cada vez.

Na prática, estamos a treinar a rede através da correção: cada erro ensina-lhe o que NÃO deve fazer, e ajustamos todos esses pesos para que, quando voltar a ver uma imagem semelhante, chegue mais perto da resposta certa. Em essência, a rede aprende sendo orientada na direção certa, erro após erro, até começar a acertar em cheio nas previsões.

De quantos números estamos a falar? Bem, o nosso pequeno e simpático YOLO11n tem alguns milhões de parâmetros. Mas o YOLO11x? Esse peso-pesado tem mais de 50 milhões de parâmetros! Mais parâmetros significam mais detalhes que podes codificar, como a diferença entre desenhar com lápis de cera e ter uma paleta completa de artista.

Durante a inferência, esta quantidade de parâmetros torna-se crucial. Executar uma rede com 3 milhões de parâmetros é como dar uma corrida ao quarteirão. Executar uma rede com 50 milhões de parâmetros? É mais como correr uma maratona enquanto fazes malabarismo com tochas em chamas.

Então, o que É exatamente a computação? Como é que todo este processamento de números acontece? Como é que o tornamos mais rápido? E o que significa sequer “otimizar a computação”?

Como os chips fazem realmente os cálculos#

A computação acontece com chips. Estes pequenos quadrados de silício são basicamente os castelos de areia mais organizados do universo. Cada operação que o teu computador faz, cada soma, cada comparação, cada “se isto, então aquilo”, é fisicamente gravada no silício. Existem circuitos físicos reais em áreas específicas do chip dedicados a somar números, e outros para operações lógicas. É como ter uma pequena cidade onde diferentes bairros se especializam em diferentes tipos de matemática.

Isto provavelmente parece estranho, mesmo que sejas cientista informático. Isso acontece porque passámos os últimos 40 anos a construir camada sobre camada de abstração, como uma lasanha tecnológica que cresceu tanto que já nem conseguimos ver o prato no fundo. Simplificámos tanto as coisas que a maioria dos programadores atuais não faz ideia de como a computação realmente acontece no silício. Não por culpa deles, mas por conceção!

Vamos retirar estas camadas. Vê este código Python extremamente simples:

x = 1
if x == 1:
    y = x + 1

Estamos a criar uma variável x, a defini-la como 1 e, se x for igual a 1 (spoiler: é), criamos y com o valor de x mais 1. Três linhas. Fácil.

Mas é aqui que as coisas ficam interessantes. Entre estas três linhas inocentes e o movimento efetivo de eletrões pelo silício, existem PELO MENOS quatro enormes camadas de tradução (na realidade, há mais, mas a nossa Digital Content Manager diz que a minha contagem de palavras já lhe está a causar ansiedade). Deixa-me guiar-te por esta viagem alucinante:

Camada 1: Python → Bytecode Primeiro, o Python lê o teu código e compila-o para algo chamado bytecode, uma linguagem intermédia mais fácil de os computadores processarem, mas que faria os teus olhos sangrar se tentasses lê-la.

Camada 2: Bytecode → Código de máquina O interpretador Python (como o CPython) pega nesse bytecode e traduz-o para código de máquina, as instruções efetivas que o teu processador compreende. É aqui que o teu elegante “if x == 1” se transforma em algo como “LOAD register, COMPARE register, JUMP if zero flag set”.

Camada 3: Código de máquina → Microcódigo Reviravolta! Os processadores modernos nem sequer executam diretamente o código de máquina. Dividem-no ainda mais em microcódigo, operações ainda menores que os componentes internos do chip conseguem processar. A tua única instrução “ADD” pode transformar-se em várias micro-operações.

Camada 4: Microcódigo → Eletrónica física Finalmente, chegamos ao silício. Essas micro-operações acionam sinais elétricos reais que fluem pelos transístores. Milhares de milhões de pequenos interruptores ligam-se e desligam-se, os eletrões dançam por caminhos cuidadosamente concebidos e, de alguma forma, magicamente, 1 + 1 torna-se 2.

Cada camada existe para esconder a complexidade insana da camada abaixo. É como aquelas bonecas russas, exceto que cada boneca fala uma língua completamente diferente e a boneca mais pequena é literalmente feita de relâmpagos presos na areia.

A ironia? Essas três linhas de Python provavelmente acionam MILHÕES de interruptores de transístor. Mas, graças a estas abstrações, não precisas de pensar em nada disso. Escreves simplesmente “y = x + 1” e confias que, algures nas profundezas do silício, a magia acontece.

A arquitetura#

Cada operação é implementada fisicamente no silício, e o LOCAL onde acontece no chip depende inteiramente da topologia do chip. É como planeamento urbano, mas para eletrões. O somador vive aqui, o multiplicador vive ali e todos precisam de comunicar eficientemente entre si.

Temos centenas de chips diferentes no mercado, cada um concebido para finalidades distintas. O que muda entre eles? A topologia, ou seja, a forma como as operações são posicionadas e implementadas no domínio físico. É a isto que chamamos arquitetura, e temos mesmo muitas:

  • x86 (Intel e AMD) - O avô da computação de desktop, complexo mas poderoso
  • ARM - Alimenta o teu telemóvel e, cada vez mais, o teu portátil; concebido para a eficiência
  • RISC-V - O rebelde de código aberto, a ganhar força por todo o lado
  • PowerPC - A fera da IBM, ainda presente em consolas de jogos e servidores
  • MIPS - O favorito do meio académico, simples e elegante
  • SPARC - O contributo da Sun Microsystems (agora da Oracle) para a computação de alto desempenho
  • Arquiteturas de GPU (núcleos CUDA da NVIDIA, RDNA da AMD) - Monstros do processamento paralelo

Cada arquitetura não só organiza os transístores de forma diferente, como também fala uma língua diferente. As abstrações que usamos para enviar instruções para estas máquinas são completamente diferentes. É como teres de escrever indicações para alguém, mas, dependendo do carro dessa pessoa, poderes ter de escrever em francês, mandarim ou através de uma dança interpretativa.

O batimento cardíaco do silício#

O combustível dos nossos chips são os eletrões, a eletricidade que flui para o chip e fornece a energia para a computação. Mas a energia, por si só, não chega. Para que um chip funcione realmente e mova dados pela sua topologia intricada, tudo depende de um componente crítico: o relógio. É ele que faz com que os eletrões fluam por caminhos específicos em momentos específicos. Sem ele, terias apenas silício energizado sem fazer nada.

Imagina tentar coordenar um espetáculo gigantesco em que milhares de milhões de componentes precisam de se mover em perfeita sincronia. Sem um ritmo, seria um caos. É exatamente isso que o relógio faz pelo teu processador. É um cristal que vibra a uma frequência incrivelmente consistente, emitindo impulsos elétricos milhares de milhões de vezes por segundo.

Quando ouves “processador de 3,5 GHz”, esse GHz (gigahertz) é a velocidade do relógio: 3,5 mil milhões de batimentos por segundo. Cada batimento chama-se ciclo de relógio e é a unidade fundamental de tempo na computação.

NADA acontece entre ciclos de relógio. O computador inteiro congela, à espera do batimento seguinte. É como o jogo do sinal vermelho, sinal verde mais extremo do universo. Em cada “sinal verde” (impulso de relógio):

  • Os dados movem-se entre componentes
  • Os cálculos são executados
  • As decisões lógicas são tomadas
  • A memória é lida ou escrita

Algumas operações demoram um ciclo (uma soma simples), enquanto outras demoram muitos ciclos (uma divisão ou a obtenção de dados da RAM). Tudo é coreografado com precisão: milhares de milhões de componentes executam as suas operações específicas, todos sincronizados com este ritmo implacável.

Podes fazer overclock ao teu processador fazendo o cristal vibrar mais depressa; tudo acontece mais rapidamente, mas também gera mais calor e torna-se menos estável. Se o forçares demasiado, o computador bloqueia porque os eletrões literalmente não conseguem acompanhar o ritmo.

Antigamente, estas operações eram implementadas com máquinas do tamanho de salas. Mas os componentes que fazem toda esta computação são extraordinariamente simples: são apenas interruptores. Interruptores de ligado ou desligado.

Liga interruptores suficientes no padrão certo e terás computação. Toda a revolução digital resume-se a uma sofisticada disposição de interruptores.

Esta simplicidade significa que, se tiveres interruptores, quaisquer interruptores, podes construir um computador. Já foram construídos computadores funcionais com tubos e válvulas de água, dominós, blocos LEGO, berlindes e até redstone no Minecraft.

Os princípios não mudaram desde a década de 1940. Apenas nos tornámos incrivelmente bons a fabricar interruptores extremamente pequenos. O teu telemóvel tem mais poder computacional do que todos os computadores que enviaram seres humanos à Lua e cabe no teu bolso porque descobrimos como fabricar interruptores à escala atómica.

Quando executamos redes neuronais com milhões de parâmetros, acionamos estes pequenos interruptores milhares de milhões de vezes por segundo, todos perfeitamente sincronizados com esse batimento cristalino. Cada atualização de peso, cada multiplicação de matrizes, cada função de ativação: tudo marcha ao ritmo do relógio.

Não admira que treinar modelos faça o teu computador soar como se estivesse a tentar levantar voo!

A fazer as redes neuronais acelerar#

Muito bem, temos estes chips com milhares de milhões de interruptores a dançar ao ritmo de um cristal e queremos executar neles redes neuronais com milhões de parâmetros. Deve ser fácil, certo? Basta atirar os números para o chip e deixá-lo trabalhar!

Executar redes neuronais rapidamente é como tentar cozinhar uma refeição de cinco pratos numa cozinha cujo frigorífico fica a três quarteirões de distância, onde só tens uma frigideira e cada ingrediente pesa 225 kg. A matemática em si não é o maior problema; é tudo o resto.

A incompatibilidade de arquiteturas#

A maioria dos chips foi concebida para executar o Microsoft Word, não redes neuronais. O teu CPU foi construído a pensar que passaria a vida a executar instruções if, ciclos e, ocasionalmente, a calcular os teus impostos (a única computação que até os supercomputadores consideram emocionalmente desgastante). Está otimizado para operações sequenciais: faz isto, depois aquilo e depois a outra coisa.

Mas as redes neuronais são completamente diferentes. Querem fazer TUDO AO MESMO TEMPO. Durante o treino, atualizas milhões de pesos com base no grau de erro das tuas previsões. Durante a inferência (quando utilizas efetivamente o modelo treinado), envias dados por milhões de cálculos em simultâneo. Imagina que precisas de multiplicar um milhão de números por outro milhão de números. O teu CPU, coitado, quer fazê-lo um de cada vez, como um contabilista muito rápido, mas extremamente metódico.

É por isso que as GPUs se tornaram a espinha dorsal da computação de IA. As GPUs foram concebidas para videojogos, nos quais é necessário calcular simultaneamente a cor de milhões de píxeis. Acontece que calcular cores de píxeis e fazer matemática de redes neuronais são surpreendentemente semelhantes: ambos envolvem executar a mesma operação em enormes quantidades de dados em paralelo.

Mas nem as GPUs são perfeitas para redes neuronais. É por isso que as empresas estão agora a criar chips de IA especializados (TPUs, NPUs e todas as outras siglas terminadas em PU). Estes chips são concebidos de raiz com uma única função: tornar as redes neuronais rápidas. São como contratar um cozinheiro que só sabe preparar um prato, mas o cozinha a uma velocidade sobre-humana. Enquanto o teu CPU tem dificuldades com operações de matrizes sequenciais e a tua GPU lida razoavelmente bem com elas em paralelo, estes chips especializados devoram matrizes ao pequeno-almoço, almoço e jantar.

O muro da memória (ou: por que mover bits é mais difícil do que fazer matemática)#

Na computação moderna de redes neuronais, passamos mais tempo e energia a MOVER dados do que propriamente a CALCULÁ-LOS.

Pensa no chip do teu computador como um matemático brilhante que trabalha à velocidade da luz, mas cujos livros de referência estão guardados em edifícios diferentes do outro lado da cidade. Consegue resolver qualquer equação instantaneamente, mas primeiro precisa de obter os números, e essa viagem demora uma eternidade.

O teu chip consegue multiplicar dois números num ciclo de relógio (recorda: um desses milhares de milhões de batimentos por segundo). Velocidade de relâmpago! Mas obter esses números da memória para o chip? Pode demorar CENTENAS de ciclos. É como se o teu matemático conseguisse resolver um problema num segundo, mas precisasse de cinco minutos para ir à biblioteca e voltar.

A razão é a distância (e o espaço). A eletricidade move-se rapidamente, mas não a uma velocidade infinita. Quanto mais longe os dados tiverem de viajar no chip, mais tempo demora. Os designers de computadores resolveram este problema criando uma hierarquia de memória, como ter vários locais de armazenamento a diferentes distâncias:

  • Registos (integrados diretamente nas unidades de computação): a secretária do teu matemático. Acesso instantâneo! Mas são minúsculos; só consegues manter aqui cerca de 32 números. É como ter notas autocolantes mesmo à tua frente.
  • Cache L1 (a micrómetros de distância): a estante na sala. Demora 3–4 ciclos a ir buscar algo. Aqui cabem alguns milhares de números.
  • Cache L2 (a milímetros de distância): o armário de arquivo no fundo do corredor. Demora 10–15 ciclos e pode conter alguns milhões de números.
  • Cache L3 (do outro lado do chip): a arrecadação no andar de baixo. Demora 30–50 ciclos e armazena dezenas de milhões de números.
  • RAM (num chip completamente diferente): o armazém do outro lado da cidade. Demora 100–300 ciclos. É aqui que vivem os teus milhares de milhões de números.
  • SSD/Disco rígido (ligado por cabos): uma cidade completamente diferente. Demora milhões de ciclos. Armazenamento enorme, velocidade glacial.

As estruturas exatas variam: o chip do teu telemóvel pode não ter cache L3, enquanto um CPU de servidor pode ter enormes quantidades dela. O princípio, contudo, mantém-se: a memória mais próxima é mais rápida, mas menor.

Agora vem a parte dolorosa para as redes neuronais. Imagina que o teu modelo Ultralytics YOLO tem 50 milhões de parâmetros (o ChatGPT tem milhares de milhões, já agora). São 50 milhões de números que precisam de viajar da memória para as unidades de computação e voltar. Mesmo que cada número tenha apenas 4 bytes, são 200 megabytes de dados que precisam de circular pelo sistema.

O chip pode processar cada número num único ciclo, mas, se forem necessários 100 ciclos para obter esse número da RAM, estás a passar 99% do tempo à espera da entrega. É como ter um carro de Fórmula 1 preso num engarrafamento. Todo aquele poder computacional parado, à espera que os dados cheguem.

Eis a ideia crucial: este é O estrangulamento da computação moderna. Chama-se estrangulamento de von Neumann. Tornar os chips mais rápidos a fazer matemática é relativamente fácil. Tornar a memória mais rápida está a atingir limites físicos. É por isso que quase TODA a otimização de desempenho em IA acontece ao nível da memória. Quando os engenheiros aceleram as redes neuronais, raramente tornam a matemática mais rápida; encontram formas inteligentes de mover menos dados, armazená-los melhor na cache ou aceder-lhes de forma mais eficiente.

Os chips de IA modernos não se concentram apenas na velocidade de computação; estão obcecados com a largura de banda da memória e com as estratégias de movimentação de dados. Pré-obtêm dados, reutilizam valores que já estão na cache e organizam os cálculos para minimizar as deslocações à memória. Os vencedores da corrida pelo hardware de IA não são os que têm as calculadoras mais rápidas; são os que descobriram como manter essas calculadoras alimentadas com dados. Todo o jogo consiste em otimizar os padrões de acesso à memória.

Sempre que moves um bit de dados, gastas energia. Não muita — estamos a falar de picojoules —, mas, quando moves terabytes por segundo, isso acumula-se RAPIDAMENTE. Na verdade, mover dados 1 mm através de um chip consome mais energia do que executar a computação propriamente dita!

É por isso que o teu portátil soa como um motor a jato quando treina redes neuronais. Não é a matemática que está a gerar calor; é a movimentação de dados. Cada atualização de parâmetros, cada cálculo de gradiente e cada passagem para a frente está literalmente a aquecer a tua divisão.

Os aceleradores de IA modernos são, basicamente, exercícios de termodinâmica. Quanta computação conseguimos concentrar antes de o chip derreter? Com que rapidez conseguimos afastar o calor? É como fazer overclock, mas o relógio está sempre no máximo e nós estamos apenas a tentar não provocar um incêndio.

A solução? Design consciente da arquitetura#

As redes neuronais mais rápidas não são necessariamente as mais inteligentes; são as concebidas a pensar nos chips. Elas:

  • Mantêm os dados locais tanto quanto possível
  • Reutilizam os cálculos de forma obsessiva
  • Alinham-se perfeitamente com as capacidades do hardware
  • Minimizam a movimentação da memória a qualquer custo

É como a diferença entre uma receita que diz “usa ingredientes da mercearia local” e outra que exige importar especiarias do Tibete, queijo de França e água da Antártida. Ambas podem saber bem, mas uma é definitivamente mais prática.

E é por isso que tornar as redes neuronais rápidas é uma forma de arte. Não basta ter matemática boa; precisas de compreender o hardware, respeitar a hierarquia da memória e dançar perfeitamente com a arquitetura.

Bem-vindo ao mundo onde a informática encontra a física, que encontra a engenharia, que encontra a pura magia. Onde mover um número custa mais do que fazer cálculos com ele. Onde o paralelismo é rápido, mas a sincronização é fatal. Onde o teu maior inimigo não é a complexidade, mas a distância.

Como tornamos o YOLO mais rápido#

Quando treinas um modelo YOLO, obténs uma rede neuronal que funciona lindamente no teu ambiente de treino. Mas há um detalhe: a tua GPU para jogos, o teu iPhone e aquele pequeno chip numa câmara de segurança falam línguas completamente diferentes. Têm pontos fortes diferentes, pontos fracos diferentes e ideias muito diferentes sobre como processar dados.

Pensa nisto desta forma: uma GPU tem milhares de núcleos que podem trabalhar em simultâneo — foi concebida para processamento paralelo. Entretanto, um chip móvel pode ter circuitos especiais concebidos especificamente para operações de IA, mas só consegue lidar com determinados tipos de matemática. E aquele dispositivo de edge na câmara da tua campainha? Está a tentar executar IA com um orçamento energético inferior ao de uma lâmpada LED.

Na Ultralytics, suportamos mais de uma dúzia de formatos de exportação diferentes porque cada um é otimizado para hardware diferente. Não se trata de ter opções a mais. Trata-se de ter a opção certa para as TUAS necessidades específicas.

Fusão de operações: fazer mais com menos#

No modelo YOLO original, muitas operações acontecem em sequência. Por exemplo, podemos fazer uma convolução, normalizar os resultados e depois aplicar uma função de ativação. São três passos separados, cada um a exigir as suas próprias leituras e escritas na memória.

Mas aqui está a parte inteligente: podemos combinar estas operações num único passo. Quando exportamos o YOLO para implementação, fundimos estas operações. Em vez de:

  1. Calcular a convolução → Guardar na memória
  2. Carregar da memória → Normalizar → Guardar na memória
  3. Carregar da memória → Aplicar a ativação → Guardar na memória

Fazemos:

  1. Calcular a convolução + normalização + ativação → Guardar na memória

Num modelo YOLO típico que processa uma imagem de 640×640, este simples truque elimina gigabytes de transferências de memória desnecessárias. Num telemóvel, essa é a diferença entre uma deteção suave em tempo real e um atraso frustrante.

Usar números mais pequenos: a magia da quantização#

O YOLO não precisa, na verdade, de números superprecisos para detetar objetos com exatidão. Durante o treino, usamos 32 bits para representar cada peso — é como usar uma calculadora científica para medir os ingredientes de uma sanduíche. Para a implementação real? 8 bits funcionam perfeitamente.

Isto chama-se quantização e é uma das nossas técnicas de otimização mais poderosas. Ao usar números menores:

  • O modelo fica 75% menor (de 200 MB para 50 MB no Ultralytics YOLO11x)
  • É executado 2 a 4 vezes mais depressa na maioria dos dispositivos
  • Consome muito menos energia (a bateria do teu telemóvel agradece)

Nem todas as camadas do YOLO são igualmente sensíveis a esta redução. As primeiras camadas, que detetam arestas e formas básicas? São robustas — podemos usar números de 8 bits sem problemas. As camadas finais de deteção, que determinam "isto é um gato ou um cão?", precisam de um pouco mais de precisão. Por isso, ajustamos a precisão camada a camada, usando apenas os bits necessários para manter a exatidão e maximizar a velocidade.

Descobrimos que, com uma quantização cuidadosa, o Ultralytics YOLO mantém 99,5% da sua exatidão original e é executado 3 vezes mais depressa em telemóveis. Essa é a diferença entre um modelo de investigação e algo que podes realmente usar no mundo real.

Escolher o melhor algoritmo#

Existem dezenas de formas diferentes de executar a mesma operação matemática. Uma convolução simples (a operação central do YOLO) pode ser calculada usando algoritmos completamente diferentes, e a melhor escolha depende do teu hardware específico e do tamanho da entrada.

Quando exportamos o YOLO, a nossa estrutura de otimização testa diferentes algoritmos e escolhe o mais rápido para o teu caso específico. É como ter várias rotas para o mesmo destino e escolher com base nas condições atuais do trânsito. Numa GPU, podemos usar um algoritmo que processa muitos píxeis simultaneamente. Numa CPU, podemos usar um otimizado para processamento sequencial. A matemática é a mesma, mas a estratégia de execução é completamente diferente.

Memória: o gargalo oculto#

Lembras-te de termos falado sobre a memória ser o verdadeiro gargalo na computação moderna? Isto é especialmente verdade no caso do YOLO. O modelo pode ter 50 milhões de parâmetros e, durante a inferência, criar gigabytes de resultados intermédios. Mover todos estes dados é muitas vezes mais lento do que o cálculo propriamente dito.

Usamos vários truques para minimizar a movimentação de memória:

Agendamento inteligente: Organizamos as operações para que os dados sejam usados imediatamente, enquanto ainda estão na memória cache rápida. Na rede de pirâmide de características do YOLO, isto reduz o tráfego de memória em 40%.

Divisão em blocos: Em vez de processar uma imagem inteira de uma só vez, dividimo-la em blocos menores que cabem na cache. Assim, o processador pode trabalhar com memória local rápida, em vez de estar constantemente a obter dados da memória principal lenta.

Reutilização de buffers: Em vez de criar constantemente memória nova para os resultados intermédios, reutilizamos os mesmos buffers de memória. É incrivelmente eficiente — todo o backbone do YOLO pode ser executado apenas com um conjunto de buffers reutilizáveis.

Poda: menos é mais#

Eis um facto surpreendente: os modelos YOLO são frequentemente sobredimensionados. Podemos remover 30% dos canais em muitas camadas sem praticamente afetar a exatidão. Isto não torna apenas o modelo menor — também o torna mais rápido, porque há literalmente menos cálculos a executar.

O processo é elegante: analisamos que partes da rede contribuem menos para os resultados finais da deteção, removemo-las e depois ajustamos o modelo para compensar. Um modelo YOLO11m podado pode ser 30% mais rápido, mantendo 99% da sua exatidão original. Em dispositivos alimentados por bateria, este ganho de eficiência pode representar horas adicionais de funcionamento.

Aceleração de hardware: tirar partido dos pontos fortes de cada chip#

Diferentes processadores são bons em tarefas diferentes, e as diferenças de desempenho são impressionantes. O mesmo modelo YOLO11n demora:

  • 45 milissegundos por fotograma numa CPU Intel moderna
  • 4 milissegundos numa GPU NVIDIA RTX
  • 22 milissegundos num processador de telemóvel topo de gama
  • 15 milissegundos num TPU de edge Google Coral

Estas diferenças de velocidade não resultam apenas das frequências de relógio — refletem diferenças arquiteturais fundamentais. As GPU têm milhares de núcleos que trabalham em paralelo, perfeitos para as convoluções do YOLO. As NPU móveis têm circuitos especializados concebidos especificamente para redes neuronais. As CPU são polivalentes: flexíveis, mas não especializadas.

A chave da otimização é adaptar as operações do YOLO ao que cada chip faz melhor. Uma GPU gosta de executar a mesma operação em muitos dados simultaneamente. Uma NPU móvel pode suportar apenas determinadas operações, mas executa-as com uma eficiência extraordinária. Um TPU de edge funciona apenas com inteiros de 8 bits, mas atinge uma velocidade impressionante dentro dessa limitação.

A magia da compilação#

Quando exportas um modelo YOLO, acontece algo extraordinário nos bastidores. Não convertemos apenas o formato do ficheiro — compilamos efetivamente o modelo especificamente para o teu hardware-alvo. É como a diferença entre o Google Translate e um falante nativo. O processo de compilação:

  1. Analisa o teu modelo para compreender a sua estrutura e os seus requisitos
  2. Considera as capacidades do teu hardware — aquilo em que é bom e aquilo com que tem dificuldades
  3. Gera código otimizado que fala a linguagem nativa do teu hardware

O compilador pode reorganizar as operações para utilizar melhor a cache do teu processador, selecionar instruções especializadas suportadas pelo teu chip ou até usar machine learning para encontrar a melhor estratégia de otimização. Sim, estamos a usar IA para otimizar IA — o futuro chegou!

Esta etapa de compilação pode fazer uma diferença de 10 vezes no desempenho. O mesmo modelo YOLO pode arrastar-se com código genérico, mas voar com instruções devidamente otimizadas.

Implementação edge no mundo real#

Vamos falar sobre o que acontece quando o YOLO chega ao mundo real — especificamente, ao desafiante mundo dos dispositivos edge. Imagina uma câmara de segurança que precisa de executar o YOLO 24 horas por dia, 7 dias por semana, para detetar objetos. Enfrenta limitações severas:

  • Memória: talvez apenas 512 MB a 2 GB de RAM no total
  • Energia: frequentemente apenas 2 a 5 watts (menos do que um carregador de telemóvel)
  • Arrefecimento: sem ventoinhas, apenas dissipação passiva de calor
  • Fiabilidade: tem de funcionar continuamente sem falhar

Eis o que a otimização consegue na prática. Uma câmara de segurança a executar o YOLO11s:

  • Modelo original: 15 watts, funciona a uma temperatura elevada de 85 °C, atinge 20 FPS
  • Otimizado com quantização e poda: 3 watts, confortáveis 45 °C, atinge 25 FPS

Reduzimos o consumo de energia em 80% e melhorámos efetivamente o desempenho! Essa é a diferença entre um dispositivo que sobreaquece e esgota as baterias e um que funciona de forma fiável durante anos.

A chave é escolher os compromissos certos. Em dispositivos edge, frequentemente:

  • Usamos quantização INT8 (menos precisão, muito menos consumo de energia)
  • Processamos menos fotogramas quando a atividade é reduzida
  • Distribuímos o trabalho por diferentes processadores para gerir o calor
  • Mantemos os modelos suficientemente pequenos para caberem totalmente na memória rápida

O processo de otimização#

Na Ultralytics, seguimos uma abordagem sistemática à otimização. Primeiro, fazemos o profiling do modelo para compreender onde o tempo é realmente gasto. Muitas vezes, os gargalos não estão onde seria de esperar. Talvez 80% do tempo seja gasto em apenas algumas camadas ou as transferências de memória estejam a dominar o tempo de cálculo.

Em seguida, aplicamos otimizações iterativamente:

  1. Começamos pelos maiores gargalos
  2. Aplicamos uma otimização de cada vez
  3. Medimos tanto a melhoria de velocidade como o impacto na exatidão
  4. Mantemos as otimizações que proporcionam bons compromissos
  5. Repetimos até atingirmos os nossos objetivos

Por exemplo, na implementação do YOLO11m num telemóvel:

  • Base: 200 ms por fotograma, modelo de 200 MB
  • Após a quantização: 80 ms por fotograma, modelo de 50 MB
  • Após a poda: 60 ms por fotograma, modelo de 35 MB
  • Após a fusão de operações: 45 ms por fotograma, modelo de 35 MB

Cada etapa melhora o desempenho, mantendo mais de 99% da exatidão original. O resultado? Deteção de objetos em tempo real num dispositivo que cabe no teu bolso.

O futuro: computação heterogénea#

Os dispositivos modernos estão a ficar mais inteligentes na forma como utilizam vários processadores em conjunto. O teu telemóvel não tem apenas um processador — tem vários, cada um especializado em tarefas diferentes:

  • O sensor da câmara tem um ISP (processador de sinal de imagem) para o pré-processamento
  • A NPU (unidade de processamento neuronal) executa a inferência do YOLO
  • A CPU trata da lógica complexa e da coordenação
  • A GPU apresenta os resultados no ecrã

O futuro da otimização do YOLO consiste em dividir inteligentemente o modelo por estes processadores. Talvez a NPU trate das convoluções principais, a CPU execute a lógica de deteção final e a GPU visualize os resultados. Cada processador faz aquilo em que é melhor, criando um pipeline mais eficiente do que qualquer processador individual conseguiria alcançar.

Estamos a desenvolver algoritmos de particionamento inteligente que determinam automaticamente a melhor forma de dividir o YOLO pelos processadores disponíveis, considerando não só as suas capacidades, mas também o custo de mover dados entre eles.

Em resumo#

Otimizar modelos YOLO não consiste apenas em converter formatos de ficheiro; consiste em transformar IA de ponta em algo que funciona realmente no mundo real. Através de técnicas como quantização (utilização de números menores), poda (remoção de partes desnecessárias), fusão de operações (combinação de etapas) e gestão inteligente da memória, conseguimos melhorias de desempenho de 10 a 100 vezes, mantendo a exatidão.

O mais extraordinário? Não existe uma otimização "melhor" universal. Um servidor cloud com energia ilimitada precisa de otimizações diferentes das de um drone alimentado por bateria. Um telemóvel com um chip de IA dedicado precisa de um tratamento diferente do de um Raspberry Pi. É por isso que a Ultralytics disponibiliza tantas opções de exportação — cada uma otimizada para cenários diferentes.

Todas as otimizações que abordámos servem um objetivo: tornar a visão computacional acessível em qualquer lugar. Quer estejas a construir uma campainha inteligente, uma aplicação para drones ou um serviço cloud de grande escala, disponibilizamos as ferramentas para fazer o YOLO funcionar dentro das tuas limitações.

Quando exportas um modelo YOLO com a Ultralytics, não estás apenas a guardar um ficheiro. Estás a tirar partido de anos de investigação para tornar as redes neuronais práticas. Estás a transformar um modelo de IA de última geração em algo que pode ser executado em hardware real, com limitações reais, para resolver problemas reais.

É isso que fazemos na Ultralytics. Fazemos a ponte entre a investigação em IA e a implementação prática. Fazemos a visão computacional funcionar em qualquer lugar, porque o futuro da IA não consiste apenas em ter os melhores modelos — consiste em tornar esses modelos úteis no mundo real.

Explore solutions

Visão computacional para imagens aéreas

Visão computacional para imagens aéreas

Transforma imagens de drones e aéreas em insights em tempo real para agricultura, aquicultura, monitoramento ambiental, conservação e análise geoespacial com Ultralytics YOLO.
Saiba mais
Visão computacional no setor aeroespacial

Visão computacional no setor aeroespacial

Leva a IA de visão para o monitoramento aéreo com os modelos do Ultralytics YOLO. Potencializa drones, fluxos de trabalho aeroespaciais, conservação ambiental e indústrias geoespaciais com soluções de visão computacional.
Saiba mais

Protege cada local com os modelos do Ultralytics YOLO. A IA de visão alimenta monitoramento de perímetro, detecção de ameaças, reconhecimento de placas e segurança no local de trabalho.
Saiba mais
Visão computacional na robótica

Visão computacional na robótica

Dê mais inteligência às suas máquinas com os modelos Ultralytics YOLO. A IA de visão na robótica permite a navegação autónoma, a perceção, o rastreamento de objetos e o controlo em tempo real.
Saiba mais
Visão computacional na logística

Visão computacional na logística

Simplifique a logística com os modelos Ultralytics YOLO. A IA de visão permite a inspeção de encomendas, a triagem, o rastreamento de veículos e a monitorização da segurança dos armazéns em tempo real.
Saiba mais
Visão computacional no retalho

Visão computacional no retalho

Reinvente o retalho com os modelos Ultralytics YOLO. A IA de visão permite o rastreamento do inventário, a monitorização de prateleiras, a gestão de filas e informações mais inteligentes sobre os clientes.
Saiba mais
Visão computacional na área da saúde

Visão computacional na área da saúde

Cria soluções de saúde com modelos Ultralytics YOLO. A Vision AI na área da saúde permite obter imagens médicas mais rapidamente, diagnósticos mais inteligentes e monitorização de pacientes.
Saiba mais
Visão computacional na produção

Visão computacional na produção

Otimiza a produção com modelos Ultralytics YOLO. A Vision AI impulsiona o controlo de qualidade, a deteção de defeitos, a conformidade com EPI e a automatização das linhas de montagem.
Saiba mais
Visão computacional no setor automóvel

Visão computacional no setor automóvel

Aplique visão computacional no setor automóvel com modelos Ultralytics YOLO. A IA de visão melhora a segurança rodoviária, a assistência ao condutor e a automatização de veículos para estradas mais inteligentes.
Saiba mais
Visão computacional na agricultura

Visão computacional na agricultura

Leve a IA de visão para a agricultura inteligente com modelos Ultralytics YOLO. Potencie a monitorização das culturas, o acompanhamento do gado e a agricultura de precisão para obter colheitas maiores e mais inteligentes.
Saiba mais
Visão computacional para imagens aéreas

Visão computacional para imagens aéreas

Transforma imagens de drones e aéreas em insights em tempo real para agricultura, aquicultura, monitoramento ambiental, conservação e análise geoespacial com Ultralytics YOLO.
Saiba mais
Visão computacional no setor aeroespacial

Visão computacional no setor aeroespacial

Leva a IA de visão para o monitoramento aéreo com os modelos do Ultralytics YOLO. Potencializa drones, fluxos de trabalho aeroespaciais, conservação ambiental e indústrias geoespaciais com soluções de visão computacional.
Saiba mais

Protege cada local com os modelos do Ultralytics YOLO. A IA de visão alimenta monitoramento de perímetro, detecção de ameaças, reconhecimento de placas e segurança no local de trabalho.
Saiba mais
Visão computacional na robótica

Visão computacional na robótica

Dê mais inteligência às suas máquinas com os modelos Ultralytics YOLO. A IA de visão na robótica permite a navegação autónoma, a perceção, o rastreamento de objetos e o controlo em tempo real.
Saiba mais
Visão computacional na logística

Visão computacional na logística

Simplifique a logística com os modelos Ultralytics YOLO. A IA de visão permite a inspeção de encomendas, a triagem, o rastreamento de veículos e a monitorização da segurança dos armazéns em tempo real.
Saiba mais
Visão computacional no retalho

Visão computacional no retalho

Reinvente o retalho com os modelos Ultralytics YOLO. A IA de visão permite o rastreamento do inventário, a monitorização de prateleiras, a gestão de filas e informações mais inteligentes sobre os clientes.
Saiba mais
Visão computacional na área da saúde

Visão computacional na área da saúde

Cria soluções de saúde com modelos Ultralytics YOLO. A Vision AI na área da saúde permite obter imagens médicas mais rapidamente, diagnósticos mais inteligentes e monitorização de pacientes.
Saiba mais
Visão computacional na produção

Visão computacional na produção

Otimiza a produção com modelos Ultralytics YOLO. A Vision AI impulsiona o controlo de qualidade, a deteção de defeitos, a conformidade com EPI e a automatização das linhas de montagem.
Saiba mais
Visão computacional no setor automóvel

Visão computacional no setor automóvel

Aplique visão computacional no setor automóvel com modelos Ultralytics YOLO. A IA de visão melhora a segurança rodoviária, a assistência ao condutor e a automatização de veículos para estradas mais inteligentes.
Saiba mais
Visão computacional na agricultura

Visão computacional na agricultura

Leve a IA de visão para a agricultura inteligente com modelos Ultralytics YOLO. Potencie a monitorização das culturas, o acompanhamento do gado e a agricultura de precisão para obter colheitas maiores e mais inteligentes.
Saiba mais
Visão computacional para imagens aéreas

Visão computacional para imagens aéreas

Transforma imagens de drones e aéreas em insights em tempo real para agricultura, aquicultura, monitoramento ambiental, conservação e análise geoespacial com Ultralytics YOLO.
Saiba mais
Visão computacional no setor aeroespacial

Visão computacional no setor aeroespacial

Leva a IA de visão para o monitoramento aéreo com os modelos do Ultralytics YOLO. Potencializa drones, fluxos de trabalho aeroespaciais, conservação ambiental e indústrias geoespaciais com soluções de visão computacional.
Saiba mais

Protege cada local com os modelos do Ultralytics YOLO. A IA de visão alimenta monitoramento de perímetro, detecção de ameaças, reconhecimento de placas e segurança no local de trabalho.
Saiba mais
Visão computacional na robótica

Visão computacional na robótica

Dê mais inteligência às suas máquinas com os modelos Ultralytics YOLO. A IA de visão na robótica permite a navegação autónoma, a perceção, o rastreamento de objetos e o controlo em tempo real.
Saiba mais
Visão computacional na logística

Visão computacional na logística

Simplifique a logística com os modelos Ultralytics YOLO. A IA de visão permite a inspeção de encomendas, a triagem, o rastreamento de veículos e a monitorização da segurança dos armazéns em tempo real.
Saiba mais
Visão computacional no retalho

Visão computacional no retalho

Reinvente o retalho com os modelos Ultralytics YOLO. A IA de visão permite o rastreamento do inventário, a monitorização de prateleiras, a gestão de filas e informações mais inteligentes sobre os clientes.
Saiba mais
Visão computacional na área da saúde

Visão computacional na área da saúde

Cria soluções de saúde com modelos Ultralytics YOLO. A Vision AI na área da saúde permite obter imagens médicas mais rapidamente, diagnósticos mais inteligentes e monitorização de pacientes.
Saiba mais
Visão computacional na produção

Visão computacional na produção

Otimiza a produção com modelos Ultralytics YOLO. A Vision AI impulsiona o controlo de qualidade, a deteção de defeitos, a conformidade com EPI e a automatização das linhas de montagem.
Saiba mais
Visão computacional no setor automóvel

Visão computacional no setor automóvel

Aplique visão computacional no setor automóvel com modelos Ultralytics YOLO. A IA de visão melhora a segurança rodoviária, a assistência ao condutor e a automatização de veículos para estradas mais inteligentes.
Saiba mais
Visão computacional na agricultura

Visão computacional na agricultura

Leve a IA de visão para a agricultura inteligente com modelos Ultralytics YOLO. Potencie a monitorização das culturas, o acompanhamento do gado e a agricultura de precisão para obter colheitas maiores e mais inteligentes.
Saiba mais

Vamos construir juntos o futuro da IA!

Começa a tua jornada com o futuro da aprendizagem automática