在计算机视觉领域,数据增强是一种广泛应用于提升模型性能和泛化能力的技术。特别是在目标检测模型YOLOv8中,合理的数据增强策略能够显著提高模型对各类物体的识别和定位准确性。通过对原始训练数据集进行一系列的变换,数据增强能够人为地增加数据的多样性和规模,有助于模型更好地学习到数据的本质特征。
数据增强(Data Augmentation)是一种技术,目的是通过生成新的、合理的数据样本,来增加训练数据的多样性和数量。它的核心思想是:通过人为地“创造”更多的数据,让模型在训练时接触到更多样化的场景,从而提高模型的泛化能力和鲁棒性。
数据增强的常见方法:
YOLOv8通常通过其配置文件(通常是.yaml文件)或通过代码直接在训练脚本中实现数据增强。
names:
- Fire
- default
- smoke
nc: 3
roboflow:
license: CC BY 4.0
project: fire-wrpgm
url: https://universe.roboflow.com/custom-thxhn/fire-wrpgm/dataset/8
version: 8
workspace: custom-thxhn
test: D:/AI_Course_bak/yolo_project/firedected/datasets/fire-8/test/images
train: D:/AI_Course_bak/yolo_project/firedected/datasets/fire-8/train/images
val: D:/AI_Course_bak/yolo_project/firedected/datasets/fire-8/valid/images
#yolov8自带的数据增加的一些参数
augment:
flipud: 0.5 # 50% 概率进行垂直翻转
fliplr: 0.5 # 50% 概率进行水平翻转
mosaic: 1.0 # 启用 Mosaic 数据增强
mixup: 0.5 # 启用 Mixup 数据增强
hsv_h: 0.015 # 色调增强,范围为 ±0.015
hsv_s: 0.7 # 饱和度增强,范围为 ±0.7
hsv_v: 0.4 # 亮度增强,范围为 ±0.4
scale: 0.5 # 随机缩放,范围为 ±50%
shear: 0.0 # 随机剪切,设置为 0 禁用
perspective: 0.0 # 随机透视变换,设置为 0 禁用
from roboflow import Roboflow
# 导入YOLO模块
from ultralytics import YOLO
from albumentations import Compose, RandomBrightnessContrast, HueSaturationValue, ShiftScaleRotate,HorizontalFlip
# 定义强数据增强
def custom_augment():
return Compose([
HorizontalFlip(p=0.5),
RandomBrightnessContrast(p=0.5),
HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, p=0.5)
])
def init_datasets():
rf = Roboflow(api_key="Qi5d659Rhw9nMMLBy4Ou")
project = rf.workspace("custom-thxhn").project("fire-wrpgm")
dataset = project.version(8).download("yolov8")
if __name__ == "__main__":
# init_datasets()
# 使用YOLO的预训练模型,这个模型使用了coco数据集训练是通用的目标检测模型
model = YOLO('./yolov8n.pt')
# 训练数据集
#model.train(data='./datasets/fire-8/data.yaml', epochs=100, batch=4, workers=8, imgsz=800, plots=True, device=0)
#开启数据增加功能的模型训练
model.train(data='./datasets/fire-8/data.yaml', epochs=100, batch=4, workers=8, imgsz=800, plots=True,augment=True, auto_augment=custom_augment,device=0)
# 使用验证集验证效果
model.val()