轩总 發表於 2025-12-25 15:08:00

吴恩达深度学习课程四:计算机视觉 第三周:检测算法 (四)YOLO 的完整传播过程

<p>此分类用于记录吴恩达深度学习课程的学习笔记,目前已完结,点击进入全集目录<br>
课程相关信息链接如下:</p>
<ol>
<li>原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai</li>
<li>github课程资料,含课件与笔记:吴恩达深度学习教学资料</li>
<li>课程配套练习(中英)与答案:吴恩达深度学习课后习题与答案</li>
</ol>
<p>本篇为第四课的第三周内容,3.9到3.10的内容,同时也是本周理论部分的最后一篇。</p>
<hr>
<p>本周为第四课的第三周内容,这一课所有内容的中心只有一个:<strong>计算机视觉</strong>。应用在深度学习里,就是专门用来进行图学习的模型和技术,是在之前全连接基础上的“特化”,也是相关专业里的一个重要研究大类。<br>
<strong>这一整节课都存在大量需要反复理解的内容和机器学习、数学基础。</strong> 因此我会尽可能的补足基础,用比喻和实例来演示每个部分,从而帮助理解。<br>
第三周的内容将从<strong>图像分类</strong>进一步拓展到<strong>目标检测(Object Detection)</strong> 这一更具挑战性的计算机视觉任务。<br>
与分类任务只需回答“图中有什么”不同,目标检测需要同时解决“ <strong>有什么</strong>”以及“<strong>在什么位置</strong>”两个问题,因此在模型结构设计、训练方式和评价标准上都更为复杂。<br>
本篇的内容关于YOLO 传播,是在了解完之前的基础后的完整演示和一些简单拓展。</p>
<h1 id="1-yolo-传播过程">1. YOLO 传播过程</h1>
<p>在上一篇中,我们了解了交并比、非极大值抑制和锚框这些目标检测算法的组件,这里就应用这些内容,来看看课程里演示的 YOLO 算法的完整传播过程。</p>
<h2 id="11-数据设置">1.1 数据设置</h2>
<p><img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150540204-1393412067.png" alt="image.png" loading="lazy"></p>
<h2 id="12-正向传播">1.2 正向传播</h2>
<p><img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150615729-520417845.png" alt="image.png" loading="lazy"></p>
<h2 id="13-正向传播输出的后处理">1.3 正向传播输出的后处理</h2>
<p>这是一个新出现的概念,我们来展开一下这部分。<br>
其实这部分内容在上一篇中已经有所提及,就是我们说的:<strong>“两次筛选”</strong>。<br>
为什么说是正向传播的后处理,是因为严格来说:<strong>当网络输出结果时,正向传播部分就结束了</strong>。<br>
因此,不同于我们之前用作示例的“精准预测”,实际上,网络输出的结果是这样的:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150540714-186773264.png" alt="image.png" loading="lazy"><br>
你会发现,即使在最边角的背景部分,该网格同样输出了两个预测框。<br>
同时,因为背景部分没有目标的特征,因此,这两个预测框的置信度,也就是 <strong><span class="math inline">\(p_c\)</span>一定是极低的。</strong><br>
所以,我们便由此进行了第一次筛选:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150540813-1431087417.png" alt="image.png" loading="lazy"><br>
经过这一步后,我们才回到了之前提到过的多个预测框重叠导致的把一个目标的各个部分预测为多个目标的问题。<br>
因此下一步就是非极大值抑制:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150640242-886531067.png" alt="image.png" loading="lazy"><br>
注意!你会发现,在这个例子中,重叠现象并不明显,这是<strong>因为我们为了演示把网格尺寸设置的很大以至于目标特征集中在某些网格中,在置信度筛选中就丢弃了大部分预测框</strong>,在这种情况下,就要调低交并比阈值来实现更好的筛选,因为重叠部分本就不大。</p>
<p><strong>因为置信度筛选和非极大值抑制并不在网络中进行,而是对网络的输出进行处理,因此,我们称之为正向传播输出的后处理内容。</strong></p>
<h2 id="14-反向传播">1.4 反向传播</h2>
<h4 id="1正向传播反向传播和后处理的关系">(1)正向传播、反向传播和后处理的关系</h4>
<p>首先,先纠正一个可能出现的误解,那就是<strong>对输出的后处理并不是在正向传播和反向传播之间的一个流程,它只是对输出结果的整理。</strong><br>
<img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150540692-1780125302.png" alt="image.png" loading="lazy"><br>
我们再详细展开一下:<br>
<strong>既然置信度筛选和非极大值抑制并不在网络中进行,那它们会不会影响反向传播?<br>
那些被筛掉的预测框,训练时是不是就“不算数”了?</strong><br>
答案是<strong>不会</strong>。<br>
我们需要先明确一个边界:<strong>反向传播只依赖于网络的原始输出与真实标签计算得到的损失函数。</strong><br>
也就是说,当网络输出了每个网格、每个锚框对应的:</p>
<ul>
<li>位置预测</li>
<li>置信度 <span class="math inline">\(p_c\)</span></li>
<li>类别概率</li>
</ul>
<p>这时,<strong>正向传播已经结束,损失函数开始计算,反向传播随即发生。</strong><br>
而置信度阈值筛选与非极大值抑制:</p>
<ul>
<li>不参与损失计算</li>
<li>不参与梯度传播</li>
<li>仅用于对“最终预测结果”的整理,用于下一步使用。</li>
</ul>
<p>打个比方:<strong>网络是”你把这道题所有想到的答案写出来”,而后处理是“老师帮你去掉明显不对的答案”。</strong><br>
但当你<strong>学习分析这道题时</strong>,看的依然是<strong>原始答卷</strong>,而不是你后来用红笔划掉的部分,只有这样才能学习错误并改正。<br>
这就是正向传播、反向传播和后处理间的关系。<br>
要强调的是,后处理的结果是给我们查看并进行下一步应用的,<strong>网络不会因为输出看起来“乱”而学不到东西,反而,它正是在这种一一对应的信息反馈下才能不断学习。</strong></p>
<h4 id="2检测任务的反向传播逻辑">(2)检测任务的反向传播逻辑</h4>
<p>在监督学习中,不同任务虽然形式各异,但其反向传播的基本逻辑是共通的:<strong>模型输出与标注标签通过损失函数进行对比,得到可微的误差信号,并利用梯度下降与链式法则更新参数,使模型输出逐步符合任务目标。</strong></p>
<p>接下来,我们从<strong>训练视角</strong>来看,再简述一下目标检测任务的反向传播流程:<br>
当网络完成正向传播后,它会为<strong>每一个网格、每一个锚框</strong>都给出一组预测结果,这些预测结果并不会先经过筛选,而是<strong>整体送入损失函数中,与真实标签进行逐一对比</strong>。</p>
<p>在 YOLO 中,我们可以把损失函数拆分为三类误差来源:</p>
<ol>
<li><strong>位置误差</strong>:预测框的位置与真实目标框之间的偏差。</li>
<li><strong>置信度误差</strong>:该预测框是否“应该负责一个目标”。</li>
<li><strong>类别误差</strong>:在负责目标的前提下,类别预测是否正确。</li>
</ol>
<p>而对于那些<strong>被分配去负责某个真实目标的预测框</strong>来说:</p>
<ul>
<li>如果<strong>预测框位置不准</strong>,就会产生位置损失。</li>
<li>如果<strong>置信度不够高</strong>,就会产生置信度损失。</li>
<li>如果<strong>类别预测错误</strong>,就会产生类别损失。</li>
</ul>
<p>这些损失会共同作用,通过梯度下降推动网络在反向传播中调整参数,使得下一次的输出框更贴近目标、<span class="math inline">\(p_c\)</span> 更接近 1、类别分布更集中在正确类别上。<br>
而对于那些<strong>不对应任何真实目标的预测框</strong>,它们的学习目标是:<strong>置信度应该尽可能低</strong>,即不应该“误以为自己发现了目标”。</p>
<p>因此,即使在后处理阶段我们会直接把它们筛掉,在训练阶段,它们依然会通过置信度损失向网络传递一个非常明确的信号: <strong>“这里是背景,不要乱报目标。”</strong><br>
正是这些大量、持续的背景约束,才让网络逐渐学会在复杂场景中抑制无意义的预测。<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202512/3708248-20251225150541051-1041114532.png" alt="image.png" loading="lazy"><br>
关于 YOLO 的内容就暂时介绍到这里,在下一篇中,我们就来实践一下它的效果。</p>
<p>吴恩达老师最后补充了一节关于候选区域的内容,简单来讲,候选区域的应用仍是基于滑动窗口的目标检测算法,它的思想是通过图像分割等算法提前找到更可能存在目标的区域作为候选区域,并只输入候选区域进入网络来减少计算量。<br>
但是说实话,这种技术目前更适合于学术研究中,它的运行时间较长,实际部署价值不如 YOLO ,因此在实际应用中十分少见,就不再展开了。</p>
<h1 id="2总结">2.总结</h1>
<table>
<thead>
<tr>
<th>概念</th>
<th>原理</th>
<th>比喻</th>
</tr>
</thead>
<tbody>
<tr>
<td>正向传播(Forward Pass)</td>
<td>网络接收图像输入,通过卷积、池化等运算生成每个网格、每个锚框的预测输出(位置、置信度、类别概率)。</td>
<td>网络“写下所有可能的答案”。</td>
</tr>
<tr>
<td>正向传播输出的后处理(Post-processing)</td>
<td>包括置信度筛选和非极大值抑制(NMS),对网络输出进行整理,去掉低置信度和重叠多余的预测框。</td>
<td>老师“帮你划掉明显不对的答案”。</td>
</tr>
<tr>
<td>置信度筛选</td>
<td>根据预测框的置信度 <span class="math inline">\(p_c\)</span> 判断是否保留。背景区域输出的框通常置信度低,会被筛掉。</td>
<td>去掉“明显错误的答案”。</td>
</tr>
<tr>
<td>非极大值抑制(NMS)</td>
<td>对重叠的预测框进行筛选,只保留置信度最高的框,避免同一目标被重复检测。</td>
<td>老师只留下“最靠谱的答案”。</td>
</tr>
<tr>
<td>反向传播(Backward Pass)</td>
<td>网络输出与真实标签计算损失,梯度通过链式法则回传,更新网络参数。所有预测框(目标和背景)都参与损失计算。</td>
<td>网络“看到原始答卷,知道哪里做错了并改正”。</td>
</tr>
<tr>
<td>候选区域(Region Proposal)</td>
<td>基于滑动窗口或图像分割的方法,提前选出可能有目标的区域输入网络以减少计算量。</td>
<td>先挑出可能有答案的题目再做作业,但效率低于直接整张图像端到端检测(YOLO)。</td>
</tr>
</tbody>
</table><br><br>
来源:https://www.cnblogs.com/Goblinscholar/p/19399274
頁: [1]
查看完整版本: 吴恩达深度学习课程四:计算机视觉 第三周:检测算法 (四)YOLO 的完整传播过程