1 | flow |
1 | flow |
DenseBox
论文地址:https://arxiv.org/pdf/1509.04874.pdf
系统将整个图片作为输入,每个像素输出5维的feature map, 一个代表该像素是人脸的置信分,另外四个代表该像素到四条边的距离
YOLOV1
论文地址:https://arxiv.org/abs/1506.02640
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用于框的微调,由于第一次下采样,预测值映射回原图量化而出现的精度损失
沙漏网络
输入从128下采样后又上采样到128,这个操作和语义分割几乎一样,CornerNet堆叠了两个HourglassNetwork
CornerPooling
从backbone出来,针对某个角点张量分成三个分支,计算当前位置值时向右方与下方max的距离取最大值并求和作为该点的最终结果
Heatmap
Heatmap的形状为NCHW,C为类别数,每个点上的位置为0-1之间的值,代表这个点是否是该类别的置信度
Embeddings
上一步得到左上角和右下角的角点,还需要把属于同一个物体的角点组合起来,本文通过两个Embeddings将他们结合起来。论文通过L1范数距离判断两个角点是否是同一个角点,具体的为通过计算相同位置的向量值的L1,如果两个值的L1距离很小则这两个角点来自同一个物体
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
通过$(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式是的不属于同一个目标的距离很大
ExtremeNet
论文地址:
摘要
提出一种目标检测新思路,首先通过标准的关键点检测检测四个极值点和一个中心点,然后通过几何关系对提取到的关键点进行分组,5个极值点对应一个检测结果
该方法使目标检测转化为一个基于外观信息的关键点估计问题,从而避开区域分类和隐含特征学习
原理
在O(hw)的空间预测5个heatmap,代表该位置是否是某个类别的极左点,极右点,极顶点,极底点,预测的是概率值,代表该位置是否有极值点以及它所属的类别;ExtremeNet通过暴力组合所有的极点来判断哪些点来自于同一个物体,通过四个极值点计算该四个点的物理中心,到center heatmap中找到该点的值,如果该值超过阈值则这是一个有效的组合
loss
ExtremeNet角点和offset的loss采用了CornerNet的loss,没有组点的过程所有没有那部分的损失,但是角点的损失由2个增加到5个
CenterNet(object as point)
论文地址:https://arxiv.org/pdf/1904.07850.pdf
原理
原图下采样4倍,针对每一个热点图的像素预测CHW,2HW,2HW三个张量,分别代表该点有某个类别物体中心点的概率,长宽,中心点的偏置
loss
中心点损失策略和cornernet处理角点一样,通过GT高斯处理中心点的像素
长宽损失采用L1损失
偏移损失
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。
center pooling
从主干网络出来后的CHW,对某个点做centerpooling如下:从水平(x)和垂直(y)轴分别找到一个最大值,然后把他们加起来。这个和cornernet的cornerpooling的区别在于后者从起始点朝右,下方一个max的距离找最值,而centerpooling在整个轴上找
cascade pooling
使用该pooling的目的是为了解决cornerpooling不能感知到bbox内部的信息,所以cascade pooling除了像cornerpooling一样在边界取最大值,还在bbox内部找最大值加起来,覆盖了bbox整一块区域,像瀑布一样
中心区域的选取
判断一个bbox是否要保留还是删除,要看该框的中心点在中心点区域的center heatmap是否有同类别且高置信度的特征张量点,计算方式为
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等在空间中设置anchor