
用 YOLOv8 把看得懂变成看得见从零跑通目标检测实战做算法的同学大多卡在这样一个瞬间业务方甩来一文件夹图片说帮我把里面的瑕疵、零件、车辆框出来。图像分类只能告诉你是哪一类可他要的是在哪、是什么、有多大。这一步跨过去靠的就是目标检测Object Detection。本文用 Ultralytics 封装的 YOLOv8从预训练推理一路走到自有数据微调与上线部署所有代码都能直接复制跑。一、为什么选 YOLOv8目标检测模型分两派两阶段Faster R-CNN准但慢和单阶段YOLO快且够用。YOLO 把在哪和是什么合成一次前向天然适合实时场景。YOLOv8 是 Ultralytics 在 2023 年推出的版本优点很实一行pip装好、API 统一、检测/分割/分类/姿态通用、导出格式齐全ONNX、TensorRT、CoreML 都支持。对只想把检测能力塞进业务系统的工程师它是目前性价比最高的起点。二、三行代码跑通预训练模型from ultralytics import YOLO model YOLO(yolov8n.pt) # n 是最小模型还有 s/m/l/x results model(bus.jpg, conf0.25) # conf 是置信度门槛 results[0].show() # 弹窗看画框结果yolov8n.pt首次会自动下载在 COCO 80 类上训过。conf0.25表示只保留置信度高于 0.25 的框——调高误报少但容易漏检调低则相反。每个框的细节在results[0].boxes里含xyxy坐标、conf和cls类别号取出来就能直接写库或推消息。三、批量处理图片与视频单张图只是 demo。真实场景往往是一批图或一个视频流# 批量图片 for p in [a.jpg, b.jpg, c.jpg]: model(p, saveTrue, projectruns/detect, namebatch) # 视频 / 摄像头source0 是默认摄像头 model(line.mp4, showTrue, streamTrue)saveTrue把带框结果存到runs/detect/batch目录streamTrue让视频逐帧推、不占显存。生产上建议固定conf、关掉show、只留save再用消息队列喂帧稳定又省资源。四、用自己数据微调mini 示例预训练模型只认 COCO 那 80 类。要识别自家零件得喂自己的数据。先写data.yamlpath: ./dataset train: images/train val: images/val names: 0: 裂纹 1: 划痕 2: 缺角然后一行开训model YOLO(yolov8n.pt) model.train(datadata.yaml, epochs50, imgsz640, batch16, device0)标注可用 LabelMe 或 Roboflow 导出 YOLO 格式每张图一个.txt每行class x_center y_center w h坐标都归一化到 0~1。小目标多就把imgsz调大、开mosaic增强类别极不均衡时给少数类加损失权重。五、导出 ONNX 上线部署训练完的.pt离不开 Python 环境。上线前导出成 ONNX就能塞进 C 服务或边缘盒子model.export(formatonnx, dynamicTrue, opset17)dynamicTrue让批处理维度可变opset17兼容性最好。导出的yolov8n.onnx可直接被 ONNX Runtime 加载配合 OpenCV 做前后处理整套检测服务就能脱离训练框架独立运行。总结目标检测落地就四步选模型、跑预训练看效果、喂自有数据微调、导出部署。坑大多集中在数据侧——标注质量比模型大小更影响上限小目标和类别失衡要靠增强与加权兜底。把 YOLOv8 这套跑顺你就拥有了把看得懂变成看得见的能力后面接业务只是工程问题。