本文档全面概述了 YOLOv5 中特定于 PyTorch 的实用工具。这些实用工具是促进 YOLOv5 框架中模型训练、推理、优化和部署的关键组件。有关与 PyTorch 无关的通用实用工具的信息,请参阅通用实用工具。
YOLOv5 中的 PyTorch 实用工具服务于几个关键目的
这些实用工具抽象了许多直接使用 PyTorch 的复杂性,提供了针对 YOLOv5 特定要求量身定制的便捷函数。
设备管理实用工具处理模型训练和推理的计算设备(CPU、CUDA GPU、Apple MPS)的选择和配置。
select_device 函数允许自动或手动选择计算设备
来源:utils/torch_utils.py114-148
设备选择过程确定 YOLOv5 操作的最佳可用计算资源
CUDA_VISIBLE_DEVICES=-1 来强制 PyTorch 使用 CPU关键函数
来源:utils/torch_utils.py114-148
其他设备管理实用工具包括:
device_count():通过调用 nvidia-smi 返回可用 CUDA 设备的数量time_sync():同步 CUDA 操作以进行精确的时间测量来源:utils/torch_utils.py104-155
model_info 函数提供有关 YOLOv5 模型结构和资源需求的全面信息
来源:utils/torch_utils.py297-326
profile 函数支持模型操作的详细性能分析
示例输出格式
Params GFLOPs GPU_mem (GB) forward (ms) backward (ms) input output
125952 0.8253 0.005 0.5454 0.8463 [1,3,224,224] [1,64,112,112]
来源:utils/torch_utils.py158-208
YOLOv5 包含多个用于优化模型性能和大小的实用工具
融合卷积层和批量归一化层以提高推理效率
来源:utils/torch_utils.py263-295
fuse_conv_and_bn 函数
来源:utils/torch_utils.py263-295
YOLOv5 提供了模型剪枝和稀疏性计算的实用工具
prune():应用 L1 非结构化剪枝以减小模型大小sparsity():计算全局参数稀疏性(零值参数的百分比)这些函数有助于创建更高效的模型,以便在资源受限的设备上部署。
来源:utils/torch_utils.py241-260
smart_optimizer 函数创建具有专用参数组的优化器以实现有效训练
来源:utils/torch_utils.py351-385
这种方法
来源:utils/torch_utils.py351-385
ModelEMA 类实现了模型权重的指数移动平均
主要功能
来源:utils/torch_utils.py450-483
EarlyStopping 类实现了基于性能停滞的训练终止
这可以防止过拟合,并在训练停滞时节省计算时间。
来源:utils/torch_utils.py422-447
YOLOv5 包含用于跨多个 GPU 进行分布式训练的实用工具
smart_DDP 函数配置分布式数据并行 (DDP) 以进行多 GPU 训练
并行处理的其他实用工具
torch_distributed_zero_first:用于分布式环境中协调操作的上下文管理器is_parallel:检测模型是否正在使用并行处理(DP 或 DDP)de_parallel:解包并行模型以访问基础模型几个实用工具可提高推理效率和便利性
smart_inference_mode 装饰器提供与版本兼容的推理优化
torch.inference_mode()(适用于 PyTorch ≥ 1.9.0)torch.no_grad()(适用于旧版本)smart_hub_load 函数提供强大的 PyTorch Hub 模型加载功能
来源:utils/torch_utils.py388-397 hubconf.py16-103
scale_img 函数处理推理的图像缩放
来源:utils/torch_utils.py328-339
下图说明了 PyTorch 实用工具如何与 YOLOv5 工作流程集成
来源:utils/torch_utils.py36-483 hubconf.py16-103
许多实用工具包含 PyTorch 版本检查以确保兼容性
check_version() 用于根据 PyTorch 版本有条件地执行代码示例模式
一些实用工具有助于管理计算资源
这些模式确保 YOLOv5 在各种硬件配置上高效运行。
来源:utils/torch_utils.py104-155
YOLOv5 中的 PyTorch 实用工具提供了一套全面的工具,用于高效地处理 PyTorch 模型。它们处理模型训练、推理和部署的各个方面,同时抽象了直接 PyTorch 操作中的许多复杂性。这些实用工具对于 YOLOv5 系统的顺畅运行至关重要,并对其性能和可用性做出了重大贡献。
通过使用这些实用工具,开发人员可以更轻松地在不同的硬件配置、训练场景和部署目标中使用 YOLOv5 模型,而无需手动管理底层 PyTorch 交互。