【YOLOv11】零基础入门人脸识别(二):配置、训练、验证、测试与预测全流程代码详解 (RTX 5060)
手把手教你从零开始训练 YOLOv11 人脸检测模型,并附上完整的可运行代码与训练日志分析
📌 前言
这是我学习 YOLOv11 目标检测的第一个实战项目——用 YOLOv11 实现简单的人脸识别检测。本文的目的非常纯粹:记录和整理我的完整学习过程,方便日后回顾,也希望帮助和我一样刚入门的朋友少走弯路。
项目虽简单,但覆盖了一个完整深度学习项目的全部环节:
-
✅ GPU 环境配置验证
-
✅ 数据集准备与组织
-
✅ 模型训练
-
✅ 模型验证与测试
-
✅ 单张图片推理预测
我会把每一步的完整代码和运行日志都贴出来,你可以直接复制修改路径后使用。
⚠️ 阅读提示:文中所有路径
D:\develop\yolov11_Face_recognition请替换为你自己的项目路径。
一、项目背景与环境
1.1 我的硬件配置
-
GPU:NVIDIA GeForce RTX 5060 Laptop GPU(显存约 8GB)
-
系统:Windows 11
-
CUDA:12.8
1.2 软件环境安装
首先需要创建虚拟环境并在其中安装 PyTorch 和 Ultralytics 框架。
Step 1:创建虚拟环境
打开 Anaconda Prompt 或终端,执行以下命令:
conda create -n yolo11 python=3.10 -y
Step 2:激活虚拟环境
conda activate yolo11
激活成功后,命令行前缀会显示 (yolo11),表示已进入虚拟环境。
Step 3:安装 PyTorch(GPU 版本)和Ultralytics 框架(也就是yolo)
根据你的 CUDA 版本选择合适的安装命令。我的环境是 CUDA 12.8,执行:
pip3 install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu128
pip install ultralytics
安装完成后,在pycharm创建项目后配置刚才创建的虚拟环境中的python解释器,随后我写了一个简单的脚本 testGPU.py 来确认 GPU 是否被正确识别
import torch
from ultralytics import YOLO
# ===================== 1. 基础 GPU 信息检测 =====================
print("=" * 50)
print("📌 基础 GPU 信息")
print("=" * 50)
# 验证 PyTorch 是否识别 GPU
cuda_available = torch.cuda.is_available()
print(f"PyTorch 识别 CUDA:{cuda_available}")
if cuda_available:
# 显卡数量
gpu_count = torch.cuda.device_count()
print(f"显卡数量:{gpu_count}")
# 默认显卡名称
gpu_name = torch.cuda.get_device_name(0)
print(f"默认显卡:{gpu_name}")
# CUDA 版本
cuda_version = torch.version.cuda
print(f"CUDA 版本:{cuda_version}")
# 显卡算力(Compute Capability)
gpu_capability = torch.cuda.get_device_capability(0)
print(f"显卡算力:{gpu_capability[0]}.{gpu_capability[1]} (核心算力值)")
# 显卡显存
gpu_memory = torch.cuda.get_device_properties(0).total_memory / 1024 / 1024 / 1024
print(f"显卡显存:{gpu_memory:.2f} GB")
# ===================== 2. YOLOv11 模型 GPU 调用验证 =====================
print("\n" + "=" * 50)
print("📌 YOLOv11 GPU 调用验证")
print("=" * 50)
# 加载 YOLOv11 模型并强制加载到 GPU
model = YOLO('yolo11n.pt').to('cuda' if cuda_available else 'cpu')
# 查看模型当前设备
model_device = model.device
print(f"YOLOv11 模型加载设备:{model_device}")
print(f"YOLOv11 是否调用 GPU:{model_device.type == 'cuda'}")
运行结果:
==================================================
📌 基础 GPU 信息
==================================================
PyTorch 识别 CUDA:True
显卡数量:1
默认显卡:NVIDIA GeForce RTX 5060 Laptop GPU
CUDA 版本:12.8
显卡算力:12.0 (核心算力值)
显卡显存:7.96 GB
==================================================
📌 YOLOv11 GPU 调用验证
==================================================
YOLOv11 模型加载设备:cuda:0
YOLOv11 是否调用 GPU:True
✅ 环境验证通过,可以开始正式项目了。
二、数据集准备
2.1 数据来源与标注
我使用的是自建的小型人脸数据集,包含 5 个不同人物(personA ~ personE),共计约 200 张图片。
数据集划分如下:
-
训练集 (train):140 张
-
验证集 (valid):40 张
-
测试集 (test):20 张
标注格式采用 YOLO 格式,即每张图片对应一个同名的 .txt 文件
2.2 数据集配置文件 data.yaml
在项目根目录下的 datasets/ 文件夹中创建 data.yaml 文件
train: D:\develop\yolov8_Face_recognition\datasets\train\images
val: D:\develop\yolov8_Face_recognition\datasets\valid\images
test: D:\develop\yolov8_Face_recognition\datasets\test\images
nc: 5
names: ['personA', 'personB', 'personC', 'personD', 'personE']
2.3 下载预训练权重
从 Ultralytics 官方下载 YOLOv11n 的预训练权重文件 yolo11n.pt,放在项目根目录下。
三、模型训练
训练脚本 train.py
from ultralytics import YOLO
import torch
import sys
BASE_DIR = r"D:\develop\yolov11_Face_recognition"
# 日志保存功能
class Logger:
def __init__(self, filename="train_log.txt"):
self.terminal = sys.stdout
self.log = open(filename, "w", encoding="utf-8")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger()
# 验证CUDA与独显
print("CUDA可用:", torch.cuda.is_available())
print("GPU数量:", torch.cuda.device_count())
print("当前GPU:", torch.cuda.get_device_name(0))
# 1. 加载预训练模型
model = YOLO(r"D:\develop\yolov11_Face_recognition\yolo11n.pt")
# 2. 开始训练(参数根据你的电脑配置调整)
results = model.train(
# 数据集配置文件路径(绝对路径,100%不报错)
data=r"D:\develop\yolov11_Face_recognition\datasets\data.yaml",
# 训练轮数(新手50-100轮足够,轮数越多越慢)
epochs=50,
# 批次大小(根据显卡显存调整:4G显存用4,8G用8,16G用16)
batch=8,
# 输入图像尺寸(640是标准,越大越慢)
imgsz=800,
# 训练结果保存路径(自动生成,不用手动建文件夹)
project=r"D:\develop\yolov11_Face_recognition\runs\train",
# 实验名称(每次训练改名字,避免覆盖之前的结果)
name="Face_recognition_exp_yolo11n",
# 设备:0代表用第1块NVIDIA显卡,cpu代表用CPU(不推荐,太慢)
device=0,
# 其他优化参数(新手不用改)
workers=0,
pretrained=True,
amp=True, # 自动混合精度,加快训练,节省显存
cache=True,
exist_ok = True
)
训练完成后,最佳模型权重保存在:
runs/train/Face_recognition_exp_yolo11n/weights/best.pt
四、模型验证与测试
4.1 验证集评估 valid.py
验证集用于在训练过程中监控模型表现,帮助判断是否过拟合。
from ultralytics import YOLO
import torch
import sys
BASE_DIR = r"D:\develop\yolov11_Face_recognition"
# 日志输出(控制台 + 文件同时保存)
class Logger:
def __init__(self, filename="valid_log.txt"):
self.terminal = sys.stdout
self.log = open(filename, "w", encoding="utf-8")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger()
# 显示GPU信息
print("="*60)
print(" 🔍 YOLOv11 模型验证")
print("="*60)
print("CUDA可用:", torch.cuda.is_available())
print("GPU数量:", torch.cuda.device_count())
print("当前GPU:", torch.cuda.get_device_name(0))
print("="*60)
# ====================== 核心:加载你训练好的模型 ======================
# 路径完全和你训练代码一致
model = YOLO(BASE_DIR + r"\runs\train\Face_recognition_exp_yolo11n.pt\weights\best.pt")
# ====================== 开始验证 ======================
metrics = model.val(
data=BASE_DIR + r"\datasets\data.yaml", # 你的数据集配置
imgsz=800, # 与训练保持一致
batch=4, # 验证可小一点,不爆显存
device=0, # 使用GPU
project=BASE_DIR + r"\runs\valid", # 验证结果保存路径
name="Face_recognition_valid_exp", # 验证文件夹名称
exist_ok=True,
workers=0
)
# ====================== 输出关键指标 ======================
print("\n" + "="*60)
print(" ✅ 模型验证完成!")
print("="*60)
print(f"mAP50 : {metrics.box.map50:.4f}")
print(f"精确率(Precision) : {metrics.box.p[0]:.4f}")
print(f"召回率(Recall) : {metrics.box.r[0]:.4f}")
print(f"mAP50-95 : {metrics.box.map:.4f}")
print("="*60)
验证结果输出:
============================================================
✅ 模型验证完成!
============================================================
mAP50 : 0.9872
精确率(Precision) : 0.8479
召回率(Recall) : 1.0000
mAP50-95 : 0.6861
============================================================
指标解读:
-
mAP50 = 0.9872:说明在 IoU=0.5 的宽松标准下,模型对人脸的检测效果非常好,接近满分。
-
Recall = 1.0000:召回率达到 100%,说明验证集中所有真实人脸都被成功检测出来,没有出现漏检的情况,这对于人脸识别任务来说非常关键。
-
Precision = 0.8479:精确率约 84.8%,说明模型偶尔会有误检(把不是人脸的区域当成人脸),但整体在可接受范围内。
-
mAP50-95 = 0.6861:这是更严格的多 IoU 阈值综合指标,68.6% 对于仅有 140 张训练图片的小数据集来说是一个相当不错的成绩,说明模型在不同 IoU 标准下都有较好的表现。
4.2 测试集评估 test.py
测试集是模型从未见过的数据,用于最终评估模型的泛化能力。
from ultralytics import YOLO
import torch
import sys
BASE_DIR = r"D:\develop\yolov11_Face_recognition"
# 日志保存
class Logger:
def __init__(self, filename="test_log.txt"):
self.terminal = sys.stdout
self.log = open(filename, "w", encoding="utf-8")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger()
# GPU信息
print("="*60)
print(" 🧪 YOLOv11 测试集评估")
print("="*60)
print("CUDA可用:", torch.cuda.is_available())
print("GPU:", torch.cuda.get_device_name(0))
print("="*60)
# 加载模型
model = YOLO(BASE_DIR + r"\runs\train\Face_recognition_exp_yolo11n.pt\weights\best.pt")
# 测试集推理
metrics = model.val(
data=BASE_DIR + r"\datasets\data.yaml",
split="test", # 跑测试集
imgsz=800,
batch=8,
device=0,
workers=0,
project=BASE_DIR + r"\runs\test",
name="Face_recognition_test_exp",
exist_ok=True
)
# 输出结果
print("\n" + "="*60)
print(" ✅ 测试完成!")
print("="*60)
print(f"Test mAP50 : {metrics.box.map50:.4f}")
print(f"Test Precision : {metrics.box.p[0]:.4f}")
print(f"Test Recall : {metrics.box.r[0]:.4f}")
print(f"Test mAP50-95 : {metrics.box.map:.4f}")
print("="*60)
五、模型预测:实际使用
训练好的模型最终要用来检测新图片。predict.py 展示了如何对单张图片进行推理。
单张图片检测结果示例:
============================================================
🧪 YOLOv11 单张图片检测
============================================================
CUDA可用: True
GPU: NVIDIA GeForce RTX 5060 Laptop GPU
============================================================
image 1/1 D:\develop\yolov11_Face_recognition\datasets\test\images\071.jpg: 608x800 1 personA, 1 personB, 1 personC, 1 personD, 1 personE, 69.2ms
Speed: 6.1ms preprocess, 69.2ms inference, 16.3ms postprocess per image at shape (1, 3, 608, 800)
Results saved to D:\develop\yolov11_Face_recognition\runs\predict\single_image_detect
============================================================
✅ 单张图片检测完成!
============================================================
图片路径: D:\develop\yolov11_Face_recognition\datasets\test\images\071.jpg
检测到目标数量: 5
--- 检测框详情 ---
目标 1: 类别=personD, 置信度=0.9387, 坐标=(1148,598,1284,712)
目标 2: 类别=personC, 置信度=0.8993, 坐标=(205,570,334,690)
目标 3: 类别=personA, 置信度=0.8774, 坐标=(481,581,603,702)
目标 4: 类别=personB, 置信度=0.7930, 坐标=(817,593,942,709)
目标 5: 类别=personE, 置信度=0.7455, 坐标=(1486,606,1613,724)
============================================================

