12 DFL的16个Bin——YOLOv8为什么用“投票“来定位目标

发布时间:2026/10/20 5:27:32

12 DFL的16个Bin——YOLOv8为什么用“投票“来定位目标 12-DFL的16个Bin——YOLOv8为什么用投票来定位目标一句话总结YOLOv8 不直接预测框的坐标而是用 16 个 bin候选偏移值来投票。每个 bin 代表一个候选位置模型给每个候选位置投票加权平均后得到精确坐标。这就是 DFLDistribution Focal Loss的核心思想。目录前置知识模型要输出一个数字但很难直接输出准第一层把猜数字变成做选择题第二层不止选一个每个选项都投一点票第三层这就是 bin第四层16 个 bin ≠ 把格子切成 16 份第五层每个 bin 具体代表什么第六层一个框有 4 条边各走各的 DFL 链第七层完整数据流——从 16 个分数到像素坐标自测前置知识模型要输出一个数字但很难直接输出准假设你要模型预测猫的鼻子距离图片左边 3.7 厘米。做法 A直接猜一个数模型 → 输出 3.7听起来简单但神经网络其实不擅长这个。它擅长的是选择题——A/B/C/D 哪个是正确答案因为选择题有标准答案梯度明确。做法 B把它变成选择题问题猫的鼻子在哪个位置 A. 0 B. 1 C. 2 D. 3 E. 4 F. 5模型给每个选项打分。比如A: 0分 B: 0分 C: 0分 D: 9分 E: 1分 F: 0分D 得分最高说明答案在 3~4 之间。但还不够精确——到底 3.几第一层把猜数字变成做选择题YOLOv8 把图片分成网格比如 P3 检测头分成 80×80 个格子每个格子负责预测落在它里面的目标。对于框的某条边模型不直接预测坐标是 3.7而是把坐标问题变成一道有 16 个选项的选择题——每个选项就是一个候选偏移值。第二层不止选一个每个选项都投一点票模型不选唯一的答案而是给每个选项一个概率A(0): 0% B(1): 0% C(2): 5% D(3): 70% ← 最可能 E(4): 25% F(5): 0%然后算加权平均2×0.05 3×0.70 4×0.25 3.2精确到 3.2 了比只能选 D 精确多了。第三层这就是 bin每个选项就是一个bin格子。bin 是候选答案bin₀: 候选值0, 概率0% bin₁: 候选值1, 概率0% bin₂: 候选值2, 概率5% bin₃: 候选值3, 概率70% ← 峰值在这 bin₄: 候选值4, 概率25% bin₅: 候选值5, 概率0%bin 越多 → 越精确bin 数量每个 bin 跨度精度6 个 bin1.0能区分 3 和 416 个 bin0.5能区分 3.0 和 3.5100 个 bin0.08能区分 3.00 和 3.08YOLOv8 选 16 个 bin是精度和计算量的折中。第四层16 个 bin ≠ 把格子切成 16 份这是最容易混淆的地方。16 个 bin 不是把图片空间分成 16 块而是提供了 16 个候选数值。错误理解把格子切成 16 份一个格子8×8 像素切成 16 份 ┌──┬──┬──┬──┐ │ │ │ │ │ ├──┼──┼──┼──┤ │ ││ │ │ ← 猫只能落在 16 个固定位置之一 ├──┼──┼──┼──┤ │ │ │ │ │ ├──┼──┼──┼──┤ │ │ │ │ │ └──┴──┴──┴──┘ 如果是这样精度还是粗的只能到 16 个固定位置。正确理解16 个候选值通过插值得出任意值一个格子8×8 像素猫可以在任意位置 ┌──────────────────┐ │ │ │ ★ │ ← 猫的中心在 (3.2, 5.7) │ │ 不是 16 个格点中的任何一个 │ │ └──────────────────┘16 个 bin 不是把空间切成 16 块而是提供了 16 个候选数值模型通过加权平均在这些候选值之间插值出任意位置。类比温度计切格子 温度计只有 16 条刻度线只能读 0, 1, 2...15°C 如果实际是 3.7°C你只能读到 4°C有误差。 16 个 bin 温度计有 16 条刻度线但你可以看水银柱在哪两条之间 3°C 的概率 30%4°C 的概率 70% 加权平均 3.7°C精确格子 vs bin 的职责格子空间划分 告诉你目标在哪个大区域 → 猫在格子 (2, 3) 16 个 bin数值划分告诉你目标在区域内精确位置 → 往右偏 3.2 像素往下偏 5.7 像素没有 bin只有格子猫 ≈ 在格子 (2, 3)精度 8 像素框很粗糙。有 bin猫 格子 (2, 3) 偏移 (3.2, 5.7)精度 0.5 像素框很精确。第五层每个 bin 具体代表什么以 P3 检测头为例格子大小是 8×8 特征图像素16 个 bin 覆盖了格子内的大部分范围bin 编号: 0 1 2 3 ... 14 15 偏移量: 0.0 0.5 1.0 1.5 ... 7.0 7.5 ← 特征图像素 格子宽度 8 个特征图像素 ┌──────────────────────────────────────┐ │ ← 左上角(0,0) │ │ │ │ bin₀0.0 bin₁0.5 bin₂1.0 │ │ bin₃1.5 bin₄2.0 bin₅2.5 │ │ bin₆3.0 bin₇3.5 bin₈4.0 │ │ bin₉4.5 bin₁₀5.0 bin₁₁5.5 │ │ bin₁₂6.0 bin₁₃6.5 bin₁₄7.0 │ │ bin₁₅7.5 │ │ 右下角(8,8) →│ └──────────────────────────────────────┘bin编号偏移量Conv(dfl) 权重含义bin₀00.00贴在格子左边界bin₁10.51往右偏 0.5 像素bin₂21.02往右偏 1.0 像素……………bin₁₄147.014往右偏 7.0 像素bin₁₅157.515快贴到右边界每个 bin 的投票含义bin₀ (偏移 0.0): 模型说框紧贴格子左边界→ 概率很低 bin₃ (偏移 1.5): 模型说框往右偏 1.5 像素→ 概率最高 bin₁₅(偏移 7.5): 模型说框快贴到格子右边界了→ 概率很低第六层一个框有 4 条边各走各的 DFL 链一个框有 4 条边每条边都有自己独立的 16 个 bin┌─────────────────────┐ │ │ top →│ │← bottom │ │ └─────────────────────┘ ↑ ↑ left right边偏移方向自己的 16 个 binleft左边界水平偏移bin₀…bin₁₅top上边界垂直偏移bin₀…bin₁₅right右边界水平偏移bin₀…bin₁₅bottom下边界垂直偏移bin₀…bin₁₅在模型中的实际结构回归分支有64 个通道4 条边 × 16 个 bin通道 0~15: left 的 16 个 bin 通道 16~31: top 的 16 个 bin 通道 32~47: right 的 16 个 bin 通道 48~63: bottom 的 16 个 bin第七层完整数据流——从 16 个分数到像素坐标以一条边left为例用 4 个 bin 简化演示。真实 YOLOv8 用 16 个 bin原理完全一样通道 0~15 的原始值 [2.0, 5.0, 1.0, 0.5, ..., 0.1] │ │ 含义16 个 bin 的原始分数未归一化正负无穷都行 │ ▼ Softmax → 归一化让概率加起来 1 [0.046, 0.927, 0.017, 0.010, ..., 0.000] │ │ 含义16 个 bin 的概率模型对 16 个候选位置的投票结果 │ ▼ Conv(dfl) → 加权求和权重固定为 [0, 1, 2, ..., 15] 0.991 │ │ 含义加权平均后的偏移量特征图像素单位 │ ▼ Sub → 减去网格坐标 0.991 - 0 0.991 │ │ 含义相对于网格左上角的偏移 │ ▼ Div → 除以特征图步长 0.991 / 8 0.124 │ │ 含义归一化到 0~1 的坐标 │ ▼ 最终 left 坐标 0.124 × 640 79.4 像素完整数据流一行看全模型输出 Softmax后 加权和 Sub Div [bin₀,...,bin₁₅] → [p₀,...,p₁₅] → Σwᵢpᵢ → -grid → /stride [2.0,5.0,1.0,...,0.1] → [0.046,0.927,...,0.000] → 0.991 → 0.991 → 0.124一张表总结各算子输出含义算子输入输出输出含义Softmax16 个原始分数16 个概率模型对 16 个候选位置的投票结果Conv(dfl)16 个概率1 个数加权平均后的偏移量特征图像素Sub偏移量偏移量转换为相对于网格左上角的偏移Div偏移量归一化坐标缩放回原图比例0~1自测Q1为什么 YOLOv8 不直接预测坐标而是用 16 个 bin 投票点击查看答案神经网络擅长做选择题分类不擅长直接输出精确的浮点数。16 个 bin 把预测坐标变成了16 个选项各投多少票投票结果加权平均后可以得到任意精度的坐标值。Q216 个 bin 是把一个格子切成 16 份吗点击查看答案不是。16 个 bin 是 16 个候选数值偏移量 0.0, 0.5, 1.0, …, 7.5不是把空间切成 16 块。模型通过加权平均可以在这些候选值之间插值出任意位置精度不受 16 的限制。Q3一个框有几条 DFL 链点击查看答案4 条。框的 left、top、right、bottom 四条边各有一条独立的 DFL 链每条链有自己独立的 16 个 bin。模型回归分支有 64 个通道4×16。Q4DFL 链中每个算子的输出分别代表什么点击查看答案Softmax 输出16 个概率投票结果Conv(dfl) 输出1 个偏移量特征图像素单位Sub 输出相对网格左上角的偏移Div 输出归一化到 0~1 的坐标乘以原图宽高即为像素坐标一句话记住16 个 bin 16 个候选偏移值每个间隔 0.5 特征图像素。模型不直接输出坐标而是给每个候选值投票Softmax 归一化后加权平均得出精确到亚像素级别的坐标。
延伸阅读

