论文参考信号处理中提升方案提出双向池化操作LiftPool,不仅下采样时能保留尽可能多的细节,上采样时也能恢复更多的细节。从实验结果来看,LiftPool对图像分类能的准确率和鲁棒性都有不错的提升,而对语义分割的准确性更能有可观的提升。不过目前论文还在准备开源阶段,期待开源后的复现,特别是在速度和显存方面结果



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

论文: LiftPool: Bidirectional ConvNet Pooling

Introduction


 空间池化是卷积网络中很重要的操作,关键在于缩小分辨率的同时保留最重要的特征值,方便后续的模型辨别。简单的池化操作,如最大池化和平均池化,不仅池化时忽略了局部特性,还不支持逆向恢复丢失的信息。为此,论文提出了双向池化层LiftPool,包含保留细节特征的下采样操作LiftDownPool以及产生精细特征图的上采样操作LiftUpPool。

 LiftPool的灵感来自于信号处理中的提升方案(Lifting Scheme),下采样时将输入分解成多个次频带(sub-band),上采样时能够完美地逆向恢复。如图1所示,LiftDownPool产生四个次频带,其中LL次频带是去掉细节的输入近似,LH、HL和HH则分别包含水平、垂直和对角方向的细节信息。用户可以选择一个或多个次频带作为输出,保留其它次频带用于恢复。LiftUpPool根据次频带恢复上采样输入,对比MaxUpPool的效果,LiftUpPool则能产生更精细的输出。

Methods


 下采样特征图时,池化操作核心在于减少下采样造成的信息损失,而信号处理中的提升方案(Lift Scheme)恰好能满足这一需求。提升方案利用信号的相关结构,在空间域构造其下采样的近似信号以及多个包含细节信息的次频带(sub-band),在逆转换时能完美重构输入信号。借用提升方案,论文提出了双向池化层LiftPool。

LiftDownPool

  • LiftDownPool-1D

 以一维信号\(x=[x_1, x_2, x_3, \cdots, x_n], x_n\in\mathbb{R}\)为例,LiftDownPool将其分解成下采样近似信号\(s\)和差分信号\(d\):

 其中\(F(\cdot)=f_{update}\circ f_{predict}\circ f_{split}(\cdot)\)包含3个函数,\(\circ\)表示函数组合。

 LiftDownPool-1D的整体过程如图2所示,包含以下步骤:

  • Split操作\(f_{split}:x\to (x^e, x^o)\):将信号\(x\)分成偶数下标组\(x^e=[x_2, x_4, \cdots, x_{2k}]\)和奇数下标组\(x^o=[x_1, x_3, \cdots, x_{2k+1}]\),这两组信号是密接相关的。
  • Predict操作\(f_{predict}:(x^e, x^o)\to d\):给定信号集\(x^e\)和\(x^o\),设想的是\(x^e\)可通过预测器\(\mathcal{P}(\cdot)\)转换得到\(x^o\)。这里不要求预测器是完全准确的,定义两者间的差分信号\(d\)为:



    公式2只保留了少量的细节差异信息,功能等价于对\(x\)进行了高通滤波。
  • Update操作\(f_{update}:(x^e, d)\to s\):因为\(x^e\)是从\(x\)简单下采样而来的,直接将\(x^e\)作为\(x\)的近似会有严重的混叠现象(采样导致信号减弱,具体可见原文附录),而且\(x^e\)的均值与\(x\)的均值也不一样。为此,可通过对\(x^e\)加上\(\mathcal{U}(d)\)得到平滑版本\(s\):



    公式3保留了尽可能多的输入信息,功能等价于对\(x\)进行低通滤波,因此可将低通过滤后的\(s\)作为原信号的近似。

 实际上,经典的提升方案就是由低通滤波和高通滤波来完成的,通过预设的滤波器将图片分解成四个次频带。但一般来说,以预设滤波器的形式定义\(\mathcal{P}(\cdot)\)和\(\mathcal{U}(\cdot)\)是很难的。为此,Zheng等人提出通过网络的反向传播来学习滤波器。借用此思路,论文通过1D卷积+非线性激活来实现LiftDownPool中的\(\mathcal{P}(\cdot)\)和\(\mathcal{U}(\cdot)\)功能:

 为了能够更好地进行端到端地训练,需要对最终的损失函数添加两个约束。首先,\(s\)是从\(x^e\)变化得到的,基本上要跟\(x^e\)相似,添加正则项\(c_u\)最小化\(s\)和\(x^o\)的L2-norm距离:

 另外,\(\mathcal{P}(\cdot)\)的设想是将\(x^e\)转换为\(x^o\),所以添加正则项\(c_p\)最小化细节差异\(d\):

 完整的损失函数为:

 \(\mathcal{L}_{task}\)为特定任务的损失函数,如分类或语义分割损失。设置\(\lambda_u=0.01\)和\(\lambda_p=0.1\),能够给模型带来不错的正则化效果。

  • LiftDownPool-2D

 LiftDownPool-2D可分解成几个LiftDownPool-1D操作。根据标准提升方案,先在水平方向执行LiftDownPool-1D获得\(s\)(水平方向的低频)以及\(d\)(水平方向的高频)。随后对这两部分分别执行垂直方向的LiftDownPool-1D,\(s\)被进一步分解成LL(垂直和水平方向的低频)和LH(垂直方向的低频和水平方向的高频),而\(d\)则被进一步分解成HL(垂直方向的高频和水平方向的低频)和HH(垂直和水平方向的高频)。

 用户可灵活选择其中一个或多个次频带作为结果,保留其它次频带用于恢复。一般来说,LiftDownPool-1D可以进一步泛化到n维信号。

 图3为VGG13的首个LiftDownPool层的几个特征输出,LL特征更平滑,细节较少,LH、HL和HH则分别捕捉了水平方向、垂直方向和对角方向的细节。

