我们在 Ultralytics 如何让 YOLO 模型在你的常用芯片上运行更快
了解 Ultralytics 如何在 CPU、GPU 和边缘设备上优化 YOLO 模型以提高速度。我们将解释芯片、内存以及量化、融合和剪枝等智能技术。

在 Ultralytics,我们制作计算机视觉模型;简单来说,我们是在教会计算机如何“看”!你可以把这些模型想象成巨大的数学配方。它们由各种运算(我们称之为层)和海量的数字(我们称之为权重)组成。
我们的 Ultralytics YOLO 模型将图像处理为它们真实的本质:数字数组!每个像素实际上只是颜色值,即构成图像的每一个点的红、绿、蓝(即 RGB)分量。我们称这些数字数组为“张量”,因为这听起来比“多维矩阵”酷得多,而“多维矩阵”又比“堆叠在数字上的数字再堆叠在数字上”酷得多。
当你将图像输入我们的模型时,它会经历一场穿越网络的史诗之旅。想象你的张量在层与层之间冲浪,以尽可能优美的方式被转换、卷积和进行数学重塑。把它想象成一场数字混合交流的舞会,提取出猫之所以是猫或车之所以是车的本质特征。我们称这个过程为特征提取。
最后出来的是什么?更多的数字!但这些是有意义的数字。在检测任务中,它们会告诉你物体在图像中的确切位置以及它可能是什么。“嘿,有 95% 的可能性那是坐标 (x, y) 处的一只狗!”我们称这个神奇的过程为推理。
现在,在我们的模型施展魔法之前,它们需要先上学;它们需要被训练。训练部分才是最紧张的环节。
在训练过程中,每次我们向网络输入图像时,不仅仅是得到一个答案。我们还做了两项超负荷的工作。首先,我们计算网络的误差(我们称之为 loss,本质上是距离目标的偏差)。其次,也是最关键的一步,我们根据这个 loss 更新网络中的每一个数字(或权重)。你可以把它想象成同时调节数千个微小的旋钮,每一次调整都是经过计算的,旨在让网络变得更加精准。
我们实际上是通过纠错来训练网络:每一次错误都会教会它“不该做什么”,我们会调整所有这些权重,以便当它再次看到类似的图像时,能更接近正确答案。本质上,网络通过一次又一次的错误指引,在不断地修正中学习,直到它开始准确地做出预测。
我们说的数字规模有多大呢?我们小巧可爱的 YOLO11n 就有几百万个参数。但 YOLO11x 呢?那个大家伙拥有超过 5000 万个参数!更多的参数意味着你可以编码更多的细节,就像是用蜡笔涂鸦与使用完整艺术家调色盘之间的区别。
在推理过程中,这个参数量变得至关重要。运行一个 300 万参数的网络就像在街区慢跑。运行一个 5000 万参数的网络呢?那更像是边玩火把边跑马拉松。
那么,计算到底是什么?这一切数字运算是如何真正发生的?我们如何让它变快?以及“优化计算”到底意味着什么?
Link to this section芯片是如何进行数学运算的#
计算通过芯片发生。这些小块的硅片基本上是宇宙中最有组织的沙堡。你的计算机执行的每一个操作,每一次加法,每一次比较,每一个“如果这样就那样”,都在物理层面上被刻在了硅片上。芯片的特定区域内有实际的物理电路专门用于数字加法,另一些则用于逻辑运算。这就像拥有一座小城市,不同的社区专门负责不同类型的数学运算。
这听起来可能很离奇,即使你是计算机科学家。这是因为过去 40 年里我们一直在堆叠抽象层,就像一块技术千层饼,高到我们甚至看不到底部的盘子了。我们把事情简化得太多,以至于今天大多数程序员都不知道计算在硅片上是如何真正发生的。这不是他们的错,而是刻意设计的!
让我们揭开这些层面。看看这段极其简单的 Python 代码:
x = 1
if x == 1:
y = x + 1我们定义了一个变量 x,将其设为 1,如果 x 等于 1(剧透:确实等于),我们创建 y,其值为 x 加 1。三行代码。很简单。
但有趣的部分来了。在那三行无辜的代码和穿过硅片的真实电子之间,至少发生了四层庞大的翻译过程(实际上还有更多,但我们的数字内容经理说我的字数已经让她感到焦虑了)。让我带你走过这趟令人难以置信的旅程:
第 1 层:Python → 字节码 首先,Python 读取你的代码并将其编译成所谓的字节码,这是一种计算机更容易消化但如果你试着去读会让你眼睛出血的中间语言。
第 2 层:字节码 → 机器码 Python 解释器(如 CPython)获取该字节码并将其翻译成机器码,即你的处理器能理解的实际指令。这就是你优雅的“if x == 1”变成类似于“加载寄存器,比较寄存器,如果零标志位设置则跳转”的过程。
第 3 层:机器码 → 微代码 剧情反转!现代处理器甚至不会直接执行机器码。它们将其进一步分解为微代码,即芯片内部组件可以处理的更微小的操作。你的单条“ADD”指令可能会变成多个微操作。
第 4 层:微代码 → 物理电子 最后,我们触及了硅片。那些微操作触发了流过晶体管的实际电信号。数十亿个微小的开关切换开和关,电子在精心设计的路径中起舞,不知何故,神奇地,1 + 1 变成了 2。
每一层都存在是为了隐藏其下层极其复杂的逻辑。这就像那些俄罗斯套娃,只是每个娃娃说的语言都完全不同,而最小的娃娃实际上是由困在沙子里的闪电制成的。
讽刺的是?那三行 Python 代码可能会触发数百万次晶体管开关。但多亏了这些抽象,你不需要考虑这些。你只需写下“y = x + 1”,并相信在深层的硅片中,魔法会发生。
Link to this section架构#
每一个操作都在硅片中物理实现,它在芯片上“哪里”发生,完全取决于芯片的拓扑结构。这就像城市规划,但对象是电子。加法器住在这,乘法器住在那里,它们都需要高效地进行交流。
市场上我们有数百种不同的芯片,每种都有不同的设计目的。它们之间有什么变化?是拓扑结构,以及操作如何在物理领域中定位和实现。这就是我们所说的架构,天哪,我们有太多这样的架构了:
- x86 (Intel 和 AMD) - 桌面计算的鼻祖,复杂但强大
- ARM - 为你的手机和越来越多的笔记本电脑提供动力,专为效率而设计
- RISC-V - 开源反叛者,在各地获得关注
- PowerPC - IBM 的猛兽,仍在游戏机和服务器中运行
- MIPS - 学术界的宠儿,简单且优雅
- SPARC - Sun Microsystems (现为 Oracle) 对高性能计算的贡献
- GPU 架构 (NVIDIA 的 CUDA 核心, AMD 的 RDNA) - 并行处理怪兽
每种架构不仅以不同的方式排列晶体管,而且说不同的语言。我们用来向这些机器发送指令的抽象方式完全不同。这就像必须为某人写旅行指南,但根据他们开的车不同,你可能需要用法语、普通话或肢体语言来写。
Link to this section硅片的跳动心跳#
芯片的燃料是电子,即流入芯片的电流,为计算提供能量。但仅有能量是不够的。为了让芯片真正工作,在复杂的拓扑结构中移动数据,一切都依赖于一个关键组件:时钟。正是它使电子在特定的时间流过特定的路径。没有它,你只会有通电但毫无作为的硅片。
想象一下尝试协调一场大规模的表演,数十亿个组件需要完美同步地移动。没有节拍,那将是混乱的。这正是时钟为你的处理器所做的。它是一个以极其稳定的频率振动的晶体,每秒发送数十亿次电脉冲。
当你听到“3.5 GHz 处理器”时,那个 GHz (吉赫兹) 就是时钟速度,即每秒 35 亿次节拍。每次节拍称为一个时钟周期,它是计算中时间的基本单位。
时钟周期之间什么都不会发生。整个计算机都会冻结,等待下一次节拍。这就像宇宙中最极端的红灯绿灯游戏。在每一次“绿灯”(时钟脉冲)下:
- 数据在组件间移动
- 执行计算
- 做出逻辑决策
- 读取或写入内存
有些操作需要一个周期(简单的加法),而另一些则需要多个周期(除法或从 RAM 获取数据)。这是一个精确编排的过程,数十亿个组件执行着它们特定的操作,所有这些都同步于这个无情的节拍。
你可以通过让晶体振动得更快来超频你的处理器;一切发生得更快,但它也会产生更多的热量,变得更不稳定。如果推得太远,你的计算机就会崩溃,因为电子实际上无法跟上这个节拍。
在过去,这些操作是用房间大小的机器实现的。但执行所有这些计算的组件非常简单:它们只是开关。开或关的开关。
只要把足够多的开关以正确的模式连接在一起,你就有了计算。整个数字革命归结为复杂的开关排列。
这种简单性意味着如果你有开关,任何开关,你就能造出一台计算机。人们已经用输水管和阀门、多米诺骨牌、乐高积木、弹珠,甚至用 Minecraft 中的红石造出了功能性的计算机。
自 20 世纪 40 年代以来,这些原则没有改变。我们只是在将开关做得极小方面变得异常精通。你的手机拥有的计算能力超过了所有将人类送上月球的计算机的总和,而且它能放进你的口袋,因为我们找到了在原子尺度上制造开关的方法。
当我们运行具有数百万个参数的神经网络时,我们每秒要切换这些微小开关数十亿次,所有这些都完美同步于那个晶体心跳。每一次权重更新、每一次矩阵乘法、每一个激活函数,它们都随着时钟的节拍行进。
难怪训练模型会让你的电脑听起来像是要起飞了!
Link to this section让神经网络高速飞奔#
好吧,我们有这些带有数十亿个开关、随着晶体节拍跳动的芯片,我们想在上面运行具有数百万参数的神经网络。应该很容易,对吧?把数字扔给芯片,让它全速运转!
快速运行神经网络就像试图在一个厨房里做一顿五道菜的大餐,冰箱在三个街区外,你只有一个锅,而且每种配料重达 500 磅。数学本身并不是最大的问题;问题在于其他的一切。
Link to this section架构失配#
大多数芯片被设计出来是为了运行 Microsoft Word,而不是神经网络。你的 CPU 在构建时认为它会把一生花在运行 if 语句、循环和偶尔计算你的税收(这是连超级计算机都觉得情绪低落的计算任务)上。它针对顺序操作进行了优化:先做这个,再做那个,最后做其他事情。
但神经网络完全不同。它们想同时做所有事情。在训练期间,你要根据预测错误的程度更新数百万个权重。在推理期间(实际使用训练好的模型),你要同时推动数据进行数百万次计算。想象你需要将一百万个数字乘以另外一百万个数字。你的 CPU,怀着美好的心愿,想一次一个地做,像一个非常快但非常死板的会计。
这就是 GPU 成为 AI 计算骨干的原因。GPU 是为视频游戏设计的,你需要同时计算数百万个像素的颜色。事实证明,计算像素颜色和进行神经网络数学运算惊人地相似:两者都涉及对海量数据并行执行相同的操作。
但即使是 GPU 对神经网络也不是完美的。这就是为什么公司现在正在构建专门的 AI 芯片(TPU、NPU 以及其他以 PU 结尾的缩写)。这些芯片从零开始设计,只有一个工作:让神经网络运行得快。它们就像聘请了一位只会做一道菜的厨师,但他能以超人的速度制作。虽然你的 CPU 在顺序处理矩阵运算时很吃力,而 GPU 在并行处理时表现不错,但这些专用芯片简直是把矩阵当早午晚餐吃。
Link to this section内存墙(或者:为什么移动位比计算数学更难)#
在现代神经网络计算中,我们花费在移动数据上的时间和精力比实际使用数据进行计算的时间还要多。
把你的计算机芯片想象成一位以闪电速度工作的杰出数学家,但所有的参考书都存放在城里不同的建筑里。他们可以瞬间解出任何方程,但首先,他们需要拿到这些数字,而那段旅程需要花费很长时间。
你的芯片可以在一个时钟周期内将两个数字相乘(记住,那是每秒数十亿次节拍中的一次)。快如闪电!但是从内存将那些数字获取到芯片?那可能需要数百个周期。就像你的数学家可以在一秒钟内解决问题,但需要五分钟走去图书馆再走回来。
原因在于距离(和空间)。电子移动得很快,但不是无限快。数据在芯片上移动的距离越远,花费的时间就越长。计算机设计师通过创建内存层次结构解决了这个问题,就像拥有不同距离的多个存储位置:
- 寄存器(直接构建在计算单元中):你的数学家的桌子。即时访问!但它很小,你在这里只能放大约 32 个数字。就像手边有便签纸一样。
- L1 缓存(微米距离):办公室里的书架。抓取东西需要 3-4 个周期。在这里,你可以放下几千个数字。
- L2 缓存(毫米距离):走廊尽头的文件柜。需要 10-15 个周期,可以放几百万个数字。
- L3 缓存(横跨芯片):楼下的储藏室。需要 30-50 个周期,可容纳数千万个数字。
- RAM(在完全不同的芯片上):城对面的仓库。需要 100-300 个周期。这是你数十亿数字居住的地方。
- SSD/硬盘(通过电缆连接):完全是另一个城市。需要数百万个周期。海量存储,冰川速度。
具体的结构各不相同,你手机的芯片可能会跳过 L3 缓存,而服务器 CPU 可能拥有海量的 L3 缓存。然而,原则是一样的:内存越近越快但容量越小。
现在这是神经网络最痛苦的地方。想象一下你的 Ultralytics YOLO 模型有 5000 万个参数(顺便提一下,ChatGPT 有数十亿个)。那是 5000 万个需要从内存移动到计算单元再回来的数字。即使每个数字只有 4 字节,那也有 200MB 的数据需要通过你的系统移动。
芯片可能在一个周期内处理每个数字,但如果从 RAM 获取该数字需要 100 个周期,你 99% 的时间都在等待配送。就像在交通堵塞中开一辆一级方程式赛车。所有的计算能力,坐在那里,等待数据到达。
这里是关键的见解:这是现代计算中的瓶颈。它被称为冯·诺依曼瓶颈。让芯片在数学运算上更快是相对容易的。让内存更快正触及物理极限。这就是为什么 AI 中几乎“所有”的性能优化都发生在内存层面。当工程师加速神经网络时,他们很少让数学本身变快;他们是在寻找聪明的方法来减少数据移动,更好地缓存数据,或更聪明地访问数据。
现代 AI 芯片不仅专注于计算速度;它们痴迷于内存带宽和数据移动策略。它们预取数据,复用已在缓存中的值,并组织计算以最小化内存行程。AI 硬件竞赛的赢家不是那些计算器最快的人;而是那些弄清楚如何让计算器保持数据供应的人。整个游戏的核心在于优化内存访问模式。
每次移动一位数据,你就会消耗能量。不多,我们说的是皮焦耳,但当你每秒移动 TB 级数据时,它很快就会累积起来。事实上,在芯片上移动数据 1 毫米消耗的能量比进行实际计算还要多!
这就是为什么你在训练神经网络时笔记本电脑听起来像喷气发动机。发热的不是数学计算;而是数据移动。每一次参数更新、每一次梯度计算、每一次前向传播都在实实在在地加热你的房间。
现代 AI 加速器基本上是热力学的练习。在芯片熔化之前我们能塞进多少计算?我们能多快把热量带走?这就像超频,但时钟总是拨到 11,而我们只是在努力不引发火灾。
Link to this section解决方案?架构感知设计#
最快的神经网络不一定是最聪明的,它们是那些考虑到芯片而设计的网络。它们:
- 尽可能保持数据本地化
- 痴迷地复用计算
- 完美匹配硬件能力
- 不惜一切代价最小化内存移动
这就像一个配方,一个是说“使用当地杂货店的食材”,另一个要求你从西藏进口香料、从法国进口奶酪、从南极进口水。两者可能味道都不错,但后者显然更不切实际。
这就是为什么让神经网络变快是一门艺术。光有好的数学是不够的;你需要了解硬件,尊重内存层次结构,并与架构完美共舞。
欢迎来到这个计算机科学遇见物理学遇见工程学遇见纯粹魔法的世界。在这个世界里,移动一个数字比用它计算成本更高。在这个世界里,并行是快速的,但同步是致命的。在这个世界里,你最大的敌人不是复杂性,而是距离。
Link to this section我们如何让 YOLO 变得更快#
当你训练 YOLO 模型时,你会得到一个在你的训练设置上运行得很棒的神经网络。但问题是:你的游戏 GPU、你的 iPhone 和监控摄像头里的那个微小芯片,它们说的语言完全不同。它们有不同的优势、不同的弱点,以及对于如何处理数据有非常不同的想法。
换个方式想:GPU 有数千个核心,它们可以同时工作——它是为并行处理而构建的。同时,移动芯片可能拥有专门为 AI 操作设计的特殊电路,但只能处理特定类型的数学运算。而你门铃摄像头里的那个边缘设备?它试图在一个比 LED 灯泡还小的功率预算下运行 AI。
在 Ultralytics,我们支持十多种不同的导出格式,因为每一种都针对不同的硬件进行了优化。这不仅是关于拥有太多的选择。而是关于拥有满足你特定需求的正确选择。
Link to this section融合运算:用更少做更多#
在原始 YOLO 模型中,许多运算是顺序发生的。例如,我们可能进行卷积,然后归一化结果,然后应用激活函数。那是三个独立的步骤,每一步都需要自己的内存读取和写入。
但这里有个巧妙之处:我们可以将这些运算合并为一个步骤。当我们导出 YOLO 进行部署时,我们会将这些运算融合在一起。而不是:
- 计算卷积 → 保存到内存
- 从内存加载 → 归一化 → 保存到内存
- 从内存加载 → 应用激活 → 保存到内存
我们做的是:
- 计算卷积 + 归一化 + 激活 → 保存到内存
对于一个处理 640×640 图像的典型 YOLO 模型,这个简单的小技巧消除了千兆字节不必要的内存传输。在手机上,这就是流畅的实时检测与令人沮丧的延迟之间的区别。
Link to this section使用更小的数字:量化魔法#
YOLO 实际上并不需要超高精度的数字来准确检测物体。在训练期间,我们使用 32 位来表示每个权重——这就像使用科学计算器来测量制作三明治的配料一样。对于实际部署?8 位就足够了。
这被称为量化,是我们最强大的优化技术之一。通过使用更小的数字:
- 模型体积缩小了 75%(Ultralytics YOLO11x 从 200MB 缩小到 50MB)
- 在大多数设备上运行速度快 2-4 倍
- 能耗显著降低(你的手机电池会感谢你)
并非 YOLO 中的所有层对这种缩减都同样敏感。那些检测基本边缘和形状的早期层?它们很稳健——我们可以毫无问题地使用 8-bit 数字。而决定“这是猫还是狗?”的最终检测层则需要更高的精度。因此,我们会逐层调整精度,使用刚好足够的位数来保持精度的同时最大限度地提高速度。
我们发现,通过精心的量化,Ultralytics YOLO 在手机上运行速度提升 3 倍的同时,仍能保持 99.5% 的原始精度。这就是研究模型与你可以在现实世界中实际使用的产品之间的区别。
Link to this section选择最佳算法#
执行同一数学运算的方法有几十种。简单的卷积(YOLO 中的核心运算)可以使用完全不同的算法来计算,而最佳选择取决于你的具体硬件和输入尺寸。
当我们导出 YOLO 时,我们的优化框架实际上会测试不同的算法,并为你的特定情况选择最快的一种。这就像拥有通往同一目的地的多条路线,并根据当前的交通状况进行选择。在 GPU 上,我们可能会使用一种同时处理多个像素的算法。在 CPU 上,我们可能会使用一种针对顺序处理进行优化的算法。数学原理是一样的,但执行策略却截然不同。
Link to this section内存:隐藏的瓶颈#
还记得我们讨论过内存是现代计算中真正的瓶颈吗?这对 YOLO 来说尤为明显。模型可能有 5000 万个参数,在推理过程中会产生数 GB 的中间结果。搬运这些数据往往比实际计算更慢。
我们使用几种技巧来最大限度地减少内存移动:
智能调度:我们安排运算顺序,以便在数据仍位于高速缓存内存中时立即使用。对于 YOLO 的特征金字塔网络,这减少了 40% 的内存流量。
平铺 (Tiling):我们不再一次处理整个图像,而是将其分解为能放入缓存的较小块(Tiles)。这意味着处理器可以使用快速的本地内存,而不是不断地从较慢的主内存中获取数据。
缓冲区重用:我们不会不断为中间结果创建新的内存,而是重用相同的内存缓冲区。这非常高效——YOLO 的整个主干网络只需一堆可重用的缓冲区即可运行。
Link to this section剪枝:少即是多#
有一个令人惊讶的事实:YOLO 模型通常存在过度设计的情况。我们可以移除许多层中 30% 的通道,而对精度几乎没有影响。这不仅使模型变小,而且使其运行更快,因为需要执行的计算确实更少了。
这个过程很优雅:我们分析网络中哪些部分对最终检测结果的贡献最小,将其移除,然后微调模型以进行补偿。剪枝后的 YOLO11m 模型可以在保持 99% 原始精度的同时提速 30%。在电池供电设备上,这种效率提升意味着额外的数小时工作时间。
Link to this section硬件加速:发挥每款芯片的优势#
不同的处理器擅长处理不同的任务,性能差异惊人。同一个 YOLO11n 模型所需时间如下:
- 在现代 Intel CPU 上为 45 毫秒/帧
- 在 NVIDIA RTX GPU 上为 4 毫秒
- 在高端手机处理器上为 22 毫秒
- 在 Google Coral Edge TPU 上为 15 毫秒
这些不仅是时钟频率带来的速度差异,还反映了根本的架构差异。GPU 有数千个并行工作的核心,非常适合 YOLO 的卷积运算。移动端 NPU 有专门为神经网络设计的专用电路。CPU 是多面手,灵活但不够专业。
优化的关键在于将 YOLO 的运算与每款芯片最擅长的功能相匹配。GPU 喜欢同时对大量数据执行相同的运算。移动端 NPU 可能只支持某些运算,但执行起来效率极高。Edge TPU 只处理 8-bit 整数,但在该约束下实现了惊人的速度。
Link to this section编译的魔力#
当你导出 YOLO 模型时,幕后会发生一些非凡的事情。我们不仅仅是转换文件格式,实际上是专门为你的目标硬件编译模型。这就像是 Google Translate 和母语使用者之间的区别。编译过程会:
- 分析你的模型,以了解其结构和要求
- 考虑你的硬件能力——它擅长什么,不擅长什么
- 生成优化的代码,使其能用硬件的母语交流
编译器可能会重新组织运算以更好地利用处理器的缓存,选择芯片支持的专用指令,甚至使用机器学习来找到最佳的优化策略。没错,我们正在使用 AI 来优化 AI——未来已来!
这一编译步骤可以带来 10 倍的性能差异。同一个 YOLO 模型用通用代码运行可能步履蹒跚,但在正确的优化指令下却能飞速运行。
Link to this section现实世界的边缘侧部署#
让我们谈谈当 YOLO 走进现实世界时会发生什么——特别是边缘设备所处的严苛环境。想象一个需要 24/7 全天候运行 YOLO 进行物体检测的安全摄像头。它面临着残酷的约束:
- 内存:总共可能只有 512MB 到 2GB RAM
- 功耗:通常仅 2-5 瓦(比手机充电器还低)
- 散热:无风扇,仅依靠被动散热
- 可靠性:必须持续运行而不崩溃
这是优化在实践中实现的效果。一台运行 YOLO11s 的安全摄像头:
- 原始模型:15 瓦,85°C 高温运行,达到 20 FPS
- 经过量化和剪枝优化后:3 瓦,舒适的 45°C,达到 25 FPS
我们将功耗降低了 80%,同时实际上提高了性能!这就是一个会过热耗尽电池的设备与一个能可靠运行数年的设备之间的区别。
关键在于选择正确的权衡。在边缘设备上,我们通常:
- 使用 INT8 量化(精度降低,功耗大幅降低)
- 在活动较少时减少处理帧数
- 将工作分配到不同的处理器以管理热量
- 保持模型足够小,以完全放入高速内存中
Link to this section优化过程#
在 Ultralytics,我们遵循系统化的优化方法。首先,我们对模型进行分析,以了解时间究竟花费在哪里。通常,瓶颈不在你预期的地方。也许 80% 的时间花费在少数几层,或者内存传输占据了计算时间的主要部分。
接下来,我们迭代应用优化:
- 从最大的瓶颈开始
- 一次应用一项优化
- 衡量速度提升和精度影响
- 保留提供良好权衡的优化
- 重复上述步骤,直到达到目标
例如,在手机上部署 YOLO11m:
- 基准:200ms/帧,200MB 模型
- 量化后:80ms/帧,50MB 模型
- 剪枝后:60ms/帧,35MB 模型
- 算子融合后:45ms/帧,35MB 模型
每一步都在保持 99% 以上原始精度的同时提高了性能。结果呢?在放得进你口袋的设备上实现实时目标检测。
Link to this section未来:异构计算#
现代设备在联合使用多个处理器方面变得越来越聪明。你的手机不只有一个处理器——它有多个,每个都专用于不同的任务:
- 摄像头传感器有一个 ISP(图像信号处理器)用于预处理
- NPU(神经网络处理单元)运行 YOLO 推理
- CPU 处理复杂的逻辑和协调
- GPU 在屏幕上渲染结果
YOLO 优化的未来在于智能地将模型拆分到这些处理器上。也许 NPU 处理主要卷积,CPU 执行最终的检测逻辑,而 GPU 可视化结果。每个处理器都做它最擅长的事情,创建一个比任何单个处理器都能实现的效果更高效的管道。
我们正在开发智能分区算法,该算法能自动找出将 YOLO 拆分到可用处理器上的最佳方式,不仅考虑它们的能力,还要考虑在它们之间移动数据的开销。
Link to this section核心观点#
优化 YOLO 模型不仅仅是转换文件格式;而是将尖端 AI 转化为真正在现实世界中可用的技术。通过量化(使用更小的数字)、剪枝(移除不必要的部分)、算子融合(结合步骤)和智能内存管理等技术,我们实现了 10-100 倍的性能提升,同时保持了精度。
神奇之处在于,没有通用的“最佳”优化。拥有无限电力的云服务器需要的优化方案与电池驱动的无人机不同。带有专用 AI 芯片的手机与 Raspberry Pi 需要不同的处理方式。这就是为什么 Ultralytics 提供如此多导出选项的原因——每一个都针对不同的场景进行了优化。
我们讨论的每一项优化都为一个目标服务:让计算机视觉无处不在。无论你是在构建智能门铃、无人机应用还是大型云服务,我们提供的工具都能让 YOLO 在你的约束条件下工作。
当你使用 Ultralytics 导出 YOLO 模型时,你不只是在保存一个文件。你是在利用多年的研究成果,将神经网络变得实用。你正在将最先进的 AI 模型变成可以在真实硬件上、在实际约束下、解决现实问题的工具。
这就是我们在 Ultralytics 所做的事情。我们架起了 AI 研究与实际部署之间的桥梁。我们让计算机视觉无处不在,因为 AI 的未来不仅仅在于拥有最好的模型——而在于让这些模型在现实世界中变得有用。






