RepPoints:微软巧用变形卷积生成点集进行目标检测,创意满满 | ICCV 2019
RepPoints的设计思想十分巧妙,使用富含语义信息的点集来表示目标,并且巧用可变形卷积来进行实现,整体网络设计十分完备,值得学习
来源:晓飞的算法工程笔记 公众号
论文: RepPoints: Point Set Representation for Object Detection

Introduction
经典的bounding box虽然有利于计算,但没有考虑目标的形状和姿态,而且从矩形区域得到的特征可能会受背景内容或其它的目标的严重影响,低质量的特征会进一步影响目标检测的性能。为了解决bounding box存在的问题,论文提出了RepPoints这种新型目标表示方法,能够进行更细粒度的定位能力以及更好的分类效果。

如图1所示,RepPoints是一个点集,能够自适应地包围目标并且包含局部区域的语义特征。RepPoints的训练由目标定位和目标分类共同驱动,能够约束RepPoints紧紧地包围目标以及引导检测器正确地分类目标。这种自适应的表示方法是可微的,能够连续地用在检测器的多个阶段中,并且不需要额外设置的anchor来生成大量的初始框。
The RepPoints Representation
如上面提到的,bounding box只是粗粒度的目标位置表示方法,只考虑了目标的矩形空间,没有考虑形状、姿态以及语义丰富的局部区域,而语义丰富的局部区域能够帮助网络更好的定位以及特征提取。为了解决上述的缺点,RepPoints使用一组自适应的采样点表示目标:

\(n\)为表示目标的采样点总数,论文默认设置为9。
RepPoints refinement
逐步调整bounding box定位和特征提取是multi-stage检测器成功的重要手段,对于RepPoints,调整可简单地表示为:

\(\{(\Delta x_k, \Delta y_k)\}^{n}_{k=1}\)为预测的新采样点相对与旧采样点的偏移值,采样点调整的尺寸都是一样的,不会像bouning box那样需要解决中心点坐标和边框长度的尺寸不一致问题。
Converting RepPoints to bounding box
为了利用bounding box的标注信息进行训练以及验证RepPoint-based检测算法的性能,使用预设的转化方法\(\mathcal{T}=\mathcal{R}_P\to \mathcal{B}_P\)将RepPoints转化成伪预测框,共有三种转化方法:
- \(\mathcal{T}=\mathcal{T}_1\): Min-max function,对所有的RepPoints进行min-max操作来获取预测框\(\mathcal{B}_p\)
- \(\mathcal{T}=\mathcal{T}_2\):Partial min-max function,对部分的RepPoints进行min-max操作获取预测框\(\mathcal{B}_p\)
- \(\mathcal{T}=\mathcal{T}_3\):Moment-based function,通过RepPoints的均值和标准差计算中心点位置以及预测框尺寸得到预测框\(\mathcal{B}_p\),尺寸通过全局共享的可学习参数\(\lambda_x\)和\(\lambda_y\)相乘得到
这些函数都是可微的,可加入检测器中进行end-to-end的训练。通过实验验证,这3个转化方法效果都不错。
RPDet: an Anchor Free Detector

论文基于RepPoints设计了anchor-free目标检测算法RPDet,包含两个识别阶段。因为可变形卷积可采样多个不规则分布的点进行卷积输出,所以可变形卷积十分适合RepPoints场景,能够根据识别结果的反馈进行采样点的引导。
Center point based initial object representation
RPDet将中心点作为初始的目标表示,然后逐步调整出最终的RepPoints,中心点也可认为是特殊的RepPoints。当两个目标存在于特征图同一位置时,这种基于中心点的方法通常会出现识别目标歧义的问题。此前的方法在同一位置设置多个预设的anchor来解决此问题,而RPDet则利用FPN来解决此问题:
- 不同大小的目标由不同level的特征负责识别
- 小物体对应level的特征图一般较大,减少了同一物体存在同一位置的可能性
论文统计发现,当使用上述FPN约束后,COCO数据集中仅1.1.%存在上述的问题。
Utilization of RepPoints
如图2所示,RepPoints是RPDet的基础目标表示方法,从中心点开始,第一组RepPoints通过回归中心点的偏移值获得。第二组RepPoints代表最终的目标位置,由第一组RepPoints优化调整得到。RepPoints的学习主要由两个目标驱动:
- 伪预测框和GT框的左上角点和右上角点的距离损失
- 后续的目标分类损失
第一组RepPoints由距离损失和分类损失引导,第二组RepPoints仅使用距离损失进行引导,主要为了学习到更精准的目标定位。
Backbone and head architectures

