ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

YOLOv8 人脸检测与关键点估计实战:yolov8-face 仓库的模型架构、训练与 WIDER FACE 评测全解析

YOLOv8 人脸检测与关键点估计实战:yolov8-face 仓库的模型架构、训练与 WIDER FACE 评测全解析
  • 人工智能
  • 计算机视觉
  • 深度学习

【免费下载链接】yolov8-face

yolov8 face detection with landmark

项目地址:https://gitcode.com/gh_mirrors/yo/yolov8-face
点击查看免费下载

本文以官方 YOLOv8 文档首页(仓库内 docs/index.md)为骨架,结合 yolov8-face 仓库的实际源码,系统讲解 YOLOv8 的项目定位、快速上手路径、YOLO 系列演进脉络与架构革新,并重点落地到"人脸检测 + 人脸关键点(landmark)"这一具体任务:从数据集配置、Pose 头实现到 WIDER FACE 评测,读者读完即可掌握使用该仓库训练、推理与评估人脸关键点模型的全套实战方法。

YOLOv8 是什么:实时检测与分割的统一框架

Ultralytics YOLOv8 是 YOLO 系列的最新版本,官方将其定位为"实时目标检测与图像分割模型"(见 docs/index.md)。它建立在深度学习与计算机视觉领域的最新进展之上,在速度与精度之间做了针对性设计:通过全新骨干网络(backbone)、无锚框解耦检测头(anchor-free split head)与新的损失函数,在保持模型紧凑和推理速度的同时显著提升检测质量。

YOLOv8 的另一个核心特点是强适配性。其流线型设计使其既可以运行在边缘设备(如手机、嵌入式板卡)上,也可以部署到云端 API 服务,覆盖从低成本推理到高吞吐服务的不同硬件平台。

值得一提的是,本仓库 yolov8-face 正是基于这一框架的二次开发:项目描述为 "yolov8 face detection with landmark",即复用 YOLOv8 的 Pose(关键点)任务范式来实现人脸框 + 5 个人脸关键点(landmark)的联合输出。整个仓库保留了 ultralytics 的完整工程结构(ultralytics/下的 nn、yolo、models 等模块),并额外加入了 WIDER FACE 数据集配置、人脸专用模型定义与评估工具链。

快速上手:官方文档给出的四个核心入口

docs/index.md的 "Where to Start" 章节给出了四个最直接的起点,本文逐一展开并结合仓库内的实际用法说明。

安装:pip 与仓库源码两种方式

官方推荐通过 pip 安装ultralytics包:

pip install ultralytics

pip 会自动安装requirements.txt中列出的全部依赖。对于需要跟随最新代码(或像本仓库一样需要自行改动源码进行二次开发)的场景,则采用克隆源码并执行可编辑安装的方式:

git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e .

本仓库 yolov8-face 即属于后一种情况:它是 ultralytics 的完整镜像分支,在其基础上加入了人脸关键点模型与 WIDER FACE 工具链,因此直接在仓库根目录下运行脚本即可,例如仓库根目录的 train.py 和 test_widerface.py。

提示:PyTorch 的安装要求因操作系统和 CUDA 版本而异,建议先按照 PyTorch 官方指引安装匹配的 PyTorch 版本,再安装 ultralytics。

预测:对图像与视频进行推理

YOLOv8 的推理使用yolo predict命令,可对图像、视频、目录甚至在线视频流进行预测。典型用法:

yolo predict model=yolov8n.pt source='bus.jpg' imgsz=640

其中imgsz控制输入尺寸,conf控制置信度阈值。注意 CLI 参数必须使用arg=value的形式,通过空格分隔,不能使用--前缀或逗号。

在本仓库中,单张图片的人脸关键点推理同样通过YOLO类的predict接口完成,见 test_widerface.py 中的核心调用:

model = YOLO('runs/pose/yolov8n-face/weights/best.pt') results = model.predict(source=image_path, imgsz=640, conf=0.01, iou=0.5, device='cpu')

训练:在自定义数据集上训练新模型

官方提供 train 模式用于在自定义数据集上训练模型:

yolo train data=coco128.yaml model=yolov8n.pt epochs=100

epochs、lr0、imgsz、batch等超参数均可通过arg=value直接覆盖默认配置,完整的参数说明见 配置指南。

探索任务:detect / segment / classify / pose / track

