YOLOv8是YOLOv5团队在今年新推出的一代YOLO版本,与前几代版本相比,其性能和速度差距如下图所示:
和其它版本不同的是,该仓库并非起名为YOLOv8,而是公司名ultralytics
,因为他们想将此版本作为一个通用库,以方便调用和部署。
仓库地址:https://github.com/ultralytics/ultralytics
官方教程:https://docs.ultralytics.com/modes/train/
官方教程中提供了Python和命令行(CLI)两种调用方式,本文只对前者进行试用。
由于YOLOv8是作为一款通用库的形式,因此无需想YOLOv5那样下载整个文件,而只需用pip进行安装。
pip install ultralytics
值得注意的是,该库包含了torch/torchvision两个需要区分GPU/CPU版本的依赖,安装完成之后,需要检查一下torch是否可用GPU。
检查方式:
import torch
print(torch.cuda.is_available())
加载模型有下面三种方式,通常用第二种即可。
# Load a model
model = YOLO('models/yolov8n.yaml') # build a new model from YAML
model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights
下面以coco128数据集为例开始训练,训练只需一行代码:
results = model.train(data='coco128.yaml', epochs=2, imgsz=640, workers=0, batch=2)
运行之后,程序会自动下载数据集和模型,这里的train
接口有很多参数选择,大多数与YOLOv5中的参数一致。
具体参数和含义可查阅文档Arguments
这一节:
模型验证也相当简单,只需这几行代码:
metrics = model.val(data='coco128.yaml', imgsz=640, workers=0, batch=2) # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # a list contains map50-95 of each category
运行效果和YOLOv5中的val.py一致,会在run/val
路径下生成验证结果。
YOLOv8目前支持的推理有:目标检测、目标检测+分割、目标检测+姿态检测、目标跟踪。
注:所有的任务都以检测为基础,官方并未单独提出其他任务的训练方式。
# Load a model
model = YOLO('yolov8n.pt') # load a pretrained model
# Run inference on 'bus.jpg' with arguments
model.predict('data/bus.jpg', save=True, imgsz=320, conf=0.5)
这里的图片路径可以自行修改指定。
# Load a pretrained YOLOv8n-seg Segment model
model = YOLO('yolov8n-seg.pt')
# Run inference on an image
results = model('data/bus.jpg', save=True)
接口完全一致,只是所加载的模型不一样。
效果:
# Load a pretrained YOLOv8n-pose Pose model
model = YOLO('yolov8n-pose.pt')
# Run inference on an image
results = model('data/bus.jpg', save=True) # results list
# load a pretrained model
model = YOLO('yolov8n.pt')
results = model.track(source="data/malasong.mp4", save=True)
目标跟踪接口是track
,需要导入视频数据,以下是视频中的某一帧。
YOLOv8在YOLOv5的基础上,加入了Anthor-free等众多tricks,模型性能比前代有所提升。整体上统一了多任务的接口,方便应用和部署。不过对于研究者来说,无疑让网络复杂的黑盒模式进一步加深,不利于二次开发。