从零部署YOLOv5人脸检测:环境搭建、数据标注到实时应用
1. 环境准备:从零搭建YOLOv5开发环境
第一次接触YOLOv5时,我花了两天时间才把环境配好,主要卡在CUDA和PyTorch版本兼容问题上。后来发现其实用conda管理环境特别方便,这里分享我的踩坑经验。建议使用Ubuntu 20.04系统,实测NVIDIA驱动安装最稳定。先确保你的显卡驱动正常,运行nvidia-smi能看到显卡信息。
安装Anaconda后,创建一个专门的环境:
conda create -n yolov5 python=3.8 conda activate yolov5关键依赖安装顺序很重要:
- 先装PyTorch(建议1.7.1版本)
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch- 再装其他依赖
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打开软件后记得设置两点:
- 右下角选择YOLO格式
- 保存目录选labels文件夹
标注技巧:
- 框选时尽量贴近人脸边缘
- 遇到侧脸时以可见面部区域为准
- 遮挡超过50%的人脸建议不标注
数据集划分我建议按7:2:1的比例:
- 训练集:70%
- 验证集:20%
- 测试集:10%
目录结构示例:
CASIA-FaceV5/ ├── images │ ├── train │ ├── val │ └── test └── labels ├── train ├── val └── test3. 模型配置:定制化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训练过程常见问题:
- Loss不下降:检查学习率(默认0.01可能太大)
- CUDA内存不足:减小batch-size
- 验证集mAP低:检查标注质量
实时监控训练进度:
tensorboard --logdir runs/train5. 模型验证与测试
验证模型性能:
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 # 调高阈值减少误检性能优化技巧:
- 添加--half参数使用半精度推理
- 使用TensorRT加速(需导出ONNX)
- 对于多摄像头,可以用--source rtsp://url
7. 常见问题解决方案
- 检测框闪烁问题:
- 使用ByteTrack等跟踪算法
- 在detect.py中添加帧间缓存
- 小脸检测效果差:
- 修改model.yaml中的anchor尺寸
- 数据增强中添加更多小脸样本
- 侧脸漏检:
- 增加侧脸训练数据
- 调整非极大抑制参数iou-thres
最后分享一个实用技巧:在detect.py中添加以下代码可以保存检测结果:
if save_img: cv2.imwrite(save_path, im0)