Datawhale目标检测打卡笔记【2、Anchor的一些东西】

一、Anchor概述

anchor(锚点)在某些文章中也叫prior bounding box(先验框),其作用就是相当于给原是图像的目标的一个较强的先验特征。anchor的本质是在原图大小上的一些列矩形框,但因直接对原图做先验框所需计算量太大,而其中存在大量的冗余,故FasterRCNN的做法是将anchor与feature map关联。具体来说就是将原始图像经过一个CNN,最后得到的一个512维的特征图,这512维数据对应着原始图上很多不同的大小、宽高区域的特征,这些区域的中心点相同。假设下采样率默认为16,则每一个点的坐标乘以16即可得到对应的原图坐标。
因为目标物体有不同的尺寸特性,为了适应这种特性,Faster RCNN默认在一个点上抽取9种anchor,scale为{8,16,32},ratio为{0.5,1,2},排列组合既可以得到不同长宽比与面积的anchor。接着将9种尺寸的anchor反算到原始图像,即可得到不同的原始proposal。例如feature map大小为37x50,则需要37x50x9=16650个anchors,反算到原始图像的proposal就更丰富了。最后通过回归网络与分类网络得到每一个anchor的前景背景概率以及偏移量,得到最终的检测结果。
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第1张图片
另一个关于anchor的直观例子:
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第2张图片

二、Anchor的生成

这里以Faster RCNN里面的RPN部分生成anchor为例:

def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
                     scales=2**np.arange(3, 6)):
    """
    Generate anchor (reference) windows by enumerating aspect ratios X
    scales wrt a reference (0, 0, 15, 15) window.
    """

    # 首先创建一个基本anchor为[0, 0, 15, 15]
    base_anchor = np.array([1, 1, base_size, base_size]) - 1
    # 将基本anchor进行宽高变化,生成三种宽高比的anchor
    ratio_anchors = _ratio_enum(base_anchor, ratios)
    # 将上述anchor再进行尺度变化,得到最终的9种anchors
    anchors = np.vstack([_scale_enum(ratio_anchors[i, :], scales)
                         for i in xrange(ratio_anchors.shape[0])])
    # 返回对应于feature map大小的anchors
    return anchors

三、关于anchor-based与anchor-free

anchor-based方法即使用anchor提取目标框,下面有一些方法示例(摘自pp飞浆):
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第3张图片
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第4张图片
而使用anchor的方法因为需要人工设定,并且anchor带来了一些参数的增长,其中还存在一些不可避免的冗余。于是逐渐涌现出anchor-free的方法。anchor-free顾名思义,即不使用anchor而直接进行分类与回归,它们通常应用热力图或其他的手段,对中心点或角点进行预测,完成目标检测。典型的基于多关键点联合表达的方法如:ConnerNet、CenterNet(Keypoint Triplets for Object Detection,较早出来的那一篇)、RepPoints等;基于中心区域预测的方法如:FCOS、CenterNet(Objects as Points,xingyizhou那篇添加链接描述)等。
[单阶段(one stage)和双阶段(two stage)划分依据是是否存在显式的 roi 特征提取过程,即是否分离坐标和类别属性。]
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第5张图片
关于众多典型方法的大致分类可参考PP飞浆教程里面的一页PPT:
Datawhale目标检测打卡笔记【2、Anchor的一些东西】_第6张图片

参考文献

【1】、《深度学习之PyTorch物体检测实战》,2020.1,机械工业出版社,董洪义等
【2】、Datawhale《动手学CV-Pytorch版》,github地址:https://github.com/datawhalechina/dive-into-cv-pytorch/
【3】、百度PP飞浆目标检测课程,地址:https://aistudio.baidu.com/aistudio/course/introduce/1617

你可能感兴趣的:(目标检测,人工智能,计算机视觉)