从零部署YOLOv5人脸检测:环境搭建、数据标注到实时应用

从零部署YOLOv5人脸检测:环境搭建、数据标注到实时应用

1. 环境准备:从零搭建YOLOv5开发环境

第一次接触YOLOv5时,我花了两天时间才把环境配好,主要卡在CUDA和PyTorch版本兼容问题上。后来发现其实用conda管理环境特别方便,这里分享我的踩坑经验。建议使用Ubuntu 20.04系统,实测NVIDIA驱动安装最稳定。先确保你的显卡驱动正常,运行nvidia-smi能看到显卡信息。

安装Anaconda后,创建一个专门的环境:

conda create -n yolov5 python=3.8 conda activate yolov5

关键依赖安装顺序很重要:

  1. 先装PyTorch(建议1.7.1版本)
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
  1. 再装其他依赖
pip install opencv-python matplotlib pandas tqdm seaborn

克隆YOLOv5官方仓库时,推荐用国内镜像加速:

git clone https://gitee.com/mirrors/YOLOv5.git cd yolov5 pip install -r requirements.txt

注意:如果遇到SSL证书错误,可以尝试在pip命令后加--trusted-host pypi.org --trusted-host files.pythonhosted.org

2. 数据准备:高效标注人脸数据集

我用过三种标注工具,最终发现LabelImg最适合新手。安装很简单:

pip install labelImg labelImg

打开软件后记得设置两点:

  1. 右下角选择YOLO格式
  2. 保存目录选labels文件夹

标注技巧:

  • 框选时尽量贴近人脸边缘
  • 遇到侧脸时以可见面部区域为准
  • 遮挡超过50%的人脸建议不标注

数据集划分我建议按7:2:1的比例:

  • 训练集:70%
  • 验证集:20%
  • 测试集:10%

目录结构示例:

CASIA-FaceV5/ ├── images │ ├── train │ ├── val │ └── test └── labels ├── train ├── val └── test

3. 模型配置:定制化YOLOv5s网络

在yolov5/models目录下复制yolov5s.yaml,重命名为face.yaml。只需修改两个参数:

nc: 1 # 只有人脸一个类别 names: ['face'] # 类别名称

数据配置文件(data/face.yaml)示例:

train: ../CASIA-FaceV5/images/train val: ../CASIA-FaceV5/images/val nc: 1 names: ['face']

训练参数建议:

  • 小显存(6GB以下):batch-size设为8-12
  • 中等显存(8GB):batch-size 16-24
  • 大显存:可以尝试32

4. 模型训练:从预训练模型迁移学习

启动训练的命令详解:

python train.py \ --data data/face.yaml \ --cfg models/face.yaml \ --weights yolov5s.pt \ --epochs 100 \ --batch-size 16 \ --img-size 640 \ --device 0 # 使用第一块GPU

训练过程常见问题:

  1. Loss不下降:检查学习率(默认0.01可能太大)
  2. CUDA内存不足:减小batch-size
  3. 验证集mAP低:检查标注质量

实时监控训练进度:

tensorboard --logdir runs/train

5. 模型验证与测试

验证模型性能:

python val.py \ --data data/face.yaml \ --weights runs/train/exp/weights/best.pt \ --batch-size 8 \ --task test # 在测试集上验证

测试单张图片:

python detect.py \ --weights runs/train/exp/weights/best.pt \ --source test.jpg \ --conf 0.5 # 置信度阈值

6. 实时人脸检测部署

摄像头实时检测命令:

python detect.py \ --weights best.pt \ --source 0 \ # 0表示默认摄像头 --view-img \ # 实时显示窗口 --conf-thres 0.6 # 调高阈值减少误检

性能优化技巧:

  1. 添加--half参数使用半精度推理
  2. 使用TensorRT加速(需导出ONNX)
  3. 对于多摄像头,可以用--source rtsp://url

7. 常见问题解决方案

  1. 检测框闪烁问题:
  • 使用ByteTrack等跟踪算法
  • 在detect.py中添加帧间缓存
  1. 小脸检测效果差:
  • 修改model.yaml中的anchor尺寸
  • 数据增强中添加更多小脸样本
  1. 侧脸漏检:
  • 增加侧脸训练数据
  • 调整非极大抑制参数iou-thres

最后分享一个实用技巧:在detect.py中添加以下代码可以保存检测结果:

if save_img: cv2.imwrite(save_path, im0)