[论文理解]旋转等变向量场网络Rotation equivariant vector field networks

本文主要是介绍[论文理解]旋转等变向量场网络Rotation equivariant vector field networks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1. 几个问题

做了什么

提出了旋转等变向量场网络Rotation Equivariant Vector Field Networks (RotEqNet),是一种对旋转等变性(equivariance)、旋转不变性(invariance)和旋转共变性(covariance)进行了编码的CNN网络。

论文中专注于解决“旋转”这一操作,因此下文所述的对象都与旋转有关。

实现原理

每个卷积核被应用在多个方向上,并返回一个矢量场,表示每个空间位置的最高评分方向的大小和角度。

实验效果

相比于一些大型模型,RotEqNet的参数更加紧凑,在图像分类、医学图像分割等任务上能取得和参数更多的模型一样的效果。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验内容很多,略去不表。

2. 相关工作

有两类方法明确说明了旋转不变性或等变性:

1) 对表示(输入图或特征图)进行转换

2) 对卷积核进行旋转。

RotEqNet属于后者。

2.1 转换image或feature map

  • Jaderberg等人提出了Spatial Transformer层,ST也是一个神经网络,会根据输入的图像或特征图预测正确的姿势,然后把输入图或特征图校正到正确的姿势。之前写过一篇关于STN的博客。
  • TI-pooling将同一图像的多个旋转版本输入到同一个CNN,然后在第一个全连接层上横跨不同的特征向量执行池操作。这种操作允许紧随其后的全连接层从上一步旋转得到的图像组中挑选出正确的图像,并进行分类。
  • Cheng在每一个minibatch中使用了输入图像的几个旋转版本。在第一个全连接层之后,特征图的representation会变得相似,从而迫使CNN学习旋转不变性。
  • Henriques对图像进行了扭曲(warp),使卷积固有的平移等方差性质转化为旋转等变性和尺度等变性。

一方面,这些方法具有利用传统CNN实现的优点,因为它们只作用在数据表示(data representation)上。另一方面,他们只能考虑输入图像的全局(global)变换。虽然这非常适合于图像分类等任务,但它限制了它们在其他任务(如语义分割)中的适用性,在这些任务中,某些对象相对于周围环境的局部相对方向才是重要的。相反,RotEqNet是基于特定的CNN构建块来处理本地(local)方位信息。因此,RotEqNet可以处理分类、完全卷积语义分割、检测和回归等多种任务。

2.2 转换filters

3. 数学部分

等变性、不变性和共変性

论文作者用一张图很好地概括了这三者的区别。
在这里插入图片描述
等变性:旋转输入,导致输出被同样地旋转
不变性:旋转输入,输出不变
共变性:旋转输入,输出是输入旋转的确定函数

定义 f f f为某个感兴趣的函数, g g g为某个变换函数。则三种关系可以简单的用公式描述:

等变性: f ( g ( ⋅ ) ) = g ( f ( ⋅ ) ) f\left( {g\left( \cdot \right)} \right) = g\left( {f\left( \cdot \right)} \right) f(g())=g(f())
不变性: f ( g ( ⋅ ) ) = f ( ⋅ ) f\left( {g\left( \cdot \right)} \right) = f\left( \cdot \right) f(g())=f()
共变性: f ( g ( ⋅ ) ) = g ′ ( f ( ⋅ ) ) f\left( {g\left( \cdot \right)} \right) = g'\left( {f\left( \cdot \right)} \right) f(g())=g(f())

其中 g ′ ( ⋅ ) = h ( g ( ⋅ ) ) g'\left( \cdot \right) = h\left( {g\left( \cdot \right)} \right) g()=h(g()),即 g ′ g' g g g g的函数,是一种二次变换(复合函数)。

在这种定义下,等变性和不变性其实都是共变性的一种特例。

CNN的平移性

图像: x ⃗ ∈ R M × N × d \vec x \in {R^{M \times N \times d}} x RM×N×d
卷积核: w ⃗ ∈ R m × n × d \vec w \in {R^{m \times n \times d}} w Rm×n×d
图像与卷积核发生卷积: y ⃗ = w ⃗ ∗ x ⃗ \vec y = \vec w*\vec x y =w x

RotEqCNN——概述

