人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26 实现人脸检测和行人检测(含数据集和训练代码)

人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26实现人脸检测和行人检测(含数据集和训练代码)

目录

[人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26实现人脸检测和行人检测(含数据集和训练代码)](#人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26实现人脸检测和行人检测(含数据集和训练代码))

[1. 前言](#1. 前言)

[2. 人脸检测和行人检测数据集说明](#2. 人脸检测和行人检测数据集说明)

(1)人脸检测和行人检测数据集

(2)自定义数据集

[3. 模型训练](#3. 模型训练)

(1)Ultralytics安装

(2)准备Train和Test数据

(3)配置数据文件

(4)超参文件

(5)开始训练

(6)可视化训练结果

(7)常见的错误

[4. Python版本人脸检测和行人检测效果](#4. Python版本人脸检测和行人检测效果)

[5. Android版本人脸检测和行人检测效果](#5. Android版本人脸检测和行人检测效果)

6.项目源码下载


1. 前言

这是项目《人脸检测和行人检测》系列中的《YOLOv8 / YOLO11 / YOLO26 实现人脸检测和行人检测(含数据集和训练代码) 》。本项目基于开源的 Ultralytics 框架,实现一个轻量级的、高性能的、可实时的人脸检测和行人检测模型算法(Face and Person Detection)。项目开源配套了完整的训练源码、测试脚本以及适配的专用数据集,用户仅需简单配置运行环境与基础参数,即可快速启动模型训练、性能测试、效果验证等全流程实验。同时,为满足实际产业落地与边缘端部署需求,项目额外配套了成熟的C/C++部署工程与Android移动端部署项目,完整打通模型训练、效果测试、边缘终端部署的全技术开发闭环,可直接适配PC端、嵌入式设备、移动端等多终端场景,具备极高的工程落地价值与复用性。

为了更直观地展示不同版本模型在精度与效率之间的权衡,下表详细对比了 YOLOv8n、YOLO11n 以及 YOLO26n的计算量(FLOPs)、参数量(Params),以及在人脸检测和行人检测任务上的具体性能指标:

|-------------|----------------|---------------|------------|-------------|------------------|
| 模型 | input-size | params(M) | GFLOPs | mAP_0.5 | mAP_0.5:0.95 |
| YOLOv8n | 416×416 | 3.15M | 3.7 | 0.97046 | 0.79315 |
| YOLO11n | 416×416 | 2.62M | 2.7 | 0.97001 | 0.79531 |
| YOLO26n | 416×416 | 2.41M | 2.3 | 0.97002 | 0.79009 |

先展示一下人脸检测和行人检测效果:

Android人脸检测和行人检测APP Demo体验:

【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/164620332


更多项目《人脸检测和行人检测》系列文章请参考:

  1. 人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)
  2. 人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26 实现人脸检测和行人检测(含数据集和训练代码) https://blog.csdn.net/guyuealian/article/details/164620332
  3. 人脸检测和行人检测3:C/C++实现YOLOv8 YOLO11 YOLO26 人脸检测和人体检测(含源码,可实时检测) https://blog.csdn.net/guyuealian/article/details/164629582
  4. 人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测) https://blog.csdn.net/guyuealian/article/details/164629596

​ 如果需要进行人像分割,实现一键抠图效果,请参考文章:《一键抠图Portrait Matting人像抠图 (C++和Android源码)

|-----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| | | |


2. 人脸检测和行人检测数据集说明

(1)人脸检测和行人检测数据集

目前收集了约10W+的人体(行人)检测数据集,数据集主要来源于VOC,COCO和MPII的人体数据集,关于人体数据集说明,请参考《人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接) 》:人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)

(2)自定义数据集

如果需要增/删类别数据进行训练,或者需要自定数据集进行训练,可参考如下步骤:

  1. 采集图片,建议不少于200张图片
  2. 使用Labelme等标注工具,对目标进行拉框标注:labelme工具:GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).
  3. 将标注格式转换为VOC数据格式,参考工具:labelme/labelme2voc.py at main · wkentaro/labelme · GitHub
  4. 生成训练集train.txt和验证集val.txt文件列表
  5. 修改cfg/custom/voc-face-person.yaml的train和val的数据路径
  6. 运行脚本scripts/train.sh,重新开始训练

​​​


3. 模型训练

(1)Ultralytics安装

ultralytics 是一个专注于计算机视觉 的开源 AI 库,其核心产品是 YOLO (You Only Look Once) 系列模型 ,如YOLOv8,YOLO11,YOLO26等模型,在学术界和工业界都享有盛誉,以其卓越的速度、精度和易用性而闻名。

原始ultralytics训练的数据格式主要支持YOLO格式,其他数据集格式需要转换为YOLO格式才能训练。为兼容多种格式,项目在开源项目ultralytics基础上重新构建了增强版的ultralytics,即ultralytics-plus,增加了一些特性,可直接支持Labelme、COCO 和 Pascal VOC等数据格式训练和测试。

关于ultralytics-plus安装和说明,请参考https://blog.csdn.net/guyuealian/article/details/164299205

ultralytics-plus已经包含了ultralytics,不需要重复安装ultralytics

ultralytics-plus安装方法:

bash 复制代码
# ultralytics-plus已经包含了ultralytics,不需要重复ultralytics
# 下载源码ultralytics-plus
git clone https://github.com/PanJinquan/ultralytics-plus
cd ultralytics-plus
# 切换到dev
git checkout dev
# 如果使用了conda,请激活你的虚拟环境
# conda activate  py310  # 激活虚拟环境py310(每次运行都需要运行)
pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple
# 当安装成功后,可以测试ultralytics-plus是否正常训练
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=1 imgsz=640 # 会自动下载相关数据进行测试

Python依赖环境,使用pip安装即可**,项目代码都在Ubuntu系统和Windows系统验证正常运行,请放心使用;若出现异常,大概率是相关依赖包版本没有完全对应**

python 复制代码
# Ultralytics requirements
# Usage: pip install -r requirements.txt
# pip install torch==2.2.0 torchvision==0.17.0 --index-url https://download.pytorch.org/whl/cpu

# Base ----------------------------------------
ultralytics==8.0.180
matplotlib>=3.2.2
numpy>=1.22.2 # pinned by Snyk to avoid a vulnerability
opencv-python>=4.6.0
pillow>=7.1.2
pyyaml>=5.3.1
requests>=2.23.0
scipy>=1.4.1
# torch>=1.8.0
# torchvision>=0.9.0
tqdm>=4.64.0

# Logging -------------------------------------
# tensorboard>=2.13.0
# dvclive>=2.12.0
# clearml
# comet

# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0

# Export --------------------------------------
# coremltools>=7.0.b1  # CoreML export
# onnx>=1.12.0  # ONNX export
# onnxsim>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn==0.19.2  # CoreML quantization
# tensorflow>=2.4.1  # TF exports (-cpu, -aarch64, -macos)
# tflite-support
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev>=2023.0  # OpenVINO export

# Extras --------------------------------------
psutil  # system utilization
py-cpuinfo  # display CPU info
# thop>=0.1.1  # FLOPs computation
# ipython  # interactive notebook
# albumentations>=1.0.3  # training augmentations
# pycocotools>=2.0.6  # COCO mAP
# roboflow

easydict
pybaseutils
pycocotools
toolz

推荐使用Python3.10,更高版本可能存在版本差异问题, 项目安装教程请参考(初学者入门,麻烦先看完下面教程,配置好开发环境):

(2)准备Train和Test数据

下载人体检测数据集, 关于人体数据集说明,请参考《行人检测(人体检测)1:人体检测数据集(含下载链接)》:行人检测(人体检测)1:人体检测数据集(含下载链接)

(3)配置数据文件

  • 修改训练和测试数据的路径:cfg/custom/voc-face-person.yaml
bash 复制代码
# VOC 数据集
data_type: "voc"
path: "./"  # TODO 数据集根目录,如果是相对路径,需要指定根目录,如path="./"
train:
  - 'D:/dataset/face_person/COCO/trainval.txt'
  - 'D:/dataset/face_person/COCO/test.txt'
  - 'D:/dataset/face_person/MPII/trainval.txt'
  - 'D:/dataset/face_person/VOC/VOC2007/trainval.txt'
  - 'D:/dataset/face_person/VOC/VOC2012/trainval.txt'

val:
  - 'D:/dataset/face_person/MPII/test.txt'


test:  # test images (optional)

check: True # 是否检查数据集是否完整
names: [ 'face','person'] # 设置你需要训练的类别名称

**(4)**超参文件

修改训练超参文件cfg/default.yaml,可以修改训练学习率,数据增强等方式,使用默认即可,可不修改。

关于训练参数的具体说明,请参数这里:使用 Ultralytics YOLO 进行模型训练 | Ultralytics

(5)开始训练

整套训练代码非常简单操作,用户只需要填写好对应的数据路径,即可开始训练了。

  • Linux系统终端训练命令bash scripts/train.sh(选择其中一个训练即可)
bash 复制代码
#!/usr/bin/env bash

# TODO ---------------------训练YOLOv8模型---------------------
imgsz=416
task="detect"
data="cfg/custom/voc-face-person.yaml"
cfg="cfg/default.yaml"
weights="data/model/pretrained/yolov8n.pt"
model="cfg/models/v8/yolov8n.yaml"
save_dir="output/face-person-${task}/yolov8n-${imgsz}"
device=0 # TODO GPU设备ID
python train.py --model $model --weights $weights  --data $data --batch 8 --cfg $cfg  --save_dir $save_dir --task $task --epochs 300 --imgsz $imgsz  --device $device


# TODO ---------------------训练YOLO11模型---------------------
imgsz=416
task="detect"
data="cfg/custom/voc-face-person.yaml"
cfg="cfg/default.yaml"
weights="data/model/pretrained/yolo11n.pt"
model="cfg/models/11/yolo11n.yaml"
save_dir="output/face-person-${task}/yolo11n-${imgsz}"
device=0 # TODO GPU设备ID
python train.py --model $model --weights $weights  --data $data --batch 8 --cfg $cfg  --save_dir $save_dir --task $task --epochs 300 --imgsz $imgsz  --device $device


# TODO ---------------------训练YOLO26模型---------------------
imgsz=416
task="detect"
data="cfg/custom/voc-face-person.yaml"
cfg="cfg/default.yaml"
weights="data/model/pretrained/yolo26n.pt"
model="cfg/models/26/yolo26.yaml"
save_dir="output/face-person-${task}/yolo26n-${imgsz}"
device=0 # TODO GPU设备ID
python train.py --model $model --weights $weights  --data $data --batch 8 --cfg $cfg  --save_dir $save_dir --task $task --epochs 300 --imgsz $imgsz  --device $device
  • Windows系统终端训练命令(选择其中一个训练即可)
bash 复制代码
#!/usr/bin/env bash

# TODO ---------------------训练YOLO26n模型---------------------
python train.py --model cfg/models/v8/yolov8n.yaml --weights data/model/pretrained/yolov8n.pt --data cfg/custom/voc-face-person.yaml --batch 8 --cfg cfg/default.yaml --save_dir output/face-person-detect/yolov8n-416 --task detect --epochs 300 --imgsz 416 --device 0

# TODO ---------------------训练YOLO11模型---------------------
python train.py --model cfg/models/11/yolo11n.yaml --weights data/model/pretrained/yolo11n.pt --data cfg/custom/voc-face-person.yaml --batch 8 --cfg cfg/default.yaml --save_dir output/face-person-detect/yolo11n-416 --task detect --epochs 300 --imgsz 416 --device 0

# TODO ---------------------训练YOLO8n模型---------------------
python train.py --model cfg/models/26/yolo26.yaml --weights data/model/pretrained/yolo26n.pt --data cfg/custom/voc-face-person.yaml --batch 64 --cfg cfg/default.yaml --save_dir output/face-person-detect/yolo26n-416 --task detect --epochs 300 --imgsz 416 --device 0
  • 开始训练:

​​​

  • 训练数据量比较大,训练时间比较长,请耐心等待哈
  • 训练完成后,在模型输出目录中有个results.csv文件,记录每个epoch测试的结果,如loss,mAP等信息

|-------------|----------------|---------------|------------|-------------|------------------|
| 模型 | input-size | params(M) | GFLOPs | mAP_0.5 | mAP_0.5:0.95 |
| YOLOv8n | 416×416 | 3.15M | 3.7 | 0.97046 | 0.79315 |
| YOLO11n | 416×416 | 2.62M | 2.7 | 0.97001 | 0.79531 |
| YOLO26n | 416×416 | 2.41M | 2.3 | 0.97002 | 0.79009 |

(6)可视化训练结果

在输出目录,保存很多性能指标的图片

  • 这是训练epoch的可视化图,可以看到mAP随着Epoch训练,逐渐提高(见result.png
  • 这是每个类别的F1-Score分数(见BoxF1_curve.png
  • 这是模型的PR曲线(见BoxPR_curve.png

​​​

  • 这是混淆矩阵(见confusion_matrix_normalized.png):

​​​

(7)常见的错误


4. Python版本人脸检测和行人检测效果

demo.py文件用于推理和测试模型的效果,填写好模型文件以及测试图片即可运行测试了

  • 测试图片
bash 复制代码
# TODO 测试图片
python demo.py --weights "output/face-person-detect/yolo26n-416/weights/best.pt"  --image_dir "data/test_image"  --imgsz 416
  • 测试视频文件
bash 复制代码
# TODO 测试视频文件
python demo.py --weights "output/face-person-detect/yolo26n-416/weights/best.pt"  --video_file "data/video1.mp4"  --imgsz 416
  • 测试摄像头
bash 复制代码
# TODO 测试摄像头
python demo.py --weights "output/face-person-detect/yolo26n-416/weights/best.pt"  --video_file 0  --imgsz 416

下面人脸检测和行人(人体)检测效果:

|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| | |
| ​​ | ​​ |
| ​​ | ​​ |

如果想进一步提高模型的性能,可以尝试:

  1. 扩充训练样本:当前已有10W+的数据量,建议结合自身业务场景,持续采集更具代表性的真实场景数据(如不同光照、角度、遮挡情况),以提升模型的泛化能力和鲁棒性。

  2. 数据质量提升:对现有数据进行清洗和标注复核,剔除错误标注样本,确保标签一致性与准确性。

  3. 引入更多数据增强组合:除基础的翻转、旋转、缩放外,可尝试MixUp、Mosaic、Cutout、随机擦除等增强策略,并调整其概率与强度参数,通过对比实验筛选最适合当前任务的数据增强组合。

  4. 选用更大参数量模型:本教程使用的YOLOv8n、YOLO26n参数量较少,可尝试升级为YOLOv8s、YOLO26s甚至YOLOv8m/l等系列模型。


5. Android版本人脸检测和行人检测效果

已经完成Android版本人脸检测和行人检测 算法开发,APP在普通Android手机上可以达到实时的检测和识别效果,CPU(4线程)约40ms左右,GPU约20ms左右 ,基本满足业务的性能需求。详细说明请查看:人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测) https://blog.csdn.net/guyuealian/article/details/164629596

Android人脸检测和行人检测APP Demo体验:https://download.csdn.net/download/guyuealian/93441570


6.项目源码下载

整套项目源码内容包含:人脸检测和行人检测数据集 + 训练代码和测试代码

如需下载项目源码,请WX关注【AI吃大瓜】,回复【人脸检测和人体检测】即可下载

项目源码包含内容:

(1)人脸检测和行人检测数据集:

  1. **VOC人脸人体检测数据集:**VOC2007共9963张图片,VOC2012共17125张图片,已经标注了人脸框(face)和人体框(person)
  2. **COCO人脸人体检测数据集:**总共66697张含有人体的图片,已经标注了人脸框(face)和人体框(person)
  3. **MPII人脸人体检测数据集:**总共21430张含有人体的图片,已经标注了人脸框(face)和人体框(person)
  4. 详细说明,请查看《人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接) 》:人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)

(2)训练代码和测试代码(Pytorch)

  1. 包含整套训练和测试工程项目源码,含训练代码train.py和测试代码demo.py
  2. 基于ultralytics开发了增强版本ultralytics-plus,完全兼容开源库ultralytics,支持Labelme、COCO 和 Pascal VOC等数据格式。
  3. 项目包含了训练好pretrained模型文件(YOLOv8n YOLO11n YOLO26n),配置好环境,可直接运行demo.py
  4. 测试代码demo.py支持图片,视频和摄像头测试

Android人脸检测和行人检测APP Demo体验:https://download.csdn.net/download/guyuealian/93441570