BorderDet:Border Feature for Dense ObjectDetection

news/2024/5/4 10:43:06/文章来源:https://blog.csdn.net/wangyumei0916/article/details/127119171

原文链接:

概述

        密集物体检测依赖于滑动窗口,在图像的规则网格上预测物体,使用点的特征图来生成预测边界框,但由于边界信息不明确导致无法进行准确定位。本文提出了“Border-Align”的操作来从边界点中提取特征来增强点特征。基于该操作设计了一种新型的目标检测网络BorderDet,能够准确的利用边界信息来实现更强大的分类以及更准确的定位。

介绍

        滑动窗口目标检测使用单点特征来进行目标检测是非常方便的,因为其没有额外的特征提取。然而点特征包括的信息不足以代表完整的实例,并且缺乏物体的边界信息。

        目前已经有很多研究物体特征表示的研究,如GA-RPN、RepPoints和Cascade RPN,或基于pooling的RoI pooling和RoIAlign。如下图所示,这些方法提取了比点特征更具代表性的特征。

        图中红色五角星表示当前需要预测边界框的点,黑色的矩形框表示对红色五角星预测的边界框,蓝色点表示当前特征被提取,不同于可变的卷积,RoIAlign从整个边界框密集得提取信息。我们的BorderAlign只从五个点中提取特征(当前的单点和边界的四个边界点)。

        可以看出,使用这些方法进行密集物体检测有两个限制,1)从整个框中提取特征会导致一些不必要的计算,并且极易被背景影响。2)这些提取特征的方法是间接的,在整个方框内进行提取,而没有对边界特征进行专门的提取。

        基于BorderAlign设计了一个易于集成到任何密集型物体检测器中。本文主要贡献:1)分析了密集物体检测器的特征表示,证明了用边界特征补充单点特征表示的意义。2)提出了一个新型的特征提取器BorderAlign,使用边界特征来增强特征。在此基础上提出了一个高效准确的物体检测架构(BorderDet)。3)在COCO数据集上取得最好的结果。

研究现状

滑动窗口        

        滑动窗口在物体检测中被广泛使用。对于一阶段的物体检测器,如Densebox、YOLO、SSD等,已经证明了密集地预测分类和定位的有效性。对于两阶段物体检测器,如R-CNN系列,采用了基于滑动窗口机制的区域建议网络(RPN)来生成初始建议,然后由RoIAlign和R-CNN组成的细化阶段来修改感兴趣区域(RoI)的特征图并生成精确预测。 

物体的特征表示

        典型的滑动窗口物体检测器采用基于点的特征表示,然而点的特征对于分类和定位是比较难的。因此Guided Anchor 利用可变性卷积来增强点特征的表示。Cascade-RPN提出了自适应卷积,将特征图与相应的物体边界预测相匹配。Reppoints将物体的边界框看作一组代表点,并通过可变形卷积提取代其特征。但这些方法中的feature map是从全局中进行提取,这些提取操作是重复的,并且极易被背景的feature map 所影响。我们提出的方法与上诉相反,是通过边界特征来增强点的特征,使特征图对物体边界点有着高响应,并且不被背景噪点所影响。

边界定位

        有几种方法通过对区域的每一行每一列进行搜索来确定物体边界。LocNet和SABL将RoI特征图沿着X、Y轴进行汇聚,来定位物体边界,这种方法高度依赖于高分辨率的RoI特征图,因此在密集物体检测器中会受限制。

方法

