CornerNet学习笔记

提出CornerNet,使用一对关键点(左上角和右下角)定位目标,避免使用Anchor带来的问题。引入CornerPooling提高角点定位准确性,在COCO数据集达到42.2% AP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CornerNet: Detecting Objects as Paired Keypoints

ECCV2018

论文链接

参考博客

Abstract

  • 提出了CornerNet,不同于传统的边界框(对Anchor进行回归),本文使用一对关键点(左上角和右下角)来定位目标

  • 提出了Corner Pooling,有助于更好的定位corner

Introduction

在这里插入图片描述

  • 之前的工作都是基于Anchor,有两个缺点:

    • 需要大量的Anchor
    • 引入了很多超参数,比如Anchor的大小、比例、个数
  • CornerNet通过左上角点和右上角点来检测目标

  • Corner Pooling如图所示,采用两个特征图,一个对于所有像素向右做最大池化,一个对于所有像素向下做最大池化,最后将两个特征图简单的相加

在这里插入图片描述

  • 使用角点比边界框好的原因

    • 边界框的中心更难定位,因为它依赖于四个边,corner依赖两条边,Corner Pooling编码了关于角点定义的先验知识
    • O ( w h ) O(wh) O(wh)个角点可以表示 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)个边界框
  • 在COCO数据集上达到了42.2%的AP,优于当时左右一阶段检测器

Related Work

本文受到了多人姿态估计中工作的启发

DeNet

  • 一种两阶段的目标检测器,没有使用Anchor来生成RoIs

  • 首先确定每个位置属于边界框四个角点的可能性,然后列举所有的组合来生成RoI,最后对RoI进行分类

  • 本文与DeNet的区别:

    • DeNet不能识别出两个点是否属于同一个对象,还需要对RoI进行分类,CornerNet是一个单阶段的检测器

    • DeNet selects features at manually determined locations relative to a region for classification, while our approach does not require any feature selection step.

    • CornerNet引入了Corner Pooling

Point Linking Network (PLN)

  • 一种一阶段的目标检测器,没有使用Anchor

  • 首先预测一个边界框的四个角点和一个中心点,然后对于每一个角点预测其他像素是中心点的概率,对中心点预测其他像素是四个角点的概率,最后结合角点和中心点的预测生成最终的边界框

  • 本文与PLN的区别:

    • CornerNet groups the corners by predicting embedding vectors, while PLN groups the corner and center by predicting pixel locations.
    • CornerNet引入了Corner Pooling

CornerNet

在这里插入图片描述

  • CornerNet采用一对关键点(左上角和右下角)来检测目标,卷积网络生成两个预测分支来分别用于左上角和右下角,采用的backbone为沙漏网络。

  • 没有使用最大池化,使用步长为2的池化层减小分辨率
    在这里插入图片描述

  • 预测分支经过Corner Pooling之后生成Heatmaps、Embeddings、Offsets

    • Heatmaps大小为 C ∗ H ∗ W C*H*W CHW C C C是类别数(不包含背景)

      • 每个通道都是二值的掩码,代表是不是该类别的角点
      • 训练的时候只标记一个真实点为正样本,其他点都为负样本,负样本的点在以正样本为中心的圆内损失减小,圆的半径根据目标的大小而定,需保证圆内的点生成边界框和GroundTruth的IoU大于 t t t( t t t在文中设为0.3)
      • 根据计算的半径,损失的减少规则为高斯分布 e x 2 + y 2 2 σ 2 e^{\frac{x^2+y^2}{2σ^2}} e2σ2x2+y2,其中中心点为真实点, σ σ σ为半径的 1 / 3 1/3 1/3
      • 损失函数为Focal Loss的变体( p c i j p_{cij} pcij ( i , j ) (i,j) (i,j) c c c类角点的概率, y c i j y_{cij} ycij则是Gaussians公式生成的分数, N N N是一张图片中的目标数,α 和 β 是控制每个点贡献的超参数,文中 α 为 2 、β 为 4):
        在这里插入图片描述
    • Offsets

      • 由于在卷积过程中进行了下采样,所以在预测的角点对应回原图之后会损失一些精度
      • 于是增加了偏移量来消除这部分精度损失, O k O_k Ok表示偏移量,其中 n n n代表下采样的倍数, x k , y k x_k,y_k xk,yk是真实角点 k k k的坐标
        在这里插入图片描述
      • 所有的类共享一组参数(左上角和右下角的偏移)
      • 训练过程的损失如下(其中 N N N是目标的数量):
        在这里插入图片描述
    • Embeddings

      • 图片中可能出现同一类的多个目标,于是需要确定一对左上角点和右下角点是不是来自同一个边界框,为每一个检测到的角点生成一个一维嵌入向量,如果左上角和右下角属于同一个边界框,那么他们嵌入向量的距离就比较小。然后,我们可以根据左上角和右下角嵌入向量之间的距离对角点进行分组。嵌入向量的实际值并不重要,只用它们之间的距离用于对角点进行分组。

      • 本文的方法受到用于多人姿态估计任务的关联嵌入方法的启发。

      • 训练过程中使用以下损失来分组角点,缩小属于同一个目标(k类目标)的两个角点的距离 e t k e_{t_k} etk代表 k k k类目标左上角的embedding, e b k e_{b_k} ebk代表右下角的embedding, e k e_k ek是两者的平均值,该损失只用于真实角点):
        在这里插入图片描述

      • 使用以下损失来分离角点,扩大不属于同一个目标的两个角点的距离(∆为1, k 和 j k和j kj代表不同的类别):
        在这里插入图片描述

  1. 总的训练损失(α 和 β 为 0.1,γ 为 1):
    在这里插入图片描述

