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

news2024/11/15 14:09:21

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.coloradmin.cn/o/1906548.html

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

相关文章

HAProxy安装配置详解

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。   HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上&#xf…

algorithm算法库学习之——修改序列的操作

algorithm此头文件是算法库的一部分。本篇介绍修改序列的操作函数。 修改序列的操作 copycopy_if (C11) 将某一范围的元素复制到一个新的位置 (函数模板) copy_n (C11) 将一定数目的元素复制到一个新的位置 (函数模板) copy_backward 按从后往前的顺序复制一个范围内的元素 (函…

Java异常详解及自定义异常

认识异常,掌握异常处理主要的5个关键字:throw、try、catch、final、throws并掌握自定义异常 目录 1、异常概念与体系结构 1、1异常的概念 1、2异常体系结构 1、3异常的分类 编译时异常: 运行时异常 : 2、异常处理 2、1防御式…

优思学院|SPC控制图异常点占比可否用来评估过程的稳定程度?

使用SPC控制图异常点占比确实可以评估过程的稳定程度。通常来说,SPC(统计过程控制)控制图是用于监控和控制生产或业务过程,以确保这些过程在可接受的范围内运行。通过识别和分析控制图中的异常点,可以判断过程是否存在…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS,为不方便把图、文、日志等形式的文件保存在公有云上的,可以在自己的服务器上部署文件服务器 看过本人前几个文章的,使用docker就会很快上手部署,直接上所有代码 #添加镜像 docker search minio docker p…

DAY1: 实习前期准备

文章目录 VS Code安装的插件C/CCMakeGitHub CopilotRemote-SSH 收获 VS Code 下载链接:https://code.visualstudio.com 安装的插件 C/C 是什么:C/C IntelliSense, debugging, and code browsing. 为什么:初步了解如何在VS Code里使用C输出…

使用C Caller 模块集成C代码到Simulink模型

可以使用 C Caller 模块将新的或现有的 C 代码集成到 Simulink 模型中。要在 Simulink 模型中创建自定义模块,C Caller 模块允许您调用在外部源代码和库中指定的外部 C 函数。C Caller 模块具有以下优势: 简单 C 函数的自动集成,包括命名空间…

同声传译的app有哪些?分享5个旅行者的多语言翻译伙伴

许多人可能并不了解什么是同声传译。其实,同声传译是一种高效的语言服务,它使得不同语言的人们能够在会议、谈判、演讲等场合中实现即时交流。 今天,本文将向您介绍几款能够实现同声传译的实用工具,帮助您更深入地了解同声传译的…

做外贸干一行爱一行,还是干一行厌一行?

记得年轻的时候,每每和同龄人不同行业聊天的时候,大家普遍的感觉就是:自己这一行太苦了,以后有孩子了干什么都不能让他做自己这一行。 和在银行上班的同学聊天,他们最大的苦恼是需要每天开发客户, 让客户在…

如何利用股指期货代替买股票?

当我们深入探讨中金所上市的三个股指期货——IF(沪深300股指期货)、IC(中证500股指期货)和IH(中证50股指期货)时,我们可以从多个角度来分析它们的特点和优势。 市场特点分析 IH(上…

科研绘图系列:R语言径向柱状图(Radial Bar Chart)

介绍 径向柱状图(Radial Bar Chart),又称为雷达图或蜘蛛网图(Spider Chart),是一种在极坐标系中绘制的柱状图。这种图表的特点是将数据点沿着一个或多个从中心向外延伸的轴来展示,这些轴通常围绕着一个中心点均匀分布。 特点: 极坐标系统:数据点不是在直角坐标系中展…

Qt json和xml操作

学习目标: 认识json和xml读写操作 前置环境 运行环境:qt creator 4.12 学习内容 XML XML(Extensible Markup Language)是一种标记语言,是一种用于描述数据结构的语言。它非常适合用于存储和传输数据。 XML 的主要特点如下: 可扩展性:XM…

TypeSscript 学习(一)

一、为什么使用 TypeScript 因为 js 是一种 弱类型语言 编写代码比较灵活 但是当项目比较大时 这种灵活不利于维护 我们用 TypeScript 这种强类型的语言 比较利于维护 二、语法 1.类型推断 ts 通过我们写的内容 知道变量的类型 定义 str 为 abc 以后 str 只能存 字符串…

element-ui操作表格行内容如何获取当前行索引?

需求&#xff1a; 根据每个用户的提交次数、撤回次数&#xff0c;动态计算出实际次数&#xff0c;并且提交次数不能小于撤回次数 <template><div><el-table:data"tableData"style"width: 80%"border><el-table-columnprop"date&…

俄罗斯VK与Yandex,谁的优势更胜一筹?

俄罗斯VK和Yandex作为该国两大重要的网络平台&#xff0c;各自具有独特的优势。 VK是一个社交媒体巨头&#xff0c;以其庞大的用户基础著称。 这个平台不仅拥有超过数亿的注册用户&#xff0c;而且这些用户在平台上的活跃度极高&#xff0c;每天都会产生海量的内容与互动。 …

优优嗨聚集团:餐饮新纪元,揭秘餐饮合作背后的双赢奥秘

在竞争激烈的餐饮市场中&#xff0c;单打独斗早已不再是主流&#xff0c;而餐饮合作却成为了一种新的趋势。那么&#xff0c;餐饮合作究竟有哪些优势&#xff0c;能够吸引众多餐饮从业者纷纷投身其中呢&#xff1f;本文将为您揭秘餐饮合作背后的双赢奥秘。 一、资源共享&#x…

go-redis 封装事件-client封装模型、批量数据处理的导出器设计

一、redis-go的封装实践-client模型 // Copyright 2020 Lingfei Kong <colin404foxmail.com>. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file.package storageimport ("context&q…

(19)夹钳(用于送货)

文章目录 前言 1 常见的抓手参数 2 参数说明 前言 Copter 支持许多不同的抓取器&#xff0c;这对送货应用和落瓶很有用。 按照下面的链接&#xff08;或侧边栏&#xff09;&#xff0c;根据你的设置了解配置信息。 Electro Permanent Magnet v3 (EPMv3)Electro Permanent M…

老胡的周刊(第149期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 mesop[2] Mesop 是一个基于 Python 的 UI 框…

【机器学习】——决策树模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…