不同边界框特征表示的效果

        滑动窗口物体检测器通常在密集的、有规律的网格特征图上产生边界框预测。如下图所示,网格中每个点上的特征一般用来预测物体的类别和位置。这种基于点的特征表示很难包含有效的边界特征,可能会限制物体检测器的定位能力。至于两阶段物体检测器,物体由整个边界框提取的特征来进行描述,如下图(b)所示。这种基于区域的特征表示比基于点的特征表示具有更丰富的特征。

        作者对边界框的特征表示进行了更深入的分析。使用一个简单的密集物体检测器FCOS作为baseline来生成粗略的边界盒预测,并从FCOS的倒数第二张特征图中重新提取如上图所示的特征。然后,分别使用不同的特征来补充单点特征,完善粗略的预测结果。 结果如下表所示:

        可以看出使用middle border features 的AP提高了0.3,并且在使用的样本点更少的情况下,达到了跟区域特征一样好的效果。因此,在密集目标检测器中的特征表示中,基于点的特征表示缺乏整个对象的显式特征,需要进行特征增强。但从整个box中提取特征是没必要并且冗余的,但边界特征的提取会带来更好的效果。

BorderAlign

        然而,由于物体的边界上通常只有很少的前景和大量的背景,因此在边界上密集地提取特征的效率很低。因此,作者提出了一个新的特征提取器-BorderAlign,以有效利用边界特征。

        BorderAlign的结构如下图所示,它将具有(4+1)C个通道的边界敏感特征图作为输入。这些通道分别对应于左、上、右、下这四个边界以及原始点的特征。然后,每个边界被均匀地划分为N个点,这N个点的特征值通过max pooling得到输出。N表示集合的大小,本文默认为10。本文所提出的BorderAlign可以自适应地利用边界上的点来代表边界特征。

        值得注意的是,我们的BorderAlign在通道上进行max pooling,即在输入特征图的每个C通道中独立地对四个边界进行max pooling。假设输入特征图的顺序为(单点、左边界、上边界、右边界和下边界),输出特征图F可表述为以下公式。 

         这里Fc(i, j)是输出特征图F的第c个通道的(i, j)点上的特征值,(x0, y0, x1, y1)是(i, j)点上的预测的边界框位置,w和h是(x0, y0, x1, y1)的宽度和高度。为了避免量化误差,精确值Ic由双线性插值与特征图上的附近特征值计算。

        边界敏感特征图的可视化如下图所示,边界上的橙色圆圈表示当前边界上的极值点。单点"、"左边界"、"上边界"、"右边界 "和 "下边界 "的特征图是边界敏感特征图的每个C通道上的最大特征值。

        可以看出,第一个C通道在整个物体上显示出强烈的反应。同时,第二个C通道在物体的左边界附近表现出高响应。(这里没有很懂什么意思)

网络结构      

        作者使用FCOS(一个简单的无锚物体检测器)作为基线,由于BorderAlign需要边界位置作为输入,因此BorderDet采用了两个预测阶段。整个BorderDet的结构如下图所示,首先,采用常规的单阶段物体检测器来生成类别的分数和边界框位置的粗略预测。然后使用Border Alignment,用边界特征来完善之前的预测。其中π表示乘法,δ表示两个边界框位置的组合。 

 

        BorderDet先粗略的预测分类分数和边界框位置。然后,该边界框和特征图被送入Border Alignment Module模块(BAM),生成包含明确边界信息的特征图。最后,我们应用1×1卷积层来预测边界分类得分和边界位置。上述两个预测将被统一起来,形成最终的预测结果。该方法可以集成到其他目标检测器中,如RetinaNet、FCOS等。 

Border Alignment Module

        BAM将带有C通道的特征图作为输入,然后通过1×1卷积层与实例归一化来输出对边界敏感的特征图。最后,我们采用BorderAlign模块从边界敏感的特征图中提取边界特征,并应用1×1卷积层将(4+1)C通道还原为C。 

BorderRPN

        该方法也可以作为典型的两阶段检测器的一个更好的proposal generator。我们将BAM添加到RPN中,得到BorderRPN。其结构如下图所示,我们保留了RPN中的回归分支来预测粗略的边界盒位置,并将RPN中的第一个3×3卷积被替换为3×3扩展卷积,以增加有效感受野。

        使用BAM来增强RPN的原点特征,并通过δ将粗略的边界框位置和边界位置结合起来。同时,使用边界分类分数作为BorderRPN的分类分数。