YOLOv8 是一个多任务框架,支持检测、分割、分类、姿态估计与跟踪,各任务的详细介绍见 任务总览。本文后续重点展开的 pose(关键点)任务,正是 yolov8-face 人脸 landmark 检测所依赖的任务范式。

YOLO 系列演进简史

docs/index.md中完整梳理了 YOLO 家族的发展脉络,这是理解 YOLOv8 设计动机的背景知识:

  • YOLOv2(2016 年发布):在原始 YOLO 基础上引入批归一化(batch normalization)、锚框(anchor boxes)与维度聚类(dimension clusters),显著改善定位精度与训练稳定性。
  • YOLOv3(2018 年发布):采用更高效的骨干网络、多尺度锚框与空间金字塔池化(SPP),进一步提升了小目标检测能力。
  • YOLOv4(2020 年发布):引入Mosaic 数据增强、新的无锚框检测头与新的损失函数,是当时精度与速度平衡的标杆。
  • YOLOv5:在工程化上大幅领先,新增超参数优化、实验跟踪集成以及向多种导出格式的自动转换,成为社区最流行的版本之一。
  • YOLOv6(2022 年由美团开源):被广泛用于美团的自研自动驾驶配送机器人等业务场景。
  • YOLOv7:在检测之外新增了基于 COCO keypoints 数据集的姿态估计任务能力。

自发布以来,YOLO 系列已被广泛应用于自动驾驶、安防监控、医学影像等领域,并多次在 COCO 检测挑战赛、DOTA 检测挑战赛等竞赛中获奖。yolov8-face 所在的这一分支则进一步证明:YOLO 的 pose 范式可以被低成本地改造为人脸关键点检测这类垂直任务,这正是"检测框架 → 领域任务"的典型迁移路径。

YOLOv8 的架构革新与多任务、多模式能力

三大核心创新

docs/index.md明确指出 YOLOv8 相对前代的三项关键改进,这也是其在"速度、体积、精度"上取得平衡的根本原因:

  1. 全新骨干网络:对特征提取主干进行了重构,在相同计算预算下获得更强的特征表达能力;
  2. 无锚框解耦头(anchor-free split head):将分类分支与回归分支解耦,并去掉锚框预设,简化了训练目标、降低了正负样本匹配复杂度;
  3. 新损失函数:结合 DFL(Distribution Focal Loss)等设计,使边框回归更精确。

五大视觉任务

YOLOv8 原生支持检测、分割、姿态估计、跟踪与分类五类任务,对应官方文档中的任务页:

  • 目标检测(detect):输出目标类别与边界框,是 YOLO 的主任务;
  • 图像分割(segment):基于 U-Net 变体输出像素级掩码;
  • 姿态/关键点估计(pose):输出人体关节或特定语义点,yolov8-face 的人脸 landmark 即复用此任务;
  • 实时跟踪(track):在视频流中对目标进行跨帧关联;
  • 图像分类(classify):基于 EfficientNet 变体输出类别概率。

六大使用模式

除任务外,YOLOv8 还提供了六个标准工作模式(详见 模式总览):Train(训练)、Val(验证)、Predict(推理)、Export(导出 ONNX/TensorRT 等格式)、Track(跟踪)、Benchmark(多格式速度与精度基准测试)。后文的人脸关键点流程(训练 → 推理 → 评测)正是 Train/Predict/Val 模式在垂直场景下的落地。

深入 yolov8-face:人脸关键点模型的仓库级实现

回到本仓库主题。yolov8-face 的核心思路是:把 YOLOv8 的 Pose 任务套用到一个类(face)、5 个关键点的配置上。下面从数据集、模型定义、检测头实现、训练与评测五个维度逐一拆解。

数据集配置:WIDER FACE 的 YAML 描述

仓库在 ultralytics/datasets/widerface.yaml 中定义了人脸训练数据:

path: /ssd2t/derron/datasets/ # 数据集根目录 train: - widerface/train # 训练集图像目录 val: widerface/val # 验证集图像目录 kpt_shape: [5, 3] # 关键点数量 5,每点 3 维 (x, y, visible) flip_idx: [1, 0, 2, 4, 3] # 水平翻转时关键点配对:左右对称点互换 names: 0: face # 单一类别:人脸

