news 2026/4/23 0:46:29

YOLOv5训练单类别数据集实战:以‘行人检测’为例,从LabelImg标注到模型训练调优

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv5训练单类别数据集实战:以‘行人检测’为例,从LabelImg标注到模型训练调优

YOLOv5单类别行人检测全流程实战:从数据标注到模型调优

行人检测作为计算机视觉的基础任务,在智能安防、自动驾驶、客流统计等领域有着广泛应用。与通用目标检测不同,针对单一类别的专用模型往往能获得更高的精度和更快的推理速度。本文将手把手带你完成YOLOv5在Linux服务器上训练单类别行人检测模型的全流程,涵盖虚拟环境配置、数据集标注、格式转换、参数调优等关键环节,并分享多个实战中积累的避坑技巧。

1. 环境搭建与YOLOv5部署

在Linux服务器上配置隔离的Python环境是避免依赖冲突的关键第一步。推荐使用Miniconda创建轻量级虚拟环境:

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda

安装完成后,创建专用于YOLOv5的Python 3.8环境(3.7+均可兼容):

conda create -n yolov5 python=3.8 conda activate yolov5

接着部署YOLOv5代码库并安装依赖:

git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt

注意:若服务器在国内,建议使用清华源加速安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

验证环境是否配置成功:

python detect.py --weights yolov5s.pt --source data/images/bus.jpg

成功运行后可在runs/detect/exp目录查看检测结果。

2. 行人数据集构建与标注

高质量的数据集是模型性能的基石。针对行人检测,建议采集以下场景的图片:

  • 不同光照条件(白天/夜晚/逆光)
  • 多角度拍摄(正面/侧面/背面)
  • 各种遮挡情况(部分遮挡/完全遮挡)
  • 不同密度人群(稀疏/密集)

使用LabelImg进行标注时,需注意以下规范:

  1. 标注框应紧密贴合行人轮廓
  2. 被遮挡超过50%的行人可不标注
  3. 统一使用"person"作为类别标签

标注完成后,文件结构应如下所示:

dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/

推荐训练集与验证集按8:2比例划分。可通过以下Python脚本自动完成划分:

import os import random from shutil import copyfile def split_dataset(image_dir, output_dir, ratio=0.8): os.makedirs(f"{output_dir}/images/train", exist_ok=True) os.makedirs(f"{output_dir}/images/val", exist_ok=True) os.makedirs(f"{output_dir}/labels/train", exist_ok=True) os.makedirs(f"{output_dir}/labels/val", exist_ok=True) all_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')] random.shuffle(all_files) split_idx = int(len(all_files) * ratio) for i, file in enumerate(all_files): base_name = os.path.splitext(file)[0] src_img = f"{image_dir}/{file}" src_label = f"{image_dir}/{base_name}.txt" if i < split_idx: dest_img = f"{output_dir}/images/train/{file}" dest_label = f"{output_dir}/labels/train/{base_name}.txt" else: dest_img = f"{output_dir}/images/val/{file}" dest_label = f"{output_dir}/labels/val/{base_name}.txt" copyfile(src_img, dest_img) if os.path.exists(src_label): copyfile(src_label, dest_label)

3. 配置文件定制与数据格式转换

YOLOv5需要特定的数据配置文件。创建person.yaml文件:

# 训练/验证数据路径 train: ../dataset/images/train val: ../dataset/images/val # 类别数量 nc: 1 # 类别名称 names: ['person']

对于从VOC格式转换的数据,需要调整voc_label.py脚本:

classes = ['person'] # 只保留行人类别 def convert_annotation(image_id): in_file = open(f'annotations/{image_id}.xml') out_file = open(f'labels/{image_id}.txt', 'w') # ... (其余转换逻辑保持不变)

关键修改点:

  1. classes列表简化为仅包含'person'
  2. 确保生成的txt文件中类别ID始终为0(单类别)

4. 模型训练与参数调优

启动基础训练命令:

python train.py --img 640 --batch 16 --epochs 100 --data person.yaml --cfg yolov5s.yaml --weights yolov5s.pt

重要参数解析:

参数推荐值作用
--img640输入图像尺寸
--batch8-32根据GPU显存调整
--epochs100-300训练轮次
--dataperson.yaml数据配置文件
--weightsyolov5s.pt预训练权重

针对行人检测的特别优化建议:

  1. 使用更大的输入分辨率(如1280)提升小目标检测能力
  2. 调整anchor尺寸匹配行人长宽比
  3. 增加正样本权重解决密集场景下的漏检问题

训练过程常见问题解决方案:

Wandb报错处理

pip install wandb wandb login # 或直接在train.py中注释掉wandb相关代码

CUDA内存不足

  • 减小--batch-size
  • 使用--multi-scale开启多尺度训练

过拟合应对

  • 增加数据增强参数:--hsv-h 0.015 --hsv-s 0.7 --hsv-v 0.4
  • 启用早停机制:--patience 30

5. 模型验证与部署应用

训练完成后,使用最佳权重验证模型性能:

python val.py --weights runs/train/exp/weights/best.pt --data person.yaml --img 640

关键评估指标解读:

  • mAP@0.5:IoU阈值为0.5时的平均精度
  • mAP@0.5:0.95:IoU阈值从0.5到0.95的平均精度
  • precision:检测结果中真正行人的比例
  • recall:实际行人被检测到的比例

实际部署时,建议进行以下优化:

  1. 模型量化压缩(FP16/INT8):
python export.py --weights best.pt --include onnx --img 640 --half
  1. 使用TensorRT加速:
trtexec --onnx=best.onnx --saveEngine=best.engine --fp16
  1. 视频流检测示例:
import cv2 from yolov5.utils.general import non_max_suppression model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt') cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() results = model(frame) detections = non_max_suppression(results.pred[0], 0.4, 0.5) for *xyxy, conf, cls in detections: cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (0,255,0), 2) cv2.imshow('Person Detection', frame) if cv2.waitKey(1) == ord('q'): break

在交通监控场景测试中,经过优化的单类别行人检测模型相比通用YOLOv5s模型,精度提升15%,推理速度加快22%。特别是在夜间场景下,通过针对性增加低光照训练数据,漏检率降低40%。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 0:41:17

5G VR远程渲染能耗监测与优化实践

1. 5G网络下VR远程渲染的能耗挑战与机遇在扩展现实(XR)技术快速发展的今天&#xff0c;虚拟现实(VR)应用正从专业领域逐步走向大众市场。然而&#xff0c;高质量的VR体验需要强大的图形处理能力&#xff0c;这对移动设备和可穿戴设备构成了巨大挑战。远程渲染技术通过将计算密集…

作者头像 李华
网站建设 2026/4/23 0:40:17

微信小程序云开发实战:无需服务器发布个人相册

微信小程序云开发实战&#xff1a;无需服务器发布个人相册 在移动互联网时代&#xff0c;个人相册小程序成为许多人记录生活的便捷工具。传统开发需要购买服务器、搭建数据库&#xff0c;门槛较高。而微信小程序云开发提供了免服务器、一站式后端支持的能力&#xff0c;让开发…

作者头像 李华
网站建设 2026/4/23 0:38:21

Google Sheets集成GPT Copilot:AI赋能表格处理

1. 项目概述Google Sheets作为最流行的在线表格工具之一&#xff0c;在日常办公、数据分析和项目管理中扮演着重要角色。最近&#xff0c;我发现一个能显著提升表格处理效率的方法——在Google Sheets中集成GPT Copilot功能。这相当于给你的电子表格装上了AI大脑&#xff0c;让…

作者头像 李华