Target Assignment

        使用FCOS作为基线来预测大概的分类和边界框,在第二阶段使用IoU=0.6的阈值给真实的边界框分配前一步生成的粗糙边界框,其回归目标(δx0, δy0, δx1, δy1)的计算如下:

         w,h是预测边界框的高宽,σ(默认0.5)是提高多任务学习效果的方差。

损失函数

        BorderDet使用多任务损失来进行优化。损失函数如下:

        前两个是粗糙的分类损失和回归损失。在实现中,焦点损失和IoU损失分别作为分类损失和回归损失,这与FCOS相同。LBcls是在边界分类和其分配真实边框C∗之间计算的焦点损失,该损失由正样本的数量Npos进行平均。我们使用L1损失作为我们的角回归损失,PB代表预测的边界分类分数,∆是预测的边界偏移。

实验

        该实验在8个GPU上同时使用同步随机梯度下降,minibatch=16,进行90k次迭代,初始学习率为0.01,在6万次和8万次迭代后分别减少十倍。对图片使用水平翻转进行数据增强,weight decay=0.0001,动量为0.9,在ImageNet数据集上进行预训练。

消融实验

        在分类分支和回归分支上分别使用BAM进行实验,结果如下:

        其中"cls "和 "reg "分别表示在分类分支和回归分支上应用Border Alignment Module(BAM)。可以看出用在分类分支上的的提升主要发生在低阈值中,并且该提升随着IoU的增加而衰退。在低IoU阈值下的改进是由于BAM可以根据边界特征对边界框进行重新评分,并保持预测的高分类分数和定位精度。与分类分支不同的是,在回归分支上AP的提升主要是在高Iou阈值上。回归分支上的BAM可以显著提高检测到的边界框的定位精度,在IoU=0.9的阈值下提升了2.6个AP。在两个分支同时使用的情况下,每个IoU阈值下的AP都得到了一个提升。 

Border Align 

         BorderAlign首先将每个边界细分为几个点,然后在每个边界上汇集,提取边界特征。其中pooling size 是一个超参数,这里对不同大小的pooling对实验结果的一个影响进行比较,当size大于等于0时,相当于迭代预测边界框。结果如下所示:

        实验表明,多数size的pooling结果都是比较稳定的,由于size较大的pooling会花费额外的计算,而小的pooling会导致不稳定的结果。考虑到速度/准确度的权衡,在所有的实验中,pooling size大小等于10。

        为了分析边界敏感特征图的影响,我们将BorderAlign应用于具有C通道的边界特征图。在BorderAlign中的所有特征都将从相同的特征图中提取。实验结果如下所示:

        border sensitive "表示对边界特征和原始单点特征的提取是在不同的特征图上进行的,“border agnostic "意味着特征提取是在单一特征图上进行的。可以看出”border sensitive“的AP高一点,因为边界敏感的特征图可以在不同通道上不同边界的极端点上高度激活,从而有利于边界特征的提取。 

         在BorderAlign中,我们采用了一种通道的max-pooling,即每个通道的边界特征沿着边界独立聚集。这里对pooling进行消融实验,结果如下:

        可以看出channel-wise max-pooling达到了最好的效果41.4,和其他方法相比,这种方法可以在不涉及背景噪声的情况下提取有代表性的边界特征。

        Cascade-RPN和GA-RPN 这两种方法采用了一些不规则的卷积,如可变形卷积和自适应卷积来提取边界框的特征。这些不规则卷积也可以隐含地提取边界特征。直接用自适应卷积和可变形卷积分别替换了BorderAlign和BAM中的第二卷积,并使用RoIAlign取代BorderAlign来对这两个进行比较。如下表所示,BorderAlign比其他模型都至少好1个AP。结果如下:

        BorderAlign是通过沿边界的通道的max pooling得到的,保证了特征提取过程是围绕边界上的代表性极端点进行的。首先使用实例分割的注释来得出极端点的位置(最上、最左、最下、最右)。然后,我们计算训练期间(5千次迭代、3万次迭代和9万次迭代)BorderAlign样本点到每个响应图中极端点的归一化距离的计数,如图6所示。(a)表示边界提取的统计分析。横轴表示从极端点到BorderAlign中具有最大特征值的点的归一化距离。(b) 输出边界框的IoU直方图。

         可以看出在训练过程中,距离的方差逐渐减小。这意味着BorderDet可以自适应地学习提取极端点附近的特征。并且通过BorderDet,可以看到边界框的定位精度得到了明显的提高。且有效预测框的数量(IoU大于0.5)增加了约30%。特别是,IoU大于0.9的盒子的数量几乎翻了一番。这一观察结果也可以解释AP90的明显改善。

