【论文阅读】 Learning to Upsample by Learning to Sample
论文结构目录
- 一、之前的上采样器
- 二、DySample概述
- 三、不同上采样器比较
- 四、整体架构
- 五、设计过程
- (1)初步设计
- (2)第一次修改
- (3)第二次修改
- (4)第三次修改
- 六、DySample四种变体
- 七、复杂性分析
- 八、定性可视化
- 九、对比实验分析
- 十、DySample代码分析

论文地址:Liu_Learning_to_Upsample_by_Learning_to_Sample_ICCV_2023_paper.pdf
代码地址:https://github.com/tiny-smart/dysample.git
一、之前的上采样器
随着动态网络的普及,一些动态上采样器在几个任务上显示出巨大潜力。CARAFE通过动态卷积生成内容感知上采样核来对特征进行上采样。后续工作FADE和SAPA提出将高分辨率引导特征和低分辨率输入特征结合起来生成动态核,以便上采样过程能够受到更高分辨率结构的引导。这些动态上采样器通常结构复杂,推理时间成本高,特别是对于FADE和SAPA,高分辨率引导特征引入了更多的计算工作量,并缩小了它们的应用范围。
二、DySample概述
DySample是一种快速、有效且通用的动态上采样器,其主要概念是从点采样的角度来设计上采样过程,而不是传统的基于内核的动态上采样方法。DySample通过生成上采样位置而非内核,显著减少了计算资源的消耗,并且不需要定制的CUDA包。与其他动态上采样器相比,DySample在延迟(latency)、训练内存(memory)、训练时间(training time)、浮点运算次数(GFLOPs)和参数量(parameters)等方面表现出更高的效率。在本文测试DySample上采样模块的过程中,首先从一个简单的实现开始,然后通过不断调整公式和参数等逐步改进其性能。
三、不同上采样器比较
- 该图是对不同上采样器的性能、推理速度和
GFLOPs进行比较。 - 圆圈大小表示
GFLOPs成本。 通过将大小为256×120×120的特征图进行×2 上采样来测试推理时间。 - 在大型室内场景
ADE20K数据集上使用SegFormer-B1模型。 - 测试平均交并比(
mIoU)性能和额外增加的GFLOPs。
四、整体架构
与近期基于内核的上采样器不同,我们将上采样的本质理解为点重采样。在DySample中,有着基于动态上采样和模块设计的采样过程。其中输入特征X 、上采样特征X‘ 、生成偏移量O,原始采样网络G,采样集S。

- (a)图:采样集
S由采样点生成器生成,通过网格采样函数对输入特征进行重新采样。
- (b)图:采样集
S=生成偏移量O+原始采样网络G。 上框表示具有静态范围因子的版本,其中偏移量通过线性层生成。下框描述具有动态范围因子的版本,其中先生成一个范围因子,然后用它来调制偏移量。σ表示Sigmoid函数。
五、设计过程
(1)初步设计
- 变量注释:输入特征
X、上采样特征X‘、生成偏移量O,原始网格G,采样集S
X ′ = grid_sample ( X , S ) . (1) X' = \text{grid\_sample}(X, S).\tag{1} X′=grid_sample(X,S).(1)
O = linear ( X ) , (2) O = \text{linear}(X),\tag{2} O=linear(X),(2)
S = G + O , (3) S = G + O,\tag{3} S=G+O,(3)
- 目标检测:
Faster R-CNN(DySample) : 37.9%的AP,Faster R-CNN(CARAFE):38.6%的AP。 - 语义分割:
SegFormer-B1(DySample) 获得了41.9%的mIoU,SegFormer-B1(CARAFE)
42.8%的mIoU。
(2)第一次修改
- 点和彩色掩码分别表示初始采样位置和偏移范围;
- 本次示例,我们考虑采样四个点。

- (a)在
Nearest Initialization的情况下,四个偏移量共享相同的初始位置,这会导致初始采样位置分布不均匀; - (b)在
Bilinear Initialization的情况下,我们将初始位置分开,使他们的初始采样位置分布均匀。
(3)第二次修改
我们发现,当(b)在没有偏移调制的情况下,偏移范围通常会重叠,所以在(c)中,我们局部约束偏移范围以减少重叠。

我们重写公式(2),通过不断实验确定静态范围因子为0.25时DySample达到最优效果
O = 0.25 × linear ( X ) (4) O = 0.25 \times \text{linear}(X) \tag{4} O=0.25×linear(X)(4)
(4)第三次修改
然而,乘以静态范围因子是重叠问题的一种软解法,这种方法无法完全解决问题。

