You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于YOLOv5输出文档及输出张量解读的技术咨询

YOLOv5多类型人脸实时检测问题排查与张量解读指南

一、重训练效果不达预期的排查方向

  • 数据集层面
    • 先确认三类人脸(自然脸/卡通脸/游戏脸)的样本量是否均衡,每类至少要有几千张有效样本,且标注必须准确——框要完整覆盖人脸,类别标签不能标混。
    • 检查数据集场景多样性:比如不同光线、角度、遮挡情况,尤其是卡通脸要覆盖不同画风(Q版/写实)、游戏脸要包含不同游戏风格的角色脸,避免模型只认单一风格。
  • 训练配置调整
    • 换更大的模型:如果用的是YOLOv5n/s这类小模型,换成v5m/l,小模型特征提取能力有限,很难兼顾三类差异大的人脸。
    • 调整训练参数:延长训练轮数(比如从默认300轮调到500+),用余弦退火学习率代替固定值,拉大数据增强的强度——比如加随机裁剪、颜色扰动,针对卡通脸可以额外加风格化增强(比如随机调整饱和度、对比度)。
    • 平衡类别权重:如果某类样本数量少,在训练的yaml配置里设置class_weights,让模型更关注样本少的类别。
  • 验证与调优
    • 用验证集可视化检测结果,看是漏检、误检还是框不准:漏检就补对应类别的样本,框不准就用python utils/autoanchor.py重新计算适配你数据集的锚框。

二、ONNX输出张量解读(结合你的测试代码和输出示意图)

YOLOv5导出的ONNX模型输出是一个形状为[1, num_boxes, 5 + num_classes]的张量(比如你示意图里的[1,25200,85],重训后你的应该是[1,25200,8],对应5个基础字段+3类人脸),每个预测框的字段对应逻辑:

  • 前4个值:x_center, y_center, width, height——都是相对于输入图像尺寸的归一化值,要转成像素坐标得乘以图像的实际宽高。
  • 第5个值:置信度(confidence)——表示这个框里存在目标的概率。
  • 后面的num_classes个值:对应每类人脸的分类概率,最终某类的置信度是「框置信度 × 分类概率」,这个值才是判断该框属于某类人脸的依据。

后处理步骤(对应你提供的C++测试代码逻辑)

  1. 置信度过滤:先筛掉置信度低于阈值(比如0.25)的框,减少无效计算。
  2. 非极大值抑制(NMS):对同一类别的框计算IOU(交并比),去掉重叠度超过阈值(一般设0.45)的重复框,保留最准确的那个。
  3. 坐标转换:把归一化的中心坐标和宽高转成图像里的像素坐标,公式如下:
    // 假设img_w是图像宽度,img_h是图像高度
    float x1 = (box[0] - box[2]/2) * img_w;
    float y1 = (box[1] - box[3]/2) * img_h;
    float x2 = (box[0] + box[2]/2) * img_w;
    float y2 = (box[1] + box[3]/2) * img_h;
    

举个例子:如果某行张量是[0.3, 0.4, 0.2, 0.3, 0.8, 0.9, 0.1, 0.0],就表示:

  • 框的中心在图像宽30%、高40%的位置,宽是图像的20%,高是30%
  • 框的置信度是0.8,属于自然脸的概率是0.9,最终自然脸的置信度是0.8×0.9=0.72

内容的提问来源于stack exchange,提问作者pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:56:20