与其他结构相比较

        将BorderDet在MS-COCO测试集上进行对比试验,结果如下所示。

         在标准设置下,BorderDet达到了43.2的AP,超过了FASF、CornerNet在内的无锚框方法,在advanced setting下,AP=50,在现有一阶段和二阶段目标检测方法中处于领先水平。

结论

        本文中,我们提出了一种简单有效的架构-BorderDet,通过对边界特征的提取,提高了目标检测的定位能力。改架构基于BorderAlign操作,该操作能够自适应地学习提取每个边界上点的特征。实验验证了BorderAlign比以前的特征细化操作具有更高的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_16561.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter初始学习

Jmeter是一款优秀的开源性能工具,官网文档地址:http://jmeter.apache.org/usermanual/index.html 一、优点 1.开源工具,可扩展性非常好; 2.高可扩展性,用户可自定义调式相关模块代码; 3.精心简单的GUI设…

iOS App更换图标Logo(本地更换)

1.各大购物平台在节假日都是更换App Icon图标 通常有两种方式:1.每换一个新的图标,需要重新上一次AppStore; 2.在项目里预留好未来需要更换的图标,用api触发(或者本地时间判断自动更换) 两种方法各有利弊,第一种 弊&…

「喜迎华诞」手把手教你用微信小程序给头像带上小旗帜

文章目录一、文章前言二、实现原理三、开发步骤四、完整代码五、国庆临近,祝祖国永远繁荣昌盛!一、文章前言 2022年是新中国成立73周年,在这个举国欢庆的日子里,让我们给头像上加上小红旗,迎国庆换新颜,一起…

视频倒放怎么制作?快来学会这几个简单的方法

众所周知,如果我们想要让视频更具有观赏性的话,少不了用视频倒放功能来制作视频。不过还是有很多小伙伴不知道视频倒放怎么制作? 下面我就来手把手教你们视频倒放的制作方法,你们快来看看吧! 方法一:提词全…

Monaco Editor教程(五): 实现同时多文件编辑,tab切换

背景 上一篇我们讲解了如何设置编辑器的值,获取编辑器的值,以及监听编辑器的内容修改。这些功能对于基础的单文件修改,一次只修改一个文件的业务场景比较友好。但如果是复杂的场景,比如WEB IDE,同时打开一个项目的多个…

聊聊SQL注入

明天是国庆1001,祝大家国庆节快乐!!!这个月还有属于程序员的节日:1024SQL注入问题概述:首先SQL注入是一个非常危险的操作,很可能被一些不怀好意的人钻空导致我们系统出现异常等状况,比如数据库遭到破坏或被入侵。原因:使用JDBC的Statement语句添加SQL语句由于我们的JD…

直播电商开发,源码无加密

随着直播电商的流行,很多企业开始使用商场电商直播系统,该企业使用电商直播系统的优势具体体现在哪里?下面由零七科技小编为您总结企业电商直播系统的优点。 使用电商直播系统的优点: 1、全面展示商品风格和效果。 与在线平台的…

【Django-rest-framework框架】第04回 视图集

目录1. 两个视图基类1.1 GenericAPIview属性和方法1.2 基于APIView写5个接口1.3 基于GenericAPIview写5个接口2. 5个视图扩展类3. 9个视图子类4. 视图集5. 源码分析ViewSetMixin6. 总结7 继承关系画出来,有哪些常用属性或方法写出来 1. 两个视图基类 1.1 GenericAPIview属性和…

