先给一个结论:

  • 在骁龙865上,YOLOv8‑n(640×640)用 ncnn 跑,大概可以做到 60–70 FPS;
  • YOLOv8‑s 大约 25–35 FPS;
  • YOLOv8‑m 就只有十几 FPS,偏“勉强实时”。
    实际速度会受分辨率、量化(FP32/INT8)、后端(CPU/GPU/NPU)和推理框架(ncnn / MNN / TFLite / QNN)影响很大。
    下面分情况展开说。

一、硬件算力:骁龙865大概什么水平?

  • 官方给出的第5代 AI Engine 整体算力约 15 TOPS,其中包括升级过的 Hexagon 698 Tensor Accelerator,相比上一代 Tensor 加速器 TOPS 提升约 4 倍,专做 AI 推理加速。
  • GPU 为 Adreno 650,移动端跑卷积网络的主力;CPU 为 1×2.84GHz A77 + 3×2.42GHz A77 + 4×1.8GHz A55。
    对 YOLOv8 来说,通常主要利用点:
  • GPU(Adreno 650)+ 推理框架(如 ncnn Vulkan)
  • Hexagon NPU(如果用 QNN / SNPE 这类高通工具链)

二、YOLOv8 各尺寸在骁龙865上的实测/实测估算值

这里默认输入为 640×640,典型手机环境(arm64-v8a,多核 CPU + Adreno 650)。

1)YOLOv8‑n(nano)最轻量

  • 改进版 YOLOv8n‑Lite 在骁龙865上,实测能做到约 35 FPS(基于 ncnn,并做了结构剪枝等轻量化改进)。
  • ncnn‑assets 的 YOLOv8n‑Pose 在骁龙865上的推理时间:
    • ncnn:15 ms / 帧(约 66 FPS)
    • TFLite:28 ms / 帧(约 36 FPS)
    • MNN:21 ms / 帧(约 48 FPS)
      Pose 模型比纯检测略重一些,因此纯检测的 YOLOv8n 在同样的 ncnn 配置下,理论只会更快;再加上结构优化,达到 60+ FPS 是合理的区间。
      综合下来,比较常见的实际速度区间是:
  • ncnn(GPU):约 60–70 FPS(15ms 左右一帧)
  • TFLite(CPU/GPU):约 30–40 FPS
  • 纯 CPU + 未优化 ONNX:往往只有 10–20 FPS

2)YOLOv8‑s(small)

  • 865 上经验值:通常在 25–35 FPS 左右(ncnn,640×640)。
  • 有些工程实测中,类似体量的模型(YOLOv5s)在骁龙865上也能跑到 30+ FPS,而 YOLOv8s 的计算量比 v5s 稍大一些,所以 25–35 FPS 是合理区间。

3)YOLOv8‑m(medium)及以上

  • YOLOv8m 参数量和计算量都比 n/s 大不少,在骁龙865上单模型推理通常只能做到十几 FPS:
    • 大致区间:10–20 FPS(视具体优化情况)
  • 再往上的 L / X,在 865 上基本就不适合做实时 30 FPS 检测了,更偏向离线/批量检测或更高性能 SoC。
    为了更直观,用一个简单流程图表示“模型规模 → 预期 FPS”的关系(640×640,ncnn GPU,常规手机):

n / nano

s / small

m / medium

l / x

输入分辨率 640x640

YOLOv8 模型尺寸

60–70 FPS
约 15ms/帧

25–35 FPS
约 30–40ms/帧

10–20 FPS
约 50–100ms/帧

<10 FPS
不适合手机实时


三、影响速度的关键因素

1)模型尺寸(n/s/m/l/x)

  • 模型越大,参数量和 FLOPs 越高,延迟越高,FPS 越低。
  • 实测参数对比(YOLOv5 vs YOLOv8)显示,v8 的 n/s/m 在精度提升的同时,参数量和 FLOPs 也明显增加,这就是同样硬件上 YOLOv8 比 v5 略慢的主要原因。
    2)输入分辨率
  • 640×640 是最常见的手机端分辨率。
  • 如果降到 416×416,FPS 会明显提升(比如 n 可能从 60+ 提到 80+);
  • 提到 1280×1280,即使是 n 也很难维持 30 FPS。
    3)后端与推理框架
  • ncnn(开启 Vulkan GPU):在骁龙865上通常最快,上面的 15ms YOLOv8n‑Pose 就是用 ncnn 跑的。
  • TFLite:GPU / NPU 支持视具体算子而定,有时会退回 CPU,速度中等。
  • MNN:在同样模型上实测约 21ms(YOLOv8n‑Pose),介于 ncnn 和 TFLite 之间。
  • QNN / SNPE(利用 Hexagon NPU):高通 AI Hub 上有针对 YOLOv8 的 QNN 优化模型,在新一代 8 Gen 3 上单次推理可低到 2.9 ms,在 865 上也会有明显加速,但具体公开数据较少,一般可预期比纯 CPU 快不少。
    4)量化(FP32 vs INT8)
  • INT8 量化在支持 NPU/GPU INT8 的链路(如 QNN)下,可以在损失少量精度的前提下,显著提速、降功耗。
  • 实测经验里,int8 量化在 865 上经常能带来 1.5–2 倍加速,具体看算子支持度。
    5)调度与线程设置
  • 合理的线程数绑定和大核优先策略,可以避免频繁核间迁移、提升稳定性。
  • 长时间跑大模型时要留意温控,温控触发后降频会让 FPS 出现明显掉坑。

