YOLOv8是Ultralytics公司推出的最新一代目标检测算法,它在保持YOLO系列实时性优势的同时,进一步提升了检测精度和易用性。作为计算机视觉领域的重要工具,YOLOv8可以快速准确地识别图像或视频中的各类物体,并标注出它们的位置和类别。
相比前代YOLOv5,v8版本在模型架构、训练策略和推理优化等方面都有显著改进。它提供了从nano到x-large五种不同规模的预训练模型,可以灵活适配从移动端到服务器端的各种应用场景。我在实际工业质检和安防项目中多次使用YOLOv8,其平均精度(mAP)比v5提升了约15%,而推理速度在同等硬件条件下还能快20%左右。
YOLOv8采用改进的CSPDarknet53作为骨干网络,配合PANet特征金字塔结构,实现了更高效的多尺度特征融合。特别值得注意的是其"解耦头"(Decoupled Head)设计,将分类和回归任务分离处理,这解决了传统YOLO头部参数共享导致的优化冲突问题。
在neck部分,v8引入了GSConv(Grouped Spatial Convolution)模块,通过分组卷积减少计算量,同时保持特征提取能力。实测在COCO数据集上,这种设计能让小模型(如YOLOv8n)的参数量减少30%的情况下,mAP仅下降2-3个百分点。
YOLOv8的训练过程有几个关键改进:
我在训练自定义数据集时发现,v8的收敛速度明显快于v5。通常训练300epoch就能达到v5需要500epoch才能达到的精度,这对计算资源有限的团队特别友好。
虽然YOLOv8可以在CPU上运行,但建议至少使用:
对于实时视频处理(>30FPS),推荐RTX 3060及以上显卡。我在Jetson Xavier NX边缘设备上测试YOLOv8n模型,也能达到25FPS的处理速度。
推荐使用conda创建Python3.8环境:
bash复制conda create -n yolov8 python=3.8
conda activate yolov8
pip install ultralytics
如果需要使用ONNX或TensorRT加速,还需额外安装:
bash复制pip install onnx onnxruntime-gpu tensorrt
注意:Windows用户可能需要先安装Visual Studio Build Tools以编译部分依赖
YOLOv8支持多种标注格式,推荐使用YOLO格式:
code复制class_id center_x center_y width height
例如:
code复制0 0.45 0.32 0.12 0.23
目录结构应组织为:
code复制dataset/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
创建data.yaml定义数据集:
yaml复制path: ./dataset
train: images/train
val: images/val
names:
0: person
1: car
2: traffic_light
使用CLI命令最简单:
bash复制yolo train data=data.yaml model=yolov8n.pt epochs=100 imgsz=640
或者使用Python API:
python复制from ultralytics import YOLO
model = YOLO('yolov8n.pt')
results = model.train(
data='data.yaml',
epochs=100,
batch=16,
imgsz=640,
device=0
)
YOLOv8会自动启动TensorBoard记录:
可以通过以下命令查看:
bash复制tensorboard --logdir runs/detect/train
检测单张图像:
bash复制yolo predict model=best.pt source=image.jpg
处理视频流:
bash复制yolo predict model=best.pt source=video.mp4
python复制results = model.predict(
source='input.jpg',
conf=0.25, # 置信度阈值
iou=0.7, # NMS IoU阈值
show=True, # 显示结果
save=True # 保存结果
)
导出为ONNX格式:
python复制model.export(format='onnx')
导出为TensorRT引擎:
python复制model.export(format='engine', device=0)
使用FP16精度可提升推理速度约30%:
python复制model.export(format='onnx', half=True)
对于NVIDIA显卡,建议转换为TensorRT格式:
bash复制yolo export model=best.pt format=engine
python复制from multiprocessing import Pool
def process_image(img_path):
results = model(img_path)
return results
with Pool(4) as p:
p.map(process_image, image_list)
解决方法:
优化策略:
改进方法:
在PCB缺陷检测中,使用YOLOv8s模型:
交通监控场景配置:
python复制model = YOLO('yolov8m.pt')
results = model.track(
source='rtsp://camera_feed',
tracker='bytetrack.yaml',
persist=True
)
细胞检测特殊处理:
修改model.yaml:
yaml复制backbone:
# [from, repeats, module, args]
[[-1, 1, Conv, [64, 3, 2]], # 0-P1/2
[-1, 1, GSConv, [128, 3, 2]], # 1-P2/4
...]
head:
[[-1, 1, nn.Upsample, [None, 2, 'nearest']],
...]
继承v8的Loss类:
python复制from ultralytics.yolo.utils.loss import v8DetectionLoss
class CustomLoss(v8DetectionLoss):
def __init__(self, model):
super().__init__(model)
# 修改损失计算逻辑
model = YOLO('yolov8n.yaml')
model.loss = CustomLoss(model)
使用ONNX Runtime移动版:
我在实际项目中测试,YOLOv8n量化后在骁龙865上能达到18FPS的实时性能。