【redis】7.1 分布式架构概述(章节介绍)

分布式架构概述 请求业务比较长(耗时业务),需要分布式系统。 1. 本章节内容 分布式缓存中间件Redis分布式会话与单点登录分布式搜索引擎Elasticsearch分布式文件系统分布式消息队列分布式锁数据库读写分离与分库分表数据库表全局唯一主键i…

迭代器并不全是指针,list的迭代器与vector和string的有什么不一样,让博主告诉你其底层原理!

链表的模拟实现 文章目录链表的模拟实现一、list的基本架构🤖_list_node基本构架--双向带头循环链表二、list的迭代器--重点🐱‍👤list迭代器的基本架构构造函数--node*封装operator*()--得到值operator!()--跟另一个迭代器进行比较operator(…

xLua热更新(一)xLua基本使用

一、什么是xLua xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua是用来实现Lua代码与C#代码相互调用的插件。我们可以借助这个插件来实现热更新方案。 那么为什么要选择Lua实现热更新呢&am…

报告分享|数字化转型,从战略到执行报告

报告链接:http://tecdat.cn/?p=28672 如何加速国家、城市、行业、企业数字化进程,激发数字经济新动能。这份报告通过洞察数字化的6大改变、4大载体、4个阶段、20+场景、100+国家/项目案例/数据,全面系统性地阐述了多层次多场景数字化如何落地实施,最终带来经济、社会价值的…

报告分享|2022年企业数字化人才发展白皮书

报告链接:http://tecdat.cn/?p=28670 数字经济时代,企业对数字化人才的需求急剧增长。此报告对数字化人才培养和企业数字化人才发展现状进行梳理和研究,聚焦于金融、零售、能源和制造四个行业,采用定量与定性相结合的研究方法,对数字化人才的发展态势、岗位能力需求、培养…

第八章 常用用类

文章目录8.4 StringBuffer类8.4.1 StringBuffer对象8.4.2 StringBuffer类的常用方法1.append方法2.charAt(int n)和setCharAt(int n, char ch)8.5 Date类与Calendar类8.5.1 Date类8.5.2 Calendar类8.6 日期的格式变化8.6.1 format方法8.6.2 不同区域的星期格式8.7 Math类、BigI…

【算法】【二叉树模块】求一个二叉树“子树“是否包含另一个二叉树的全部拓扑结构

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介绍 …

三个线程顺序打印ABC?我有十二种做法,彻底掌握多线程同步通信机制

大家好,我是老三,这篇文章分享一道非常不错的题目:三个线程按序打印ABC。 很多读者朋友应该都觉得这道题目不难,这次给大家带来十二种做法,一定有你没有见过的新姿势。 1. synchronizedwaitnotify 说到同步&#xf…

Swift中的内存访问冲突、指针、局部作用域

内存访问冲突(Conflicting Access to Memory) 1、内存访问冲突会在两个访问满足以下条件时发生: 至少一个是写入操作它们访问的是同一块内存它们的访问时间重叠(比如在同一个函数内) //无内存访问冲突 func plus(_ n…

PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算

这里我们首先画一个自己选择的研究区,用于方便计算NDWI,这里我们将青海湖区域作为我们的研究区,第二步我们就是要设定一个函数,用于在函数中执行循环遍历,这里包括去云和影像筛选过程,最后按照最大值合成&a…

Windows 10 docker 容器添加新端口映射的方法与步骤

在Docker容器已经创建后,需要添加新的端口映射,即对已经存在的Docker容器添加新的端口映射,可以通过以下步骤来添加,即通过修改配置文件的方法。 1、Windows 10 下 Dockers容器的配置文件存在的路径为: 笔者本文是20…

CLIP扩展

Audio CLIP:Extend CLIP to Image,Text and Audio(语音) 在已有的image、text 的基础上又加上了audio语音模态。 找了一些视频,有视频帧(图像)、文本、语音三种模态的信息,仿照CLIP的模型结构。三种模态两…