[论文理解] CornerNet: Detecting Objects as Paired Keypoints
[论文理解] 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的更多相关文章
- 【论文阅读】CornerNet: Detecting Objects as Paired Keypoints
以下内容将介绍ECCV2018的一篇目标检测的文章<CornerNet: Detecting Objects as Paired Keypoints>.该文章讲述了一个老子就是不用anch ...
- CornerNet: Detecting Objects as Paired Keypoints
CornerNet是一种anchor free的目标检测方法,不需要设置anchor,而是通过检测关键点(Keypoints),即目标的左上角(Top-Left Corners)和右下角(Bottom ...
- 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)
论文原址:https://arxiv.org/pdf/1808.01244.pdf github:https://github.com/princeton-vl/CornerNet 摘要 本文提出了目 ...
- 论文阅读 | CornerNet:Detecting Objects as Paired Keypoints
论文地址:https://arxiv.org/abs/1808.01244v1 论文代码:https://github.com/umich-vl/CornerNet 概述 CornerNet是一篇发表 ...
- [论文理解]关于ResNet的进一步理解
[论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...
- [论文理解]MetaAnchor: Learning to Detect Objects with Customized Anchors
MetaAnchor: Learning to Detect Objects with Customized Anchors Intro 本文我其实看了几遍也没看懂,看了meta以为是一个很高大上的东 ...
- 【论文】CornerNet:几点疑问
1.cornerpooling的设计,个人觉得解释有些牵强. 这里的两个特征图如何解释,corner点为何是横向与纵向响应最强的点.如果仅仅当成一种奇特的池化方式,恰好也有着不错的效果,那倒是可以接受 ...
- R-FCN论文理解
一.R-FCN初探 1. R-FCN贡献 提出Position-sensitive score maps来解决目标检测的位置敏感性问题: 区域为基础的,全卷积网络的二阶段目标检测框架: 比Faster ...
- YOLO V3论文理解
YOLO3主要的改进有:调整了网络结构:利用多尺度特征进行对象检测:对象分类用Logistic取代了softmax. 1.Darknet-53 network在论文中虽然有给网络的图,但我还是简单说一 ...
随机推荐
- 【异步编程】Part1:await&async语法糖让异步编程如鱼得水
前导 Asynchronous programming Model(APM)异步编程模型以BeginMethod(...) 和 EndMethod(...)结对出现. IAsyncResult Beg ...
- IT兄弟连 Java语法教程 运行Java程序
编译好Java字节码文件后,接下来就应该运行Java程序了. 运行Java程序需要使用JDK中提供的java命令,因为已经把java命令所在的路径添加到了系统的Path环境变量中,因此现在可以直接使用 ...
- JVM虚拟机的大概了解(新人面试必看!)
一. 引言,环境安装测试中的代码解析 1. HotSpot(TM) 64-bit Server VM(build 25.181-b13,mixed mode),这是多种 HotSo ...
- ORA-01950:表空间“USERS”中无权限
ORA-01950:表空间“USERS”中无权限 解决方案: A)确认给用户授权了resource角色 B)取消限制 ALTER USER "HCCPMS" QUOTA UNLIM ...
- Debian 跨版本升级
相对于某些重量级 Linux 发行版而言,同样是通过网络跨版本升级,Debian 的升级过程总要显得轻快很多.不会因为要下载数量惊人的软件包并安装而把升级时间拉得很长,也不用担心中途某些程序崩溃退出导 ...
- linux打包文件,压缩文件
1.打包: linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进行压缩. 1.命令格 ...
- MyBatis学习总结(二)---实例
为了对MyBatis有个初步了解,现做一个简单的增.删.改.查实例.了解涉及的文件与相关作用. MySql创建friends表,以下是表的sql语句 DROP TABLE IF EXISTS `fri ...
- hystrix 应用问题
1.问题总结, 如果项目中使用了ThreadLocal,注意hystix创建新线程时,ThreadLocal中存的是之前线程中的数据,在hystix线程中获取不到 2.问题 throwable异常参数 ...
- 使用js获取复选框的值,并把数组传回后台处理,过程使用的是Ajax异步查询
这是界面代码: function shua(){ var id_array=new Array(); $('input[id="checkAll& ...
- Java基础语法(方法)
Java基础语法 今日内容介绍 u 方法 第1章 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情( ...