四、如果你要自己压榨性能,可以怎么搞?

1)选对模型尺寸和分辨率

  • 实时 App 优先:
    • 强实时(摄像头流畅):优先选 YOLOv8n 或 YOLOv8s,分辨率 640×640(甚至可以尝试 512×512)。
    • 场景允许“几秒识别一次”:可以考虑 m 或更大模型。
      2)优先用移动端推理框架 + GPU / NPU
  • 推荐优先级(仅就“在骁龙865上做速度”而言):
    1)QNN / SNPE 利用 Hexagon NPU(需要自己转换 / 调参,适配工作量大,但上限高)
    2)ncnn(Vulkan GPU)——最常见、社区资料多,YOLOv8n‑Pose 在 865 上 15ms 的实测就是 ncnn
    3)MNN
    4)TFLite
    3)导出与优化技巧
  • 导出 ONNX 后用 ncnn / pnnx 转换:
    • 可以做算子融合、图优化,减小推理开销。
  • 激活函数替换:比如把 SiLU 换成 ReLU,可进一步提升速度(有实践在 YOLOv8‑Pose 中通过这类改动在安卓端实现了稳定 30 FPS)。
  • 量化:
    • 用 QNN 工具链做 PTQ(训练后量化),或自己训练时做 QAT;
    • 在精度满足的前提下尽量用 INT8。
      4)工程侧优化
  • 异步推理:推理和相机采集、UI 渲染分开线程,避免 UI 卡顿。
  • 预处理(resize / normalize)放到 GPU 或使用高效实现(如 ncnn 内置的预处理)。
  • 限制推理频率:比如每 2–3 帧推理一次,既保证视觉流畅又降低负载。

五、一句话总结

  • 骁龙865 上:
    • YOLOv8n(640×640)+ ncnn ≈ 60–70 FPS,非常轻松实时;
    • YOLOv8s ≈ 25–35 FPS,实时但余量不大;
    • YOLOv8m ≈ 10–20 FPS,属于“可用但不算特别流畅”。
      如果你能告诉我你打算跑的是哪一种任务(检测 / Pose / 分割)、希望多少 FPS、以及你倾向于用什么框架(ncnn / MNN / TFLite / QNN),我可以帮你算一个更贴近你项目的“目标分辨率 + 模型尺寸”组合。

先给你一个直观的结论(只看这个就够了):

  • 骁龙865,输入 640×640:
    • YOLOv8n:约 12–20 ms/帧(≈50–80 FPS)
    • YOLOv8s:约 30–40 ms/帧(≈25–35 FPS)
    • YOLOv8m:约 60–100 ms/帧(≈10–17 FPS)
      用轻量模型 + ncnn/MNN 优化后,单次推理做到十几毫秒是比较常见的水平,足够做实时检测(30FPS)。

一、从 FPS 换算成延迟(ms/帧)

  • 关系很简单:
    延迟(ms) ≈ 1000 / FPS
  • 例如 RTMPose-s(结构和算力接近 YOLOv8s)在骁龙865上用 ncnn 跑到 70+ FPS,那平均延迟就是:
    1000 ÷ 70 ≈ 14.3 ms/帧
    这和实际工程里“十几毫秒”的经验是吻合的。

二、不同 YOLOv8 模型在骁龙865上的典型延迟

前提:640×640 输入,典型 Android 机型(如 Galaxy S20 Ultra 等,Adreno 650 GPU),经过 ncnn/MNN 这类移动推理框架优化。

模型 典型延迟(ms/帧) 换算 FPS 备注
YOLOv8n 12–20 ms ≈50–80 FPS 纯检测比姿态略快,ncnn 下更优
YOLOv8s 30–40 ms ≈25–35 FPS 常见“刚好实时”档位
YOLOv8m 60–100 ms ≈10–17 FPS 算力吃紧,不适合高帧率场景
YOLOv8l/x >100 ms <10 FPS 一般不推荐在865上跑实时
参考点:
  • RTMPose-s 在 Snapdragon 865 上用 ncnn 能达到 70+ FPS。
  • 多篇 YOLOv8 移动端部署和 benchmark 文章也给出了类似范围的延迟,只是具体数值会因为后端(ncnn/TFLite/MNN)和线程配置略有差异。