LiftUpPool

 LiftUpPool继承了提升方案的可逆性。继续以1D信号为例,LiftUpPool可从\(s,d\)中恢复上采样信号\(x\):

 \(\mathcal{G}(\cdot)=f_{merge}\circ f_{predict}\circ f_{update}(\cdot)\)包含update、predict、merge函数,即\(s,d\to x^e,d\to x^e,x^o\to x\):

 通过上述公式获得\(x^e\)和\(x^o\),进而合成\(x\),得到包含丰富信息的上采样特征图。

 上采样在image-to-image转换中经常使用,比如语义分割,超分辨率和图片上色等任务。但目前大多数池化操作是不可逆的,比如MaxPool上采样的输出较为稀疏且损失大部分的结构信息。而LiftUpPool能对LiftDownPool的输出进行逆转换,借助次频带产出更好的输出。

Compare with MaxPool

 以kernel size=2、stride=2的池化为例,LiftPool和MaxPool的逻辑如图6所示。

  • LiftDownPool vs. MaxPool

 Maxpool选择局部最大值作为输出,会丢失75%的信息,这其中很可能包含了跟图像识别相关的重要信息。

 LiftDownPool将特征图分解成次频带LL、LH、HL和HH,其中LL为输入的近似,其它为不同方向的细节信息。LiftDownPool将所有次频带相加作为输出,包含了近似信息和细节信息,能够更高效地用于图像分类。

  • LiftUpPool vs. MaxUpPool

 MaxPool是不可逆的,通过记录的的最大值下标进行MaxUpPool。MaxUpPool将输出的特征图的特征值对应回下标位置,其余均为零,所以恢复的特征图十分稀疏。

 LiftDownPool是可逆的,根据提升方案的属性对LiftDownPool进行反向恢复,而且LiftUpPool能生成包含记录的细节的高质量结果。

Experiment


 在CIFAR-100上对比次频带和正则项效果。

 在ImageNet上,搭配不同主干网络上进行对比。

 进行抗干扰数据集测试对比。

 不同数据集上的语义分割性能对比。

 语义分割上采样结果对比。

Conclusion


 论文参考信号处理中提升方案提出双向池化操作LiftPool,不仅下采样时能保留尽可能多的细节,上采样时也能恢复更多的细节。从实验结果来看,LiftPool对图像分类能的准确率和鲁棒性都有不错的提升,而对语义分割的准确性更能有可观的提升。不过目前论文还在准备开源阶段,期待开源后的复现,特别是在速度和显存方面结果。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

