【笔记】动手学深度学习 - 锚框

【笔记】动手学深度学习 - 锚框,第1张

【笔记】动手学深度学习 - 锚框

42 锚框【动手学深度学习v2】_哔哩哔哩_bilibili

目录

锚框

交并比IoU:

赋予锚框编号

非极大抑制(NMS)输出:

总结:


锚框

所谓锚框,就是目标检测算法中,以锚点为中心,由算法预定义的多个不同长宽比的先验框。

假设输入图像的高度为 h,宽度为 w。 我们以图像的每个像素为中心生成不同形状的锚框:比例为 s∈(0,1](即锚框占整张图片的大小),宽高比(宽高比)为 r>0。 那么锚框的宽度和高度分别是√(whsr)、√((whs)/r)。这部分李沐大佬好像写错了。

推导过程:

        易知图片面积大小为wh,锚框面积大小即为whs。设锚框高为x,宽则为xr,其面积可表示为rx^2。所以rx^2=whs,所以x=√((whs)/r),即高的大小,宽为√(whsr)

当中心位置给定时,已知宽和高的锚框是确定的。

要生成多个不同形状的锚框,让我们设置一系列刻度 s1,…,sn 和一系列宽高比 r1,…,rm。 当使用这些比例和长宽比的所有组合以每个像素为中心时,输入图像将总共有 whnm 个锚框(w*h为像素的总个数,n*m为一个像素下的锚框个数)。 尽管这些锚框可能会覆盖所有地面真实边界框,但计算复杂性很容易过高。 在实践中,我们只考虑包含 s1 或 r1的组合:

(s1,r1),(s1,r2),…,(s1,rm),    (s2,r1),(s3,r1),…,(sn,r1).

也就是说,以同一像素为中心的锚框的数量是 n+m−1对于整个输入图像,我们将共生成wh(n+m−1)个锚框。

上述生成锚框的方法可以在以下 multibox_prior 函数中实现。 我们指定输入图像、尺度列表和宽高比列表,然后此函数将返回所有的锚框。

交并比IoU:

用来表示两个框之间的相似度

 0表示无重叠,1表示完全重叠。

赋予锚框编号

 首先假设一张图片中有标注好的4个边缘框(即图片中有四个物体),而我们生成了9个锚框(实际上的锚框要比这个多很多)。

如上图所示:列表示标注的边框,行表示生成的锚框,我们将锚框和边框求IoU就得到了这个9*4矩阵。

算法思想:

        每次找出矩阵中最大的那个值,这个值对应的行和列即为边框和其对应的锚框,然后将两者关联起来,之后再删除其所在的行和列。比如第一次找到的是X23,那么边框3对应的最大交并比的锚框就是2,那么两者就关联起来。

        然后重复这个步骤4次即可找出所有边框对应的锚框。

非极大抑制(NMS)输出:

因为我们每个锚框会预测一个边缘框,而最后得到的结果可能就会出现图中这个结果:

 即一个物体有多个锚框进行预测,我们就需要取出重复的锚框,所以使用NMS:

  

theta作为阈值一般设置为0.5

总结:

训练的时候:首先通过算法生成大量锚框,并且给锚框编号,每个锚框作为一个样本加入到训练当中去

预测的时候:对每个锚框都进行预测,预测之后会生成大量的冗余的预测,然后通过NMS来对冗余的框进行去除。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5593403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存