更多相关文章

2026/10/19 6:16:49

ControlNet 2026新版完全手册:OpenPose/Canny/Depth全解

如果你使用Stable Diffusion已经有一段时间,你一定经历过这样的时刻:提示词写得天花乱坠,生成出来的图却完全不是你想要的样子——想要一个特定姿势的人物,AI给你来个"瑜伽大师"级别的扭曲;想复刻一张照片的构图,出来的图连亲妈都不认识[reference:0]。 这种&…

2026/10/19 6:35:03

AI编程疲劳症:效率提升背后的开发者身心健康挑战与应对

如果你身边有程序员朋友,最近可能注意到他们处于一种矛盾状态:工作效率飙升的同时,身心疲惫感也在加剧。这不是个别现象,而是AI编程工具普及后出现的"开发者疲劳症"正在技术圈蔓延。Midjourney创始人大卫霍尔茨最近在X平…

2026/10/19 22:03:33

实用主义AI方法论:从理论到工程落地的完整实践指南

在AI技术快速发展的浪潮中,涌现出许多将复杂技术转化为实用解决方案的杰出人物。Jason Liu以其独特的技术传播方式和实践导向的AI应用理念,被不少开发者称为"AI界的安东尼波登"。本文将深入探讨Jason Liu的技术贡献、方法论体系,以…

