[论文理解] CornerNet: Detecting Objects as Paired Keypoints

简介

首先这是一篇anchor free的文章,看了之后觉得方法挺好的,预测左上角和右下角,这样不需要去管anchor了,理论上也就w*h个点,这总比好几万甚至好几十万的anchor容易吧。文章灵感来源于Newell et al. (2017) on Associative Embedding in the context of multi-person pose estimation,利用embedding后的角点的距离区分左上角和右下角的角点是否属于一个类别,同时,文章提出了Corner Pooling来确保网络得到足够的信息,这比一般的临近位置polling更加有效(这让我学会了如何在特定任务时使用特定方法)。

网络结构

网络大致结构如图所示,网络的输出由三个部分组成,分别是heatmap、embedding vectors和offsets:

网络的baseline是Hourglass Network,同时训练两个hourglass 网络,一个用来输出corner,一个用来输出右下角corner,然后再训练一个embedding网络,给输出的corner编码成向量通过编码的向量间的距离将左上角corner与右下角corner匹配组成一个box。而通过offsets可以弥补下采样带来的位置损失,并且使gt和预测更加接近。

训练前-Ground Truth分配

文章用的网络的输出由heatmap、embedding vectors和offsets三部分组成,后两者后面会详细说的。对于heatmap而言,输出的heatmap是shape为(batch_size,c,h,w),其中c为类别数,本文并没有设置背景类别,h,w分别为feature map的宽和高。

文章对gt的分配就是看在gt点的一定半径范围内的点认为是positive,半径之外的点认为是negative,而positive的点的值并不是全分配1,而是按照二维高斯分布分配值,这样做的好处就是保证在gt附近的点的预测值有一定权值,因为其也可能预测到完全框住gt的框,但是显然更靠近gt的点的权值应该被分配的大一些。看官方给的图:

这里绿色的是预测的,但是绿色框的corner并没有和gt重合,但是其却也可以包含目标,所以我们对这种点也应该分配其为positive,这样应该就理解了。

类别置信度的loss为facal loss的改进版,因为总还是会遇到类别不平衡的问题,而focal loss就正好很大程度上能解决这个问题,其loss的形式为:

这里C为类别数,H和W分别为feature map的宽高。由于本文的gt的score不一定是1,因为我们上面的高斯分布去分配score使得gt可能小于1,所以作者的改动就在不是1的时候,也就是下面的情况,这个设计使得与gt的临近点的loss惩罚比较小,由此解决hard positive exmaple的问题,α和β都是超参,额外设置的,具体看官方的代码。

offset学习

因为feature map比原始图像肯定是小的,所以在由feature map映射到原图像位置的时候就存在一定偏移,比如原始图像的位置为(220,220),下采样的比率为3,则对应的feature map的位置就是(73,73),而要映射回去的时候却出现了问题,因为73*3 = 219,所以是有偏移的,这个偏移可以通过网络学习,这样不仅可以消去偏移,而且可以让临近点尽可能忘gt靠拢。所以学习的时候就学习这个差值:

文章采用的offset的loss为smotth L1 Loss,所以loss的计算如图:

embedding学习

embedding的目的是为了group corners,对feature map embedding的目的是为了让embedding后的左上角和右下角的向量距离小,而和不同类别的corner的距离大,所以训练的loss就是下面这样子的:

ek这里是第k个box embedding之后左上角和右下角的均值,所以上面的loss可以确保相同同一个box的左上角和右下角的距离足够近,而下面的loss可以保证其和其他不同类别的vector的距离足够远。

Corner Pooling

由于一般的pooling只会利用周边的信息,而本文的任务需要利用的信息是水平的或者竖直的,对于top left corner而言,其需要利用的应该是其水平右边所有的信息和竖直下边所有的信息,比如下面这个例子:

为了确定好左上角这个corner,需要利用这个图里的帽子区域的信息和左边手这里的信息,而corner pooling就是来解决这个问题的,其具体操作如下:

对于top left corner,就是取其从改点到width的所有值中的最大值,然后取改点到height的最大值,将两者值进行相加,就得到了pooling后的值。

官方给出的例子如下:

代码实现参加github:

https://github.com/princeton-vl/CornerNet-Lite

论文地址:

https://arxiv.org/pdf/1808.01244.pdf

[论文理解] CornerNet: Detecting Objects as Paired Keypoints的更多相关文章

  1. 【论文阅读】CornerNet: Detecting Objects as Paired Keypoints

    以下内容将介绍ECCV2018的一篇目标检测的文章<CornerNet: Detecting Objects as Paired Keypoints>.该文章讲述了一个老子就是不用anch ...

  2. CornerNet: Detecting Objects as Paired Keypoints

    CornerNet是一种anchor free的目标检测方法,不需要设置anchor,而是通过检测关键点(Keypoints),即目标的左上角(Top-Left Corners)和右下角(Bottom ...

  3. 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)

    论文原址:https://arxiv.org/pdf/1808.01244.pdf github:https://github.com/princeton-vl/CornerNet 摘要 本文提出了目 ...

  4. 论文阅读 | CornerNet:Detecting Objects as Paired Keypoints

    论文地址:https://arxiv.org/abs/1808.01244v1 论文代码:https://github.com/umich-vl/CornerNet 概述 CornerNet是一篇发表 ...

  5. [论文理解]关于ResNet的进一步理解

    [论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...

  6. [论文理解]MetaAnchor: Learning to Detect Objects with Customized Anchors

    MetaAnchor: Learning to Detect Objects with Customized Anchors Intro 本文我其实看了几遍也没看懂,看了meta以为是一个很高大上的东 ...

  7. 【论文】CornerNet:几点疑问

    1.cornerpooling的设计,个人觉得解释有些牵强. 这里的两个特征图如何解释,corner点为何是横向与纵向响应最强的点.如果仅仅当成一种奇特的池化方式,恰好也有着不错的效果,那倒是可以接受 ...

  8. R-FCN论文理解

    一.R-FCN初探 1. R-FCN贡献 提出Position-sensitive score maps来解决目标检测的位置敏感性问题: 区域为基础的,全卷积网络的二阶段目标检测框架: 比Faster ...

  9. YOLO V3论文理解

    YOLO3主要的改进有:调整了网络结构:利用多尺度特征进行对象检测:对象分类用Logistic取代了softmax. 1.Darknet-53 network在论文中虽然有给网络的图,但我还是简单说一 ...

随机推荐

  1. Ajax的调试错误信息的输出

    error: function(xhr, status, error) { console.log(xhr); console.log(status); console.log(error); }

  2. HDU - 5001 Walk(概率dp+记忆化搜索)

    Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...

  3. Weekly Contest 113

    949. Largest Time for Given Digits (string::compare) Given an array of 4 digits, return the largest ...

  4. 洛谷P3293 [SCOI2016]美味(主席树)

    传送门 据说这题做法叫做可持久化trie树?(然而我并不会) 首先考虑一下贪心,从高位到低位枚举,如果能选1肯定比选0优 假设已经处理到了$b$的第$i$位,为1(为0的话同理就不说了) 那么只有当$ ...

  5. 关于Struts漏洞工具的使用

    最新struts-scan资源: https://www.cesafe.com/3486.html 一,将资源下载后,放入liunx系统中,并且需要具备python2的操作环境 二,打开终端使用如下命 ...

  6. Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

    有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V ...

  7. C# 数组之int[]

    一.数组分类 数组可以简单分为3类: 1维数组 2维数组 交错数组 二.数组初始化 1.一维数组 int [] A = { 1,2,3,4 } 直接赋值 或者 int [] A = new int [ ...

  8. 长春理工大学第十四届程序设计竞赛(重现赛)B.Bowling Game

    链接:https://ac.nowcoder.com/acm/contest/912/B 题意: 链接:https://ac.nowcoder.com/acm/contest/912/B来源:牛客网 ...

  9. Codeforces 1167E(思路、数据处理)

    思路 不难想到枚举\(l\),那如何高效求出最小的\(r\)?这样答案加上\(x-r+1\)即可. 如果\(l\)并没在序列里出现--没啥想法:如果\(l\)是序列里的数,我们可以做的事情是记下每个数 ...

  10. 062 Unique Paths 不同路径

    机器人位于一个 m x n 网格的左上角, 在下图中标记为“Start” (开始).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角,在下图中标记为“Finish”(结束).问有多少条不 ...