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来对冗余的框进行去除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)