三、影响延迟的几个关键点

1)模型大小(n/s/m/l/x)

  • 模型越大,卷积层越多、通道越宽,单次前向传播计算量越大,延迟自然越长。
  • 从延迟角度看:
    • YOLOv8n:在 865 上一般能压到十几毫秒以内;
    • YOLOv8s:三四十毫秒级别;
    • 再往上(m/l/x)更多是“能跑”,很难达到 30 FPS 的实时感。
      2)输入分辨率
  • 640×640 是最常见的平衡点。
  • 分辨率的影响大致是“平方级”:
    • 从 640×640 降到 416×416:
      • 像素数降到原来的 (416² / 640²) ≈ 0.42
      • 理论计算量也下降到 4 成左右,延迟可以按比例缩减(比如从 20 ms 降到 ~8–10 ms)。
    • 反之,提升到 1280×1280,计算量是 4 倍,延迟很容易飙到 80–100 ms+。
      3)后端和推理框架(非常关键)
  • 一般快慢排序(经验+部分基准)大致是:
    QNN/SNPE(用上 Hexagon NPU) ≳ ncnn(Vulkan GPU) ≳ MNN ≳ TFLite(GPU/CPU) > 原始 PyTorch/ONNX Runtime CPU
  • 现有公开数据:RTMPose-s 在 Snapdragon 865 上,ncnn 能到 70+ FPS,对应的延迟约 14 ms;如果换成纯 CPU 或 TFLite,延迟通常会翻倍以上。
  • 因此“延迟速度”不仅要看模型,更要看你用什么推理引擎。
    4)量化(FP32 vs FP16 vs INT8)
  • FP32:默认精度,但移动端 GPU/NPU 上效率不是最高。
  • FP16:在 Adreno 650 上通常能明显提升吞吐,延迟可以再降一截。
  • INT8:用 QNN/SNPE 跑在 Hexagon NPU 上时,可以在精度略微下降的前提下,把延迟再压到 60–70% 甚至更低,尤其是对中/大模型收益更明显。
    5)前/后处理是否算在“延迟”里
  • 严格意义的“推理延迟”:只算模型 forward(ncnn::Extractor / MNN::Session 等)。
  • 工程上更关心的“端到端延迟”:
    • 图像读取/相机采集
    • 前处理(resize、归一化、letterbox)
    • 模型推理
    • 后处理(NMS、坐标变换、绘制)
  • 在手机上,前/后处理如果写不好(比如频繁 CPU↔GPU 拷贝),额外再加上 5–15 ms 完全有可能。

四、如果你自己测延迟,怎么测才合理

给你一个比较标准的测法(以 Android + ncnn 为例):

  • 只测推理延迟:
    • 排除相机、图片 I/O,只做:
      • 准备好已经归一化的输入 Tensor(可以预先做一次前处理,复用 buffer)
      • 循环跑 N 次推理,统计每次推理耗时(ncnn::Extractor 或 forward 前后打时间戳)
      • 去掉前几次 warm‑up,取平均值 / P50 / P95
  • 测端到端延迟:
    • 在每一帧的相机回调开始时打时间戳 t0
    • 模型推理 + 前后处理全部完成后(比如拿到检测结果并绘制完)打时间戳 t1
    • 单帧延迟 = t1 − t0

五、怎么根据你的延迟目标选模型和配置

  • 目标 ≤10 ms(100+ FPS):
    • 只能考虑 YOLOv8n 甚至更轻的变体,并且:
      • 用 ncnn/MNN + Vulkan GPU
      • 分辨率控制在 416–640
      • 前后处理尽量 GPU 化/零拷贝
  • 目标 20–30 ms(30–50 FPS):
    • YOLOv8n/YOLOv8s 都有机会,主要看分辨率和后端:
      • YOLOv8s:640×640 + ncnn 通常在 30–40 ms,接近 30 FPS
      • YOLOv8n:可以更轻松地把延迟压到 20 ms 以下
  • 目标 ≤50 ms(20 FPS 以上):
    • YOLOv8m 也勉强可以,但体验会比较“勉强实时”,更适合非高帧率场景(比如每隔几帧检测一次)。

六、简单总结一句

  • 在骁龙865上,用合适的模型尺寸(优先 n/s)、640×640 左右分辨率,配合 ncnn/MNN 这类优化好的推理框架,YOLOv8 的单次推理延迟通常可以控制在:
    • 小模型:十几毫秒
    • 中等模型:三、四十毫秒
    • 大模型:几十到一百毫秒级
      如果你能告诉我:
  • 想用哪个 YOLOv8 变种(n/s/m…)
  • 准备用哪个推理框架(ncnn / TFLite / MNN / QNN/SNPE)
  • 目标 FPS 或最大容忍延迟(比如 30ms、50ms)
    我可以帮你算一个更具体的“分辨率 + 模型 + 量化”组合。

更多推荐