我们将图片与标准滤波器的若干旋转实例进行卷积,从而获得旋转等变性。
在这里插入图片描述
标准卷积核 w → \overrightarrow w w 被旋转到 R R R个均匀的空间方向。旋转间隔 α = [ 0 ∘ , 360 ∘ ] \alpha = \left[ {{0^ \circ },{{360}^ \circ }} \right] α=[0,360],也可以按需调整。卷积核 w → \overrightarrow w w 在特定位置的输出包括了所有旋转角度中最大的激活值,以及其对应的角度。如果我们将这个极坐标表示转换到笛卡尔表示,那么每个卷积核 w → \overrightarrow w w 会产生一个矢量场特征图 z ∈ R H × W × 2 z \in {R^{H \times W \times 2}} zRH×W×2,其中输出的每个位置都包含了两个值 [ u , v ] ∈ R 2 \left[ {u,v} \right] \in {R^2} [u,v]R2,对最大激活的大小和方向进行了隐式编码。由于特征映射已经成为向量场,从这一刻起,滤波器也必须是向量场,如图2的右侧所示。用笛卡尔坐标表示z的优点是水平分量和垂直分量[u,v]是正交的,因此可以使用标准卷积在每个分量上独立计算两个向量场的卷积。

RotEqNet的基本单元:RotEqNet block

旋转卷积(RotConv)

给定一个输入图像,并在其周围进行 m / 2 m/2 m/2的零填充,即 x ⃗ ∈ R ( H + m 2 ) × ( W + m 2 ) × d \vec x \in {R^{\left( {H{\rm{ + }}{m \over 2}} \right) \times \left( {W + {m \over 2}} \right) \times d}} x R(H+2m)×(W+2m)×d。我们将卷积核 w ⃗ ∈ R m × n × d \vec w \in {R^{m \times n \times d}} w Rm×n×d作用在 R R R个方向上。

α r = 360 R r ∀ r = 1 , 2 , . . . , R {\alpha _r} = {{360} \over R}r\;\;\;\forall r = 1,2,...,R αr=R360rr=1,2,...,R

每个旋转的 w ⃗ \vec w w 是对原有 w ⃗ \vec w w 进行中心旋转后的双线性重采样。

w ⃗ r = g α r ( w ⃗ ) {\vec w^r} = {g_{{\alpha _r}}}\left( {\vec w} \right) w r=gαr(w )

其中 g α {g_\alpha } gα代表旋转 α \alpha α度的旋转算符。当旋转不是90°的整数倍时,会需要插值,因此在实际操作中旋转等变性只是近似的。

由于旋转可能会导致卷积核角落附近的权重超出有效的空间范围,因此我们只使用直径为 m m m像素的圆内的权重来计算卷积。也就是说,只采用方形卷积核的“最大内接圆”部分。

输出张量为 y ⃗ ∈ R H × W × R \vec y \in {R^{H \times W \times R}} y RH×W×R
y ⃗ ( r ) = ( w ⃗ ∗ x ⃗ r ) ∀ r = 1 , 2 , … , R {\vec y^{\left( r \right)}} = \left( {\vec w*{{\vec x}^r}} \right)\;\;\;\;\forall r = 1,2, \ldots ,R y (r)=(w x r)r=1,2,,R

x ⃗ \vec x x 进行旋转操作,相当于对输出特征图 y ⃗ \vec y y 进行了平移。注意,只有标准滤波器 w ⃗ \vec w w 被储存在了模型中。在反向传播过程中,相对于每个旋转的卷积核的梯度 ∇ w ⃗ r \nabla {\vec w^r} w r被对齐到标准形式,且进行了求和:

∇ w ⃗ = ∑ r g − α r ( ∇ w ⃗ r ) \nabla \vec w = \sum\limits_r {{g_{ - {\alpha _r}}}\left( {\nabla {{\vec w}^r}} \right)} w =rgαr(w r)

这个block可以被用于传统CNN特征映射(如图2的左边)或向量场特征图(图2的右边)。在第二种情况下,卷积是在每个独立分量上单独计算的,最后会生成一个3D的张量:

( z ⃗ ∗ w ⃗ ) = ( z ⃗ u ∗ w ⃗ u ) + ( z ⃗ v ∗ w ⃗ v ) \left( {\vec z*\vec w} \right) = \left( {{{\vec z}_u}*{{\vec w}_u}} \right) + \left( {{{\vec z}_v}*{{\vec w}_v}} \right) (z w )=(z uw u)+(z vw v)

其中 u , v u,v u,v分别代表水平和垂直分量。

w ⃗ ∈ R m × m × 2 \vec w \in {R^{m \times m \times 2}} w Rm×m×2,即卷积核为2D向量场的时候, g α {g_\alpha } gα也需要被分解,即

