zoukankan      html  css  js  c++  java
  • 【论文笔记】CornerNet:Detecting Objects as Paired Keypoints

    &论文概述

    题目CornerNet: Detecting Objects as Paired Keypoints

    作者及单位Hei Law · Jia Deng

    获取地址https://arxiv.org/abs/1808.01244v1

    &总结与个人观点

      本文提出了CornerNet,通过对分组的cornerstop-leftbottom-right)来进行目标检测,在MS COCO数据集中实现了较好的结果。

      本片文章中较大的创新点在于Corner pooling的提出,以及embedding vector的使用。但是整体结果并没有达到当前最好的情况,虽然corner pooling的使用确实对结果有所提升,二阶段的Cascade R-CNN仍然超越了该方法,当然此方法仍有较大的进步空间。

    &贡献

    1) 提出使用单个网络通过关键点(top-leftbottom-right)检测来定位目标的bboxCornerNet,使用single-stage检测器消除设计anchor boxes的需求。

    2) 提出corner pooling方法,使得网络更好地定位corners

    &拟解决的问题

    问题:主要针对anchor-based框架存在的问题,以及与当前keypoints框架的对比中的问题

    分析

    1Anchor-based方法主要存在2个缺陷:

    • 需要非常大的anchor boxes的集合,确保能够覆盖ground truth,而其中只有极少的部分是positive anchor,导致了negative anchorpositive anchor间的极度的不平衡;
    • Anchor boxes的使用引入了许多超参数(anchor的数量,sizescale等)与design choices(大多根据ad-hoc heuristics作出决策,尤其当结合单个网络在不同的分辨率上做分离的预测,且每个尺度使用不同的特征以及独立的anchor boxes的集合的多尺度结构时,将会变得更加复杂)

    对关键点,即corner的检测优于bbox中心或候选框检测结果提出假设:

    • 相比于anchor-based方法,定位box的中心需要目标所有的4条边,而定位一个角只需要2条边,因此会更简单,甚至在编码入角的定义的先验分布的corner pooling来说会使效果更明显
    • 使用corner提供了离散化box空间的更有效的方法,只需要O(wh)corners就可以代表O(w2h2)anchor的可能性。

    根据以上分析,本文选择了keypoints的检测方法来进行目标检测

    2、基于对一些使用关键点检测框架的分析,将一些策略加入到检测框架中,下表显示了CornerNet针对DeNetPLN作出的相应的改进:

    DeNet

    PLN(Point Linking Network)

    CornerNet

    two-stage,没有验证两个角是否来自相同的目标,而仅仅依靠子检测网络来拒绝差的RoIs

     

    one-stage,使用单个ConvNet来对corner进行检测以及分组

    在用于分类的区域的确定位置进行特征选取

     

    不需要任何的特征选取步骤

     

    通过预测像素的位置来对corner以及center进行分组

    使用预测的embeding向量对corner分组

    3、每个角所在的地方大多数情况下并不包含目标的信息,即每个角所在的位置并不是存在目标的位置。

    提出corner pooling方法来更好地定位corner

    &框架及主要方法

    1CornerNet网络的检测过程

       如上图所示,输入的图片经过ConvNet分别提取top-left以及bottom-rightheatmaps,对提取得到的heatmaps进行embedding处理,也即对corners进行分组,然后将其转换为bbox,即可得到输出结果。

    1) 检测cornersheatmaps

      每个heatmap拥有C(类别数量)个通道,没有背景channel,每个channel都是一个binary mask,表示一个类别中corners的位置。

      对于每个corner来说,只有一个ground-truth positive location,其他的都是negative。如果一组negative corner非常接近对应的ground truth的位置,也能生成一个足以覆盖目标的bbox,如上图所示,故对positive corner附近的以r位半径的圆的范围内减少negative corner的惩罚系数。这个r由目标的size以及与ground truth间的最小的IoU确定。

      其中pcij是在heatmap中的位置(i, j)上类c的得分,ycij是由非正则化的高斯增强的ground-truthheatmap

    Offset

    通常使用下采样来整合全局信息以及降低内存消耗。但当其全卷积地应用到图片中时,输出的size通常会小于整张图片,因此原图中的(x, y)映射到heatmap中为,如果此时将heatmap重映射到原图中,可能会损失一些精度,而这种情况可能会在计算一些小的bboxground-truth之间的IoU时产生较大的影响。因此定义offset在将heatmap映射到输入的分辨率前对corner的定位进行微调。

      在训练中,使用平滑的第一范式损失函数进行位置调整:

     

      下表为对offset的使用进行的消融实现,可以看出offset在每种情况的人脸下均有提升,尤其在小人脸中提升最大。

    2) corners进行分组(embedding layers

      受Associative Embedding方法,根据embedding的距离对corner进行分组:如果一个左上与右下角属于相同的bbox,其embedding间的距离应当很小。因为只有embedding间的距离被用于对corners进行分组,embedding的实际值并不重要。使用“pull”loss来训练网络对corner进行分组,“push”losscorner分离:

       其中ebketk分别是第k个目标的bottom-righttop-left角,ek是两者的均值。Pull loss是为了使得etkebk间的距离尽量小,push loss则是为了使得每组cornerembedding值尽量大。

    2Corner Pooling

    如果使用普通的pooling层,在所有的位置放置相同的权重,然而通常情况下,每个角的地方并没有局部的可视的信息,因此考虑使用一个新颖的pooling方式。

      如上图所示,对于Corner Pooling,为确定当前像素位置是否为左上角,需要水平向右查找目标的最上方的边界,竖直向下查找最左方的边界。对于右下角也与之类似。具体操作方法可看下图:

      在预测模型中使用将第一个卷积模块替换用corner pooling替换的修正的残差模块,之后连接到卷积模块中,输出多分支分别预测heatmapsembeddins以及offsets

       使用消融实验,用来验证corner pooling的作用。根据下表可以看出,corner pooling的使用使得整体的AP提高了2个点。

      下图为是否使用corner pooling进行bbox结果的对比。从途中可以看出,corner pooling的使用不仅使得结果的bbox更贴近ground truth,同时也可能增强识别的精度。 

      

    &遇到的问题

      根据Corner Pooling的说法,在进行pooling的过程中,如果有一张图片中存在多个处于同一行的top-left或者同一列的bottom-right,会不会对结果造成很大的误差?

  • 相关阅读:
    Error 1031
    电信短信转移取消
    手机模拟手柄操作电脑游戏
    MySQL 5.7 InnoDB Cluster 部署
    Bitwarden_rs搭建
    脚本:Tomcat日志切割
    报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
    Linux启动过程详解
    UNIX环境高级编程__针对apue.h找不到的情况以及log错误信息输出的问题
    C++primer_拷贝控制之13.26联系控制成员实现类值行为
  • 原文地址:https://www.cnblogs.com/fanzhongjie/p/11585411.html
Copyright © 2011-2022 走看看