anchor-free论文阅读笔记

1
2
3
4
5
6
7
8
flow
st=>start: Start
op1=>operation: DenseBox(2015)
op2=>operation: YOLOV1
op3=>operation: CornerNet
op4=>operation: ExtremeNet
e=>end
op1(right)->op2(right)->op3(right)->op4(right)
1
2
3
4
5
6
7
8
flow
st=>start: Start
op5=>operation: FSAF
op6=>operation: FCOS
op7=>operation: FoveaBox
op8=>operation: CenterNet
e=>end
op5(right)->op6(right)->op7(right)->op8

DenseBox

论文地址:https://arxiv.org/pdf/1509.04874.pdf

densebox_struct

系统将整个图片作为输入,每个像素输出5维的feature map, 一个代表该像素是人脸的置信分,另外四个代表该像素到四条边的距离

YOLOV1

论文地址:https://arxiv.org/abs/1506.02640

yolov1_forward

YOLOV1将图片分为SxS的网格,一次前向网络得到SxSx(B*5+C)的张量,每个bbox预测x,y,w,h,c的数值,x,y为相对栅格左上角偏移量,w,h为相对于整张图的相对值

CornerNet

论文地址:https://arxiv.org/pdf/1808.01244.pdf

摘要

CornerNet是无anchor,one-stage的目标检测算法,通过检测物体的左上角和右下角角点从而得到物体的bbox,CornetNet通过省略anchor等步骤是的算法更简单,但是缺点是更慢

原理

CornetNet通过一次前向传播,分别通过backbone, CornerPooling得到Heatmap, Embeddings, Offsets三个组件,通过这三个组件得到目标所在的位置,总体网络结构图如下图,前面是一个二次级联的沙漏网络,进入左下角和右上角的角点预测模块,每个角点预测模块包括CornerPooling, 预测角点位置的Heatmap,角点组bbox的Embeddings, 这两个张量决定哪两个角点是属于同一个bbox的,Offsets用于框的微调,由于第一次下采样,预测值映射回原图量化而出现的精度损失

cornernet_forward

沙漏网络

hourglass

hourglass_module

输入从128下采样后又上采样到128,这个操作和语义分割几乎一样,CornerNet堆叠了两个HourglassNetwork

CornerPooling

从backbone出来,针对某个角点张量分成三个分支,计算当前位置值时向右方与下方max的距离取最大值并求和作为该点的最终结果

CornerPooling

CornerPooling2

Heatmap

Heatmap的形状为NCHW,C为类别数,每个点上的位置为0-1之间的值,代表这个点是否是该类别的置信度

Embeddings

上一步得到左上角和右下角的角点,还需要把属于同一个物体的角点组合起来,本文通过两个Embeddings将他们结合起来。论文通过L1范数距离判断两个角点是否是同一个角点,具体的为通过计算相同位置的向量值的L1,如果两个值的L1距离很小则这两个角点来自同一个物体

Embedding

Offset

$$
o_k=(\frac{x_k}{n}-\lfloor\frac{x_k}{n}\rfloor, \frac{y_k}{n}-\lfloor\frac{y_k}{n}\rfloor)
$$

下采样的时候由于取整导致heatmap对应位置映射回原图的时候不是真实位置,这时通过offset来微调

Loss

heatmap采用修改过的focal loss

heatmap_focaloss

通过$(1-p_{cij})^{\alpha}$控制难易样本的loss权重。这里和标准的focal loss的一个却别是负样本的处理,在ground true的地方$y_{cij}=1$,非gt点理论上$y_{cij}$应该是0,但是这里给了一个高斯处理的非0值,通过$\beta$控制权重

offset采用smoothl1 loss,$L_{offset}=\frac{1}{N}\sum{SmoothL1Loss(o_k, \hat{o}_k)}$,$o_k$为计算出的偏差,$\hat{o}_k$为真实的下采样后精度偏差

embedding loss, 4式使同一个目标的embedding vector距离很小,5式是的不属于同一个目标的距离很大

Embedding_loss

ExtremeNet

论文地址:

摘要

提出一种目标检测新思路,首先通过标准的关键点检测检测四个极值点和一个中心点,然后通过几何关系对提取到的关键点进行分组,5个极值点对应一个检测结果

该方法使目标检测转化为一个基于外观信息的关键点估计问题,从而避开区域分类和隐含特征学习

原理

extremenet_flow

在O(hw)的空间预测5个heatmap,代表该位置是否是某个类别的极左点,极右点,极顶点,极底点,预测的是概率值,代表该位置是否有极值点以及它所属的类别;ExtremeNet通过暴力组合所有的极点来判断哪些点来自于同一个物体,通过四个极值点计算该四个点的物理中心,到center heatmap中找到该点的值,如果该值超过阈值则这是一个有效的组合

extremenet_group

loss

ExtremeNet角点和offset的loss采用了CornerNet的loss,没有组点的过程所有没有那部分的损失,但是角点的损失由2个增加到5个

CenterNet(object as point)

论文地址:https://arxiv.org/pdf/1904.07850.pdf

原理

原图下采样4倍,针对每一个热点图的像素预测CHW,2HW,2HW三个张量,分别代表该点有某个类别物体中心点的概率,长宽,中心点的偏置

centernet_model

loss

中心点损失策略和cornernet处理角点一样,通过GT高斯处理中心点的像素

centernet_centerloss

长宽损失采用L1损失

centernet_sizeloss

偏移损失

centernet_offsetloss

decode

  • bbox decode

    heatmap取前100的位置,得分,类别->找出取前100点对应的reg的回归值->取出前100对应的wh的值->中心点的位置加上回归位置加上高宽得到bbox

  • pos decode

CenterNet:Keypoint Triplets

原文: https://arxiv.org/abs/1904.08189

#### 摘要

本篇文章基于CornerNet,CornerNet基于检测边界值确定角点从而确定bbox,但是作者认为这样系统感受不到框内部的信息,不像两阶段网络那样做ROIPooling,作者提出通过改进pooling的方式来提升检测的效果

原理

通过backbone网络卷积出两个分支的featuremap,一个分支代表两个角点,这个和corner一样,另一个代表是中心点。

角点配对通过embedding实现,左上角角点对应的embedding向量和右下角角点对应的embedding向量距离小于某个阈值则判断为同一个框,这个和cornernet一样。

区别cornernet的地方在于,centernet先通过左上角右下角确定一个bbox的中新区域,然后去中新点heatmap的该区域找是否有和左上角右下角构成bbox同一个类别的中心点,如果存在同类别中心点置信度超过阈值,则判断为一个bbox。

1566218763668

center pooling

从主干网络出来后的CHW,对某个点做centerpooling如下:从水平(x)和垂直(y)轴分别找到一个最大值,然后把他们加起来。这个和cornernet的cornerpooling的区别在于后者从起始点朝右,下方一个max的距离找最值,而centerpooling在整个轴上找

cascade pooling

使用该pooling的目的是为了解决cornerpooling不能感知到bbox内部的信息,所以cascade pooling除了像cornerpooling一样在边界取最大值,还在bbox内部找最大值加起来,覆盖了bbox整一块区域,像瀑布一样

中心区域的选取

判断一个bbox是否要保留还是删除,要看该框的中心点在中心点区域的center heatmap是否有同类别且高置信度的特征张量点,计算方式为

1566219874275

ctlx,ctly,cbrx,cbry为计算出来的中心点,tlx,tly,brx,bry为bbox的点,n取3或5

性能对比

network backbone FPS AP GPU
Centernet:triplet Hourglass-104 3.3 44.9/47.0 V100
Centernet:keypoint Hourglass-104 7.8 42.1/45.1 Titan-V
Extremenet Hourglass-104 3.1 40.2/43.7 Titan-V
Cornernet Hourglass-104 4.1 40.5/42.1 Titan-V
YOLOv3 DarkNet-53 20 33.0 Titan-V

不明白的地方

YOLO、SSD等在O(h^2w^2)空间中设置anchor

参考

https://blog.csdn.net/u014380165/article/details/77019084