DDP:微软提出动态detection head选择,适配计算资源有限场景 | CVPR 2022

DPP能够对目标检测proposal进行非统一处理,根据proposal选择不同复杂度的算子,加速整体推理过程。从实验结果来看,效果非常不错

来源:晓飞的算法工程笔记 公众号

论文: Should All Proposals be Treated Equally in Object Detection?

  • 论文地址:https://arxiv.org/abs/2207.03520
  • 论文代码:https://github.com/liyunsheng13/dpp

Introduction


  在目标检测中,影响速度的核心主要是密集的proposal设计。所以,Faster RCNN → Cascade RCNN → DETR → Sparse RCNN的演变都是为了稀疏化proposal密度。虽然Sparse R-CNN成功地将proposal数量从几千个减少到几百个,但更复杂deation head导致减少proposal数量带来的整体计算收益有限。

  复杂的deation head结构虽然能带来准确率的提升,但会抹杀轻量级设计带来的计算增益。对于仅有300个proposal的Sparse RCNN,deation head的计算量是主干网络MobileNetV2的4倍(25 GFLOPS 与 5.5 GFLOPS)。

  为此,作者研究是否有可能在降低deation head计算成本的同时保留精度增益和proposal稀疏性。现有检测算法采用相同复杂度的操作处理所有proposal,在高质量proposal上花费大量的计算是合适的,但将相同的资源分配给低质量的proposal则是一种浪费。由于每个proposal的IoU在训练期间是已知的,所以可以让检测器学习为不同的proposal分配不同的计算量。

  由于在推理时没有IoU,网络需要学习如何根据proposal本身进行资源分配。为此,作者提出了dynamic proposal processing(DPP),将detection head使用的单一算子替换为一个包含不同复杂度算子的算子集,允许检测器在复杂度-精度之间进行权衡。算子的选择通过增加一个轻量级选择模型来实现,该模型在网络的每个阶段选择适用于每个proposal的最佳算子。

Complexity and Precision of Proposals


  假设主干网络产生了一组proposal X = { x 1 , x 2 , ⋯ , x N } X = \{x_1, x_2, \cdots, x_N \} X={x1,x2,,xN},计算消耗主要来源于detection head而主干的计算消耗可忽略,并且将deation head的计算进一步分解为per-proposal的算子h(网络结构)以及对应的proposal间处理组件pNMS操作或proposal之间的的自注意机制)。

  • Complexity of unequally treated proposals

  在之前的检测器中,所有的proposal都由同一个算子h处理:

  其中 ψ = { h , p } \psi = \{h, p\} ψ={h,p} C h C_h Ch C p C_p Cp 分别是hp的 per-proposal 复杂度。

  • Complexity of unequally treated proposals

  与其将相同的算子h应用于所有proposal,作者建议使用包含J个具有不同复杂度算子的算子集 G = { h j } j = 1 J \mathcal{G} = \{h_j\}^J_{j=1} G={hj}j=1J,由动态选择器s选择具体的算子分配给proposal x i x_i xi

  其中 s i = s ( x i ) s_i = s(x_i) si=s(xi) h s i ∈ G h_{s_i}\in \mathcal{G} hsiG 表示来自 G \mathcal{G} G 的算子,由选择器s分配给的proposal x i x_i xi ψ = { { h s i } i , s , p } \psi = \{\{h_{s_i}\}_i, s, p\} ψ={{hsi}i,s,p} C h s i C_{h_{s_i}} Chsi为整个per-proposal操作的计算复杂度。为简单起见,p的复杂度仍然视为常数。

  • Precision over proposals

  当deation head对proposal非统一处理时,给定复杂性约束C的最佳检测器精度可以通过优化算子对proposal的分配来提升:

  其中 P ( { h s i } i ) \mathcal{P}(\{h_{s_i}\}_i) P({hsi}i)是分配的特定运算符 { h s i } i \{h_{s_i}\}_i {hsi}i的精度。随着C的变化, P ( ψ ∗ ∣ C ) P(\psi^{∗}|C) P(ψC)构建了复杂度-精度(C-P)曲线,该曲线表示了可使用 G \mathcal{G} G实现的目标检测器在成本和精度之间trade-off的最佳性能。

