Cómo hacemos en Ultralytics que los modelos YOLO sean más rápidos en tu chip favorito
Cómo optimiza Ultralytics los modelos YOLO para obtener velocidad en CPUs, GPUs y dispositivos Edge. Explicaremos los chips, la memoria y técnicas inteligentes como la cuantización, la fusión y la poda.

En Ultralytics, creamos modelos de visión artificial; básicamente, ¡enseñamos a las computadoras a ver! Piensa en estos modelos como recetas matemáticas gigantes. Están compuestos por operaciones (que llamamos capas) y un montón masivo de números a los que llamamos pesos.
Nuestros modelos Ultralytics YOLO procesan las imágenes tal como son: ¡matrices de números! Cada píxel es en realidad solo valores de color, la cantidad de rojo, verde y azul (por lo tanto, RGB) para cada punto que compone la imagen. Llamamos a estas matrices de números "tensores" porque suena mucho mejor que "matrices multidimensionales", que suena mucho mejor que "números apilados sobre números apilados sobre números".
Cuando introduces una imagen en nuestro modelo, esta emprende un viaje épico a través de la red. Imagina tu tensor surfeando a través de capa tras capa, siendo transformado, convolucionado y matemáticamente retorcido de la manera más hermosa posible. Piénsalo como una fiesta donde los números se mezclan y relacionan, extrayendo la esencia de lo que hace que un gato sea un gato o un coche sea un coche. A este proceso lo llamamos extracción de características.
¡Más números! Números significativos. En tareas de detección, te dicen exactamente dónde están las cosas en tu imagen y qué es probablemente esa cosa. "¡Oye, hay un 95% de probabilidad de que eso sea un perro en las coordenadas (x, y)!" Llamamos a este proceso mágico inferencia.
Ahora, antes de que nuestros modelos puedan hacer su magia, necesitan ir a la escuela; necesitan ser entrenados. La parte del entrenamiento es donde las cosas se ponen intensas.
Durante el entrenamiento, cada vez que presentamos una imagen a la red, no solo obtenemos una respuesta. Estamos haciendo dos cosas extremadamente pesadas. Primero, calculamos cuánto se equivocó la red (lo llamamos pérdida, básicamente la distancia al centro de la diana). Segundo, y esta es la parte importante, actualizamos cada número (o peso) de la red basándonos en esa pérdida. Imagínalo como ajustar miles de pequeños diales a la vez, donde cada ajuste se calcula para que la red sea más precisa cada vez.
Esencialmente, estamos entrenando la red mediante corrección: cada error le enseña lo que NO debe hacer, y ajustamos todos esos pesos para que, cuando vea una imagen similar de nuevo, se acerque más a la respuesta correcta. En esencia, la red aprende siendo empujada en la dirección correcta, error tras error, hasta que empieza a acertar en las predicciones.
¿De cuántos números estamos hablando? Bueno, nuestro pequeño y simpático YOLO11n tiene unos pocos millones de parámetros. ¿Pero YOLO11x? ¡Ese peso pesado tiene más de 50 millones de parámetros! Más parámetros significan más detalles que puedes codificar, como la diferencia entre dibujar con ceras frente a tener la paleta completa de un artista.
Durante la inferencia, este número de parámetros se vuelve crucial. Ejecutar una red de 3 millones de parámetros es como trotar alrededor de la manzana. ¿Ejecutar una red de 50 millones de parámetros? Eso es más como correr un maratón mientras haces malabares con antorchas encendidas.
Entonces, ¿QUÉ ES exactamente la computación? ¿Cómo sucede realmente todo este procesamiento de números? ¿Cómo lo hacemos más rápido? ¿Y qué significa siquiera "optimizar la computación"?
Link to this sectionCómo los chips hacen realmente los cálculos#
La computación ocurre con chips. Estos pequeños cuadrados de silicio son básicamente los castillos de arena mejor organizados del universo. Cada operación que realiza tu computadora, cada suma, cada comparación, cada "si esto entonces aquello", está tallada físicamente en el silicio. Hay circuitos físicos reales en áreas específicas del chip dedicadas a sumar números y otros para operaciones lógicas. Es como tener una pequeña ciudad donde diferentes barrios se especializan en diferentes tipos de matemáticas.
Esto probablemente suene extraño, incluso si eres un científico de la computación. Eso es porque hemos pasado los últimos 40 años construyendo capa tras capa de abstracción, como una lasaña tecnológica que se ha vuelto tan alta que ya ni siquiera podemos ver la placa inferior. Hemos simplificado las cosas tanto que la mayoría de los programadores hoy en día no tienen idea de cómo ocurre realmente la computación en el silicio. ¡No por su propia culpa, sino por diseño!
Despeguemos estas capas. Toma este código de Python tan sencillo:
x = 1
if x == 1:
y = x + 1Estamos creando una variable x, estableciéndola en 1, y si x es igual a 1 (spoiler: lo es), creamos y con el valor de x más 1. Tres líneas. Fácil.
Pero aquí es donde se pone interesante. Entre esas tres líneas inocentes y los electrones reales moviéndose a través del silicio, hay AL MENOS cuatro capas masivas de traducción ocurriendo (en realidad hay más, pero nuestra Gerente de Contenido Digital dice que mi número de palabras ya le está dando ansiedad). Déjame guiarte a través de este viaje alucinante:
Capa 1: Python → Bytecode Primero, Python lee tu código y lo compila en algo llamado bytecode, un lenguaje intermedio que es más fácil de digerir para las computadoras pero que te haría sangrar los ojos si intentaras leerlo.
Capa 2: Bytecode → Código máquina El intérprete de Python (como CPython) toma ese bytecode y lo traduce a código máquina, las instrucciones reales que entiende tu procesador. Aquí es donde tu elegante "if x == 1" se convierte en algo como "CARGAR registro, COMPARAR registro, SALTAR si la bandera de cero está establecida".
Capa 3: Código máquina → Microcódigo ¡Giro argumental! Los procesadores modernos ni siquiera ejecutan el código máquina directamente. Lo desglosan aún más en microcódigo, operaciones aún más pequeñas que los componentes internos del chip pueden manejar. Tu única instrucción "SUMAR" podría convertirse en múltiples microoperaciones.
Capa 4: Microcódigo → Electrónica física Finalmente, llegamos al silicio. Esas microoperaciones activan señales eléctricas reales que fluyen a través de transistores. Miles de millones de pequeños interruptores se encienden y apagan, los electrones bailan a través de vías cuidadosamente diseñadas y, de alguna manera, mágicamente, 1 + 1 se convierte en 2.
Cada capa existe para ocultar la insana complejidad de la capa inferior. Es como esas muñecas rusas, excepto que cada muñeca habla un idioma completamente diferente y la muñeca más pequeña está literalmente hecha de rayos atrapados en arena.
La ironía? Esas tres líneas de Python probablemente activan MILLONES de interruptores de transistores. Pero gracias a estas abstracciones, no necesitas pensar en nada de eso. Simplemente escribes "y = x + 1" y confías en que en algún lugar, en lo profundo del silicio, ocurre la magia.
Link to this sectionLa arquitectura#
Cada operación está implementada físicamente en el silicio, y DÓNDE ocurre en el chip depende totalmente de la topología del chip. Es como la planificación urbana, pero para electrones. El sumador vive aquí, el multiplicador vive allá, y todos necesitan comunicarse entre sí de manera eficiente.
Tenemos cientos de chips diferentes en el mercado, cada uno diseñado para propósitos distintos. ¿Qué cambia entre ellos? La topología, cómo se posicionan e implementan las operaciones en el dominio físico. A esto lo llamamos arquitectura, y vaya que tenemos muchas de ellas:
- x86 (Intel y AMD) - El abuelo de la computación de escritorio, complejo pero potente
- ARM - Potencia tu teléfono y cada vez más tu portátil, diseñado para la eficiencia
- RISC-V - El rebelde de código abierto, ganando terreno en todas partes
- PowerPC - La bestia de IBM, todavía funcionando en consolas de juegos y servidores
- MIPS - El favorito académico, simple y elegante
- SPARC - La contribución de Sun Microsystems (ahora de Oracle) a la computación de alto rendimiento
- Arquitecturas de GPU (núcleos CUDA de NVIDIA, RDNA de AMD) - Monstruos de procesamiento paralelo
Cada arquitectura no solo organiza sus transistores de manera diferente, sino que también habla un idioma distinto. Las abstracciones que usamos para enviar instrucciones a estas máquinas son completamente diferentes. Es como tener que escribir instrucciones de viaje para alguien, pero dependiendo de su coche, es posible que necesites escribir en francés, mandarín o mediante danza interpretativa.
Link to this sectionEl latido del silicio#
El combustible de nuestros chips son los electrones, electricidad que fluye hacia el chip, proporcionando la energía para la computación. Pero la energía por sí sola no es suficiente. Para que un chip funcione realmente, para mover datos a través de su intrincada topología, todo depende de un componente crítico: el reloj. Esto es lo que hace que los electrones fluyan a través de caminos específicos en momentos específicos. Sin él, solo tendrías silicio alimentado que no hace nada.
Imagina intentar coordinar una actuación masiva donde miles de millones de componentes necesitan moverse en perfecta sincronía. Sin un ritmo, sería un caos. Eso es exactamente lo que hace el reloj para tu procesador. Es un cristal que vibra a un ritmo increíblemente constante, enviando pulsos eléctricos miles de millones de veces por segundo.
Cuando escuchas "procesador de 3.5 GHz", ese GHz (gigahercio) es la velocidad del reloj, 3.500 millones de latidos por segundo. Cada latido se llama ciclo de reloj, y es la unidad fundamental de tiempo en la computación.
NADA sucede entre los ciclos de reloj. Toda la computadora se congela, esperando el siguiente latido. Es como el juego más extremo de luz roja, luz verde del universo. En cada "luz verde" (pulso de reloj):
- Los datos se mueven entre los componentes
- Los cálculos se ejecutan
- Se toman decisiones lógicas
- La memoria se lee o se escribe
Algunas operaciones toman un ciclo (una suma simple), mientras que otras toman muchos ciclos (una división o buscar datos de la RAM). Está coreografiado con precisión, miles de millones de componentes realizando sus operaciones específicas, todos sincronizados con este ritmo incesante.
Puedes hacer overclocking en tu procesador haciendo que el cristal vibre más rápido; todo sucede más rápido, pero también genera más calor y se vuelve menos estable. Si lo fuerzas demasiado, tu computadora falla porque los electrones literalmente no pueden seguir el ritmo.
Antiguamente, estas operaciones se implementaban con máquinas del tamaño de habitaciones. Pero los componentes que hacen todo este cálculo son notablemente simples: son solo interruptores. Interruptores de encendido/apagado.
Conecta suficientes de estos interruptores en el patrón correcto y tendrás computación. Toda la revolución digital se reduce a una sofisticada disposición de interruptores.
Esta simplicidad significa que si tienes interruptores, cualquier interruptor, puedes construir una computadora. La gente ha construido computadoras funcionales con tuberías de agua y válvulas, dominós, bloques de LEGO, canicas e incluso con redstone en Minecraft.
Los principios no han cambiado desde la década de 1940. Solo nos hemos vuelto increíblemente buenos haciendo interruptores extremadamente pequeños. Tu teléfono tiene más potencia computacional que todas las computadoras que enviaron a los humanos a la luna, y cabe en tu bolsillo porque descubrimos cómo hacer interruptores a escala atómica.
Cuando ejecutamos redes neuronales con millones de parámetros, estamos activando estos pequeños interruptores miles de millones de veces por segundo, todo perfectamente sincronizado con ese latido de cristal. Cada actualización de peso, cada multiplicación de matrices, cada función de activación, todos marchan al ritmo del reloj.
¡No es de extrañar que entrenar modelos haga que tu computadora suene como si estuviera tratando de despegar!
Link to this sectionHaciendo que las Redes Neuronales vayan BRRRRR#
Muy bien, tenemos estos chips con miles de millones de interruptores bailando al ritmo de un cristal, y queremos ejecutar redes neuronales con millones de parámetros en ellos. Debería ser fácil, ¿verdad? ¡Simplemente lanza los números al chip y deja que corra!
Ejecutar redes neuronales rápido es como intentar cocinar una comida de cinco platos en una cocina donde el frigorífico está a tres manzanas de distancia, solo tienes una sartén y cada ingrediente pesa 500 libras. El cálculo en sí no es el mayor problema; es todo lo demás.
Link to this sectionEl desajuste de la arquitectura#
La mayoría de los chips fueron diseñados para ejecutar Microsoft Word, no redes neuronales. Tu CPU fue construida pensando que pasaría su vida ejecutando declaraciones if, bucles y ocasionalmente calculando tus impuestos (el único cálculo que incluso las supercomputadoras encuentran emocionalmente agotador). Está optimizada para operaciones secuenciales: haz esto, luego aquello, luego lo otro.
Pero las redes neuronales son completamente diferentes. Quieren hacerlo TODO A LA VEZ. Durante el entrenamiento, estás actualizando millones de pesos basándote en lo equivocadas que estaban tus predicciones. Durante la inferencia (usando realmente el modelo entrenado), estás empujando datos a través de millones de cálculos simultáneamente. Imagina que necesitas multiplicar un millón de números por otro millón de números. Tu CPU, bendito sea su corazón, quiere hacerlos uno por uno, como un contable muy rápido pero muy metódico.
Esta es la razón por la que las GPU se convirtieron en la columna vertebral de la computación de IA. Las GPU fueron diseñadas para videojuegos, donde necesitas calcular el color de millones de píxeles simultáneamente. Resulta que calcular los colores de los píxeles y hacer las matemáticas de las redes neuronales son sorprendentemente similares: ambos implican realizar la misma operación en cantidades masivas de datos en paralelo.
Pero incluso las GPU no son perfectas para las redes neuronales. Por eso las empresas ahora están construyendo chips de IA especializados (TPU, NPU y cualquier otro acrónimo que termine en PU). Estos chips están diseñados desde cero con un trabajo: hacer que las redes neuronales vayan rápido. Son como contratar a un chef que solo sabe cocinar un plato, pero lo cocina a una velocidad sobrehumana. Mientras que tu CPU lucha a través de operaciones matriciales de forma secuencial y tu GPU las maneja bastante bien en paralelo, estos chips especializados se comen las matrices para el desayuno, el almuerzo y la cena.
Link to this sectionEl muro de la memoria (O: Por qué mover Bits es más difícil que las matemáticas)#
En la computación moderna de redes neuronales, dedicamos más tiempo y energía a MOVER datos que a COMPUTAR realmente con ellos.
Piensa en tu chip de computadora como un matemático brillante que trabaja a la velocidad del rayo, pero todos sus libros de referencia están guardados en edificios diferentes por toda la ciudad. Puede resolver cualquier ecuación al instante, pero primero necesita conseguir los números, y ese viaje dura una eternidad.
Tu chip puede multiplicar dos números en un ciclo de reloj (recuerda, ese es uno de esos miles de millones de latidos por segundo). ¡A la velocidad del rayo! ¿Pero obtener esos números de la memoria al chip? Eso podría tomar CIENTOS de ciclos. Es como si tu matemático pudiera resolver un problema en un segundo, pero necesitara cinco minutos para caminar a la biblioteca y volver.
La razón es la distancia (y el espacio). La electricidad se mueve rápido, pero no infinitamente rápido. Cuanto más lejos tiene que viajar el dato en el chip, más tiempo tarda. Los diseñadores de computadoras lo resolvieron creando una jerarquía de memoria, como tener múltiples ubicaciones de almacenamiento a diferentes distancias:
- Registros (integrados directamente en las unidades de cómputo): El escritorio de tu matemático. ¡Acceso instantáneo! Pero es pequeño, solo puedes guardar unos 32 números aquí. Es como tener notas adhesivas justo frente a ti.
- Caché L1 (a micrómetros de distancia): La estantería en la oficina. Tarda 3-4 ciclos en agarrar algo. Aquí, puedes guardar unos pocos miles de números.
- Caché L2 (a milímetros de distancia): El archivador en el pasillo. Tarda 10-15 ciclos y puede guardar unos pocos millones de números.
- Caché L3 (a través del chip): El almacén de abajo. Tarda 30-50 ciclos, albergando decenas de millones de números.
- RAM (en un chip completamente diferente): El almacén al otro lado de la ciudad. Tarda 100-300 ciclos. Aquí es donde viven tus miles de millones de números.
- SSD/Disco duro (conectado por cables): Otra ciudad completamente distinta. Tarda millones de ciclos. Almacenamiento masivo, velocidad glacial.
Las estructuras exactas varían, el chip de tu teléfono podría saltarse la caché L3, mientras que una CPU de servidor podría tener cantidades masivas de ella. El principio, sin embargo, sigue siendo el mismo: la memoria más cercana es más rápida pero más pequeña.
Ahora aquí es donde se vuelve doloroso para las redes neuronales. Imagina que tu modelo Ultralytics YOLO tiene 50 millones de parámetros (ChatGPT tiene miles de millones, por cierto). Son 50 millones de números que necesitan viajar de la memoria a las unidades de cómputo y volver. Incluso si cada número es de solo 4 bytes, son 200 megabytes de datos que necesitan moverse a través de tu sistema.
El chip podría procesar cada número en un solo ciclo, pero si tarda 100 ciclos en recuperar ese número de la RAM, estás dedicando el 99% de tu tiempo a esperar la entrega. Es como tener un coche de carreras de Fórmula 1 en un atasco. Toda esa potencia computacional, sentada ahí, esperando a que lleguen los datos.
Aquí está la idea crucial: este es EL cuello de botella en la computación moderna. Se llama cuello de botella de von Neumann. Hacer que los chips sean más rápidos en matemáticas es relativamente fácil. Hacer que la memoria sea más rápida está alcanzando límites físicos. Es por eso que casi TODA la optimización del rendimiento en IA ocurre a nivel de memoria. Cuando los ingenieros aceleran las redes neuronales, rara vez hacen que las matemáticas sean más rápidas; están encontrando formas inteligentes de mover menos datos, almacenarlos mejor o acceder a ellos de manera más inteligente.
Los chips de IA modernos no solo se centran en la velocidad de cómputo; se obsesionan con el ancho de banda de la memoria y las estrategias de movimiento de datos. Precargan datos, reutilizan valores que ya están en la caché y organizan los cálculos para minimizar los viajes a la memoria. Los ganadores en la carrera del hardware de IA no son los que tienen las calculadoras más rápidas; son los que descubrieron cómo mantener esas calculadoras alimentadas con datos. Todo el juego consiste en optimizar los patrones de acceso a la memoria.
Cada vez que mueves un bit de datos, quemas energía. No mucha, estamos hablando de picojulios, pero cuando mueves terabytes por segundo, ¡se suma RÁPIDO! De hecho, ¡mover datos 1mm a través de un chip consume más energía que realizar el cálculo real!
Por eso tu portátil suena como un motor a reacción cuando entrena redes neuronales. No son las matemáticas las que generan calor; es el movimiento de datos. Cada actualización de parámetros, cada cálculo de gradiente, cada paso hacia adelante está calentando literalmente tu habitación.
Los aceleradores de IA modernos son básicamente ejercicios de termodinámica. ¿Cuánta computación podemos empaquetar antes de que el chip se derrita? ¿Qué tan rápido podemos alejar el calor? Es como hacer overclocking, pero el reloj está siempre a 11, y solo intentamos no iniciar un incendio.
Link to this sectionLa solución? Diseño consciente de la arquitectura#
Las redes neuronales más rápidas no son necesariamente las más inteligentes, son las diseñadas pensando en los chips. Ellas:
- Mantienen los datos locales tanto como sea posible
- Reutilizan los cálculos obsesivamente
- Se alinean perfectamente con las capacidades del hardware
- Minimizan el movimiento de memoria a toda costa
Es como la diferencia entre una receta que dice "usa ingredientes de tu tienda local" frente a una que requiere que importes especias del Tíbet, queso de Francia y agua de la Antártida. Ambas podrían saber bien, pero una es definitivamente más práctica.
Y es por esto que hacer que las redes neuronales vayan rápido es una forma de arte. No es suficiente tener buenas matemáticas; necesitas entender el hardware, respetar la jerarquía de memoria y bailar perfectamente con la arquitectura.
Bienvenido al mundo donde la ciencia de la computación se encuentra con la física, se encuentra con la ingeniería, se encuentra con la magia pura. Donde mover un número cuesta más que calcular con él. Donde el paralelo es rápido, pero la sincronización es la muerte. Donde tu mayor enemigo no es la complejidad, es la distancia.
Link to this sectionCómo hacemos que YOLO sea más rápido#
Cuando entrenas un modelo YOLO, obtienes una red neuronal que funciona maravillosamente en tu configuración de entrenamiento. Pero aquí está la cuestión: tu GPU de juegos, tu iPhone y ese pequeño chip en una cámara de seguridad hablan idiomas completamente diferentes. Tienen diferentes fortalezas, diferentes debilidades y ideas muy diferentes sobre cómo procesar los datos.
Piénsalo de esta manera: una GPU tiene miles de núcleos que pueden trabajar todos simultáneamente; está construida para el procesamiento paralelo. Mientras tanto, un chip móvil podría tener circuitos especiales diseñados específicamente para operaciones de IA, pero solo puede manejar ciertos tipos de matemáticas. ¿Y ese dispositivo periférico en la cámara de tu timbre? Está intentando ejecutar IA con un presupuesto de energía menor que el de una bombilla LED.
En Ultralytics, admitimos más de una docena de formatos de exportación diferentes porque cada uno está optimizado para diferentes hardware. No se trata de tener demasiadas opciones. Se trata de tener la opción correcta para TUS necesidades específicas.
Link to this sectionFusionar operaciones: Haciendo más con menos#
En el modelo original YOLO, muchas operaciones ocurren en secuencia. Por ejemplo, podríamos hacer una convolución, luego normalizar los resultados, luego aplicar una función de activación. Esos son tres pasos separados, cada uno requiriendo sus propias lecturas y escrituras de memoria.
Pero aquí está la parte inteligente: podemos combinar estas operaciones en un solo paso. Cuando exportamos YOLO para su implementación, fusionamos estas operaciones. En lugar de:
- Calcular convolución → Guardar en memoria
- Cargar desde memoria → Normalizar → Guardar en memoria
- Cargar desde memoria → Aplicar activación → Guardar en memoria
Hacemos:
- Calcular convolución + normalización + activación → Guardar en memoria
Para un modelo típico YOLO que procesa una imagen de 640×640, este simple truco elimina gigabytes de transferencias de memoria innecesarias. En un teléfono móvil, esa es la diferencia entre una detección fluida en tiempo real y un retraso frustrante.
Link to this sectionUsando números más pequeños: La magia de la cuantificación#
YOLO no necesita realmente números súper precisos para detectar objetos con precisión. Durante el entrenamiento, usamos 32 bits para representar cada peso; eso es como usar una calculadora científica para medir los ingredientes de un sándwich. ¿Para la implementación real? 8 bits funcionan perfectamente bien.
Esto se llama cuantización y es una de nuestras técnicas de optimización más potentes. Al utilizar números más pequeños:
- El modelo se reduce un 75% (de 200MB a 50MB para Ultralytics YOLO11x)
- Funciona entre 2 y 4 veces más rápido en la mayoría de los dispositivos
- Consume mucha menos energía (la batería de tu teléfono te lo agradecerá)
No todas las capas en YOLO son igual de sensibles a esta reducción. ¿Las capas iniciales que detectan bordes y formas básicas? Son robustas: podemos usar números de 8 bits sin ningún problema. Las capas de detección finales que determinan "¿es un gato o un perro?" necesitan un poco más de precisión. Por eso, ajustamos la precisión capa por capa, usando los bits justos para mantener la precisión mientras maximizamos la velocidad.
Hemos descubierto que con una cuantización cuidadosa, Ultralytics YOLO mantiene el 99,5% de su precisión original mientras funciona 3 veces más rápido en teléfonos. Esa es la diferencia entre un modelo de investigación y algo que realmente puedes usar en el mundo real.
Link to this sectionElegir el mejor algoritmo#
Existen docenas de formas diferentes de realizar la misma operación matemática. Una convolución simple (la operación central en YOLO) puede calcularse mediante algoritmos completamente distintos, y la mejor elección depende de tu hardware específico y del tamaño de entrada.
Cuando exportamos YOLO, nuestro framework de optimización prueba diferentes algoritmos y elige el más rápido para tu caso concreto. Es como tener varias rutas para llegar al mismo destino y elegir según las condiciones actuales del tráfico. En una GPU, podemos usar un algoritmo que procese muchos píxeles simultáneamente. En una CPU, podemos usar uno optimizado para el procesamiento secuencial. Las matemáticas son las mismas, pero la estrategia de ejecución es completamente diferente.
Link to this sectionMemoria: El cuello de botella oculto#
¿Recuerdas que hablamos de que la memoria es el verdadero cuello de botella en la informática moderna? Esto es especialmente cierto para YOLO. El modelo puede tener 50 millones de parámetros y, durante la inferencia, genera gigabytes de resultados intermedios. Mover todos estos datos suele ser más lento que el cálculo en sí.
Usamos varios trucos para minimizar el movimiento de memoria:
Programación inteligente: organizamos las operaciones para que los datos se utilicen inmediatamente mientras aún están en la memoria caché rápida. Para la red de pirámide de características de YOLO, esto reduce el tráfico de memoria en un 40%.
Tiling (Mosaico): en lugar de procesar una imagen completa de una vez, la dividimos en mosaicos más pequeños que quepan en la caché. Esto significa que el procesador puede trabajar con memoria local rápida en lugar de obtener datos constantemente de la memoria principal, que es más lenta.
Reutilización de buffers: en lugar de crear constantemente memoria nueva para resultados intermedios, reutilizamos los mismos buffers de memoria. Es increíblemente eficiente; todo el backbone de YOLO puede ejecutarse con solo un conjunto de buffers reutilizables.
Link to this sectionPoda (Pruning): Menos es más#
Aquí hay un dato sorprendente: los modelos YOLO suelen estar sobrediseñados. Podemos eliminar el 30% de los canales en muchas capas sin prácticamente impacto en la precisión. Esto no solo hace que el modelo sea más pequeño, sino que también lo hace más rápido, porque hay literalmente menos cálculos que realizar.
El proceso es elegante: analizamos qué partes de la red contribuyen menos a los resultados de detección finales, las eliminamos y luego ajustamos el modelo para compensarlo. Un modelo YOLO11m podado puede ser un 30% más rápido manteniendo el 99% de su precisión original. En dispositivos que funcionan con batería, esta ganancia de eficiencia puede suponer horas extra de funcionamiento.
Link to this sectionAceleración de hardware: Aprovechando los puntos fuertes de cada chip#
Diferentes procesadores son buenos en diferentes cosas, y las diferencias de rendimiento son asombrosas. El mismo modelo YOLO11n tarda:
- 45 milisegundos por frame en una CPU Intel moderna
- 4 milisegundos en una GPU NVIDIA RTX
- 22 milisegundos en un procesador de teléfono de gama alta
- 15 milisegundos en una edge TPU de Google Coral
Estas no son solo diferencias de velocidad debidas a las frecuencias de reloj, sino que reflejan diferencias arquitectónicas fundamentales. Las GPU tienen miles de núcleos que funcionan en paralelo, perfectos para las convoluciones de YOLO. Las NPU móviles tienen circuitos especializados diseñados específicamente para redes neuronales. Las CPU son un todoterreno, flexibles pero no especializadas.
La clave de la optimización es hacer coincidir las operaciones de YOLO con lo que mejor hace cada chip. A una GPU le encanta realizar la misma operación en muchos datos simultáneamente. Una NPU móvil puede ser que solo soporte ciertas operaciones, pero las ejecuta de forma increíblemente eficiente. Una edge TPU solo trabaja con números enteros de 8 bits pero logra una velocidad notable dentro de esa restricción.
Link to this sectionLa magia de la compilación#
Cuando exportas un modelo YOLO, sucede algo extraordinario entre bastidores. No solo convertimos el formato de archivo, sino que compilamos el modelo específicamente para tu hardware de destino. Esto es como la diferencia entre Google Translate y un hablante nativo. El proceso de compilación:
- Analiza tu modelo para comprender su estructura y requisitos
- Considera las capacidades de tu hardware: en qué es bueno y con qué tiene dificultades
- Genera código optimizado que habla el lenguaje nativo de tu hardware
El compilador puede reorganizar las operaciones para utilizar mejor la caché de tu procesador, seleccionar instrucciones especializadas que admite tu chip o incluso usar aprendizaje automático para encontrar la mejor estrategia de optimización. Sí, estamos usando IA para optimizar la IA: ¡el futuro ya está aquí!
Este paso de compilación puede marcar una diferencia de 10 veces en el rendimiento. El mismo modelo YOLO podría arrastrarse con código genérico, pero volar con instrucciones optimizadas adecuadamente.
Link to this sectionDespliegue en el borde (edge) en el mundo real#
Hablemos de lo que sucede cuando YOLO se encuentra con el mundo real, específicamente, el desafiante mundo de los dispositivos edge. Imagina una cámara de seguridad que necesita ejecutar YOLO las 24 horas del día, los 7 días de la semana para la detección de objetos. Se enfrenta a restricciones brutales:
- Memoria: Quizás solo de 512MB a 2GB de RAM en total
- Energía: A menudo solo de 2 a 5 vatios (menos que un cargador de teléfono)
- Refrigeración: Sin ventiladores, solo disipación de calor pasiva
- Fiabilidad: Debe ejecutarse continuamente sin bloquearse
Esto es lo que logra la optimización en la práctica. Una cámara de seguridad ejecutando YOLO11s:
- Modelo original: 15 vatios, se calienta a 85°C, alcanza 20 FPS
- Optimizado con cuantización y poda: 3 vatios, temperatura cómoda de 45°C, alcanza 25 FPS
¡Redujimos el consumo de energía en un 80% mientras mejorábamos el rendimiento! Esa es la diferencia entre un dispositivo que se sobrecalienta y agota las baterías frente a uno que funciona de forma fiable durante años.
La clave es elegir las compensaciones adecuadas. En los dispositivos edge, solemos:
- Usar cuantización INT8 (menos precisión, mucha menos energía)
- Procesar menos frames cuando la actividad es baja
- Distribuir el trabajo entre diferentes procesadores para gestionar el calor
- Mantener los modelos lo suficientemente pequeños como para que quepan completamente en la memoria rápida
Link to this sectionEl proceso de optimización#
En Ultralytics, seguimos un enfoque sistemático para la optimización. Primero, perfilamos el modelo para entender dónde se emplea realmente el tiempo. A menudo, los cuellos de botella no están donde esperarías. Tal vez el 80% del tiempo se gasta en solo unas pocas capas, o las transferencias de memoria dominan el tiempo de cálculo.
A continuación, aplicamos optimizaciones de forma iterativa:
- Empezar con los mayores cuellos de botella
- Aplicar una optimización a la vez
- Medir tanto la mejora de velocidad como el impacto en la precisión
- Mantener las optimizaciones que proporcionan buenas compensaciones
- Repetir hasta alcanzar nuestros objetivos
Por ejemplo, con el despliegue de YOLO11m en un teléfono:
- Línea base: 200ms por frame, modelo de 200MB
- Después de la cuantización: 80ms por frame, modelo de 50MB
- Después de la poda: 60ms por frame, modelo de 35MB
- Después de la fusión de operaciones: 45ms por frame, modelo de 35MB
Cada paso mejora el rendimiento mientras se mantiene más del 99% de la precisión original. ¿El resultado? Detección de objetos en tiempo real en un dispositivo que cabe en tu bolsillo.
Link to this sectionEl futuro: Computación heterogénea#
Los dispositivos modernos son cada vez más inteligentes al utilizar múltiples procesadores juntos. Tu teléfono no solo tiene un procesador, tiene varios, cada uno especializado en diferentes tareas:
- El sensor de la cámara tiene un ISP (procesador de señal de imagen) para el preprocesamiento
- La NPU (unidad de procesamiento neuronal) ejecuta la inferencia de YOLO
- La CPU gestiona la lógica compleja y la coordinación
- La GPU renderiza los resultados en la pantalla
El futuro de la optimización de YOLO consiste en dividir inteligentemente el modelo entre estos procesadores. Quizás la NPU gestione las convoluciones principales, la CPU haga la lógica de detección final y la GPU visualice los resultados. Cada procesador hace lo que mejor sabe hacer, creando una tubería más eficiente de lo que cualquier procesador individual podría lograr.
Estamos desarrollando algoritmos de partición inteligentes que descubren automáticamente la mejor forma de dividir YOLO entre los procesadores disponibles, teniendo en cuenta no solo sus capacidades, sino también el coste de mover datos entre ellos.
Link to this sectionEn resumen#
Optimizar modelos YOLO no es solo convertir formatos de archivo; es transformar IA de vanguardia en algo que realmente funcione en el mundo real. A través de técnicas como la cuantización (usando números más pequeños), la poda (eliminando partes innecesarias), la fusión de operaciones (combinando pasos) y la gestión inteligente de la memoria, logramos mejoras de rendimiento de 10 a 100 veces mientras mantenemos la precisión.
¿Lo sorprendente? No existe una "mejor" optimización universal. Un servidor en la nube con potencia ilimitada necesita optimizaciones diferentes a las de un dron que funciona con batería. Un teléfono con un chip de IA dedicado necesita un tratamiento diferente al de una Raspberry Pi. Es por eso que Ultralytics ofrece tantas opciones de exportación: cada una está optimizada para diferentes escenarios.
Cada optimización que hemos discutido tiene un objetivo: hacer que la visión por ordenador sea accesible en todas partes. Ya sea que estés construyendo un timbre inteligente, una aplicación de drones o un servicio en la nube masivo, proporcionamos las herramientas para que YOLO funcione dentro de tus restricciones.
Cuando exportas un modelo YOLO con Ultralytics, no solo estás guardando un archivo. Estás aprovechando años de investigación para hacer prácticos los modelos de redes neuronales. Estás transformando un modelo de IA de última generación en algo que puede ejecutarse en hardware real, con restricciones reales, resolviendo problemas reales.
Eso es lo que hacemos en Ultralytics. Cerramos la brecha entre la investigación en IA y el despliegue práctico. Hacemos que la visión por ordenador funcione en todas partes, porque el futuro de la IA no es solo tener los mejores modelos, sino hacer que esos modelos sean útiles en el mundo real.






