本页面提供了 YOLOv5 数据处理系统的全面概述,该系统涵盖数据加载、预处理、增强和缓存。理解这些组件对于高效的模型训练和推理至关重要。有关数据集格式的信息,请参阅 Datasets,有关数据增强技术的详细说明,请参阅 Data Augmentation。
YOLOv5 的数据处理系统旨在高效地处理用于目标检测任务的图像及其相应的标签。该系统支持多种输入源,包括图像文件、视频文件、流,甚至屏幕截图,同时提供强大的预处理和增强功能以增强模型训练。
图示:YOLOv5 数据处理概述
来源:utils/dataloaders.py160-218 utils/dataloaders.py322-430 utils/dataloaders.py433-526 utils/dataloaders.py264-320
YOLOv5 使用 YAML 文件来配置数据集,定义图像和标签的路径、类名以及可选的下载脚本。
典型的 YAML 数据集文件包含:
来源:data/coco.yaml10-115 data/coco128.yaml10-100
YOLOv5 中的数据加载管道负责加载图像及其相应的标签,将它们转换为适当的格式,并为模型准备它们。
图示:数据加载类和流程
来源:utils/dataloaders.py160-218 utils/dataloaders.py537-988 utils/dataloaders.py322-430 utils/dataloaders.py433-526 utils/dataloaders.py264-320 utils/segment/dataloaders.py21-83 utils/segment/dataloaders.py86-236
数据加载系统包含几个专用类:
LoadImagesAndLabels:核心数据集类,用于训练,继承自 torch.utils.data.Dataset
LoadImages:加载用于推理的图像和视频
LoadStreams:处理视频流以进行实时推理
LoadScreenshots:捕获和处理屏幕截图
LoadImagesAndLabelsAndMasks:用于分割任务的扩展
来源:utils/dataloaders.py537-988 utils/dataloaders.py322-430 utils/dataloaders.py433-526 utils/dataloaders.py264-320 utils/segment/dataloaders.py86-236
create_dataloader() 函数作为工厂函数,根据提供的参数创建和配置 PyTorch DataLoader 实例。
该函数创建一个 LoadImagesAndLabels 数据集实例,并将其包装在一个标准的 PyTorch DataLoader 或自定义的 InfiniteDataLoader 中,后者会重用工作进程以提高性能。
来源:utils/dataloaders.py160-218 utils/segment/dataloaders.py21-83
YOLOv5 执行几个预处理步骤来为训练或推理准备数据。
Letterboxing:通过添加填充来调整图像大小以匹配目标尺寸,同时保持宽高比。
EXIF 方向处理:根据 EXIF 元数据校正图像方向。
标签转换:在以下格式之间转换边界框:
来源:utils/augmentations.py122-152 utils/dataloaders.py83-117 utils/dataloaders.py848-871
YOLOv5 实现了一个复杂的缓存系统以加速数据加载。
标签缓存:
.cache 文件中。图像缓存:
.npy 文件,以便更快地加载。图示:YOLOv5 缓存系统流程
来源: utils/dataloaders.py591-602 utils/dataloaders.py722-760 utils/dataloaders.py682-702 utils/dataloaders.py703-720 utils/dataloaders.py873-877
YOLOv5 支持矩形训练,它将具有相似纵横比的图像分组到批次中,以最小化填充并最大化 GPU 利用率
来源: utils/dataloaders.py657-680
对于多 GPU 训练,YOLOv5 实现了一个自定义采样器,以确保数据均匀分布
来源: utils/dataloaders.py133-157
YOLOv5 实现了多项内存高效数据处理的优化
InfiniteDataLoader:自定义 DataLoader,它会重用工作进程以减少开销
流式加载和惰性加载:
内存使用估算:
来源: utils/dataloaders.py221-262 utils/dataloaders.py703-720
从数据集配置到模型就绪数据的完整管道涉及几个阶段
图示:完整数据处理管道
来源: utils/dataloaders.py537-988 utils/dataloaders.py160-218 utils/dataloaders.py772-846 utils/augmentations.py74-88 utils/augmentations.py122-152
以下是配置训练数据的一个典型示例
来源: utils/dataloaders.py160-218
对于推理,数据加载方法更简单
来源: utils/dataloaders.py322-430
YOLOv5 的数据处理系统为目标检测任务提供了灵活高效的数据加载、预处理和增强管道。该系统的模块化设计,结合强大的缓存和优化功能,能够实现快速开发和高效的模型训练。
理解本文档所述的数据处理组件对于有效使用 YOLOv5 至关重要,特别是在处理自定义数据集或调整性能时。有关数据处理不同方面的更多具体信息,请参阅以下页面