六、踩坑经验总结
作为新手,我在这个项目过程中遇到了几个坑,记录下来供参考:
| 问题 | 原因 | 解决方法 |
| 训练时卡住不动 | Windows 下多进程加载数据问题 | 设置 workers=0 |
报错 FileNotFoundError |
路径中包含中文或使用了相对路径 | 使用绝对路径,并在字符串前加 r |
| 显存不足 (CUDA out of memory) | batch 或 imgsz 太大 | 调小 batch=4,或调小 imgsz=640 |
路径报错 \n 转义问题 |
Windows 路径中的 \ 被当作转义符 | 路径前加 r,如 r"D:\data" |
| 训练时 loss 为 nan | 学习率过大或数据标注错误 | 检查标注文件格式是否正确 |
七、项目文件清单
最后整理一下本次项目的所有核心文件,方便读者对照:
yolov11_Face_recognition/
│
├── yolo11n.pt # 预训练权重
│
├── testGPU.py # GPU 环境验证脚本
├── train.py # 训练脚本
├── valid.py # 验证脚本
├── test.py # 测试脚本
├── predict.py # 单图预测脚本
│
├── datasets/
│ ├── data.yaml # 数据集配置
│ ├── train/
│ │ ├── images/ # 140 张训练图片
│ │ └── labels/ # 140 个标注文件
│ ├── valid/
│ │ ├── images/ # 40 张验证图片
│ │ └── labels/ # 40 个标注文件
│ └── test/
│ ├── images/ # 20 张测试图片
│ └── labels/ # 20 个标注文件
│
├── runs/
│ ├── train/Face_recognition_exp_yolo11n/weights/best.pt
│ ├── valid/Face_recognition_valid_exp/
│ ├── test/Face_recognition_test_exp/
│ └── predict/single_image_detect/
│
├── train_log.txt # 训练日志
├── valid_log.txt # 验证日志
└── predict_log.txt # 预测日志
写在最后
这是我的第一个 YOLOv11 实战项目记录,虽然只是一个简单的人脸识别任务,但完整走通了一遍后,对 YOLO 的训练流程、参数含义、指标解读都有了更直观的理解。
如果你也是刚入门的新手,强烈建议自己动手跑一遍——环境配置、路径设置这些小细节,只有亲手踩过坑才能真正记住。
最后的话,就是想说,我第一次搞项目复现,把项目放在了develop文件夹,不太好,我以后决定都放在project文件夹😄。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)