目录
Anchor Free的Object Detection的多个方法被提出来,我最近也是集中地看了几篇Anchor Free的文章,文章来源是奇点汽车美研中心首席科学家兼总裁黄浴先生的的一篇总结。这篇文章中罗列Anchor Free的一些方法,但比较粗略,在这里我详细地总结一下。
在之前需要anchor方法中,Object Detection被当做是Classification的问题,将每个anchor分类,并对anchor的形状和位置做一些调整。Anchor Free的方法是将Object Detection的问题看做为keypoint estimation的问题。
Anchor Free 想要解决的问题
1、需要大量的anchor,anchor在整张图上非常密集的分布,从而需要判断大量的框是否与真值的IoU。
2、而且positive的框远远小于negative的框的数量,这种不平衡使得网络比较难训练,减慢了学习速度
3、anchor的设计需要很多超参数,针对不同的数据要设置不同的超参数,非常麻烦
4、anchor设计的不合理,很影响学习的效果,FCOS提到随着有关anchor超参数的变化,RetinaNet的AP浮动4%
早期探索
DenseBox
DenseBox: Unifying Landmark Localization with End to End Object Detection
上图为DenseBox的整体思路,DenseBox使用上采样的feature map预测boxes。下图为DenseBox网络的具体细节。
可以看出,在第5列的up_sampling之后的feature map分成两支:一支是做Classification,预测feature map中的每个网格单元是否属于Object;另一支做Regression,针对那些预测属于object的网格单元回归对应object的box的参数,其中box的参数表述为四条边相距输出像素的距离。
在ground truth的设定方面,位于物体中心一定距离内的像素点的真值设置为1,然后设置一部分灰色区域(在计算loss时不考虑),其他设置为背景。Loss在Classification和Regression均用的是L2 Loss。
其他小细节例如Hard Negative Mining等与Anchor based的方法是一样的。
本文还提到了使用Landmark Localization辅助进行Object Detection,具体结构如下图:
Landmark Localization是提取脸部的特征点,图中Conv5_2_landmark可以看到输出是72个通道,也就是说一个脸提取72个特征点。上图中的输入Fusion of conv3_4 and conv4_4应该就是主网络中upsampling的输出,Landmark Localization只针对Classification起作用。其中的操作可以看到是将lLandmark的输出和原来Classification的输出进行合并,然后再进行一次特征提取,然后输出Classification的结果。这块东西可能是因为我读文章的量还有限,无法理解其具体是怎么想的,或者是一种常规操作,这点还有待补充。
像Hourglass
YOLOv1
You Only Look Once: Unified, Real-Time Object Detection
Yolov1也是Anchor Free的典型之一。Yolov1通过卷积核下采样,得到7*7的feature map,每一个feature map负责预测几个box。其与DenseBox不同的几点在于:
- Yolov1最终7x7的feature map的每个网格单元预测多个box,而每个box除了有长宽信息,还有xy位置信息,xy的位置是限定在单元格内的,也就是常说的每个单元格负责预测中心点位于这个单元格的box。
- Yolov1在预测每个类别的socre和有关box的参数xywh的过程中,使用了2个全连接层,这一点增加了这个模型的不可解释性。这样子的操作,是将7x7个网格单元的信息耦合起来,组成4906的特征向量,然后再恢复成7x7个单元格的预测,这种预测方式使得7x7个单元格互相之间是耦合的,每个单元格的Classification和Regression也是耦合的,感觉无从解释。与Yolov1相比,DenseBox使用独立的两个预测头,分别解决Classification和Regression的问题,整个网络变的非常易于理解。通过对后续研究的了解,基本也是使用DenseBox的这种方式。
- Yolov1没有做上采样,但这个不是大问题。
Yolov2和v3为了提升精度,还是使用Anchor,作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。
Corner
该类方法使用Box的左上和右下两个顶点来表示Box,也就是说这类方法将Object Detection转为了顶点预测的问题,从而转入了Keypoint Estimation的问题中。
CornerNet
CornerNet: Detecting Objects as Paired Keypoints
CornerNet通过寻找每个框的左上点和右下点,然后进行匹配来完成Object Detection任务的。从上图可以看出,通过CovnNet的特征提取得到feature map,预测头分为两支,一支是寻找图片中的所有左上点,一支是寻找图片中的右下点,这种任务是典型的关键点预测的问题。所以其中的ConvNet自然而然想到的是在该问题上有着突出表现的Hourglass网络,CornetNet的具体网络结构如下图
每个顶点的预测头包括4个模块,具体如下图,预测头一开始采用的残差网络的方式,其中插入Corner Pooling模块。
- Corner Pooling:Corner Pooling是本文提出为了顶点预测的一种Pooling模式,示意图如下图,对于左上顶点,Pooling的范围为竖直向下和水平向右,相当于pooling与该顶点有关的两条边上的所有信息。
- Heatmap:就是预测每个网格是顶点的socre
- Embeddings:给每个顶点一个标签,同一个box的两个顶点标签相距相近,不同box的标签相距较远,本文中使用标签只有1维,也就是一个标量,关于这个Loss具体构建如下。pull是让同一个box的两个顶点的标签相互靠近,push是希望不同box两个顶点的标签距离尽可能远,文中△设置为1,意味着希望不同box的的顶点标签相距超过1。
- Offset:Offset是指,如果backbone网络输出的feature map的网格数量是少于原始图片pixel的,原始图片的顶点位置不太可能再网格的中心,这里预测Offset进行微调,如果网格数量与pixel一致,可以认为这是在亚像素级的精细化的预测。
另外需要注意的一点是,在训练过程中,Corner真值给的方式是真实的Corner的位置值为1,真实位置附近的值是以真实位置为中心的一个高斯分布。这样意思是说,不强求Corner预测的非常准,在一定范围内也可以接受。
CornerNet-Lite
CornerNet-Lite: Efficient Keypoint Based Object Detection
本文提出来两个网络,上图为CornerNet-Saccade,该网络先粗略的找一个RoI,然后再在RoI中预测box,但文章中称该网络是single-stage,这一点我比较疑惑?如果读者对single-stage和two-stage有见解的话,请在评论中留下您宝贵的意见!!!
该网络过程首先将图片缩小,然后用主干网络3个不同scale的feature map预测框可能在的位置,用center表示,但有了center怎么生成RoI,文章中没有讲!!!然后生成了RoI之后,在原图中crop,然后针对大小不同的object进行放大,为的是把小的object进行放大,然后在RoI中使用CornerNet进行预测box。但这个放大的方法反正我是没有看懂!!!放大方法如下图:
第一段是说,根据大中小3类不同的object进行不同程度的放大。第二段是说,根据放大后的Bounding box的长边来判断是什么类型的object。我不太明白,这个3类不同object到底是怎么定义的?所以到底是根据什么放大的???我觉得只有看了代码才能明白到底是怎么操作的。
本文提出的另外一个网络CornerNet-Squeeze就是把主干网络中的网络模块换一换,换成SqueezeNet的样子。
总体来说,这篇文章我是没咋看懂233333333,可能还是比较菜。
center
下面几篇Center的文章发出来的时间差不多,这样子排列只是为了能把方法讲的更清楚一些
Center and Scale Prediction
High-level Semantic Feature Detection: A New Perspective for Pedestrian Detection
Wei
该方法的网络结构非常清晰,而且很常见,就是backbone网络再加上预测头,预测头的子网络的结构也非常清晰。一部分预测中心点的位置,一部分预测框的高度。这里只预测框的高度是因为,这篇文章只针对行人做预测,固定了框的长宽比为0.41,所以只用预测框的高度即可。本文整体非常易懂,有一个地方不太明白如下:
Since the feature maps from each stage have different scales, we use L2-normalization to rescale their norms to 10, which is similar to [21].
[21]还没有来得及去看,如果有明白的大佬,可以留言交流一下
CenterNet
Objects as Points