由于项目需要,需要对图像提取一些特征点进行处理,所以找到了比较有名的基于特征点的网络模型Cornernet的论文进行学习。本文记录了一些个人在学习过程中的理解,可能会有疏漏和不当之处,欢迎指正。
论文地址:https://arxiv.org/abs/1808.01244
算法源码:https://github.com/ princeton-vl/CornerNet
1. CornerNet网络的核心思想与主要贡献
在这片论文之前,广泛研究的目标检测算法主要可以分为One-Stage detectors和Two-Stage detectors,这两类方法的共同之处在于网络对图像中的特征进行提取,以检测框(bounding box)的形式给出,然而bounding box的特征与图像特征本身并没有关系,这就一定程度上造成了定位误差,大多数算法是通过对bounding box进行后续修正(如NMS或尺寸微调等)减少误差,只能一定程度上提高性能,并不能从根本上解决问题。
本文算法摈弃了anchor box的思想,将boundingbox描述为一对特征点,即bounding box左上角的点(top-left corner)和右下角的点(bottom-right corner),在此基础上构造了一组卷积神经网络实现目标检测。
根据摘要描述,本文的主要创新之处在于:
1. 提出了基于特征点的Bounding box训练模式,即上文说的将bounding box描述为top-left corner和bottom-right corner对特征进行预测;
2. 根据任务需求,提出了一种新型池化层:corner pooling,有助于更精确的定位角点(corners)。
2. 论文框架
2.1 第一节 提出问题和解决方案
文章第一节首先介绍了目前的目标检测方法并基于检测步骤把他们分为了Two-stage detectors和One-stage detectors:
Two-stage detectors以R-CNN系列算法为代表,先对图像进行检测生成一组可能存在目标的区域RoIs(在Fast R-CNN之后引入了Region Proposals)但是他们共同的问题在于:依赖独立的RoIs提取算法(或者说RPN),检测效率不如One-stage detectors,基于RoIs的算法无法实现端到端训练。
One-stage detectors以SSD和YOLO系列算法为代表,将锚定框(Anchor box)以某种方式密集地分布在整张图片上,通过对Anchor box进行置信度评估以及回归任务来修正他们的坐标,来生成最终预测的Bounding box。但是One-stage detectors有两个缺陷:1. 这种方法通常需要非常多的anchor box来保证待选区域能和Ground truth重叠,最终计算结果缺只有很少的一部分anchor box被保留下来,拉慢了训练速度(难怪YOLO一算算一星期 - -||);2. anchor box引入了大量的超参数设计选择(design choices),在多尺度特征提取的过程中,单个网络对多个分辨率特征图做出独立的预测,每个尺度都用不同的特征和anchor box,算法复杂度较高。
此外还有一个问题就是前文提到的这些算法的bounding box的特征与图像特征本身并没有关系,仅仅对尺寸和位置进行修正和回归,这就一定程度上造成了定位误差(YOLO论文也说了主要误差来源就是Localization error)
在Newell等人工作的启发下,作者不采用anchor box的方式,提出了一种新的单阶段目标检测方法CornerNet。