这里有两个关键设计:

  • kpt_shape: [5, 3]:输出 5 个人脸关键点,每个关键点携带(x, y, visible)三维信息,其中第三维表示该点是否可见(训练时用于遮挡样本的监督);
  • flip_idx: [1, 0, 2, 4, 3]:为数据增强中的水平翻转服务。从配对关系可以推断,5 个关键点包含 2 组左右对称点(如左右眼、左右嘴角)与 1 个中线点(如鼻尖),翻转后交换对称点索引以保证标注语义一致。

WIDER FACE 验证集的标注文件(如 data/widerface/val/label.txt)以图片路径 + 每行 (x, y, w, h)的形式组织,共 3226 个验证图像路径记录在 data/widerface/val/wider_val.txt 中。

模型定义:标准版与轻量版

标准版基于 ultralytics/models/v8/yolov8-pose.yaml 修改而来,将nc设为 1、kpt_shape设为[5, 3],其余骨干(C2f + SPPF)与检测头(P3/P4/P5 三尺度)结构完全沿用官方 pose 定义,最后的检测层为:

head: ... - [[15, 18, 21], 1, Pose, [nc, kpt_shape]] # Pose(P3, P4, P5)

轻量版则是仓库的一大特色,面向移动端/嵌入式部署设计了yolov8-lite-t与yolov8-lite-s两个规格(见 ultralytics/models/v8/yolov8-lite-t-pose.yaml 与 ultralytics/models/v8/yolov8-lite-s-pose.yaml)。它们在骨干中使用StemBlock、Shuffle_Block(ShuffleNet 风格的通道混洗 + 深度可分离卷积)并在 Neck 中大量使用DWConvblock(depthwise + pointwise 卷积)与ADD(残差加和)以压缩计算量,相关模块实现位于 ultralytics/nn/modules/block.py。两个规格分别以 48 与 96 的通道基数起步,depth_multiple与width_multiple均取 1.0。

检测头:Pose 类的关键点输出逻辑

人脸框 + 关键点的联合输出由 ultralytics/nn/modules/head.py 中的Pose类完成。它继承自Detect检测头,额外增加一条cv4卷积分支输出关键点热图回归,并在kpts_decode中完成关键点坐标解码:

# 解码逻辑(head.py 内) y[:, 0::ndim] = (y[:, 0::ndim] * 2.0 + (self.anchors[0] - 0.5)) * self.strides y[:, 1::ndim] = (y[:, 1::ndim] * 2.0 + (self.anchors[1] - 0.5)) * self.strides y[:, 2::3].sigmoid_() # 可见度分支做 sigmoid

即关键点的 x、y 通过"以锚点为中心的偏移 + 步长缩放"解码到原图坐标,可见度通过 sigmoid 映射到 0~1。推理时,PosePredictor.postprocess会通过 NMS 过滤检测框,并将关键点坐标缩放到原始图像尺寸(见 ultralytics/yolo/v8/pose/predict.py)。这也解释了为什么最终推理输出中每个检测既包含人脸框与置信度,又附带 5 个关键点坐标。

下图是该仓库yolov8n-face模型的真实推理效果(仓库根目录 data/test.jpg,README 中用于展示该模型的检测结果):

训练脚本:仓库根目录的一键入口

仓库根目录的 train.py 给出了训练入口的完整示例:

import os os.environ["OMP_NUM_THREADS"] = '2' from ultralytics import YOLO model = YOLO('yolov8s-pose.yaml') # 从 YAML 构建新模型 model = YOLO('yolov8s-pose.pt') # 或加载预训练权重(推荐用于训练) model.train(data='widerface.yaml', epochs=300, imgsz=640, batch=16, device=[0, 1])

要点说明:

  • 预训练权重优先:先用官方yolov8s-pose.pt初始化,再在 WIDER FACE 上微调,能显著加速收敛;data='widerface.yaml'对应仓库内 ultralytics/datasets/widerface.yaml;
  • 超参:epochs=300、imgsz=640、batch=16,并支持device=[0, 1]多卡并行;若显存有限可减小 batch;
  • 训练产物(权重与日志)默认输出到runs/pose/目录。

WIDER FACE 评测:从推理到 AP 统计的完整链路

WIDER FACE 评测是衡量人脸检测器通用性的标准协议。仓库提供了完整的两段式工具链:

第一步:批量推理并生成预测 txt。运行 test_widerface.py,它会逐张读取 data/widerface/val/wider_val.txt 中的验证图,调用model.predict,并把每张图的检测结果按 WIDER FACE 官方格式写入widerface_evaluate/widerface_txt/下对应的 txt 文件:

图片文件名 检测框数量 x1 y1 w h score # 每行一个框:左上角坐标、宽高、置信度

该格式与评测脚本 widerface_evaluate/evaluation.py 中read_pred_file的解析逻辑(每行 5 个浮点数)完全对应。其中--conf-thres默认 0.01、--iou-thres默认 0.5,与官方评测习惯一致。

第二步:执行官方评测脚本。先编译加速模块(仓库已附带编译好的bbox.cpython-38-x86_64-linux-gnu.so,若环境不同需重新编译):

python3 setup.py build_ext --inplace python3 evaluation.py -p <预测txt目录> -g <ground_truth目录>

评测脚本会加载 widerface_evaluate/ground_truth/ 下的wider_face_val.mat、wider_easy_val.mat、wider_medium_val.mat、wider_hard_val.mat真值,按官方协议以 IoU 匹配预测与标注,分别计算Easy / Medium / Hard三档难度的 AP 并打印:

Easy Val AP: xxx Medium Val AP: xxx Hard Val AP: xxx

仓库公开的评测结果

仓库 README.md 给出了已训练模型在 WIDER FACE 验证集(测试尺寸 640)上的公开成绩(来自仓库作者的实测数据,可直接作为选型参考):

模型EasyMediumHard权重
yolov8-lite-t90.387.572.8官方网盘提供
yolov8-lite-s93.491.177.7官方网盘提供
yolov8n94.592.279.0官方网盘提供
yolov8s96.094.282.6-
yolov8m96.695.084.1-

可以看到:在同为 640 输入的前提下,yolov8-lite-t 以最轻量级约 2/3 的计算负担换取了接近 yolov8n 的精度,而 yolov8s / yolov8m 在 Easy/Medium 两档上表现更优、Hard 档提升明显。选择建议:移动端或低算力设备优先yolov8-lite-t/yolov8-lite-s;追求精度且算力充足可选yolov8n/yolov8s;Hard 档密集小人脸场景则推荐yolov8m。

从文档到代码:本指南的阅读地图

为方便读者继续深入,这里汇总本文涉及的关键仓库路径:

  • 文档首页:docs/index.md;快速上手:docs/quickstart.md;模式/任务总览:docs/modes/index.md、docs/tasks/index.md;
  • 训练入口:train.py;批量推理与评测导出:test_widerface.py;
  • 数据集配置:ultralytics/datasets/widerface.yaml;WIDER FACE 验证集清单:data/widerface/val/wider_val.txt;
  • 标准模型定义:ultralytics/models/v8/yolov8-pose.yaml;轻量模型:ultralytics/models/v8/yolov8-lite-t-pose.yaml、ultralytics/models/v8/yolov8-lite-s-pose.yaml;
  • 关键点检测头:ultralytics/nn/modules/head.py;轻量模块:ultralytics/nn/modules/block.py;推理后处理:ultralytics/yolo/v8/pose/predict.py;
  • 评测工具:widerface_evaluate/evaluation.py、widerface_evaluate/README.md。

总结

docs/index.md描绘的是一张 YOLOv8 的"全景地图":统一的多任务框架、六大工作模式以及从边缘到云的适配能力。而 yolov8-face 仓库则证明了这个框架的工程延伸性——通过将 Pose 任务复用于人脸关键点、以 WIDER FACE 作为评测基准、提供yolov8-lite-t/s轻量模型与完整的"训练 → 推理 → 评测"工具链,开发者可以快速获得一套兼具检测框与 5 点 landmark 输出的端侧可用人脸方案。对希望基于 YOLOv8 定制垂直任务的读者而言,本仓库是最直观的参考模板:改kpt_shape、换数据集、复用 Pose 头,即可将通用检测框架迁移到任意关键点场景。

  • 人工智能
  • 计算机视觉
  • 深度学习

【免费下载链接】yolov8-face

yolov8 face detection with landmark

项目地址:https://gitcode.com/gh_mirrors/yo/yolov8-face
点击查看免费下载
上一篇:如何快速解决文件被占用问题:PowerToys File Locksmith完整使用指南
下一篇:Adobe破解工具终极指南:3步免费激活Adobe全家桶2024版

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进