FPN主干网络包含5层特征金字塔level,从stage3(下采样8倍)到stage7(下采样128倍)。Head的结构如图3,Head在不同的level中是共享的,包含两个独立的子网,分别负责定位(RepPoints的生成)和分类:
- 定位子网首先使用3个256-d \(3\times 3\)卷积提取特征,每个卷积都接group normalization层,然后连续接两个小网络计算两组RepPoints的偏移值。
- 分类子网首先使用3个256-d \(3\times 3\)卷积提取特征,每个卷积都接group normalization层,然后将定位子网输出的第一组RepPoints的偏移值输入到256-d \(3\times 3\)可变形卷积中进一步提取特征,最后输出分类结果。
尽管RPDet采用了两阶段定位,但其性能甚至比单阶段的RetinaNet要高,主要是anchor-free的设计使得分类层的计算减少了,覆盖了额外的定位阶段带来的少量消耗。
Localization/class target assignment
定位包含两个阶段,第一阶段从中心点得到第一组RepPoints,第二阶段则从第一组RepPoints调整得到第二组RepPoints,不同的阶段的正样本定义不同:
- 对于第一阶段,特征点被认为是正样本需满足:1) 该特征点所在的特征金字塔level等于\(s(B)=\lfloor log_2 (\sqrt{W_Bh_B}/4)\rfloor\)。2) 目标的中心点在特征图上映射位置对应该特征点。
- 对于第二阶段,只有特征点对应的第一阶段产生的伪预测框与目标的IoU大于0.5才被认为是正样本。与当前的anchor-based方法有点类似,将第一阶段的输出当作anchor。
由于目标的分类只考虑第一组RepPoints,所以,特征点对应的第一组RepPoints产生的伪预测框于目标的IoU大于0.5即认为是正样本,小于0.4则认为是背景类,其它则忽略。
Experiments

对比不同的伪预测框生成方法的性能。

与其它SOTA检测方法对比性能。
Conclusion
RepPoints的设计思想十分巧妙,使用富含语义信息的点集来表示目标,并且巧用可变形卷积来进行实现,整体网络设计十分完备,值得学习。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

RepPoints:微软巧用变形卷积生成点集进行目标检测,创意满满 | ICCV 2019的更多相关文章
- deeplearning.ai 卷积神经网络 Week 3 目标检测 听课笔记
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- deeplearning.ai 卷积神经网络 Week 3 目标检测
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car, ...
- 卷积生成对抗网络(DCGAN)---生成手写数字
深度卷积生成对抗网络(DCGAN) ---- 生成 MNIST 手写图片 1.基本原理 生成对抗网络(GAN)由2个重要的部分构成: 生成器(Generator):通过机器生成数据(大部分情况下是图像 ...
- GAN实战笔记——第四章深度卷积生成对抗网络(DCGAN)
深度卷积生成对抗网络(DCGAN) 我们在第3章实现了一个GAN,其生成器和判别器是具有单个隐藏层的简单前馈神经网络.尽管很简单,但GAN的生成器充分训练后得到的手写数字图像的真实性有些还是很具说服力 ...
- Guided Anchoring:在线稀疏anchor生成方案,嵌入即提2AP | CVPR 2019
Guided Anchoring通过在线生成anchor的方式解决常规手工预设anchor存在的问题,以及能够根据生成的anchor自适应特征,在嵌入方面提供了两种实施方法,是一个很完整的解决方案 ...
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...
- 深度学习原理与框架-卷积网络细节-三代物体检测算法 1.R-CNN 2.Fast R-CNN 3.Faster R-CNN
目标检测的选框操作:第一步:找出一些边缘信息,进行图像合并,获得少量的边框信息 1.R-CNN, 第一步:进行图像的选框,对于选出来的框,使用卷积计算其相似度,选择最相似ROI的选框,即最大值抑制RO ...
- [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...
- PHP生成中文验证码并检测对错实例
PHP生成中文验证码并检测对错实例,中文验证码的例子还是比较少的,今天给大家分享一下,支持自定义中文.字体.背景色等 生成验证码,注意font字体路径要对,否则显示图片不存在 session_star ...
随机推荐
- 惠普CP1025后盖传感器松导致不停自检或打印中掉电, 跳闪三角灯
上次修了离合器, 没出两星期又出问题了. CP1025这个型号就是出名的开机特别慢, 正常自检是1分钟, 但是前天我在给机器换完粉盒后, 自检似乎进入了死循环, 一直在自检. 周末才有空看看能不能解决 ...
- elasticstack-7.5.0部署实战
1.Elastic Stack 数据搜索.分析和可视化工具 中文网: https://elkguide.elasticsearch.cn/beats/metric.html Elasticsearch ...
- SpringCloud 注册中心Zookeeper实战
介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...
- CF1398C Good Subarrays(写给我们萌新团体)
Good Subarrays 传送门: Good Subarrays - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 暴力!!!!! 一如既往的暴力!!! 复杂度O(n^2) ...
- RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
前言 开始搭建RK3568的基础虚拟机,具备基本的通用功能,主要包含了串口工具minicom,远程登陆ssh,远程传输filezilla,代码编辑工具vscode. 虚拟机 文档对对虚拟机 ...
- OpenCV开发笔记(六十二):红胖子8分钟带你深入了解亚像素角点检测(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 【Azure 应用服务】Azure Function App在部署时候遇见 503 ServiceUnavailable
问题描述 在VS Code中编写好 Azure Function App代码后,通过 func azure functionapp publish 部署失败,抛出 503 Service Unava ...
- mysql-对应删除 dict 脚本
-- 1. 此 dict 是在不同租户下的数据字典,查询时需要根据 departid 进行分类查询 -- 2. 删除dict, dict分类主表类型与挂载的子表数据 -- 3. 通过查询到的主表的 g ...
- A left join B B表有多条记录,max(create_time)取最新一条
例如:A表合同表t_contract B表合同审核表t_contract_audit.两个表根据contract_id关联.且一条合同有多条审核记录.求:A.合同状态.B.最新审核记录结果. 简单: ...
- 使用Mockito与Squaretest进行单元测试.
项目开发过程中,不少公司都要求写单元测试的代码,可以提高代码的质量,并且可以减少出现BUG的概率. 对于中小型公司来说,对单元测试不做硬性要求,不写最好.因为还是需要一定的工作量,在保证代码质量和性能 ...