在Windows 10上用GTX 960M显卡跑YOLOv5:基于Pascal VOC 2012数据集的训练效率实测与调优心得

张开发
2026/4/21 12:01:20 15 分钟阅读

分享文章

在Windows 10上用GTX 960M显卡跑YOLOv5:基于Pascal VOC 2012数据集的训练效率实测与调优心得
在Windows 10上用GTX 960M显卡跑YOLOv5基于Pascal VOC 2012数据集的训练效率实测与调优心得当你想在个人电脑上实践目标检测模型训练时老旧或中端显卡往往成为性能瓶颈。本文记录了在GTX 960M显卡4GB显存搭配Intel i7-6700HQ处理器的Windows 10系统上使用Pascal VOC 2012数据集训练YOLOv5的完整过程。不同于常规教程我们将重点分析硬件限制下的参数调优策略包括batch size、workers数量等关键参数的取舍以及如何解决Windows平台特有的页面文件太小等错误。如果你也在使用类似配置这些实战经验能帮你节省大量试错时间。1. 硬件环境准备与性能基准测试1.1 测试平台规格详情先来看这套五年前主流游戏本的硬件配置组件型号/参数备注CPUIntel i7-6700HQ4核8线程基础频率2.6GHzGPUNVIDIA GTX 960M4GB GDDR5显存内存8GB DDR4单通道存储512GB SATA SSD读写约500MB/s操作系统Windows 10 21H2专业版提示通过nvidia-smi命令可以查看GPU的CUDA计算能力GTX 960M为5.0刚好满足PyTorch的最低要求。1.2 软件环境配置要点为确保环境稳定建议按以下版本组合安装conda create -n yolov5 python3.8 conda install pytorch1.9.0 torchvision0.10.0 torchaudio0.9.0 cudatoolkit10.2 -c pytorch pip install -r requirements.txt # YOLOv5官方要求关键组件版本选择依据CUDA 10.2GTX 960M驱动最高支持到CUDA 10.2cuDNN 8.3.0与CUDA 10.2兼容的稳定版本PyTorch 1.9.0最后一个完整支持CUDA 10.2的稳定版本2. Pascal VOC 2012数据集处理优化2.1 数据集格式转换实战原始Pascal VOC使用XML标注格式需转换为YOLO格式的TXT文件。我们优化了转换脚本的内存使用# 改进的内存友好型转换脚本 def convert_annotation(image_id): in_file fVOCdevkit/VOC2012/Annotations/{image_id}.xml out_file fVOCdevkit/VOC2012/YOLOLabels/{image_id}.txt with open(in_file) as f: tree ET.parse(f) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) with open(out_file, w) as out_f: for obj in root.iter(object): # ...转换逻辑保持不变...转换后的目录结构应严格遵循VOCdevkit ├── images │ ├── train │ └── val └── labels ├── train └── val2.2 小显存下的数据集加载技巧对于4GB显存的GTX 960M可采用以下策略减轻内存压力图像尺寸调整将默认的640x640降至416x416启用缓存在data.yaml中添加cache: ram需至少16GB内存或cache: disk预加载优化修改datasets.py中的__getitem__方法def __getitem__(self, index): # 原始实现会同时加载图像和标签 # 修改为按需加载 img self.imgs[index] if img is None: path self.img_files[index] img cv2.imread(path) self.imgs[index] img # 缓存图像 # ...其余处理逻辑...3. 训练参数调优实战3.1 batch size与workers的平衡艺术经过多次测试得到不同参数组合下的训练速度对比batch_sizeworkers内存占用单个epoch时间备注403.2GB2小时15分最稳定方案823.8GB1小时50分偶尔出现OOM1644.5GB崩溃显存不足注意Windows平台下workers数量建议设为0因为Python的多进程在Windows上效率较低且容易引发内存问题。3.2 解决页面文件太小错误这是Windows平台特有错误可通过三种方式解决修改系统虚拟内存推荐设置至少16GB的页面文件路径控制面板 系统 高级系统设置 性能设置 高级 虚拟内存代码级修改 在utils/datasets.py中找到以下代码并修改# 原始代码 num_workers min([os.cpu_count(), batch_size if batch_size 1 else 0, 8]) # 修改为强制单进程 num_workers 0注册表调整高级用户 修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management中的PagedPoolSize4. 模型选择与精度权衡4.1 YOLOv5不同版本的性能对比在GTX 960M上测试各模型变体的表现模型参数量输入尺寸mAP0.5训练时间/epochYOLOv5n1.9M416x4160.4545分钟YOLOv5s7.2M416x4160.561小时20分YOLOv5m21.2M416x4160.612小时30分对于老旧显卡YOLOv5s是最佳平衡点。若追求更快速度可考虑# models/yolov5s_custom.yaml depth_multiple: 0.33 # 原为0.33 width_multiple: 0.25 # 原为0.50进一步缩小网络宽度4.2 训练过程中的监控技巧使用以下命令实时监控硬件状态# Windows终端命令 nvidia-smi -l 1 # 每秒刷新GPU状态 tasklist /FI IMAGENAME eq python.exe # 查看Python进程内存典型性能瓶颈分析GPU利用率低70%通常是数据加载瓶颈尝试减少图像预处理复杂度显存爆满降低batch size或使用梯度累积CPU满载检查是否有其他后台进程占用资源5. 实际训练日志分析以下是一次完整训练的关键指标变化Epoch gpu_mem box obj cls total targets img_size 0/299 3.12G 0.0512 0.0201 0.00812 0.0794 35 416 50/299 3.14G 0.0385 0.0152 0.00621 0.0599 32 416 100/299 3.15G 0.0321 0.0128 0.00503 0.0499 30 416观察到显存占用稳定在3.1-3.2GB损失函数下降曲线正常没有出现内存泄漏迹象当使用GTX 960M完成300个epoch的训练后在PASCAL VOC 2012验证集上达到mAP0.5: 0.58推理速度22 FPS416x416输入这套配置虽然无法与最新显卡相比但对于学习目标检测原理和完成小规模项目已经足够。最关键的是掌握了在资源有限条件下进行深度学习训练的实用技巧这对理解算法底层原理反而更有帮助。

更多文章