Dynamic Proposal Processing


  基于上面的背景,作者提出了一个动态proposal处理(DPP)。假设detection head由多个阶段( ψ = ϕ 1 ∘ ⋯ ∘ ϕ K \psi = \phi_1 \circ \cdots \circ \phi_K ψ=ϕ1ϕK)依次处理proposal,每个阶段 φ K \varphi_K φK由选择器s G \mathcal{G} G中选择的运算符实现。为了最小化复杂性,选择器每次只应用于阶段子集 k ∈ K ⊂ { 1 , ⋯ , K } k \in K \subset \{1,\cdots,K\} kK{1K},其余阶段使用上一次处理选择的运算符,即 ϕ k = ϕ k − 1 , ∀ k ∉ K \phi_k = \phi_{k−1}, \forall k\notin K ϕk=ϕk1,k/K

Operator Set

  作者提出了由三个计算成本差异较大的算子组成的算子集合 G = { g 0 , g 1 , g 2 } \mathcal{G} = \{g_0, g_1, g_2\} G={g0,g1,g2}

  • g 0 g_0 g0是高复杂度的算子,由一个参数与proposal相关的动态卷积层(DyConv)和一个前馈网络(FFN)来实现,类似于Sparse R-CNN采用的动态Head结构。
  • g 1 g_1 g1是一个中等复杂度的算子,由FFN实现。
  • g 2 g_2 g2是一个由identity block构建的轻量级算子,只是简单地传递proposal而无需进一步提取特征。

Selector

  在DPP中,通过控制操作符对proposal的分配,选择器是控制精度和复杂性之间权衡的关键组件。定义 z i k z^k_i zik是proposal x i x_i xi在阶段 ϕ k \phi_k ϕk的输入特征,选择器由3层MLP实现,输出与关联 z i k z^k_i zik的3维向量 ϵ i k ∈ [ 0 , 1 ] 3 \epsilon^k_i \in [0, 1]^3 ϵik[0,1]3

  其中 ϵ i , j k \epsilon^k_{i,j} ϵi,jk ϵ i k \epsilon^k_i ϵik中的选择变量,代表将操作 g j g_j gj分配给proposal x i x_i xi的权重:

  • 在训练期间,选择向量是包含三个变量one hot编码,将Gumble-Softmax函数作为MLP的激活函数,用于生成选择向量。
  • 在推理中,选择向量包含三个连续值,选择值最大的变量对应的操作。

  分配过程如图2所示,整体开销非常小(100个proposal仅需4e-3 GFLOPS),与detection head相比可以忽略不计。

  从公式4可以看出,不同的proposal和阶段选择的算子都有变化,从而能够进行动态处理。
此外,虽然 G \mathcal{G} G仅有三个候选项,但潜在的detection head网络结构有 3 ∣ K ∣ 3^{|K|} 3K种。最后,由于选择器是可训练的,所以整体结构可以端到端学习。

Loss Functions

  为了确保在给定复杂度的情况下,DPP能为每个proposal选择最优的操作序列,作者增加了选择器损失,包含两个目标:

  • 首先,应该将复杂的算子( g 0 g_0 g0 g 1 g_1 g1)分配给高质量的proposal(高IoU):

    其中 u k u_k uk是第i个proposal在第k阶段的 IoU。当IoU小于0.5时, L i o u L_{iou} Liou推动选择器将 ϵ i , 0 k \epsilon^k_{i,0} ϵi,0k ϵ i , 1 k \epsilon^k_{i,1} ϵi,1k变为0,反之则变为1,鼓励在阶段 k 中使用更复杂的算子来获得高质量的proposal。此外,损失的大小是由IoU值决定的,为高IoU proposal选择简单结构或为低IoU proposal选择复杂结构均会产生大梯度值。

  • 其次,选择器应该知道每张图像中的实例总数,并根据总数调整整体复杂度,在实例密集时选择更复杂的算子:

    其中T是特定图像选择 g 0 g_0 g0算子目标次数,定义为 T = α M T = \alpha M T=αM,即图像中M个实例的倍数。此外, T ∈ [ T m i n , N ] T\in [T_{min}, N ] T[Tmin,N]需通过根据预先指定的下限 T m i n T_{min} Tmin和由总体proposal数N给出的上限对 α M \alpha M αM进行裁剪。下界防止对高复杂度算子进行过于稀疏的选择,然后 α \alpha α则是根据实例数调整选择器。

  最终的整体选择器损失为:

  选择器损失是一种即插即用损失,可以应用于不同的对象检测器。在实现时,与应用DPP的原始检测器的所有损失相结合,包括交叉熵损失和边界框回归损失。

Experiments


  DPP的主干网络使用MobileNet V2或ResNet-50,使用特征金字塔网络(FPN)生成多维特征,在其之上使用Sparse R-CNN的策略学习初始proposal。为简单起见,选择器仅应用于阶段 K = { 2 , 4 , 6 } K = \{2, 4, 6\} K={2,4,6}

  对于损失函数,设置 λ = 1 \lambda=1 λ=1 T m i n = 1 T_{min}=1 Tmin=1 α = 2 \alpha=2 α=2 N = 100 N=100 N=100

Proposal processing by DPP

  • Contribution of Each Operator

  不同候选算子对性能的贡献。

  • Performance of Each Stage in DPP

  阶段1∼6的AP分别为 { 15.6 , 32.1 , 39.3 , 41.7 , 42.0 , 42.2 } \{15.6, 32.1, 39.3, 41.7, 42.0, 42.2\} {15.6,32.1,39.3,41.7,42.0,42.2},精度在前 4 个阶段迅速增加,然后达到饱和。较后的阶段,复杂算子占比越少,这说明 DPP 如何在复杂性与精度之间取得相当成功。

  • Visualization

  阶段4和阶段6中, g 0 g_0 g0的预测结果。

Main Results

  • ResNet

  基于ResNet50与SOTA算法对比。

  • MobileNetV2

  基于MobileNetV2与SOTA算法对比。

  • Inference speed

  推理速度对比。

Ablation Study

  • Selection loss

  选择器损失的作用。

  • Target number of heavy operators

  复杂算子预期数量的作用。

Conclusion


  DPP能够对目标检测proposal进行非统一处理,根据proposal选择不同复杂度的算子,加速整体推理过程。从实验结果来看,效果非常不错。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

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

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

相关文章

同声传译app哪个好免费?对话交流推荐这5个

暑期到,也是旅游出行的好日子~自打周边不少国家都开放免签政策之后,出国游也变得更加方便了~对于外语水平不高的朋友来讲,想要保证出行体验,其实手上只要备好一个同声传译app就OK! 倘若你还不清楚都有哪些同声传译app…

背部筋膜炎的症状及治疗

背部筋膜炎,也称为胸背肌筋膜炎,主要是由于劳损或风寒湿邪侵入引起的。其典型症状主要包括: 1、疼痛:背部筋膜一旦出现炎症性病变,会对周围交感神经组织产生刺激作用,从而引起不同程度的疼痛症状。 2、僵…

NAT:地址转换技术

为什么会引入NAT? NAT(网络地址转换)的引入主要是为了解决两个问题 IPv4地址短缺:互联网快速发展,可用的公网IP地址越来越少。网络安全:需要一种方法来保护内部网络不被直接暴露在互联网上。 IPv4 &…

低通滤波以及卡尔曼滤波

先讲解几个低通滤波,低通滤波比卡尔曼滤波简单,因为卡尔曼滤波涉及到两个输入量,一个是控制量,一个是观测量,而低通滤波是一个输入量 1,利用工具箱配置低通滤波 参考地址:https://blog.csdn.net…

SystemUIService启动-Android13

SystemUIService启动-Android13 1、SystemUIService启动2、其他SystemUI services启动2.1 Dagger依赖注入2.2 Recents为例 1、SystemUIService启动 SystemUI启动&#xff0c;及其SystemUIService启动 <!-- SystemUi service component --><string name"config_s…

应用层协议原理——可供应用程序使用的运输服务

前面讲过套接字是应用程序进程和运输层协议之间的接口。在发送端的应用程序将报文推进该套接字。在该套接字的另一侧&#xff0c;运输层协议负责使该报文进入接收进程的套接字。 包括因特网在内的很多网络提供了不止一种运输层协议。当开发一个应用时&#xff0c;必须选择一种可…

什么是海外仓管理自动化?策略及落地实施步骤指南

作为海外仓的管理者&#xff0c;你每天都面临提高海外仓运营效率、降低成本和满足客户需求的问题。海外仓自动化管理技术为这些问题提供了不错的解决思路&#xff0c;不过和任何新技术一样&#xff0c;从策略到落地实施&#xff0c;都有一个对基础逻辑的认识过程。 今天我们整…

重生奇迹mu的地图名

地图之一&#xff1a;勇者大陆 勇者大陆地处奇迹大陆中央。终年阴雨连绵&#xff0c;气候潮湿闷热。植物由充满黑暗阴森气氛的草地所构成。这里的NPC数量是所有地图中最多的。因为地步交通要冲&#xff0c;所以也是玩家聚集最多的地方。 这里是剑士、魔法师、魔剑士和圣导师初…

vue3关于在线考试 实现监考功能 推流拉流

vue3 关于在线考试 实现监考功能&#xff0c; pc端考试 本质是直播推流的功能 使用腾讯云直播: 在线文档 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><link rel"icon" href"/f…

