CentripetalNet:更合理的角点匹配,多方面改进CornerNet | CVPR 2020
CentripetalNet的核心在于新的角点匹配方式,额外学习一个向心偏移值,偏移值足够小的角点即为匹配,相对于embedding向量的匹配方式,这种方法更为鲁棒,解释性更好。另外论文提出的十字星变形卷积也很好地贴合角点目标检测的场景,增强角点特征
来源:晓飞的算法工程笔记 公众号
论文: CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection

Introduction

CornerNet打开了目标检测的新方式,通过检测角点进行目标的定位,在角点的匹配上,增加了额外embedding向量,向量距离较小的角点即为匹配。而论文认为,这种方法不仅难以训练,而且仅通过物体表面进行预测,缺乏目标的位置信息。对于相似物体,embedding向量很难进行特定的表达,如图1所示,相似的物体会造成错框现象。
为此,论文提出了CentripetalNet,核心在于提出了新的角点匹配方式,额外学习一个向心偏移值,偏移值足够小的角点即为匹配。相对于embedding向量,这种方法更为鲁棒,解释性更好。另外,论文还提出十字星变形卷积,针对角点预测的场景,在特征提取时能够准确地采样关键位置的特征。最后还增加了实例分割分支,能够将网络拓展到实例分割任务中。
CentripetalNet

如图2所示,CentripetalNet包含四个模块,分别为:
- 角点预测模块(Corner Prediction Module):用于产生候选角点,这部分跟CornerNet一样。
- 向心偏移模块(Centripetal Shift Module):预测角点的向心偏移,并根据偏移结果将相近的角点成组。
- 十字星变形卷积(Cross-star Deformable Convolution):针对角点场景的变形卷积,能够高效地增强角点位置的特征。
- 实例分割分支(Instance Mask Head):类似MaskRCNN增加实例分割分支,能够提升目标检测的性能以及增加实例分割能力。
Centripetal Shift Module
Centripetal Shift

对于\(bbox^i=(tlx^i,tly^i,brx^i,bry^i)\),几何中心为\((ctx^i, cty^i)=(\frac{tlx^i+brx^i}{2}, \frac{tly^i+bry^i}{2})\),定义左上角点和右下角点的向心偏移为:

\(log\)函数用来减少向心偏移的数值范围,让训练更容易。在训练时,由于非GT角点需要结合角点偏移计算向心偏移,比较复杂,如图a所示,所以仅对GT角点使用smooth L1损失进行向心偏移训练:

Corner Matching

属于同一组的角点应该有足够近的中心点,所以在得到向心偏移和角点偏移后,可根据角点对应的中心点判断两个角点是否对应。首先将满足几何关系\(tlx < brx \wedge tly < bry\)的角点组合成预测框,每个预测框的置信度为角点置信度的均值。接着,如图c所示,定义每个预测框的中心区域:

\(R_{central}\)的角点计算为:

\(0 < \mu \le 1\)为中心区域对应预测框边长的比例,根据向心偏移计算出左上角点的中心点\((tl_{ctx}, tl_{cty})\)和右下角点的中心点\((br_{ctx}, br_{cty})\),计算满足中心区域关系\((tl^j_{ctx}, tl^j_{cty})\in R^j_{central} \wedge (br^j_{ctx}, br^j_{cty})\in R^j_{central}\)的预测框的权值:

从公式5可以看出,角点对应的中心点的距离越近,预测框的权值越高,对于不满足中心点几何关系的预测框,权值直接设为0,最后,使用权值对置信度进行加权输出。
Cross-star Deformable Convolution

为了让角点感知目标的位置信息,coner pooling使用max和sum来进行目标信息的水平和垂直传递,导致输出的特征图存在十字星现象,如图4a所示,十字星的边界包含了丰富的上下文信息。为了进一步提取十字星边界的特征,不仅需要更大的感受域,还需要适应其特殊的几何结构,所以论文提出了十字星变形卷积。

但并不是所有的边界特征都是有用的,对于左上角点而言,由于十字星的左上部边界特征在目标的外部,所以其对左上角点是相对无用的,所以论文使用偏移引导(guiding shift)来显示引导偏移值(offset field)的学习,偏移引导如图b所示。偏移值共通过三个卷积层获得,前两个卷积层转化corner pooling的输出,通过下面的损失函数有监督学习:

\(\delta\)为偏移引导,定义为:

第三层卷积将特征映射为最终偏移值,内涵了目标的上下文信息和几何信息。

论文对不同的采样方法进行了可视化,可以看到论文提出的十字星变形卷积的效果符合预期,左上角点对应的采样点均为十字星的右下部边界。
Instance Mask Head
为了获取实例分割的结果,论文取soft-NMS前的检测结果作为候选框,使用全卷积网络进行mask预测。为了保证检测模块能够提供有效的候选框,先对CentripetalNet预训练几轮,然后取top-k候选框进行RoIAlign得到特征,使用连续四个卷积层提取特征,最后使用反卷积层进行上采样,训练时对每个候选框进行交叉熵损失:

Experiment
完整的损失函数为:

\(L_{det}\)和\(L_{off}\)跟CornerNet定义的一样,为预测框损失和角点偏移损失,\(\alpha\)设置为0.005。

目标检测性能对比。

实例分割性能对比。

CornerNet/CenterNet/CentripetalNet可视化对比。
Conclusion
CentripetalNet的核心在于新的角点匹配方式,额外学习一个向心偏移值,偏移值足够小的角点即为匹配,相对于embedding向量的匹配方式,这种方法更为鲁棒,解释性更好。另外论文提出的十字星变形卷积也很好地贴合角点目标检测的场景,增强角点特征。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

CentripetalNet:更合理的角点匹配,多方面改进CornerNet | CVPR 2020的更多相关文章
- aforge通过角点匹配图片相似度
我不知道什么原因,人品不好还是啥的 ExhaustiveTemplateMatching这个类无法高精确度的匹配图片 ........... 换一种方式,就好得多 /// <summary> ...
- SaccadeNet:使用角点特征进行two-stage预测框精调 | CVPR 2020
SaccadeNet基于中心点特征进行初步的目标定位,然后利用初步预测框的角点特征以及中心点特征进行预测框的精调,整体思想类似于two-stage目标检测算法,将第二阶段的预测框精调用的区域特征转化为 ...
- 角点检测和匹配——Harris算子
一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...
- 【Computer Vision】角点检测和匹配——Harris算子
一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...
- Sift算子特征点提取、描述及匹配全流程解析
Sift之前的江湖 在Sift横空出世之前,特征点检测与匹配江湖上占据霸主地位的是角点检测家族.先来探究一下角点家族不为人知的恩怨情仇. 角点家族的族长是Moravec在1977年提出的Moravec ...
- java匹配中文汉字的正则表达式
正则表达式匹配中文先要了解中文的编码 代码如下 复制代码 [u4E00-u9FA5]汉字?[uFE30-uFFA0]全角字符 [u4E00-u9FA5]汉字?[uFE30-uFFA0]全角字符 匹配中 ...
- AC自动机——多个kmp匹配
(并不能自动AC) 介绍: Aho-Corasick automaton,最经典的处理多个模式串的匹配问题. 是kmp和字典树的结合. 精髓与灵魂: ①利用trie处理多个模式串 ②引入fail指针. ...
- nginx location 匹配的规则
nginx 的配置文件中, server里面的location 的配置项的理解: server { listen 24010; client_max_body_size 30M; location = ...
- OpenCV亚像素级的角点检测
亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程 ...
- 有准备的面试才能拿到更好的 Offer
http://www.sohu.com/a/331411917_181657 前几天有读者问我,工作不顺利辞职了.本来以为凭借自己的能力和工作经验可以轻松找到更好的工作,结果投了简历,约面试的很少,面 ...
随机推荐
- 使用CNN实现MNIST数据集分类
1 MNIST数据集和CNN网络配置 关于MNIST数据集的说明及配置见使用TensorFlow实现MNIST数据集分类 CNN网络参数配置如下: 原始数据:输入为[28,28],输出为[1,10] ...
- Spring Boot图书管理系统项目实战-11.检索图书
导航: pre:10.借还统计 next: 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 index.html <!D ...
- Telegraph多线程下载器v0.5--tkinter
介绍 最近在拿python写一点小工具,结合之前的多线程.线程池技术做了个GUI版的Telegraph图册批量下载工具. 因为开发平台是在Mac,虽然对Windows平台的也进行了打包,但最垃圾的Wi ...
- django学习第七天---创建多表结构,创建第三张表的三种方式,创建模型类时的一些元信息配置,多表增加
图书管理系统作业知识点整理 知识点1: print(request.POST.dict())#dict()方法能将QueryDict类型数据转换为普通字典类型数据 传数据时,可以用**{}打散的方式来 ...
- 矩池云上 git clone --recursive 出错,怎么解决
遇到问题 有时候安装包教程里 git clone 的时候会出现以下错误: git clone --recursive https://github.91chi.fun/https://github.c ...
- 【Azure Notification Hub】如何手动删除 Notification Hub 中已注册的设备
问题描述 在Notification Hub中注册了设备后,从Azure门户上没有找到相应的入口来删除已注册设备 (Active Devices) 如果使用C# SDK是否有办法删除呢? 问题解答 可 ...
- Java super关键字使用 +案列
1 package com.bytezero.supertest; 2 /* 3 * 4 * super关键字使用 5 * 1.super:理解为 父类的 6 * 2.super可以使用调用:属性,方 ...
- Java package(包) +import 关键字(2)
1 package com.bytezero.exer; 2 3 import java.lang.reflect.Field; 4 5 //import java.util.ArrayList; 6 ...
- CTF中常见编码
ASCII编码 ASCII HEX DEC flag{hello_ctfer} 66 6c 61 67 7b 68 65 6c 6c 6f 5f 63 74 66 65 72 7d 102 108 9 ...
- java.lang.Long cannot be cast to java.util.Map-Oracle查询异常处理
Map<String, Object> map一.问题由来 测试环境中进行测试时,某一个接口频繁报一个错,java.lang.Long cannot be cast to java.uti ...