YOLOv8 添加 FPS 输出:一步步教你修改代码

YOLOv8 添加 FPS 输出:一步步教你修改代码

在使用 YOLOv8 进行模型训练和验证时,我们经常希望看到 FPS(帧率),以便了解模型的处理速度。然而,YOLOv8 默认只输出每阶段的耗时(如 preprocess、inference 等),并未直接打印 FPS。本文将手把手教你如何在 YOLOv8 中添加 FPS 输出。

📌 为什么要输出 FPS?

FPS(Frames Per Second)是衡量模型实时处理能力的重要指标,特别是在部署到边缘设备或嵌入式系统时。
通过打印 FPS,我们可以直观了解模型在当前硬件上的推理速度,便于优化和调优。

🔍 修改步骤概览

  1. 找到需要修改的文件
  2. 定位代码位置
  3. 添加打印 FPS 的代码

接下来,我们逐步操作。


1️⃣ 找到需要修改的文件

YOLOv8 的核心代码位于 ultralytics 目录下。我们需要修改的是模型验证阶段输出的日志。

操作:
在项目根目录下,全局搜索关键字:

postprocess per image

搜索结果会定位到:

ultralytics/engine/validator.py

大约在 第 206 行附近

这是 YOLOv8 输出每阶段耗时信息的位置,我们就在这里添加 FPS 输出。


2️⃣ 原始代码片段

找到以下代码:

LOGGER.info(
    "Speed: {:.1f}ms preprocess, {:.1f}ms inference, {:.1f}ms loss, {:.1f}ms postprocess per image".format(
        *tuple(self.speed.values())
    )
)

它负责打印每个阶段的耗时(单位:ms)。


3️⃣ 添加 FPS 输出代码

在上面代码 后面,添加以下代码:

LOGGER.info(f'FPS: {(1000 / sum(self.speed.values())):.2f}')

这里我们通过计算 每张图片总耗时 的倒数,得到每秒可以处理多少帧(FPS)。


4️⃣ 修改后的完整代码

修改后的代码如下:

LOGGER.info(
    "Speed: {:.1f}ms preprocess, {:.1f}ms inference, {:.1f}ms loss, {:.1f}ms postprocess per image".format(
        *tuple(self.speed.values())
    )
)
LOGGER.info(f'FPS: {(1000 / sum(self.speed.values())):.2f}')

继续往下,还可以看到保存 JSON 和绘图的代码段:

if self.args.save_json and self.jdict:
    with open(str(self.save_dir / "predictions.json"), "w") as f:
        LOGGER.info(f"Saving {f.name}...")
        json.dump(self.jdict, f)  # flatten and save
    stats = self.eval_json(stats)  # update stats

if self.args.plots or self.args.save_json:
    LOGGER.info(f"Results saved to {colorstr('bold', self.save_dir)}")
return stats

这个部分不用修改,仅供参考。


🚀 最终效果

修改后,在训练或验证结束时,终端会输出类似以下信息:

Speed: 1.2ms preprocess, 8.3ms inference, 0.5ms loss, 1.0ms postprocess per image
FPS: 96.15

其中:

  • Speed 表示各阶段耗时
  • FPS 表示每秒可处理的图片数

✅ 小结

通过简单修改 validator.py 文件,我们让 YOLOv8 在验证阶段直接输出了 FPS。这个修改适用于训练、验证等阶段,非常适合需要关注实时性能的开发者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元素之窗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值