最终我们引入动态范围因子,重写公式(4),并且通过不断实验确定分组卷积个数为g=4时DySample达到最优效果。
O = 0.5 ⋅ sigmoid ( linear 1 ( X ) ) ⋅ linear 2 ( X ) (5) O = 0.5 \cdot \text{sigmoid}(\text{linear}_1(X)) \cdot \text{linear}_2(X) \tag{5} O=0.5⋅sigmoid(linear1(X))⋅linear2(X)(5)
通过第三次修改,DySample应用在Faster R-CNN 和SegFormer-B1 的效果超过CARAFE。
六、DySample四种变体
DySample系列。根据范围因子的形式(静态/动态)和偏移生成样式(LP/PL),我们研究了四种变体:
DySample:具有静态范围因子的LP风格;DySample+:具有动态范围因子的LP风格;DySample-S:具有静态范围因子的PL风格;DySample-S+:具有动态范围因子的PL风格。
其中LP和PL即采样点生成器(Sampling Point Generator)中线性层和像素重排层的顺序:

七、复杂性分析
从图中可以就看出,DySample在延迟(latency)、训练内存(memory)、训练时间(training time)、浮点运算次数(GFLOPs)和参数量(parameters)等方面表现出更高的效率。
需要注意的是:
- 虽然
LP所需的参数比PL多,但前者更灵活,内存占用更小,推理速度更快; S版本在参数和GFLOPs方面的成本更低,但内存占用和延迟更大,因为PL需要额外的存储。+版本也增加了一些计算量。
八、定性可视化

九、对比实验分析
此处仅展示目标检测领域,该实验使用Faster R-CNN在MSCOCO数据集上进行对比实验
可以看出DySample+版本在Backbone为R50和R101时均保持最优检测性能
十、DySample代码分析
上述代码就是公式(5)的具体实现
O = 0.5 ⋅ sigmoid ( linear 1 ( X ) ) ⋅ linear 2 ( X ) (5) O = 0.5 \cdot \text{sigmoid}(\text{linear}_1(X)) \cdot \text{linear}_2(X) \tag{5} O=0.5⋅sigmoid(linear1(X))⋅linear2(X)(5)

style参数定义了上采样的风格(LP/PL)groups参数用于分组卷积g的个数dyscope参数是用于确定是否使用动态范围因子(+)- 此代码代表默认的第一种
DySample
在Ultralytics封装的YOLO系列中,DySample部署模块时的task.py如下图所示