2026/10/20 5:26:23

舵机PIDt调参

舵机内部通常就在跑 PID,外部控制器也可能再跑一层 PID。 所以它们不是一回事,但关系非常紧密:舵机是“带 PID 闭环的执行器”,PID 是让它精准转到目标角度的算法。🔧 舵机内部:自带一层 PID你给舵机发的是…

2026/10/20 5:26:23

VS2019 Darcula护眼主题深度移植指南

1. 为什么VS2019原生黑色主题不等于“护眼”——从人因工程角度拆解视觉疲劳根源很多人在深夜调试代码时,第一反应是把Visual Studio 2019调成“深色模式”,以为这就完成了护眼闭环。我带过三届某高校软件工程方向的实训项目,每次开班第一周&…

2026/10/20 5:26:23

【机器人】MicroDuck仿真问题记录

Q1:curl -L -o alpha_walking.onnx 网页前缀alpha_walking.onnx下载超时A1:使用国内镜像站curl -L -o alpha_walking.onnx https://hf-mirror.com/源目录alpha_walking.onnx其他镜像备选:除 hf-mirror.com 外,还可尝试:上海交大镜像&#xff…

2026/10/20 5:26:23

Windows AppData空间暴增真相:用Codex精准定位87.81GB占用源

1. 这不是“垃圾文件”,是系统在悄悄存档你的数字生活你有没有某天打开资源管理器,突然发现C盘只剩不到5GB可用空间,红色警告条刺眼地横在磁盘图标上?手指悬在鼠标左键上方,本能想点开“临时文件”“回收站”“下载目录…

2026/10/20 5:26:23

数据流分析详解:从到达定值到活跃变量与可用表达式

1. 数据流分析到底在回答什么问题数据流分析是软件分析课程里最硬核、也最容易被低估的一讲。我刚接触这门经典公开课时,听完到达定值分析的整套定义、传递函数和迭代算法,觉得自己理解得差不多了;等学到活跃变量分析,方向从前往后…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/20 1:05:37

单片机C运行时从启动到多任务:中断安全与共享资源冲突

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

GCC编译四步详解:预处理、编译、汇编、链接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:05:37

FIW线是什么?FEP注塑线与普通氟塑料线的区别及应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