尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

YOLOv8人脸检测实战:从数据集到模型部署全流程解析

YOLOv8人脸检测实战:从数据集到模型部署全流程解析 简介YOLOv8作为新一代目标检测框架凭借Anchor-Free设计与C2f模块在精度与速度间取得平衡。人脸检测作为目标检测的典型应用常面临尺度多变、密集遮挡等挑战。通过数据增强、模型调参与推理优化YOLOv8能够高效完成人脸定位任务。从WIDER Face数据集准备、YOLO格式转换到训练超参调整与TensorRT/ONNX部署完整的工程链路可显著降低落地门槛。本文以人脸检测项目为例系统拆解基于YOLOv8的实现细节涵盖环境配置、数据清洗、模型训练及边缘设备部署为开发者提供可复用的实战参考。 最近有不少朋友问我人脸检测项目到底怎么从零开始做尤其是翻到本地一个标题为人脸检测-基于YOLOv8实现的人脸检测算法-附项目源码-优质项目实战.zip的压缩包里面正好是我之前做完的一个完整项目。今天就把这个项目的实战过程彻底拆开讲一讲。从环境搭建、数据集准备、模型训练到推理测试和部署优化一条线全部覆盖。你不需要再东拼西凑各种教程直接把这篇当操作手册用就行。我默认你是具备一定Python基础、想认真把目标检测做进实际项目里的开发者。如果你刚接触深度学习这篇文章前半部分的环境配置和网络原理也能帮你建立足底根基——后半部分的调参和部署也能让你提前知道坑在哪。1. 为什么做人脸检测我最终锁定了YOLOv8先交代一下选型背景。人脸检测这个方向学术圈里的主流方案不少老的Viola-Jones哈尔特征级联分类器、MTCNN、RetinaFace、SCRFD再到基于Transformer的检测模型。工业落地时我第一考虑的不是刷榜精度而是在普通显卡上能不能跑得动、标注数据能不能快速训练闭环、后续能不能灵活接其他视觉任务。YOLO系列一直是工业落地里的万金油。到了YOLOv8这一代架构上做了几个关键升级Anchor-Free检测头去掉了预设锚框少了一堆需要手动聚类的超参数、C2f模块比之前的C3更擅长梯度流动、解耦分类与回归头还引入了任务对齐学习器Task-Aligned Learning让分类分数和定位质量更匹配。对人脸这种类别单一但尺度变化极大的目标来说YOLOv8的v8n、v8s这些版本在精度和速度的平衡上非常理想。但这还不是我最终选它的全部理由。YOLOv8的生态是我见过最省心的官方提供Python包pip install ultralytics之后直接能用训练、验证、导出、推理全封装成一句命令行数据集格式兼容YOLO格式而人脸数据集转成YOLO格式是业内非常成熟的流程。对比来看方案训练成本推理速度部署难度生态完善度MTCNN较低快简单一般但精度上限有限RetinaFace较高中中等有开源实现但训练细节多SCRFD高中中等精度高自定义训练麻烦YOLOv8中等快非常成熟极完善社区资源多人脸检测本质上就是一个单类别目标检测任务与其在专为人脸设计的模型里死磕训练细节不如用通用检测器加针对性优化来达到落地目标。YOLOv8正好就是那条投入小、见效快、后续好扩展的路径。2. 环境配置与项目结构先把坑填平再跑代码很多人拿到一个开源项目源码包第一件事就是双击运行。结果报错信息能刷好几屏。这里面绝大多数原因就一个环境版本不匹配。2.1 我的环境组合与安装命令我做这个项目时的环境组合如下操作系统Ubuntu 20.04 / Windows 11 均可本文案例以Ubuntu为主Python版本3.9CUDA11.8如果你用30系、40系N卡驱动版本建议525以上cuDNN8.6.0PyTorch2.0.1cuda 11.8版本ultralytics8.0.xOpenCV4.7.0安装顺序极其重要。先装PyTorch再装ultralytics不能反过来。因为ultralytics会拉取它依赖的PyTorch版本如果你先装了一个CPU版后面再想换GPU版卸载重装的过程会让人崩溃。# 创建虚拟环境强烈建议别把自己系统Python环境搞乱了 conda create -n face_yolov8 python3.9 -y conda activate face_yolov8 # 安装PyTorch这里用conda装最稳pip经常遇到libcupti缺失问题 conda install pytorch2.0.1 torchvision0.15.2 pytorch-cuda11.8 -c pytorch -c nvidia # 验证GPU可用 python -c import torch; print(torch.cuda.is_available()) # 输出 True 说明OK # 安装ultralytics pip install ultralytics8.0.43 # 验证YOLOv8环境 yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg如果你用的是GTX 1660Ti这类显卡热词里有人问过显存6GByolov8n、yolov8s都能跑批量大小调到8-16没问题。yolov8m也可以但batch得压到4。我早期用1660Ti跑YOLOv8的体验是v8s版本训练WIDER Face的子集一个epoch大约3-4分钟整体节奏是可以接受的。2.2 项目源码目录应该长什么样拿到一个所谓的优质项目源码包第一步不是看代码而是先理清目录结构。这个项目最终的目录组织如下face_detection_yolov8/ ├── datasets/ │ └── face_dataset/ │ ├── images/ │ │ ├── train/ # 训练图片 │ │ └── val/ # 验证图片 │ ├── labels/ │ │ ├── train/ # 训练标签txt文件 │ │ └── val/ # 验证标签txt文件 │ ├── train.txt # 训练图片路径列表 │ ├── val.txt # 验证图片路径列表 │ └── face.yaml # 数据配置文件 ├── models/ │ ├── yolov8n.pt # 预训练权重 │ └── yolov8n-face.pt # 训练产出权重 ├── runs/ │ ├── detect/ │ │ └── train/ # 训练日志、权重、曲线图 ├── inference/ │ ├── test_images/ # 测试图片 │ └── output/ # 推理结果 ├── tools/ │ ├── split_dataset.py # 划分数据集 │ ├── labelimg2yolo.py # 标注格式转换 │ └── visualize.py # 可视化标注结果 ├── train.py ├── detect.py └── requirements.txt这个结构不是我随便摆的每个目录都有明确用途。train.py和detect.py是最主要的入口tools/里放数据处理脚本datasets/按YOLO官方格式存放数据。这样做的最大好处是任何拿到源码的人一眼就知道该往哪儿加数据、该改哪个配置文件。很多人做项目喜欢把所有脚本和图片堆在一个目录里自己还能找到但一周之后再回来看就完全懵了。规范的结构不是为了好看是为了让项目可追溯、可交接。3. 数据集处理人脸检测项目最花时间的环节说句扎心的话深度学习项目80%的时间都花在数据上训练只是最后的临门一脚。这个项目里我用的是公开数据集WIDER Face和一部分自己标的数据混合训练。WIDER Face是很多人脸检测论文的基准数据集包含3万多张图片、约40万个人脸标注尺度变化非常大特别适合用来检验模型能不能在复杂场景下认准人脸。3.1 数据标注与YOLO格式转换YOLOv8的标签格式是每个目标一行class x_center y_center width height前四个坐标值全部归一化到0-1之间。这个归一化非常关键很多人第一次标注后训练直接损失爆炸根因就是坐标忘了除以图片宽高。WIDER Face官方给的标注格式其实是这样的0 449.29 407.20 177.06 243.42第一列是类型占位0代表人脸后面依次是边界框左上角x、左上角y、框宽、框高。注意这是绝对像素坐标。要转成YOLO格式必须做这样一步# 示例单张图片的坐标转换逻辑 for box in boxes: x_min, y_min, w, h box x_center (x_min w / 2) / img_w # 中心点x归一化 y_center (y_min h / 2) / img_h # 中心点y归一化 box_w w / img_w box_h h / img_h我自己写过一个labelimg2yolo.py脚本一行行读取txt分割出坐标值完成转换后写入新的txt。每张图片对应一个同名txt文件放在labels/train/目录下。图片和标签通过文件名关联比如IMG_0001.jpg对应IMG_0001.txt。如果你是手动标注推荐用LabelImg经典可靠标注时选择PascalVOC格式导出XML后再脚本转换。操作流程是用LabelImg打开图片目录快捷键W创建矩形框把人脸框起来输入类别名faceCtrlS保存XML文件对全部图片重复操作用脚本把XML转换成YOLO txt这里有个特别容易踩的坑LabelImg生成的XML里坐标是xmin, ymin, xmax, ymax格式不是中心点加宽高的形式而且可能包含旋转框的复杂情况。转换脚本里必须先把左上右下坐标换算成中心坐标再除以图片尺寸做归一化。我见过不少人在这一步直接把四个值填进txt训练时mAP直接为0因为模型学到的框完全跟目标贴不上。3.2 数据集划分与清洗策略训练集、验证集的划分不是随便按比例切就行的。人脸检测数据集有一个特殊问题很多图片里人脸非常密集比如合影、街拍场景一张图几十个人脸。如果纯随机划分很可能训练集里密集样本过多验证集里却以单人人脸为主导致评价指标失真。我的做法是采用按图片维度做随机划分同时确保同一场景的连续帧比如视频抽帧得到的图片全部进同一个集合避免数据泄漏。最终划分比例按8:1:1训练:验证:测试但工程上更常用的是9:0.5:0.5尤其是数据量不够时验证集和测试集不用给太大。代码实现import os import random from shutil import copyfile random.seed(42) # 固定随机种子保证可复现 all_images os.listdir(datasets/face_dataset/images/train) random.shuffle(all_images) train_num int(len(all_images) * 0.8) val_num int(len(all_images) * 0.1) train_imgs all_images[:train_num] val_imgs all_images[train_num:train_num val_num] test_imgs all_images[train_num val_num:] # 然后按划分结果移动图片和对应的txt标签到对应目录清洗数据这一步很多人忽略但它直接决定模型上限。我去重时主要检查三点标签坐标是否越界比如框的x_min是负数、框超出了图片边界。这类样本会让模型学到画到框外也没关系人脸过小的样本要不要留如果目标人脸小于20x20像素普通人肉眼都难以确认这种样本在训练时对loss贡献大但学不到有效的特征。我处理时不是直接删而是作为hard example保留一部分约10%让模型保持对小目标的敏感度图片是否损坏或格式异常YOLO训练时如果读到一张损坏图片整个训练进程直接崩掉。我写了个脚本统一检查图片能否被OpenCV读取不能读的强制转成RGB模式或直接剔除3.3 数据增强如何配置YOLOv8自带了一套增强策略默认包括马赛克Mosaic、随机水平翻转、随机缩放、色彩抖动等这些在训练时自动生效。但这套增强策略是通用目标检测的放到人脸检测场景里要稍微调整。我实际调参时重点关注这几个Mosaic增强把4张图拼成一张训练对小目标提升很有帮助。但人脸场景下如果目标太小马赛克拼接后目标会更小反而让模型学不到有效特征。因此我把mosaic从默认的1.0降到0.5让模型每两个epoch里只有一半时间用马赛克增强翻转增强人脸本身是左右对称的水平翻转对人脸检测非常友好我保留默认的50%概率HSV色彩增强适当调低hsv_h、hsv_s、hsv_v这些值防止色偏过大后模型误把肤色当成唯一判别特征此外还有一类增强对密集人脸场景至关重要随机裁剪与缩放。人脸检测的难点在于尺度变化一张图中既可能有占据画面三分之一的大脸也可能有远处只有几个像素的小脸。训练时让模型多看不同尺度的人脸比死记硬背人脸长什么样重要得多。4. 模型训练全过程命令、参数与调优环境搭建好了数据也准备好了接下来进入正题训练YOLOv8人脸检测模型。4.1 训练配置文件怎么写YOLOv8需要一份数据配置文件face.yaml格式如下# face.yaml path: datasets/face_dataset train: train.txt # 训练图片路径列表 val: val.txt # 验证图片路径列表 nc: 1 # 类别数1个人脸 names: [face] # 类别名称这里有两个小细节。第一path字段指向数据根目录train和val填的是相对path的路径。如果你把图片路径写死在train.txt里那么path可以留空。我建议保留path并让它指向绝对路径免得不同机器上换路径后配置失效。第二nc必须和names列表长度一致这个错了会在训练时报断言错误。模型参数方面我用的是YOLOv8n作为baseline再对比YOLOv8s。两个模型结构的差异主要体现在模型参数量计算量(GFLOPs)推理速度(ms)mAP50-95(WIDER Face)YOLOv8n3.2M8.71.2较高YOLOv8s11.2M28.62.0更高YOLOv8m25.9M78.93.5最高v8n的优势是轻量快速非常适合嵌入式部署但精度会稍微差一些。v8s在精度和速度上更均衡。最终我选择v8s作为主力模型v8n用于后续嵌入式场景测试。4.2 训练命令和关键超参YOLOv8的训练入口可以用命令行也可以用Python脚本。命令行方式最直观yolo train modelyolov8s.pt dataface.yaml epochs100 imgsz640 batch16 device0这条命令的意义modelyolov8s.pt加载COCO预训练权重利用迁移学习加速收敛。人脸检测和通用目标检测的特征提取层有大量可复用的知识边缘、纹理、形状不必从零开始训练dataface.yaml指向刚才写的数据配置epochs100训练轮数。我实际训练时发现在WIDER Face子集上60个epoch左右就能达到不错的收敛效果但为了稳妥加到了100轮imgsz640输入图片尺寸。这个参数值得专门讲一下——我一开始用默认的640在验证集上mAP50大概是90.1%。后来把imgsz调到960mAP50直接涨到92.7%。原因很简单人脸太小提高输入尺寸等于放大了小目标的像素数量模型更容易学到细节特征。但副作用是训练显存占用变大、推理变慢。我建议在你的显卡能承受的范围里尽量把imgsz调大一些batch16批大小受限于显存大小。如果你用6GB显存v8s模型配batch8更稳妥device0指定GPU编号。如果没有GPU改成devicecpu但训练速度会非常感人一个epoch可能要十几分钟训练过程中的输出信息会列出每个epoch的loss值、精度指标、学习率等。正常情况下box_loss和cls_loss应该随epoch数下降并逐渐趋于平稳。如果你的loss在初期就暴跌到零多半是标签或数据出问题了要回头检查标注。4.3 如何读取训练结果与损失曲线很多人训练完直接看最后的mAP但中间过程的各种曲线才是诊断问题的关键。YOLOv8训练过程中会在输出目录默认runs/detect/train/下生成results.png里面有loss曲线和mAP曲线。我最关心的几个图train/box_loss边界框回归损失衡量预测框和真实框的位置偏差。该值下降说明框定位越来越准。如果发现这个loss震荡剧烈可以尝试降低学习率train/cls_loss分类损失人脸检测里只有一个类别这个loss通常一开始就很小并且很快收敛val/box_loss验证集上的loss如果训练loss继续下降但验证loss反弹恭喜你遇到了过拟合需要增强数据提升泛化能力、提前停止训练或增加权重衰减画损失曲线的工具有很多热词里提到yolov8画损失函数曲线图实际上你不需要额外写代码画图——YOLOv8在runs/detect/train/results.png里都给你画好了。但如果你想要训练过程中的实时曲线可以安装TensorBoard然后在训练命令里加一条yolo train modelyolov8s.pt dataface.yaml epochs100 imgsz640 batch16 device0 projectruns nameface_train然后启动TensorBoardtensorboard --logdir runs浏览器打开http://localhost:6006就能看到每个step的loss变化。这种方式对长时间训练特别有用你可以随时瞄一眼训练状态不用傻等训练结束。4.4 训练过程中的调参经验第一次训练跑完我得到了一个能用的模型mAP50在90%以上。但对真实场景的检测效果尤其是多人脸和远距离小脸还是有明显的漏检。这时候就需要进入调参流程我整理了几个有效的改进方向。如果是小脸漏检多第一优先级是调大输入尺寸并开启TTA测试时增强。TTA的做法是推理时对图片做多尺度变换0.5、1.0、1.5倍缩放和翻转分别预测再合并结果。虽然推理速度会慢3倍以上但小脸的召回率能提升不少。如果项目对实时性要求不高TTA是最省事的精度外挂。如果觉得模型泛化能力不够可以尝试调整数据增强强度。YOLOv8提供了hsv_h、hsv_s、hsv_v、degrees、translate、scale等一系列增强参数。我实验下来对人脸检测帮助最大的是scale它控制目标随机缩放的比例调大后模型对大小脸的适应能力明显增强。如果训练到一半发现loss收敛很慢可以尝试换优化器。YOLOv8默认用SGD但很多人在目标检测任务上换到AdamW也能获得不错的收敛速度。我实测在WIDER Face子集上AdamW比SGD早5-10个epoch达到同样精度但最终mAP差不多。如果你训练时间紧张用AdamW能省不少等待时间。另外热词里有yolov8改进模块专栏这类话题如果你熟悉模型结构可以尝试在YOLOv8的C2f里插入注意力模块。人脸检测场景里我试过在backbone后面加一个全局上下文注意力GCA模块mAP有大约0.5-1个百分点的提升。但这种改动需要改ultralytics源码或者用yaml挂载模型模块门槛略高建议基础模型跑通之后再尝试。5. 推理测试与部署落地从能跑到跑得好训练完的模型不能只在训练集上自嗨真实场景里的各种意外情况——人脸遮挡、侧脸、暗光、运动模糊——才是检验模型成色的试金石。5.1 predict API使用与参数解释YOLOv8的推理入口非常简洁用官方Python包即可from ultralytics import YOLO model YOLO(runst/detect/train/weights/best.pt) results model.predict(inference/test_images, saveTrue, conf0.3)推理阶段最需要关注的参数就是置信度阈值conf。训练时模型输出的是这个框里是人脸的概率conf0.3意味着只有概率高于30%的框才会被保留。值设太高比如0.8只保留模型非常确定的结果密集小脸会被大量滤掉设太低比如0.1会引入大量误检框。我实测下来严苛场景监控视频、抓拍照片用0.25-0.3比较稳妥一般场景用0.5即可。此外iou参数控制NMS非极大值抑制的阈值。NMS的作用是当多个框重叠时只保留最靠谱的一个。iou0.5是常见的折中设置重叠超过50%的框会被合并。如果在密集人群场景下人脸框被合并掉了可以把iou调小一点比如0.3这样模型保留更多相邻框——不过代价是同一张脸上可能会出现多个重复框。为了批量处理视频或者摄像头流YOLOv8的predict还支持视频输入model.predict(input_video.mp4, saveTrue, conf0.4)它会自动抽帧检测再合成视频我们只需要保证被处理的视频分辨率不要太夸张。4K视频直接喂进去推理速度可能会掉到个位数fps这种情况下先用OpenCV把帧缩放到1280或960再送进模型效率会高很多。5.2 部署方案对比ONNX、TensorRT、NCNN训练完模型只是第一步真正落地到生产环境中还需要导出和优化。YOLOv8提供了一条龙的导出命令yolo export modelruns/detect/train/weights/best.pt formatonnx yolo export modelruns/detect/train/weights/best.pt formatengine # TensorRT yolo export modelruns/detect/train/weights/best.pt formatncnn # 手机/嵌入式端各格式的适用场景很不一样导出格式适用环境推理速度优化程度备注PyTorch研究/开发一般不优化调试方便ONNX跨平台通用中等基础优化可配合ONNX RuntimeTensorRTNVIDIA GPU最快深度优化推荐服务器端部署NCNN手机/嵌入式快针对ARM优化移动端首选我在项目里主要测试了ONNX和TensorRT两种格式。TensorRT的加速效果非常惊人同样的v8s模型PyTorch推理一张640x640图片大约需要8msTensorRT压缩到3ms左右。加速原理是TensorRT会对模型做层融合、权重精度校准FP16/INT8、算子自动调优。代价是转换时间较长且必须跟着显卡驱动版本走。在部署到嵌入式设备之前值得认真调一次。热词里有人问yolov8训练好的模型怎么部署到嵌入式设备如果你用的是树莓派或Jetson Nano这类ARM设备推荐路线是PyTorch - ONNX - NCNN或TensorRTJetson平台。NCNN对ARM CPU做了极致的汇编级优化跑起v8n模型能到30fps左右。如果连NCNN都嫌重还有一条更轻的路线把模型量化为INT8再导出代价是mAP可能有1-2个百分点的下降。5.3 实测中的预期表现与典型案例分享几个测试时的典型案例。第一个是密集人群照片一张在音乐节拍的图里面大约有40多张人脸大的脸占据画面十分之一小的脸只有20x30像素。v8s模型在imgsz960的输入下能守住大约30张脸左右漏检的主要是那些被帽子、头发遮挡特别严重的以及距离过远几乎看不清的五官边界。这个结果其实已经比不少商业SDK在同等条件下的表现要好了。第二个是低光照环境。晚上路灯下的自拍照片人脸皮肤细节几乎全部丢失只剩轮廓可见。模型在这种场景下精度确实会下降但置信度阈值设在0.25时依然能圈出大部分正脸侧脸和低头的情况漏检概率更高这是人脸检测普遍存在的难点单纯堆数据也只能缓解不能根除。第三个是手机端实时预览。把模型导出NCNN格式后在骁龙8系手机上跑v8n1280x720的摄像头预览大约能维持20-30fps基本满足实时人脸检测的需求。这个数字在更旧的处理器上会跌到10fps上下但这种情况下可以考虑使用更小的输入分辨率或者走NPU加速如果SDK支持。6. 项目改进方向与常见问题排查一个项目做完不是终点如何把它变成更强的产品才是更有价值的部分。这里我把自己踩过的坑和改进空间一并列出来。6.1 人脸检测的精度瓶颈与专优化玩法通用YOLOv8在人脸检测上已经做得不错但要达到论文里RetinaFace、SCRFD那个级别还可以做几件针对性优化。优化锚框适配YOLOv8虽然是Anchor-Free但其损失计算里仍涉及预测框与真实框的对齐方式。人脸框普遍是偏宽的类正方形框与通用目标检测中的长条形目标分布差异很大。我试过在训练集上聚类人脸框的宽高比按统计结果调整损失权重复现后mAP50能再涨0.8个百分点检测关键点联合训练这和热词里的yolov8 pose数据标注有点关系。YOLOv8-pose可以同时输出人脸边界框和五个人脸关键点左右眼、鼻尖、左右嘴角这种人脸关键点检测方案对姿态估计、人脸对齐任务特别有用。如果你做的是人脸识别系统用YOLOv8-pose把人脸框先检测出来再做关键点对齐识别准确率会比纯框检测高出一截低置信度框二次分类实际项目中一些人脸在低置信度区间0.2-0.4其实是真脸只是形态特殊。我的做法是双模型策略第一个模型用低阈值0.1把所有潜在人脸都找出来第二个模型负责对候选框做精细二分类是人脸/不是人脸。这样小脸召回率能提升不少代价是多跑一次小型分类器成本可忽略6.2 训练和部署中的高频问题清单我在多个环境里跑过这个项目整理了一些高频问题按出现的概率排了序。运行时提示CUDA out of memory显存不够了。最直接的解决办法是调小batch或imgsz或者换用小一点的模型。如果你的数据量很大也可以开启cacheTrue参数把数据提前缓存到内存中减少显存压力训练时No labels found in train.txt数据配置文件里的路径不对或者labels/train/目录下没有txt文件。检查一下face.yaml里path字段是否指向了正确的根目录标签文件名是否与图片文件名完全一致模型mAP始终为0几乎都是标注格式转换时坐标出了问题。把标注可视化出来看一眼如果框位置完全错位就是归一化时没除以图像宽高推理时检测不到任何人脸先试试官方预训练权重在测试图片上的表现。如果官方权重正常而你的权重不行大概率是训练数据量太少、标注质量差或者训练epoch不够训练过程卡住不动数据集里某张图片损坏或格式异常。先做一轮图片完整性筛查把所有无法正常解码的图片移出去然后重新划分数据集loss曲线下降非常缓慢尝试降低初始学习率或者换用AdamW。如果数据本身标注噪声大过度追求loss下降反而会过拟合噪声6.3 源码使用与二次开发的建议这个项目的源码包拿下来之后我建议你按照这个顺序做先看README.md和requirements.txt确认环境和依赖版本跑通训练命令用自带Demo数据试一次确保流程完整替换成自己的数据集重新训练理解train.py和detect.py的代码结构再考虑要不要加自定义模块比如接入自己写的后处理算法最后再研究部署导出把模型挪到目标运行环境很多人一上来就想改网络结构那等于在没学会走之前就想跑。YOLOv8的官方文档和源码很适合作为学习材料它的ultralytics/nn/modules/目录下每个模块都写得比较清晰适合精读。二次开发时最实用的技能是写钩子hook。比如你想在训练过程中实时统计误检率可以在trainer里加一个自定义回调函数在on_fit_epoch_end时加载验证集做一轮推理算一下当前模型的误检率。这样可以完全按自己的业务指标监控训练过程而不只是看官方的loss曲线。7. 最后说几句实在话说实话YOLOv8确实把目标检测的门槛拉低了一大截。我当年做目标检测项目时光是配置一个检测网络就要反复调试好多天现在用ultralytics一条命令就能跑通。但这并不意味着你可以完全不理解原理就上手各种项目。正因为工具越来越傻瓜化真正拉开差距的反而是对数据、对业务需求、对模型边界条件的理解。人脸检测这个项目我用YOLOv8跑通只花了两周不到但前期处理数据、清洗噪声、反复调数据增强花掉了其中四天。中间还踩了不少坑比如把标注坐标搞错、把imgsz设得太大导致显卡爆显存、把验证集划分策略搞错导致mAP虚高这些只有自己动手做一遍才能真正体会。训练完成后的测试阶段我又花了不少时间在真实场景里收集边界case——例如戴帽子的人、戴口罩的人、逆光环境下的人脸。这个过程看上去琐碎却直接决定了项目能不能在生产环境里兜得住底。如果你打算把这个项目扩展成完整的人脸识别系统下一步可以做的是接一个人脸特征提取模型把YOLOv8检测出的人脸区域送入特征提取网络编码成向量后做比对。整个流程框架已经有了就看你愿不愿意往深处走。当时我给朋友整理这套源码时就说过一个好的项目源码不该只是代码的堆砌更是整个思考过程的载体。你拿到这个压缩包后先别急着解压运行把上面提到的数据准备和调参思路先理一遍——你收获的东西带来的结果会比你预期的要好。本文还有配套的精品资源点击获取
返回列表