相关文章:
【论文阅读】 Learning to Upsample by Learning to Sample
论文结构目录 一、之前的上采样器二、DySample概述三、不同上采样器比较四、整体架构五、设计过程(1)初步设计(2)第一次修改(3)第二次修改(4)第三次修改 六、DySample四种变体七、复…...
堆排序(含证明)
引言 前面我们讲过堆的基本操作的实现,现在给定一个int类型的数组,里面存放的数据是无序的,我们如何利用堆的思想来实现数组内数据的升序排列或降序排列呢? 通过前面讲到的堆的实现,我们可以想到,我们再开…...
蓝桥杯模拟题不知名题目
题目:p是一个质数,但p是n的约数。将p称为是n的质因数。求2024最大质因数。 #include<iostream> #include<algorithm> using namespace std; bool fun(int x) {for(int i 2 ; i * i < x ; i){if(x % i 0)return false;}return true; } int main() …...
C#中的工厂模式
在C#中,工厂模式(Factory Pattern) 是一种常见的设计模式,它属于创建型模式,主要用于定义一个用于创建对象的接口,让子类决定实例化哪一个类。通过使用工厂模式,客户端代码不需要直接实例化具体…...
深度学习与持续学习:人工智能的未来与研究方向
文章目录 1. 持续学习与深度学习1.1 深度学习的局限1.2 持续学习的定义 2. 目标与心智2.1 奖励假说2.2 心智的构成 3. 对研究方法的建议3.1 日常写作记录3.2 中立对待流行趋势 1. 持续学习与深度学习 1.1 深度学习的局限 深度学习注重“瞬时学习”,如ChatGPT虽在语…...
OGRE 3D----4. OGRE和QML共享opengl上下文
在现代图形应用开发中,OGRE(Object-Oriented Graphics Rendering Engine)和QML(Qt Modeling Language)都是非常流行的工具。OGRE提供了强大的3D渲染能力,而QML则用于构建灵活的用户界面。在某些应用场景中,我们需要在同一个应用程序中同时使用OGRE和QML,并且共享OpenGL…...
【Umi】常用配置
具体见:alias 1. 基础配置 1)配置别名alias 2)配置sourcemap devtool 配置项 3)添加hash 4)图片转base64 inlineLimit 配置项 5)设置JS压缩方式 jsMinifier (webpack) 、jsMinifierOptions 配置项 6)设置umi插件 plugins 配置项 7)设置打包后资源导入的路…...
Windows加固脚本
echo off REM 清屏 cls title 安全策略设置批处理 color f0 echo **************************************** echo write by afei echo https://www.jianshu.com/u/ea4c85fbe8c7 echo **************************************** pause cls color 3f echo ********************…...
玩游戏常常出现vc++runtime library error R6025 这是什么意思,该怎么解决?
当玩游戏时常常出现“vc runtime library error R6025”错误,这通常表明微软C开发运行库组件存在问题。以下是对该错误及其解决方法的详细解释: 错误含义 “vc runtime library error R6025”是一个与Visual C运行时库相关的错误,该错误表明…...
AGX orin下电控制
AGX orin下电主要有两种,一种通过软件控制下电,另一种通过按键强制关机。下电流程和电脑关机流程类似。 AGX orin核心板与扩展板 AGX orin核心板由英伟达生产,不提供原理图,通过下图所示连接器与扩展板连接。 AGX orin扩展板&am…...
flutter 报错 error: unable to find git in your path.
项目issue:WIndows: "Unable to find git in your PATH." if terminal is not in admin mode Issue #123995 flutter/flutter 解决办法, 方法一:每次想要运行flutter的时候以管理员方式运行,比如以管理方式运行vsco…...
芯科科技率先支持Matter 1.4,推动智能家居迈向新高度
Matter 1.4引入核心增强功能、支持新设备类型,持续推进智能家居互联互通 近日,连接标准联盟(Connectivity Standard Alliance,CSA)发布了Matter 1.4标准版本。作为连接标准联盟的重要成员之一,以及Matter标…...
C语言数据相关知识:静态数据、越界与溢出
1、静态数组 在 C 语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态…...
文本分析之余弦相似度
余弦相似度(Cosine Similarity)是一种用于衡量两个非零向量之间相似度的指标,尤其常用于文本分析和自然语言处理领域。其核心思想是通过计算两个向量的夹角余弦值来评估它们的相似性。具体而言,余弦相似度的值范围从-1到1,其中1表示两个向量完全相同,0表示它们之间没有相…...
【VUE3】【Naive UI】<n-button> 标签
【VUE3】【Naive UI】<n-button> 标签 **type**- 定义按钮的类型,这会影响按钮的颜色和样式。**size**- 设置按钮的大小。**disabled**- 布尔值,控制按钮是否处于禁用状态。**loading**- 布尔值,表示按钮是否处于加载状…...
css使盒子在屏幕的地点固定
在 CSS 中,要将一个元素固定在页面的某个位置,可以使用 position: fixed 属性。以下是详细的代码示例和中文解释: <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta n…...
Transformers快速入门代码解析(六):注意力机制——Transformer Encoder:执行顺序解析
Transformer Encoder:执行顺序解析 引言执行顺序解析1. 设置模型检查点和分词器2. 输入预处理操作说明: 3. 加载模型配置configconfig 包含的主要参数常见配置(BERT-base) 4. 初始化 TransformerEncoder5. Transformer Encoder 的…...
图像小波去噪与总变分去噪详解与Python实现
目录 图像小波去噪与总变分去噪详解与实现1. 基础概念1.1 噪声类型及去噪问题定义1.2 小波去噪算法基础1.3 总变分去噪算法基础2. 小波去噪算法2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析3. 总变分去噪算法3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析4. 两种算法…...
【深度学习基础】预备知识 | 微积分
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
CTF-PWN glibc源码阅读[1]: 寻找libc中堆结构的定义(2.31-0ubuntu9.16)
源代码在这里下载 来到malloc/malloc.c 在980行发现这段代码 // 定义最大 mmap 值为 -4 #define M_MMAP_MAX -4// 如果没有定义 DEFAULT_MMAP_MAX,则将其定义为 65536 #ifndef DEFAULT_MMAP_MAX #define DEFAULT_MMAP_MAX (65536) #endif// 引…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
