[论文理解]旋转等变向量场网络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

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边