RyanXing

Multimedia Processing & Computer Vision.

Paper | Octave Convolution(OctConv)

论文:Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution

1. 尺度空间理论(scale-space theory)

参考:维基百科

如果我们要处理的图像目标的大小/尺度(scale)是未知的,那么我们可以采用尺度空间理论。

其核心思想是将图像用多种尺度表示,这些表示统称为尺度空间表示(scale-space representation)
我们对图像用一系列高斯滤波器加以平滑,而这些高斯滤波器的尺寸是不同的
这样,我们就得到了该图像在不同尺度下的表示。

公式化:假设二维图像为f(x,y)f(x,y),二维高斯函数(关于tt的簇)为g(x,y;t)=12πte−x2+y22tg(x,y;t)=12πte−x2+y22t,那么线性尺度空间就可以通过二者卷积(Convolution)得到:

L(⋅,⋅;t)=g(⋅,⋅;t)∗f(⋅,⋅)L(⋅,⋅;t)=g(⋅,⋅;t)∗f(⋅,⋅)

高斯滤波器的方差t=σ2t=σ2被称为尺度参数(scale parameter)。
直观地看,图像中尺度小于t√t的结构会被平滑地无法分辨。因此,tt越大,平滑越剧烈
实际上,我们只会考虑t≥0t≥0的一些离散取值。当t=0t=0时,高斯滤波器退化为脉冲函数(impulse function),因此卷积的结果是图像本身,不作任何平滑。
看图:

事实上,我们还可以构造其他尺度空间。
但由于线性(高斯)尺度空间满足很多很好的性质,因此是使用最为广泛的。

尺度空间方法最重要的属性是尺度不变性(scale invariant),使得我们可以处理未知大小的图像目标。

最后要注意的是,在构造尺度空间时,往往还伴随着降采样
比如t=2t=2的尺度空间,我们会将其分辨率减半,即面积减为1/41/4。这也是本文的做法。

2. OctConv

作者认为:不仅自然世界中的图像存在高低频,卷积层的输出特征图以及输入通道(feature maps or channels)也都存在高、低频分量
低频分量支撑的是整体,比如企鹅的白色大肚皮。显然,低频分量是存在冗余的,在编码过程中可以节省

基于以上考虑,作者提出OctConv用以取代传统CNN(vanilla CNN)。有以下两个关键步骤:

第一步,我们要获得输入通道(或图像)的线性尺度表示,称为Octave feature representation
所谓高频分量,是指不经过高斯滤波的原始通道(或图像)
所谓低频分量,是指经过t=2t=2的高斯滤波得到的通道(或图像)
由于低频分量是冗余的,因此作者将低频分量的通道长/ 宽设置为高频分量通道长/ 宽的一半
在音乐中,Octave是八音阶的意思,隔一个八音阶,频率会减半;在这里,drop an octave就是通道尺寸减半的含义。
那么高频通道和低频通道比例是多少呢?作者设置了一个超参数α∈[0,1]α∈[0,1],表示低频通道的比例
在本文中,输入通道低频比例αinαin和输出通道低频比例αoutαout设为相同。

图:企鹅白肚皮(低频)冗余(上);传统CNN,OctConv对比(下)。

问题来了:由于高/ 低频通道尺寸不一,因此传统卷积无法执行
但我们又不能简单地对低频通道进行升采样,因为这样不就白干了嘛,计算量和内存就没办法节省了。

因此我们有第二步:
第二步,作者提出了对应的卷积解决方案:Octave Convolution

首先给一些定义:
设图像的低频分量和高频分量分别是XLXL和XHXH,卷积输出的低频分量和高频分量分别是YLYL和YHYH。卷积操作中,WHWH负责构建YHYH,WLWL负责构建YLYL。

我们希望:
WHWH既有负责XHXH到YHYH的部分:WH→HWH→H,也有负责XLXL到YHYH的部分:WL→HWL→H,即WH=[WH→H,WL→H]WH=[WH→H,WL→H]。

其结构如下图右边所示。
其中,WH→HWH→H是传统卷积,因为输入、输出图像尺寸一样大;对于WL→HWL→H部分,我们先对输入图像进行升采样(upsample),再执行传统卷积。这样,整体计算量仍然是减少的。
WLWL同理,但对WH→LWH→L先执行的是降采样

具体方法很简单,就是取值的问题:


降采样后卷积相当于有步长的卷积,会不太精确;因此作者最后选择了平均池化(pooling)的方式,平均取值,采样结果会较精确一些。

完整流程如图左:

整套流程下来,我们可以发现,这种滤波+新式卷积的操作是“插片式”的,不需要破坏原来的CNN框架。
值得注意的是,低频通道卷积的感受野比传统卷积更大。
通过调整低频比例αα,预测精度和计算代价可以得到权衡(trade-off)。

实验效果:在算力受限的情况下(内存消耗低),图像分类的预测精度相当高。见论文。

