Anchor-Based目标检测学习记录
推荐文章
Anchor-Based-01 目标检测算法设计思想一:anchor是什么
Anchor-Based-02 目标检测算法设计思想二 :Matcher
Anchor-Based-03 目标检测算法设计思想三 :BoxCoder-BoxDecoder
Anchor-Based-04 目标检测的网络结构/backbone
这几篇文章讲的非常详细,而且讲的很好。
下面部分是我对于其中一些算法或者问题的个人见解,特地记录一下。
Matcher 算法
对于简单的猫狗分类任务,我们会对每一张图片进行标注,然后模型会根据图片的真实类别进行学习和训练。在基于Anchor的目标检测任务中,模型也会对每一个Anchor进行预测分类,但我们没有对每一个Anchor进行标注,模型并不知道目前预测的Anchor的真实类别,因此这是无法学习的。但我们不可能手动对每一个Anchor进行标注,我们只是标注了一张图片中某些目标区域而已,而且这些被标注的目标区域并不会与Anchor完美匹配。
因此为了确定每一个Anchor的真实类别,需要引入Matcher算法。
我们会计算每一个目标的GT(Ground Truth)与每一个Anchor的IOU,如果IOU超过设定的阈值,那么就认为该Anchor的类别为该目标的类别,否则就认为是背景。
这样我们就可以根据标注图片获得每一个Anchor的类别了。
BoxCoder算法
由于Anchor的框往往不会完美匹配真实目标,也就是说Anchor的框是有可能不会完美框中真是目标的,有可能会只框住大部分,这样是没法获取到检测目标准确的位置信息的。因此为了获取目标的准确位置需要用模型再预测出Anchor与目标GT的位置偏移量。
也就是说现在的模型需要预测两个值,一个是Anchor的类别,另一个是Anchor与目标GT的位置偏移量。
与之前说的类似,我们也不可能为每一个Anchor标注出其与目标GT的位置偏移量,因此需要使用BoxCoder算法将Anchor的坐标与GT坐标之间的偏移量编码成模型可以预测的变量。
Anchor生成
Anchor一般有3种不同的面积,area1<area2<area3,每一种面积又有3种不同长宽比的Anchor,1:1、1:2、2:1。因此一般来说对于某一个锚点会生成9张Anchor。
一般来说,对于特征图上的每一个像素点都会生成一系列的Anchor。但这不意味每个像素点都会生成9种Anchor,对于不同的特征图只需要生成一种面积的特征图就行。一般来说,对于尺度大的特征图,会生成小面积的Anchor;尺度小的特征图,会生成大面积的Anchor。