BorderDet:通过边界特征大幅提升检测准确率,即插即用且速度不慢 | ECCV 2020 Oral
边界对于定位问题十分重要,BorderDet的核心思想BorderAlign巧妙又有效,将边界特征融入到目标定位预测中,而且能够简单地融入到各种目标检测算法中带来较大的性能提升下。在开源实现中,对BorderAlign进行了高效CUDA实现,不会对耗时带来很大的影响,整个工作十分扎实
来源:晓飞的算法工程笔记 公众号
论文: BorderDet: Border Feature for Dense Object Detection
Introduction
目前大部分的point-based目标检测算法(SSD, RetinaNet, FCOS)使用特征图的single-point进行定位和分类,但single-point特征可能没有足够多的信息来表达完整的实例以及实例的边界信息。很多研究通过各种手段补充single-point的特征表达能力,这些方法虽然能够提取更多的特征,但可能带来不必要的计算以及会受背景的影响。最关键的,这些方法都没有直接利用边界特征,而边界对于定位是十分重要的。为此,论文提出新的特征提取操作BorderAlign,可直接利用边界特征优化原本的single-point特征,基于BorderAlign提出了SOTA目标检测算法BorderDet。
论文的主要贡献如下:
- 分析dense object detector的特征表达,展示边界特征对补强single-point特征的重要性。
- 提出新的特征提取操作BorderAlign,通过边界特征来优化网络特征,并基于BorderAlign提出高性能目标检测算法BorderDet。
- 在COCO数据集上,将BAM模块集成到FCOS和FPN中分别提升2.8AP和3.6AP,而集成到ResNext-101-DCN准确率为50.3AP,达到SOTA。
Our Approach
Motivation
论文以FCOS为baseline,加入第二阶段预测来对比多种特征增强方法的效果,最后发现仅用边界中心点的增强效果与region-based方法几乎一样。从实验结果来看,可以得出以下结论:
- point-based特征表达缺乏完整物体的显著特征,需要进行特征增强。
- 从完整的boxes内提取特征是不必要的,且存在冗余。
- 高效的边界特征提取策略能够带来更好的性能。
Border Align
密集地从边界提取特征是很低效的,一般边界上的目标物体相关的点很少,大多为背景点。为此,论文提出BorderAlign特征提取操作,能够有效且自适应地榨取边界特征。
参考R-FCN的思想,BorderAlign提取\((4+1)C\)维度的border-sensitive特征图作为输入,\(4C\)维度对应4条边,另外\(C\)维对应原本的single-point特征。假定特征图顺序为(single point, left border, top border, right border和bottom border),计算输出特征图时,对点\((i, j)\)对应的bbox的每条边均匀取\(N\)个采样点,\(N\)默认设为10,采样点的值使用双线性插值计算,最后通过channel-wise max-pooling得到输出:
\((x_0, y_0, x_1, y_1)\)为点\((i,j)\)预测的bbox,这种方法能够自适应地从边界极点榨取边界特征。
论文对border-sensitive特征图中各channel的最大值进行了可视化,发现最大值分布基本符合预设的作用。
Border Alignment Module
BAM模块封装了BorderAlign操作,先使用\(1\times 1\)卷积生成border-sensitive feature maps,然后结合初步bbox预测,通过BorderAlign输出Border增强后的特征图,再使用\(1\times 1\)卷积恢复为模块输入维度。
BorderDet
BorderDet基于FCOS检测架构,主要在特征金字塔的预测head中加入BAM模块。首先预测初步bbox预测和初步分类预测,然后将初步bbox预测输入到BAM模块得到Border分类预测和Border bbox预测,预测跟原先一样使用\(1\times 1\)卷积,最后统一两种结果进行输出。
BorderRPN
BAM模块也能用于two-stage目标检测算法中,将原本第二阶段的region-based特征提取改为文中的BAM模块进行边界特征增强预测,另外将前面特征提取的卷积改为空洞卷积来提升感受域。
Model Training and Inference
Target Assignment
BorderDet基于FCOS进行初步预测,在第二阶段将GT赋予每个IoU大于0.6的初步预测结果,回归目标定义为:
\(\sigma\)为方差,用于提高多任务学习的效率,默认为0.5。
Loss Function
BorderDet的损失函数定义为:
\(\mathcal{L}^C_{cls}\)和\(\mathcal{L}^C_{reg}\)为初步分类损失和初步定位损失,在实现时分别为focal loss和IoU loss,\(\mathcal{L}^B_{cls}\)和\(\mathcal{L}^B_{reg}\)则计算border预测结果与对应GT之间的分类损失和定位损失,仅处理正样本,在实现时分别为focal loss和\(\mathcal{L}_1\) loss。
Inference
BorderDet在推理时对两种分类结果进行直接的相乘输出,而对于定位则使用border定位预测对初步定位的bbox进行公式2的反向转换,对所有的结果进行NMS输出,IoU阈值为0.6。
Experiments
对BAM模块以及BorderAlign参数进行对比实验。
对比其它特征增强方法,作者对BorderAlign进行高效的CUDA实现,速度很快。
直接将BorderDet结合到one-stage检测器和two-stage检测器中。
与主流的检测算法进行对比。
Conclustion
边界对于定位问题十分重要,BorderDet的核心思想BorderAlign巧妙又有效,将边界特征融入到目标定位预测中,而且能够简单地融入到各种目标检测算法中带来较大的性能提升下。在开源实现中,对BorderAlign进行了高效CUDA实现,不会对耗时带来很大的影响,整个工作十分扎实。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
BorderDet:通过边界特征大幅提升检测准确率,即插即用且速度不慢 | ECCV 2020 Oral的更多相关文章
- SIFT特征点检测学习一(转载)
新手上路,先转载学习tornadomeet的博客:http://www.cnblogs.com/tornadomeet/archive/2012/08/16/2643168.html 特征点检测学习_ ...
- [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...
- OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...
- OpenCV特征点检测------ORB特征
OpenCV特征点检测------ORB特征 ORB是是ORiented Brief的简称.ORB的描述在下面文章中: Ethan Rublee and Vincent Rabaud and Kurt ...
- ORB特征点检测
Oriented FAST and Rotated BRIEF www.cnblogs.com/ronny 这篇文章我们将介绍一种新的具有局部不变性的特征 -- ORB特征,从它的名字中可以看出它 ...
- OPENCV图像特征点检测与FAST检测算法
前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...
- python+OpenCV 特征点检测
1.Harris角点检测 Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点.基本原理是根据 ...
- OpenCV特征点检测匹配图像-----添加包围盒
最终效果: 其实这个小功能非常有用,甚至加上只有给人感觉好像人脸检测,目标检测直接成了demo了,主要代码如下: // localize the object std::vector<Point ...
- OpenCV特征点检测------Surf(特征点篇)
Surf(Speed Up Robust Feature) Surf算法的原理 ...
- surf特征点检测
※注:参数SURF中的hessian阈值是图像Hessian矩阵判别式的阈值,值越大检测出的特征点就越少,也就意味着特征点越稳定 #include "opencv2/core/core.hp ...
随机推荐
- HTTP协议发展历程
HTTP协议发展历程 HTTP超文本传输协议是一个用于传输超文本文档的应用层协议,它是为Web浏览器与Web服务器之间的通信而设计的,HTTP协议到目前为止全部的版本可以分为HTTP 0.9.HTTP ...
- junit使用mock objects进行单元测试
上一篇我介绍了使用stub进行单元测试.那么mock objects和stub有何区别?什么情况下使用mock objects呢? 下面摘自junit in action书中的解释: mock obj ...
- Spring源码阅读系列--全局目录
阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. 写在开始前的话: 阅读spring 源码实 ...
- 读 NebulaGraph源码 | 查询语句 LOOKUP 的一生
本文由社区用户 Milittle 供稿 LOOKUP 是图数据库 NebulaGraph 的一个查询语句.它依赖索引,可以查询点或者边的信息.在本文,我将着重从源码的角度解析一下 LOOKUP 语句的 ...
- 《A Hierarchical Framework for Relation Extraction with Reinforcement Learning》论文阅读笔记
代码 原文地址 摘要 现有的大多数方法在确定关系类型之前,需要先识别出所有的实体,这样就忽略了实体提及和关系类型之间的交互.本文提出了一种新颖的联合抽取范式,把相关实体看作是关系的参数( 首先检测一个 ...
- ArrayList继承了AbstractList为何还要实现List接口
ArrayList继承了AbstractList为何还要实现List接口? 相关的问题: Vector既然继承了AbstractList为啥还要实现List接口 HashMap继承了AbstractM ...
- 俄罗斯套娃 (Matryoshka) 嵌入模型概述
在这篇博客中,我们将向你介绍俄罗斯套娃嵌入的概念,并解释为什么它们很有用.我们将讨论这些模型在理论上是如何训练的,以及你如何使用 Sentence Transformers 来训练它们. 除此之外,我 ...
- RabbitMQ 快速复习
目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...
- 快速复习JDBC(超详细)
第一章 JDBC概述 之前我们学习了JavaSE,编写了Java程序,数据保存在变量.数组.集合等中,无法持久化,后来学习了IO流可以将数据写入文件,但不方便管理数据以及维护数据的关系: 后来我们学 ...
- TLS原理与实践(三)tls1.3
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 tls1.2作为主流的网路安全协议,被广泛应用,但tls1.2仍 ...