在计算机视觉领域,目标检测一直是核心研究方向之一。YOLOv8作为Ultralytics公司推出的最新目标检测算法,凭借其出色的速度和精度平衡,已经成为工业界和学术界的宠儿。而Google Colab提供的免费GPU资源,让没有高端硬件设备的开发者也能轻松运行这类计算密集型任务。
我最近在Colab上完整跑通了YOLOv8的训练和推理流程,过程中踩了不少坑,也积累了一些实用技巧。本文将详细介绍如何在Colab环境中高效运行YOLOv8项目,包括环境配置、数据准备、模型训练和推理部署等全流程。
首先打开Google Colab(建议使用Chrome浏览器),新建一个笔记本。在"运行时"菜单中选择"更改运行时类型",确保选择的是GPU加速(T4或V100都可以)。
python复制# 检查GPU是否可用
import torch
print(f"PyTorch版本: {torch.__version__}")
print(f"GPU可用: {torch.cuda.is_available()}")
print(f"GPU型号: {torch.cuda.get_device_name(0)}")
注意:Colab的GPU资源是有限的,连续使用超过12小时可能会被强制断开。建议在长时间训练时定期保存检查点。
YOLOv8可以通过pip直接安装ultralytics包:
bash复制!pip install ultralytics
!pip install opencv-python matplotlib
安装完成后验证:
python复制from ultralytics import YOLO
print(YOLO('yolov8n.pt').info())
YOLOv8支持多种数据格式,推荐使用YOLO格式:
class_id x_center y_center width height(归一化坐标)在Colab中上传数据有三种方式:
python复制# 挂载Google Drive
from google.colab import drive
drive.mount('/content/drive')
# 示例:从Roboflow下载公开数据集
!pip install roboflow
from roboflow import Roboflow
rf = Roboflow(api_key="your_api_key")
project = rf.workspace("workspace").project("project_name")
dataset = project.version(1).download("yolov8")
如果你的数据是COCO或VOC格式,需要转换为YOLO格式:
python复制from ultralytics.data.converter import convert_coco
convert_coco(
labels_dir='/path/to/coco/annotations',
save_dir='/path/to/yolo/labels',
use_segments=False,
use_keypoints=False
)
YOLOv8提供了多个预训练模型,根据需求选择:
| 模型类型 | 参数量 | 适用场景 |
|---|---|---|
| yolov8n | 3.2M | 移动端/嵌入式 |
| yolov8s | 11.4M | 平衡型 |
| yolov8m | 26.2M | 服务器部署 |
| yolov8l | 43.7M | 高性能需求 |
| yolov8x | 68.2M | 最高精度 |
python复制# 加载预训练模型
model = YOLO('yolov8s.pt') # 以yolov8s为例
创建data.yaml配置文件:
yaml复制# data.yaml示例
train: /content/dataset/train/images
val: /content/dataset/valid/images
nc: 10 # 类别数
names: ['person', 'car', 'dog', ...] # 类别名称
开始训练:
python复制results = model.train(
data='data.yaml',
epochs=100,
imgsz=640,
batch=16,
device=0, # 使用GPU
workers=2,
optimizer='AdamW',
lr0=0.001,
patience=10,
pretrained=True
)
实操技巧:在Colab中训练时,建议先用小样本(epochs=10)测试流程是否正常,再开始完整训练。
python复制metrics = model.val(
data='data.yaml',
split='val',
batch=16,
conf=0.25,
iou=0.6
)
print(metrics.box.map) # 打印mAP指标
python复制results = model.predict(
source='/content/test.jpg',
conf=0.5,
save=True,
show_labels=True,
show_conf=True
)
YOLOv8支持导出多种部署格式:
python复制model.export(format='onnx') # 导出为ONNX
model.export(format='tflite') # 导出为TFLite
model.export(format='engine') # 导出为TensorRT
症状:训练时出现CUDA out of memory错误。
解决方案:
症状:损失值波动大或持续不下降。
解决方案:
症状:长时间训练时Colab自动断开。
解决方案:
javascript复制function ClickConnect(){
console.log("保持连接中");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect, 60*1000)
yaml复制# data.yaml
augment: True
augmentation:
hsv_h: 0.015 # 色调增强
hsv_s: 0.7 # 饱和度增强
hsv_v: 0.4 # 明度增强
degrees: 10 # 旋转角度
translate: 0.1 # 平移
scale: 0.5 # 缩放
shear: 0.0 # 剪切
perspective: 0.0 # 透视变换
flipud: 0.0 # 上下翻转概率
fliplr: 0.5 # 左右翻转概率
python复制# 模型剪枝
from ultralytics.yolo.utils.torch_utils import prune_model
prune_model(model, amount=0.3) # 剪枝30%的通道
# 模型量化
model.quantize() # PTQ量化
python复制!pip install wandb
import wandb
wandb.init(project="yolov8-colab")
results = model.train(
...,
project="yolov8-colab",
name="exp1",
entity="your_username"
)
在Colab上运行YOLOv8虽然方便,但要获得最佳性能还是需要针对具体任务进行调整。建议从小的模型开始,逐步增加复杂度。训练过程中要密切监控指标变化,及时调整超参数。