w ⃗ u r = cos ⁡ ( α r ) g α r ( w ⃗ u ) − sin ⁡ ( α r ) g α r ( w ⃗ v ) \vec w_u^r = \cos \left( {{\alpha _r}} \right){g_{{\alpha _r}}}\left( {{{\vec w}_u}} \right) - \sin \left( {{\alpha _r}} \right){g_{{\alpha _r}}}\left( {{{\vec w}_v}} \right) w ur=cos(αr)gαr(w u)sin(αr)gαr(w v)

w ⃗ v r = cos ⁡ ( α r ) g α r ( w ⃗ v ) + sin ⁡ ( α r ) g α r ( w ⃗ u ) \vec w_v^r = \cos \left( {{\alpha _r}} \right){g_{{\alpha _r}}}\left( {{{\vec w}_v}} \right) + \sin \left( {{\alpha _r}} \right){g_{{\alpha _r}}}\left( {{{\vec w}_u}} \right) w vr=cos(αr)gαr(w v)+sin(αr)gαr(w u)

方向池化Orientation pooling (OP)
向量场的Batch normalization

BN将mini-batch中的每个特征映射归一化为零均值和单位标准差。它通过随机梯度下降训练来提高收敛性。

在我们的例子中,由于使用的向量场含有大小和激活的方向两种信息,BN应该只将向量的大小规范化为单位标准差。将角度规范化是没有意义的,因为它们的值已经有界,改变它们的分布会改变有关相对和全局方向的重要信息。给定一个向量场特征映射z及其大小ρ,我们将batch normalization计算为

z ∧ = z v a r ( ρ ) \mathop z\limits^ \wedge = {z \over {\sqrt {{\mathop{\rm var}} \left( \rho \right)} }} z=var(ρ) z

计算方面的考量

虽然RotEqNet允许更小的模型,但它们可能需要比标准CNN更多的卷积次数。例如,使用MNIST rot的网络结构,与RotEqNet相比,标准CNN每层需要四倍大小以上的滤波器以达到饱和性能。同时,RotEqNet要求R/4=4.25倍(R=17)个更多的卷积。这使得RotEqNet节省了10倍的模型内存和2倍的数据内存,只需增加1.5倍的计算时间。这是因为,尽管卷积计数更高,但每个卷积的特征映射的数量更小。更少的特征映射意味着更小的卷积滤波器和使用更大的mini-batch的可能性,这两个因素都有助于更快的训练。

局限性

当输入或滤波器上没有主方向时,强制方向池块选择最活跃的方向可能会导致噪声加剧。这是因为任意选择的方向会对输出有很大的影响,以及它将如何与下一层的过滤器交互,但没有任何意义。这个问题通过在滤波器的向量元素和它的输入之间使用标量积来放大,这假设这些向量的方向是相关的。这个问题可以通过在向量元素之间使用自定义的相似性度量来改进,这样就可以考虑到过滤器或输入中的对称性。

4. 模型的工作过程

在这里插入图片描述
输入一张图,假设有三个filters作用在上面。每个filter都会旋转到若干方向(假设有N个方向),因此总共有 3 × N 3 \times N 3×N张图像。对每组图像(包含 N N N张),想象把他们叠在一起,变成一个 N × W × H N \times W \times H N×W×H的区域,W和H是单张特征图的宽和高。对于 W × H W \times H W×H的区域上的每一个位置,找出 N N N张图中的最大值,并保存为“最大幅度图”,记作 g g g

g ( x , y ) = max ⁡ ( f n ( x , y ) ) , n = 1 , 2 , … N g\left( {x,y} \right) = \max \left( {{f_n}\left( {x,y} \right)} \right),n = 1,2, \ldots N g(x,y)=max(fn(x,y)),n=1,2,N

同样的,由于每个位置的最大值都属于N张图中的一个,而N张图对应旋转的N个角度,因此与 g g g对应的还有"最大角度图" θ ( x , y ) \theta(x,y) θ(x,y)

输出矢量场假设为 v v v,大小为 W × H W \times H W×H

总共有3组,就得到了三张矢量图。从N张特征图到1张矢量图的中间过程就是操作OP。

如果输入是矢量图,其实是一样的,不过每个矢量图有两个分量,把两个分量分开处理,最后再组合到一起就好。

有人可能会问,第二次输入有三个矢量图,网络下一步该如何处理?多张矢量图就是不同的channel,可以类比为RGB三色图的三个颜色分量。矢量图数量多了也可以这么想。

这篇关于[论文理解]旋转等变向量场网络Rotation equivariant vector field networks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176427

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring