
【YOLO 入门到精通 08】推理预测完全指南多数据源、流式推理与性能优化标签YOLO推理流式推理predict性能优化Results对象难度⭐⭐⭐ |阅读时长约 60 分钟 |系列第 08/12 集前置07 验证评估 |下一集09 目标跟踪写在前面训练评估之后模型要真正「干活」——处理图片、视频、摄像头、RTSP 流。本集是推理的工程实战手册不只教model(img)更教你怎么在生产环境稳定、高效地跑推理。本集学习目标掌握全部推理数据源及用法使用 stream 模式处理长视频调优 conf/imgsz/batch 等参数集成到 Flask 等应用文章目录【YOLO 入门到精通 08】推理预测完全指南多数据源、流式推理与性能优化写在前面本集学习目标8.1 推理模式概览8.2 推理数据源大全8.3 流式推理实时摄像头8.4 推理参数详解8.5 Results 对象深入8.6 性能优化8.7 应用集成示例Flask API视频处理管道8.8 踩坑指南8.9 常见问题 FAQ8.10 本集小结8.1 推理模式概览输入源预处理模型推理后处理Results可视化/保存/API特点说明多源图/视频/摄像头/URL/流流式streamTrue省内存批量batchN提吞吐可定制conf/iou/imgsz/classes8.2 推理数据源大全来源示例stream说明图片img.jpg❌单张目录images/✅批量视频v.mp4✅MP4/AVIURLhttps://...❌网络图摄像头0✅设备索引PILImage.open()❌RGBOpenCVcv2.imread()❌BGR ndarrayRTSPrtsp://...✅监控流YouTubehttps://youtu.be/...✅在线视频Glob*.jpg✅通配符fromultralyticsimportYOLO modelYOLO(yolo26n.pt)model(img.jpg)# 路径model(images/)# 目录model(video.mp4)# 视频model(source0)# 摄像头model(rtsp://ip/stream)# RTSP8.3 流式推理长视频必须用streamTrue否则所有帧结果堆在内存里会 OOM。resultsmodel.predict(sourcelong_video.mp4,streamTrue,saveTrue)forresultinresults:nlen(result.boxes)# 处理完即释放内存稳定实时摄像头importcv2 resultsmodel.predict(source0,streamTrue,showFalse)forrinresults:framer.plot()cv2.imshow(YOLO,frame)ifcv2.waitKey(1)0xFFord(q):breakcv2.destroyAllWindows()8.4 推理参数详解参数默认说明调优conf0.25置信度阈值误检↑conf漏检↓confiou0.7NMS IoU重复框↓iouimgsz640输入尺寸小目标↑imgszmax_det300最大检测数密集场景调大classesNone过滤类别[0,2]只检人/车halfFalseFP16GPU 加速deviceauto设备0/cpubatch1批次目录推理可增大rectTrue最小矩形填充导出模型匹配用 Falseresultsmodel.predict(sourcestreet.jpg,conf0.5,classes[0,2,5],imgsz1280,saveTrue,save_txtTrue,save_cropTrue,line_width2,)8.5 Results 对象深入rresults[0]# 属性r.orig_img,r.orig_shape,r.path,r.speed r.boxes# 检测r.masks# 分割r.keypoints# 姿态# 提取数据xyxyr.boxes.xyxy.cpu().numpy()confr.boxes.conf.cpu().numpy()clsr.boxes.cls.cpu().numpy()# 可视化r.show()r.save(out.jpg)imgr.plot()# BGR ndarray8.6 性能优化技巧方法效果GPUdevice05~10xFP16halfTrue1.5~2x小模型yolo26n2~5x小尺寸imgsz3202~4x批量batch81.5~2x导出TensorRT2~5ximporttime modelYOLO(yolo26n.pt)model(warmup.jpg,verboseFalse)times[]for_inrange(100):t0time.time()model(test.jpg,verboseFalse)times.append(time.time()-t0)print(f平均:{sum(times)/len(times)*1000:.1f}ms, FPS:{len(times)/sum(times):.1f})8.7 应用集成示例Flask APIfromflaskimportFlask,request,jsonifyfromultralyticsimportYOLOimportcv2,numpyasnp,base64 appFlask(__name__)modelYOLO(best.pt)app.route(/detect,methods[POST])defdetect():img_b64request.json[image]arrnp.frombuffer(base64.b64decode(img_b64),np.uint8)imgcv2.imdecode(arr,cv2.IMREAD_COLOR)resultsmodel(img,conf0.5)dets[{class:model.names[int(b.cls[0])],conf:float(b.conf[0]),bbox:b.xyxy[0].tolist(),}forbinresults[0].boxes]returnjsonify({detections:dets})# uvicorn 用户可换 FastAPI逻辑相同if__name____main__:app.run(host0.0.0.0,port5000)视频处理管道defprocess_video(inp,out,model_pathyolo26n.pt):modelYOLO(model_path)capcv2.VideoCapture(inp)fpsint(cap.get(cv2.CAP_PROP_FPS))or30w,hint(cap.get(3)),int(cap.get(4))writercv2.VideoWriter(out,cv2.VideoWriter_fourcc(*mp4v),fps,(w,h))forrinmodel.predict(inp,streamTrue):writer.write(r.plot())cap.release();writer.release()8.8 踩坑指南坑解决长视频 OOMstreamTrue无 GUI 无法 showsaveTrueRTSP 断流加重连逻辑导出模型尺寸不匹配rectFalse, imgsz固定值推理比训练慢很多检查是否在用 CPU8.9 常见问题 FAQQ1model()和model.predict()A完全等价。Q2能并发处理多路流吗A可以每路独立 model 实例或线程池。8.10 本集小结场景推荐单图model(img.jpg)批量model(dir/, batch16)长视频streamTrue监控streamTrue RTSP← 第07集第09集目标跟踪 →