Corner Pooling

在这里插入图片描述

  • 如图2所示,有些角点没有局部视觉特征,为了确定一个像素是否是左上角,我们需要水平向右看一个目标的最上面的边界,垂直向下看最左边的边界。因此,提出corner pooling,通过编码明确的先验知识来更好地定位角点。
  • 如图6所示,以左上角为例,水平方向从右向左做最大池化得到一张特征图,竖直方向从下到上做最大池化得到一张特征图,最后将两张特征图逐元素相加

在这里插入图片描述

  • Corner Pooling 的公式表示(以左上角点为例)如下( f t , f l f_t,f_l ft,fl表示左上角点输入的两张特征图,大小为 W ∗ H W*H WH, f t i j 和 f l i j f_{t_{ij}}和f_{l_{ij}} ftijflij分别表示 f t , f l f_t,f_l ft,fl上坐标为 ( i , j ) (i,j) (i,j)的点,公式6表示从左到右做最大池化,公式7表示从下到上做最大池化):

在这里插入图片描述

  • 图7为prediction module的具体结构,首先是一个残差块(原本是两个3x3卷积),将1个3x3卷积替换为corner pooling,残差块之后是一个3x3的Conv-BN-ReLU,最后分为三个3x3的Conv-ReLU分支,使用1x1卷积生成Heatmaps、Embeddings、Offsets

在这里插入图片描述

Experiments

  • 图片不进行Resize,而是使用0进行填充

后处理流程

  • We first apply non-maximal suppression (NMS) by using a 3×3 max pooling layer on the corner heatmaps.

  • Then we pick the top 100 top-left and top 100 bottom-right corners from the heatmaps.The corner locations are adjusted by the corresponding offsets.

  • calculate the L1 distances between the embeddings of the top-left and bottom-right corners.Pairs that have distances greater than 0.5 or contain corners from different categories are rejected.

  • The average scores of the top-left and bottom-right corners are used as the detection scores.

  • 验证corner pooling 的作用

    • 对中大型目标效果更明显
      在这里插入图片描述
      在这里插入图片描述
  • 探讨角点在图片不同象限对检测有没有影响

在这里插入图片描述

  • 验证减少对负样本的惩罚的作用,验证半径对检测的影响

在这里插入图片描述

  • 对比沙漏网络和FPN

在这里插入图片描述

  • 对比不同IoU下几个网络的性能

在这里插入图片描述

  • 误差分析
    • 直接将生成的热图替换成GroundTruth,提升巨大,说明主要瓶颈还是角点的检测

在这里插入图片描述

  • 和其他方法的对比

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值