hhzz头像
关注
【YOLO 入门到精通 08】推理预测完全指南:多数据源、流式推理与性能优化封面图

【YOLO 入门到精通 08】推理预测完全指南:多数据源、流式推理与性能优化

【YOLO 入门到精通 08】推理预测完全指南:多数据源、流式推理与性能优化

标签:YOLO推理 流式推理 predict 性能优化 Results对象
难度:⭐⭐⭐ | 阅读时长:约 60 分钟 | 系列:第 08/12 集
前置:07 验证评估 | 下一集:09 目标跟踪


在这里插入图片描述

写在前面

训练评估之后,模型要真正「干活」——处理图片、视频、摄像头、RTSP 流。本集是 推理的工程实战手册:不只教 model(img),更教你怎么在生产环境稳定、高效地跑推理。


本集学习目标

  • 掌握全部推理数据源及用法
  • 使用 stream 模式处理长视频
  • 调优 conf/imgsz/batch 等参数
  • 集成到 Flask 等应用


8.1 推理模式概览

输入源

预处理

模型推理

后处理

Results

可视化/保存/API

特点说明
多源图/视频/摄像头/URL/流
流式stream=True 省内存
批量batch=N 提吞吐
可定制conf/iou/imgsz/classes

8.2 推理数据源大全

来源示例stream说明
图片'img.jpg'❌单张
目录'images/'✅批量
视频'v.mp4'✅MP4/AVI
URL'https://...'❌网络图
摄像头0✅设备索引
PILImage.open()❌RGB
OpenCVcv2.imread()❌BGR ndarray
RTSP'rtsp://...'✅监控流
YouTube'https://youtu.be/...'✅在线视频
Glob'*.jpg'✅通配符
from ultralytics import YOLO
model = YOLO("yolo26n.pt")

model("img.jpg")           # 路径
model("images/")           # 目录
model("video.mp4")         # 视频
model(source=0)            # 摄像头
model("rtsp://ip/stream")  # RTSP

8.3 流式推理

长视频必须用 stream=True,否则所有帧结果堆在内存里会 OOM。

results = model.predict(source="long_video.mp4", stream=True, save=True)

for result in results:
    n = len(result.boxes)
    # 处理完即释放,内存稳定

实时摄像头

import cv2

results = model.predict(source=0, stream=True, show=False)
for r in results:
    frame = r.plot()
    cv2.imshow("YOLO", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

8.4 推理参数详解

参数默认说明调优
conf0.25置信度阈值误检↑conf,漏检↓conf
iou0.7NMS IoU重复框↓iou
imgsz640输入尺寸小目标↑imgsz
max_det300最大检测数密集场景调大
classesNone过滤类别[0,2] 只检人/车
halfFalseFP16GPU 加速
deviceauto设备0/cpu
batch1批次目录推理可增大
rectTrue最小矩形填充导出模型匹配用 False
results = model.predict(
    source="street.jpg",
    conf=0.5,
    classes=[0, 2, 5],
    imgsz=1280,
    save=True,
    save_txt=True,
    save_crop=True,
    line_width=2,
)

8.5 Results 对象深入

r = results[0]

# 属性
r.orig_img, r.orig_shape, r.path, r.speed
r.boxes    # 检测
r.masks    # 分割
r.keypoints  # 姿态

# 提取数据
xyxy = r.boxes.xyxy.cpu().numpy()
conf = r.boxes.conf.cpu().numpy()
cls  = r.boxes.cls.cpu().numpy()

# 可视化
r.show()
r.save("out.jpg")
img = r.plot()  # BGR ndarray

8.6 性能优化

技巧方法效果
GPUdevice=05~10x
FP16half=True1.5~2x
小模型yolo26n2~5x
小尺寸imgsz=3202~4x
批量batch=81.5~2x
导出TensorRT2~5x
import time
model = YOLO("yolo26n.pt")
model("warmup.jpg", verbose=False)

times = []
for _ in range(100):
    t0 = time.time()
    model("test.jpg", verbose=False)
    times.append(time.time() - t0)
print(f"平均: {sum(times)/len(times)*1000:.1f}ms, FPS: {len(times)/sum(times):.1f}")

8.7 应用集成示例

Flask API

from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2, numpy as np, base64

app = Flask(__name__)
model = YOLO("best.pt")

@app.route("/detect", methods=["POST"])
def detect():
    img_b64 = request.json["image"]
    arr = np.frombuffer(base64.b64decode(img_b64), np.uint8)
    img = cv2.imdecode(arr, cv2.IMREAD_COLOR)
    results = model(img, conf=0.5)
    dets = [{
        "class": model.names[int(b.cls[0])],
        "conf": float(b.conf[0]),
        "bbox": b.xyxy[0].tolist(),
    } for b in results[0].boxes]
    return jsonify({"detections": dets})

# uvicorn 用户可换 FastAPI,逻辑相同
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

视频处理管道

def process_video(inp, out, model_path="yolo26n.pt"):
    model = YOLO(model_path)
    cap = cv2.VideoCapture(inp)
    fps = int(cap.get(cv2.CAP_PROP_FPS)) or 30
    w, h = int(cap.get(3)), int(cap.get(4))
    writer = cv2.VideoWriter(out, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
    for r in model.predict(inp, stream=True):
        writer.write(r.plot())
    cap.release(); writer.release()

8.8 踩坑指南

坑解决
长视频 OOMstream=True
无 GUI 无法 showsave=True
RTSP 断流加重连逻辑
导出模型尺寸不匹配rect=False, imgsz=固定值
推理比训练慢很多检查是否在用 CPU

8.9 常见问题 FAQ

Q1:model() 和 model.predict()?
A:完全等价。

Q2:能并发处理多路流吗?
A:可以,每路独立 model 实例或线程池。


8.10 本集小结

场景推荐
单图model("img.jpg")
批量model("dir/", batch=16)
长视频stream=True
监控stream=True + RTSP

← 第07集第09集:目标跟踪 →

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_43025151/article/details/167039389

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--