永磁同步电机控制算法--最大转矩电流比控制(虚拟信号注入法)

目前&#xff0c;国内外相关学者对 MTPA 控制方法进行了一系列的理论研究与仿真分析。通过研究取得的成果综合来看&#xff0c;该控制方法主要有&#xff1a;直接公式计算法、曲线拟合法、查表法、搜索法、高频信号注入法以及参数辨识法等。 之前的文章中已经介绍了直接公式计…

Java.Maths类的常用方法

Maths类的常用方法 Math 类是 Java 标准库中的一个类&#xff0c;位于 java.lang 包中。它提供了一些基本的数学操作方法&#xff0c;这些方法都是静态的。以下是 Math 类的所有方法&#xff1a; 数学常量 double E: 自然对数的底数&#xff08;约等于 2.718&#xff09;doub…

对于“百模大战”,几乎所有大佬的口风都180 °大转变了?

文 | 智能相对论 作者 | 陈泊丞 在2024世界人工智能大会暨人工智能全球治理高级别会议产业发展主论坛上&#xff0c;百度创始人、董事长兼首席执行官李彦宏谈了些对于AI大模型的看法&#xff0c;语惊四座。 他先是指出&#xff0c;“百模大战造成了社会资源的巨大浪费&#x…

ubuntu 如何复制文件夹的内容

在Ubuntu中&#xff0c;您可以使用cp命令来复制文件夹的内容。如果您想要复制文件夹及其所有内容&#xff08;包括子文件夹&#xff09;&#xff0c;可以使用-r&#xff08;递归&#xff09;选项。 cp -r /path/to/source/folder/* /path/to/destination/folder/ 这个命令会将s…

现在2024年网络安全真实情况还好就业吗?_2024年网络安全专业到底行不行了

2024年网络安全行业的前景看起来非常乐观。根据当前的趋势和发展&#xff0c;一些趋势和发展可能对2024年网络安全行业产生影响&#xff1a; 5G技术的广泛应用&#xff1a;5G技术的普及将会使互联网的速度更快&#xff0c;同时也将带来更多的网络威胁和安全挑战。网络安全专家…

java-spring boot光速入门教程(超详细!!)

目录 一、引言 1.1 初始化配置 1.2 整合第三方框架 1.3 后期维护 1.4 部署工程 1.5 敏捷式开发 二、SpringBoot介绍 spring boot 2.1 搭建一个spring boot工程 2.2 使用idea创建项目 2.3 在线创建姿势 2.4 项目的目录结构 2.5 项目的运行方式 2.6 yml文件格式 2…

CP AUTOSAR标准之XCP(AUTOSAR_CP_SWS_XCP)(更新中……)

1 简介和功能概述 该规范规定了AUTOSAR基础软件模块XCP的功能、API和配置。XCP是主设备(工具)和从设备(设备)之间的协议描述(ASAM标准),提供以下基本功能: 同步数据采集(测量)同步数据刺激(用于快速原型设计)在线内存校准(读/写访问)校准数据页面初始化和切换用于ECU开发目的…

分享外贸工作中常用英文标准表达和英文语句

常用英文表达 报拉格斯最低到岸价 quote the lowest price CIF Lagos经营纺织品多年 be in the line of textiles for many years货物受欢迎 the goods are very popular with customers / have met with a warm reception /be well received/accepted/ enjoy a wide populari…

Java线程死锁及解决方法

多线程环境下&#xff0c;死锁即两个或两个以上的线程去争夺同一个共享资源&#xff0c;而导致互相等待的情况。 要产生死锁&#xff0c;必须满足如下四个条件&#xff1a; 互斥条件&#xff0c;共享资源x和y只能被一个线程占有请求和保持条件&#xff0c;T1持有x&#xff0c…

解读BASE理论:高可用性与性能的完美平衡

Base概念 BASE 理论是一种处理大规模分布式系统中的数据一致性问题的思路。相比于传统的严格一致性&#xff0c;它更灵活&#xff0c;适用于那些需要高可用性和性能的系统。BASE 理论由三个部分组成&#xff1a; 基本可用&#xff08;Basically Available&#xff09; 基本可用…

【c++刷题笔记-动态规划】day32: 509. 斐波那契数 、 70. 爬楼梯 、 746. 使用最小花费爬楼梯

509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int fib(int n) {if(n0){return 0;}vector<int>dp(n1);dp[0]0;dp[1]1;for(int i2;i<n;i){dp[i]dp[i-1]dp[i-2];}return dp[n];} }; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#x…