LiftPool:双向池化操作,细节拉满,再也不怕丢特征了 | ICLR 2021的更多相关文章

  1. 第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

    反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用 ...

  2. 【TensorFlow】tf.nn.max_pool实现池化操作

    max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似 有些地方可以从卷积去参考[TensorFlow]tf.nn.conv2d是怎样实现卷积的? tf.nn.max_pool(va ...

  3. 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)

    1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')  # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...

  4. 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播

    卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别       分类                        相似图像搜索                        ...

  5. tensorflow 卷积/反卷积-池化/反池化操作详解

    Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_bac ...

  6. day-16 CNN卷积神经网络算法之Max pooling池化操作学习

    利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...

  7. SoftPool:基于Softmax加权的池化操作 | 2021新文

    SoftPool使用softmax进行加权池化,能够保持特征的表达性并且是可微操作.从性能和准确率来看,SoftPool是目前的常规池化方法的一个不错的替代品   来源:晓飞的算法工程笔记 公众号 论 ...

  8. 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现

    1. 前文回顾 在之前的几篇内存管理系列文章中,笔者带大家从宏观角度完整地梳理了一遍 Linux 内存分配的整个链路,本文的主题依然是内存分配,这一次我们会从微观的角度来探秘一下 Linux 内核中用 ...

  9. TensorFlow:tf.nn.max_pool实现池化操作

    tf.nn.max_pool(value, ksize, strides, padding, name=None) 参数是四个,和卷积很类似: 第一个参数value:需要池化的输入,一般池化层接在卷积 ...

  10. tensorflow max_pool(最大池化)应用

    1.最大池化 max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似. tf.nn.max_pool(value, ksize, strides, padding, name=Non ...

随机推荐

  1. 利用VkKeyScanA判断大写字母

    string bind = "Hello"; for (int i = 0; i < bind.length(); i++) { short ch = VkKeyScanA( ...

  2. r0tracer 源码分析

    使用方法 修改r0tracer.js文件最底部处的代码,开启某一个Hook模式. function main() { Java.perform(function () { console.Purple ...

  3. [WEB安全] CSRF攻击和防御

    一.什么是CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或 ...

  4. 产品分享:Qt数学函数公式学科工具,当前版本v1.0.0

    ​若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121194536红胖子(红模仿)的博文大全:开发技术集合 ...

  5. C++ //常用拷贝和替换算法 //copy //replace 将指定区间范围内的旧元素修改为新元素 //replace_if(满足条件的元素,替换指定的元素) //swap 互换两个容器的元素

    //常用拷贝和替换算法 //copy //replace 将指定区间范围内的旧元素修改为新元素 //replace_if(满足条件的元素,替换指定的元素) //swap 互换两个容器的元素 #incl ...

  6. Mac上LLAMA2大语言模型安装到使用

    LLAMA介绍 LLaMA是由Facebook的母公司Meta AI设计的一个新的大型语言模型.LLaMA拥有70亿到650亿个参数的模型集合,是目前最全面的语言模型之一. Llama是目前唯一一个可 ...

  7. pandas plot函数:数据可视化的快捷通道

    一般来说,我们先用pandas分析数据,然后用matplotlib之类的可视化库来显示分析结果.而pandas库中有一个强大的工具--plot函数,可以使数据可视化变得简单而高效. 1. plot 函 ...

  8. 学习笔记:勒让德(Legendre)符号

    授课老师:ybx.chh. 授课时间:2024/3/8. 授课内容纲要:勒让德符号及其性质(欧拉准则,高斯引理,二次互反律). 勒让德符号概括 好像在 OI 和 MO 当中都挺有用的. 勒让德符号的定 ...

  9. Zabbix_get基础命令浅析

    zabbix_get是Zabbix监控系统的一个命令行工具,可以用于从Zabbix服务器或代理获取数据.以下是zabbix_get的基本使用方法: 1.获取一个单独的键值对 使用以下命令可以获取一个单 ...

  10. Obsidian 0.15.9 知识笔记 使用说明

    我感觉这个软件是一个非常好用的软件,经过初步体验. 全局搜索快捷键 Ctrl + Shift + F 打开快速切换快捷键 Ctrl + O 添加标签 #测试标签 反向链接 Obsidian支持反向链接 ...