没有NMS!阿里巴巴和阿大提出PSS:更简单有效的端到端目标检测

2024-01-11 22:59

本文主要是介绍没有NMS!阿里巴巴和阿大提出PSS:更简单有效的端到端目标检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文作者:SuperHui |  来源:知乎(已授权)

https://zhuanlan.zhihu.com/p/347515623

简单介绍一下我们最近的一项关于end-to-end检测方面的工作:

Object Detection Made Simpler by Eliminating Heuristic NMS

论文链接:arxiv.org/abs/2101.11782

代码链接:即将开源

1. Motivation


我们提出了一种简单的NMS-free、end-to-end的目标检测框架,仅需要对现有one-stage检测器(FCOS、ATSS)做很小的修改,即可移除复杂的后处理NMS,达到甚至超过原有检测器的性能,并且几乎不影响推理速度。试想一下,如果模型有能力为每个object仅激活一个正样本,那复杂的NMS是不是就可以移除了。为此,我们在现有NMS-based的one-stage detector基础上引入一个正样本选择器(positive sample selector,PSS),作为单独一个分支来辅助完成为每个object挑选最优正样本的工作,基础detector以FCOS为例,具体结构如下:

目标检测之前主要分为two-stage和one-stage,尤其是one-stage方法越来越受欢迎,基本是工业界做项目尤其是端上项目的首选。FCOS和FoveaBox等方法掀起了去anchor这种人工先验的潮流。那么现在对于实现真正的end-to-end检测只剩下NMS这个启发式的复杂的后处理操作了。最近,DETR、Deformable DETR等方法通过使用Hungarian matching方法实现one-to-one的匹配,提供了基于Transformer的attention机制在E2E检测方面的新思路。前段时间,培泽和剑锋分别提出了OneNet和DeFCN,不使用Transformer进行NMF-free的E2E检测,我们的方法也是主要受DeFCN的启发并进行改进和重新设计。总的来说,我们设计了一个更简单性能更强的E2E检测框架,基于现有NMS-based one-stage的检测器,引入PSS head并重新设计了目标函数。

2.Method

2.1 Overall Training Objective

整体损失函数包括三部分,原始detector的loss(这里以FCOS为例),PSS loss和ranking loss。我们尽可能不破坏原有NMS-based的detector,原有的loss也都保留,你可以认为是作为辅助loss,以FCOS为例,就是分类loss、回归loss和center-ness loss。DeFCN里面没用box loss作为aux loss,我们通过改进也用上可以work。

2.1.1 PSS loss 

 是作用于PSS head的分类loss,是训练PSS head从而完成one-to-one pred的关键loss,在one-to-many pred中一个object往往对应多个正样本,PSS head就是用来从多个正样本中挑选最优的那一个作为唯一正样本。你可以认为它的输出是一个大小为  binary mask,计算的是  和gt之间的focal loss,其中  为sigmoid function,  为原始detector的分类score,  为center-ness。通过这种方式训练,使得PSS有能力为每个object激活一个最优的正样本。

2.1.1 Ranking loss 

我们早期实验发现,预测结果中会出现FP 的max socre 高于 TP min score的现象,其实也很正常,为了进一步拉开差距,从而引入来Ranking loss:

通过在image level加margin,能进一步缓解之前的实验现象,并不影响训练效率的情况下能带来一定的性能提升。

2.2 One-to-one Label Assignment

当进行one-to-one label assign的时候,最重要的就是给每个gt挑选最优的那个正样本,那就需要给每个样本进行质量评估,DeFCN指出最优的匹配的时候应该同时考虑classification的匹配和localization的匹配,借鉴DeFCN,我们对样本评估matching score:

不同点在于,除了分类质量部分我们引入来PSS 的mask和center-ness score,我们对spatial prior进行了修改。因为我们发现原先比如DeFCN固定采用center sampling策略作为spatial prior会有问题,比如FCOS在每个level assign正样本的时候是配置了range的,再比如ATSS就不是用center sampling策略,这样会导致一个问题:one-to-one match部分的正样本可能是one-to-many match部分的负样本,从而产生优化冲突。于是我们引入positiveness prior,即我们把原来的空间先验换成了原始detector里的正样本先验。

2.3 Conflict in the Two Classification Loss Terms

其实,one-to-many的分类loss和one-to-one的分类loss是存在优化矛盾的。比如一个gt在one-to-many里对应K个正样本,但通过我们的PSS head仅选出了一个最优的正样本,也就是需要把其余K-1个样本置为负样本,也就是说多个样本可能同时被当作正样本和负样本,这使得模型难以训练,产生优化冲突。为了解决这个问题,我们引入 stop-grad,如框架图所示,作用于PSS head上,也是受到了Kaiming的那篇《Exploring Simple Siamese Representation Learning》启发。

2.4 Stop Gradient

因为我们发现上述优化冲突问题,尤其是可视化特征发现,原始鲁棒的reg 特征被PSS head搞sharp了。我们通过detach()操作来断绝PSS head的优化尽量不影响前面的特征,实现解耦,并且还能利用上前面收敛较快的鲁棒的reg 特征。我们实验发现这个操作能随着训练持续提高one-to-one pred (w/ NMS)的检测性能。如下图:

3. Experiments

我们主要在FCOS和ATSS上接上我们的PSS方法进行实验,结果如下:

我们大大缩小了E2E检测与NMS-based检测的gap,达到甚至超过了ATSS、FCOS的baseline,网络推理耗时仅少量增加,并且由于移除了NMS,我们的后处理耗时减小了。

3.1 Visualization

我们做了更多详细的ablation 实验,还请参考我们的论文全文。

4. Conclusion

我们提出了一个更简单和更有效的E2E检测框架,仅需要对FCOS、ATSS进行简单的修改,就能移除NMS,并且达到和超过ATSS、FCOS的baseline。因为我们保留了原始detector,所以模型训练完成后,你其实还可以继续选择使用NMS的结果,而去除NMS的pipeline使得我们模型更加容易部署。我们希望我们的工作能够带给大家一些关于End-to-End检测的新的启发。

PSS论文下载

后台回复:PSS,即可下载上述论文PDF

CV资源下载

后台回复:CVPR2020,即可下载代码开源的论文合集

后台回复:ECCV2020,即可下载代码开源的论文合集

后台回复:YOLO,即可下载YOLOv4论文和代码

后台回复:Transformer综述,即可下载两个最新的视觉Transformer综述PDF,肝起来!

重磅!CVer-细分垂直交流群成立

扫码添加CVer助手,可申请加入CVer-细分垂直方向 微信交流群,可申请加入CVer大群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、Transformer、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,才能通过且邀请进群

▲长按加微信群

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

这篇关于没有NMS!阿里巴巴和阿大提出PSS:更简单有效的端到端目标检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595985

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个