YOLO 命令行
YOLO命令行界面(command line interface, CLI), 方便在各种任务和版本上训练、验证或推断模型。CLI不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。
【YOLO CLI 官方文档】:CLI - Ultralytics YOLOv8 Docs
语法(Usage)
yolo TASK MODE ARGS
Where TASK (optional) is one of [detect, segment, classify]
MODE (required) is one of [train, val, predict, export, track]
ARGS (optional) are any number of custom 'arg=value' pairs like 'imgsz=320' that override defaults.
查看所有参数:yolo cfg
训练(Train)
在COCO128上以图像大小 640 训练 YOLOv8n 100 个 epoch
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
恢复中断的训练
yolo detect train resume model=last.pt
验证(Val)
在COCO128数据集上验证经过训练的 YOLOv8n 模型准确性。无需传递参数,因为它 model 保留了它的训练 data 和参数作为模型属性。
yolo detect val model=path/to/best.pt
预测(Predict)
使用经过训练的 YOLOv8n 模型对图像运行预测。
yolo detect predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'
导出(Export)
将 YOLOv8n 模型导出为不同的格式,如 ONNX、CoreML 等。
yolo export model=path/to/best.pt format=onnx
可用导出形式如下
覆盖默认配置文件
首先使用命令 yolo copy-cfg 在当前工作目录中创建一个 default.yaml 的副本 default_copy.yaml,之后即可指定配置文件来覆盖默认配置文件
yolo cfg=default_copy.yaml imgsz=320
Python 脚本
YOLOv8 可以无缝集成到 Python 项目中,以进行对象检测、分割和分类。同时易于使用的 Python 界面是一个宝贵的资源,能够快速实现高级对象检测功能
【YOLO Python 官方文档】:CLI - Ultralytics YOLOv8 Docs — CLI - Ultralytics YOLOv8 文档
示例
from ultralytics import YOLO
#从头开始创建一个新的YOLO模型
model = YOLO('yolov8n.yaml')
#加载预训练的YOLO模型(推荐用于训练)
model = YOLO('yolov8n.pt')
#使用'coco128.yaml'数据集对模型进行训练,训练3个epoch
results = model.train(data='coco128.yaml', epochs=3)
在验证集上评估模型的性能
results = model.val()
#使用模型对图像进行目标检测
results = model('https://ultralytics.com/images/bus.jpg')
#将模型导出为ONNX格式
success = model.export(format='onnx')
训练
训练模式用于在自定义数据集上训练 YOLOv8 模型。在此模式下,使用指定的数据集和超参数训练模型。训练过程涉及优化模型的参数,以便它可以准确地预测图像中对象的类别和位置。
预训练(From pretrained 推荐使用)
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # pass any model type
results = model.train(epochs=5)
初始训练(From scratch)
from ultralytics import YOLO
model = YOLO('yolov8n.yaml')
results = model.train(data='coco128.yaml', epochs=5)
恢复训练(Resume)
model = YOLO("last.pt")
results = model.train(resume=True)
验证
Val 模式用于在训练 YOLOv8 模型后对其进行验证。在此模式下,在验证集上评估模型,以衡量其准确性和泛化性能。此模式可用于调整模型的超参数以提高其性能。
训练后验证
from ultralytics import YOLO
#导入YOLO模型
model = YOLO('yolov8n.yaml')
#使用'coco128.yaml'数据集对模型进行训练,训练5个epoch
model.train(data='coco128.yaml', epochs=5)
#对训练数据进行自动评估
model.val() # 它会自动评估您训练的数据。
单独验证
from ultralytics import YOLO
#导入YOLO模型
model = YOLO("model.pt")
#如果您没有设置data参数,它将使用model.pt中的数据YAML文件。
model.val()
#或者您可以设置要验证的数据
model.val(data='coco128.yaml')
预测
预测模式用于使用经过训练的 YOLOv8 模型对新图像或视频进行预测。在此模式下,模型从检查点文件加载,用户可以提供图像或视频来执行推理。该模型预测输入图像或视频中对象的类别和位置。
from ultralytics import YOLO
from PIL import Image
import cv2
model = YOLO("model.pt")
#接受各种格式 - 图像/目录/路径/URL/视频/PIL/ndarray。0表示网络摄像头
results = model.predict(source="0")
results = model.predict(source="folder", show=True) # 显示预测结果。接受所有YOLO预测参数
#使用PIL库
im1 = Image.open("bus.jpg")
results = model.predict(source=im1, save=True) # 保存绘制的图像
使用ndarray
im2 = cv2.imread("bus.jpg")
results = model.predict(source=im2, save=True, save_txt=True) # 将预测结果保存为标签
使用PIL/ndarray列表
results = model.predict(source=[im1, im2])
导出
导出模式用于将 YOLOv8 模型导出为可用于部署的格式。在此模式下,模型将转换为可供其他软件应用程序或硬件设备使用的格式。将模型部署到生产环境时,此模式非常有用。
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.export(format='onnx', dynamic=True)
跟踪
跟踪模式用于使用 YOLOv8 模型实时跟踪对象。在此模式下,模型从检查点文件加载,用户可以提供实时视频流来执行实时对象跟踪。此模式对于监控系统或自动驾驶汽车等应用非常有用。
from ultralytics import YOLO
#加载模型
model = YOLO('yolov8n.pt') # 加载官方的检测模型
model = YOLO('yolov8n-seg.pt') # 加载官方的分割模型
model = YOLO('path/to/best.pt') # 加载自定义模型
使用模型进行目标跟踪
results = model.track(source="https://youtu.be/Zgi9g1ksQHc", show=True)
results = model.track(source="https://youtu.be/Zgi9g1ksQHc", show=True, tracker="bytetrack.yaml")
训练器
YOLO模型类是Trainer类的高级包装器。每个YOLO任务都有自己的从BaseTrainer继承来的训练器。
from ultralytics.yolo import v8 import DetectionTrainer, DetectionValidator, DetectionPredictor
#trainer
trainer = DetectionTrainer(overrides={})
trainer.train()
trained_model = trainer.best
#Validator
val = DetectionValidator(args=...)
val(model=trained_model)
predictor
pred = DetectionPredictor(overrides={})
pred(source=SOURCE, model=trained_model)
#resume from last weight
overrides["resume"] = trainer.last
trainer = detect.DetectionTrainer(overrides=overrides)