3. 启发

  1. 我们要让神经网络更好地学习
    该文通过尺度空间变换和Octave卷积操作,让网络更清晰地分开处理高、低频分量,并且在低频分量上节约了计算量
    又比如BN技巧,也是让网络自我学习αα和ββ参数,从而实现特征中心化。
    神经网络很厉害,自学能力超强,但我们要适度改造它,让它更快、更精简、更强大。

  2. 我们要多从人类视觉特性上思考问题。
    因为人类视觉编码的能力远远超过现有技术:分辨率大概是10亿像素(10亿个视杆/视锥细胞),但眼睛到大脑的通路带宽只有8Mbps(1k个神经节)。
    本文思考的低频分量冗余,很有可能就是人类视觉编码特性中主要解决的冗余之一。

『深度概念』一文读懂Octave Convolution(OctConv)八度卷积相关推荐

  1. 『深度概念』度量学习中损失函数的学习与深入理解

    『深度概念』度量学习中损失函数的学习与深入理解 0. 概念简介 度量学习(Metric Learning),也称距离度量学习(Distance Metric Learning,DML) 属于机器学习的 ...

  2. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  3. ❤『知识集锦』一文搞懂mysql索引!!(建议收藏)

    作者:不吃西红柿 简介:CSDN博客专家.蓝桥签约作者.大数据领域优质创作者. 以我的资历和文凭,将来这个城市的大街,都归我扫.   [系列课程介绍] 『面试知识集锦』系列课程包括以下20个系列,超过 ...

  4. 深度分析|一文读懂银行数据架构体系

    上一篇讲了银行数据仓库的系统架构,这次给大家讲讲数据架构.如果一个系统,没有数据架构,那肯定是在吹牛. 狭义的数据仓库数据架构用来特指数据分布,广义的数据仓库数据架构还包括数据模型.数据标准和数据治理 ...

  5. 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level

    一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level 转载请附上出处,本文链接:https://www.cnblogs.com/pans0 ...

  6. 一文读懂:Kafka(分布式消息队列)的基础概念,教程

    [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 代码案例地址: ?https://github.com/Mydreamandrea ...

  7. 一文读懂机器学习与深度学习的联系与区别

    一文读懂机器学习与深度学习的联系与区别 https://mp.weixin.qq.com/s/6Zk5JxBUs_Op1wwiY4EIZA 翻译:  Tocy, kevinlinkai, 雪落无痕xd ...

  8. C_一文读懂推荐系统知识体系-上(概念、结构、算法)

    本文主要阐述: 推荐系统的3个W 推荐系统的结构 推荐引擎算法 浏览后四章的内容请见下篇. 1. 推荐系统的3个W 1.1 是什么(What is it?) 推荐系统就是根据用户的历史行为.社交关系. ...

  9. ​一文读懂EfficientDet

    一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...

最新文章

  1. Android开发实现QQ三方登录 标签: android开发qq三方登录
  2. 文件传输:二进制文件传输与文本传输(file transfer)
  3. 2.cocos2d-x坐标体系(UI坐标系,GL坐标系,本地坐标,世界坐标,节点坐标)
  4. 窗体的Alpha通道透明色支持
  5. Eclipse使用Android2.3和3.0的SDK
  6. c语言哈密顿路径算法,用于检查给定图中是否存在哈密顿循环或路径的C ++程序...
  7. Docx:docx.opc.exceptions.PackageNotFoundError: Package not found at
  8. 字符串string 、byte[]、MemoryStream、Base64String的相互转换
  9. Java基础-IO流(13)
  10. 使用javascript的“委托”实现attachEvent
  11. SSM房屋租赁系统,房屋合租系统 租房系统 SpringBoot租房系统
  12. ADS仿真 之 交流仿真和S参数仿真示例
  13. 海康信号灯控制机服务器,交通信号控制硬件设备简介
  14. Java并发练习:无锁编程
  15. 高级计量经济学及Stata应用 第2版_陈强
  16. Eslint的坑和常见报错
  17. 移动硬盘计算机管理无法显示,为什么移动硬盘插在电脑上不显示_移动硬盘为什么在电脑上面显示不出来-系统城...
  18. 程序员博客 - 加分项
  19. JAVA基础_IO流_字节流_抽象类OutStreamInputStream
  20. 【测试】功能测试用例设计方法总结

热门文章

  1. 服务器停电后显示主板问题,主板因静电造成的故障现象与解决方法
  2. 锐捷交换机最常用配置方法
  3. 【DaVinci Developer专题】-23-IDT高阶应用:结构体类型的数组
  4. 2019年中国银行三年期大额存单的利率是多少?
  5. 极案例 | 用AI助力家装隐蔽工程,极视角为艾佳生活打造水路走线识别
  6. 微程序控制器实验实验报告_程序性景观实验
  7. springboot使用教程
  8. 鲁宾逊的函数序偶定义
  9. Go语言从0到1实现最简单的数据库!
  10. 压测工具Jmeter下载安装及简单使用教程_Jmeter_5.4.1