1、CornerNet是密歇根大学Hei Law等人发表的ECCV2018的论文。主要实现目标检测。
这篇论文的主要是对Two-stage目标检测的Region Proposal阶段需要提取的anchor boxes上提出了一些观点。认为目前的boxes上的算法有如下drawbacks:
- 需要选取大量的anchor box来保证有足够的与gt满足overlap阈值的anchor box。因为anchor box数量大,相应的就造成正负样本的不均衡。
- anchor boxes的使用引入了许多的超参。include how many boxes, what sizes, and what aspect ratios。影响模型的训练和推断速率。
2、论文的关键点
- 论文就提出one-stage的检测方法,舍弃传统的anchor boxes思路,提出CornerNet模型来预测目标边界框左上角和右下角一对顶点。使用单一卷积模型来生成热点图(heatmap)和连接矢量(embedding vector)。连接矢量是用来group a pair of corners that belong to the same object。
- Corner pooling:是论文提出的一个novel component。可以帮助卷积网络更好的定位bounding boxes的corner,相当于是为了更好的计算出corner位置而提出的一个自己的方法。
- 使用了Focal loss,动态的去调整每个anchor box的权值,能对正负样本有一个很好的权衡作用。是模型在训练时可以更好的专注难分类的样本。
这里有一个作者对原始位置检测和论文提出的位置检测方法的对比 [这个地方有些疑惑]:
- 首先,对于原来的box,需要得到box center的位置,而这个位置的获取,依赖于all sides of the object,而论文的方法定位一个corner只需要2 sides,因此会更加容易,加上corner pooling后会更加容易。
- 其次,corners provide a more efficient way of densely discretizing the space of boxes:we just need O(wh) corners to represent O(
) possible anchor boxes。
3、CornerNet details and loss
detecting Corners:
- backbone:使用的是hourglass network,hourglass network为沙漏型网络,论文中使用了两个hourglass module来作为backbone。
- 在backbone后跟着两个prediction modules,one for top-left corners, the other for bottom-right corners,每个module都有自己的corner pooling module来对prediction module出来的结果进行pool,最终输出heatmaps, embeddings, offsets。
- 预测时有两个heatmap sets,分别是对top-left corners和bottom-right corners的。每个heatmap的输出大小为HxWxC,C为num_channel,是类别数,不包括背景类。每一个channel的heapmap都是一个binary mask indicating the locations of the corners for a class。
- 对于每一个corner,一个gt corner只会对应于一个positive location,而其余的是negative location,对于a pair of false corner detections,如果他们与各自的gt location很接近,那么也可以产生一个比较好的box能与gt有较高的IoU,这样的话。因此论文选择在gt corner的一个radius内,负样本的loss会在这个范围内有一个衰减的计算。最终在radius边缘时,此时的负样本对loss的贡献则为0。上述radius是由目标的size来决定(一对使用radius的corner点,可以产生IoU达到阈值0.7的bounding box)。
- 此处的focal loss为:其中N为一个image中的目标数,
是predicted heatmap上位置(i, j)的的score,
就是gt heatmap augmented with the unnormalized Gaussians。[此处个人理解是,在对于位置的回归来说,原始的two-stage的网络都是对正样本anchor box位置进行一个与gt的距离计算作为loss,loss减少,使anchor box和gt的位置坐标拉近,而这里,是对其进行一个是不是的计算,将gt的corner位置作为我的理想predicted location,来计算loss,是在gt corner位置上的score可以尽可能接近1。而本应该其他位置全为负样本,即
为0,来作为一个负样本计算的,但是考虑到上述的一个radius内的情况,我们另在此radius范围内的
符合一个高斯分布来衰减,从而使loss的设计更加符合真实的情况]
- 许多网络会使用下采样层来将全局信息聚集起来同时减少了内存需要。这样就使得输出的size比原始image size小,因此,a location(x, y) in the image is mapped to the location (
,
) in the heatmap where n is the downsampling factor。当我们从heatmap映射回原始的image的时候,会损失一些精度,这个就会对一些小bbox与其的gt的IoU造成影响。故在这里提出了一个方法来解决这个问题(这个是在映射回原图之前的调整):
Grouping Corners:
这部分主要是对top-left和bottom-right的匹配过程的loss优化,来绝对一对corner是否属于一个bounding box。这个是对每一个detected corner产生一个embedding vector,这个embedding vector是用来进行一个相互之间的embedding vector相似性计算,所以其真实值就可以忽略掉。
下面的就是N个object的所有predicted corner之间的相似度计算。而
是令不同目标之间的corner相似度尽可能要小。
Corner Pooling:
corner pooling是paper自己提出来的为了适应corner选取的一个pool方法。corner pooling最终来预测heatmaps, embedding, offsets。
其核心思想就是如fig6,例是一个top-left corner pooling,首先在选取的从右至左的数据中,在从右到左的推进方向,都令其输出为右到目前位置的最大值。第二个从下至上的也是一样的操作。最终进行一个像素的求和。[这部分是在三个预测值之前的部分,所以我理解这部分的操作可能是如果在这个范围内有目标的话,那么这样的操作会令top-left值比较大,于是就可以理解成为了一个可能的top-left 预测点。]
最终loss:
4、experiments details
在test的时候,使用simple post-processing algorithm来产生bounding boxes from heatmaps, embeddings and offsets。首先对corner heatmaps使用3x3的max pooling layer来进行NMS的处理。然后挑选top-100的top-left和top-100的bottm-right corners from heatmaps。
Ablation result: