An Image is a Wave:Phase_Aware Vsion MLP论文笔记

An Image is a Wave:Phase_Aware Vsion MLP论文笔记

由于本人能力有限,只是将论文中重要的部分做了翻译整理。

创新点

  将patch视为一种波的形式,分为相位和幅值作为输入,以此来寻找不同patch之间的非线性关系。

摘要

  在计算机视觉领域,最近的工作表明,主要由全连接层堆叠的纯MLP架构与CNN和transformer的性能媲美。视觉MLP的输入图像通常被分割成多个tokens(patches),而现有的MLP模型直接用固定的权重聚合它们,忽略了不同图像中标记的不同语义信息。为了动态地聚合标记,**我们建议将每个标记表示为一个具有两部分的波函数,即振幅和相位振幅是原始特征,而相位项是根据输入图像的语义内容而变化的复数。**引入相位项可以动态地调节标记和MLP中固定权重之间的关系。基于类似波浪的标记表示,我们建立了一个用于视觉任务的新型WaveMLP架构。广泛的实验表明,所提出的Wave-MLP在各种视觉任务(如图像分类、物体检测和语义分割)上优于最先进的MLP架构。

Introduction

  在计算机视觉领域,卷积神经网络(CNN)长期以来一直是主流架构。但是最进的研究发现,Trasnformer同样也在各种机算计视觉任务中可以取得很好的成绩,比如图像分割、物体检测、语义分割。

  相比于在视觉Transformer中具有很复杂的自注意机制,一些只有多层感知机(MLPs)的简单架构(如MLP——Mixer、ResMLP)受到了更多的关注。相比于CNN和Transformer,这些视觉MLP架构具有更小的归纳偏置并且更有可能被应用于更多不同的任务。

  以一连串的图像斑块(tokens)为输入,类MLP的模型主要包含两个可分离的模块,即通道混合MLP(Channel_mixing MLP)和标记混合MLP(token_mixing MLP),两者都由全连接层和激活函数组成。通道混合MLP对每个标记的特征进行转换(不同通道信息融合),而标记混合MLP则试图对不同标记的信息进行聚合(不同位置信息融合)。通过交替堆叠这两种类型的MLP块,简单的MLP结构可以有足够的能力来提取特征,并在视觉任务上取得良好的性能。

  但是这种MLP的表现依旧逊色于SOTA Transformer和CNN的架构。作者指出,视觉MLP的瓶颈之一在于它对不同标记物的聚合方式。回顾Transformer中,他可以根据注意力机制动态的变换权值,类似的token之间的权值会更大。但是如今的视觉MLP模型的tocken之间是固定的权值来聚合不同的token。忽略了各种标记的语义差异。

  在本文中,我们提出了一个新的视觉MLP架构(被称为Wave-MLP),它将每个token作为一个具有振幅和相位的波振幅是代表每个标记内容的实值特征而相位项是调节标记和MLP中固定权重之间关系的单位复数值。这些类似波浪的标记之间的相位差会影响它们的聚合输出,相位接近的标记往往会相互增强。考虑到来自不同输入图像的标记包含不同的语义内容,我们使用一个简单的模块来动态地估计每个标记的相位。有了配备了振幅和相位信息的标记,我们引入了一个相位感知的标记混合模块(图2中的PATM)来聚合这些标记。整个Wave-MLP架构是由PATM模块和信道混合MLP交替堆叠而成的。

性能描述

图1.性能比较

Wave-MLP架构的一个块

图2.Wave-MLP架构的一个块

Related Work

  该部分主要介绍了一下基于CNN、Transformer、MLP三种不同架构的模型,并且对比了一下不同模型之间的区别和性能你。介绍了一下不同架构的发展情况。

Methods

  在本节中,主要介绍了所提出WaveMLP的架构,以及PATM的算法模型(相位感知的标记混合模块),该模块中,每一个token视为一个波,通过同时考虑赋值和相位来聚合他们。最后介绍了在WaveMLP上的几种变体。

Preliminaries

  类MLP的模型是一种主要由全连接层和非线性激活函数组成的神经架构。WaveMLP采用的是MLP-Mixer的那种构架形式,及分为channel和token两个MLP。

C h a n n e l − F C ( z j , W c ) = W c z j , j = 1 , 2 , . . . , n Channel-FC(z_j,W^c)=W^cz_j,j = 1,2,...,n ChannelFC(zj,Wc)=Wczj,j=1,2,...,n

   W c W^c Wc是可学习参数,channel-FC对token中的特征分别独立进行提取,为了增强转换能力(transformation ability),通常将多个Channel-FC层与非线性函数堆叠在一起,构建出一个通道混合的MLP(Channel-mixing MLP)

  为了从不同的token中获得信息,需要token-FC:

T o k e n − F C ( Z , W t ) j = ∑ k W j k t ⊙ z k , j = 1 , 2 , 3 , . . . , n Token-FC(Z,W^t)_j = \sum_kW^t_{jk}\odot z_k, j = 1,2,3,...,n TokenFC(Z,Wt)j=kWjktzk,j=1,2,3,...,n

  加入Token-FC的意义:为了去从不同token捕获混合feature之间的特殊信息同时论文中也指出了诸如MLP-Mixer、ResMLP等限制MLP-like架构的瓶颈:具有固定权重的简单的 token-mixing MLP忽略了不同输入图像中标记的不同语义内容。

Phase-Aware Token Mixing

  为了可以在MLP中动态的调节token和固定权重之间的关系,文中采用了将token看作是一个具有幅值和相位的波。

  波的表现形式 z j ~ = ∣ z j ∣ ⊙ e i θ j , j = 1 , 2 , . . . , n \tilde{z_j} = |z_j|\odot e^{i\theta_j},j=1,2,...,n zj~=zjeiθj,j=1,2,...,n

  增益 ∣ z j ∣ |z_j| zj是一个实值,代表每个token的内容 e i θ j e^{i\theta_j} eiθj是一个周期函数,元素具有单位范数(unit norm). θ j \theta_j θj表示相位,表示一个波段内,token的当前位置

  聚合不同token的时候:
∣ z r ∣ = ∣ z i ∣ 2 + ∣ z j ∣ 2 + 2 ∣ z i ∣ ⊙ ∣ z j ∣ ⊙ cos ⁡ ( θ j − θ i ) |z_r|= \sqrt{|z_i|^2+|z_j|^2+2|z_i|\odot |z_j|\odot \cos(\theta_j-\theta_i)} zr=zi2+zj2+2∣zizjcos(θjθi)
θ r = θ i + ( a t a n 2 ( ∣ z j ∣ ⊙ sin ⁡ ( θ j − θ i ) , ∣ z i ∣ + ∣ z j ∣ ⊙ cos ⁡ ( θ j − θ i ) ) \theta_r = \theta_i+(atan2(|z_j|\odot \sin (\theta_j-\theta_i),|z_i|+|z_j|\odot \cos(\theta_j-\theta_i)) θr=θi+(atan2(zjsin(θjθi),zi+zjcos(θjθi))

  其中, a t a n 2 ( x , y ) atan2(x,y) atan2(x,y)是两个参数的正切函数。 ∣ θ j − θ i ∣ |\theta_j-\theta_i| θjθi:相位差。下图为直观表现形式。

表现形式

  振幅:为了简化,取消了绝对运算。将 X = [ x 1 , x 2 , . . . , x n ] X = [x_1,x_2,...,x_n] X=[x1,x2,...,xn]视为一个区块的输入,则振幅为

z j = C h a n n e l − F C ( x j , W c ) = W c x j , j = 1 , 2 , 3 , . . . , n . z_j = Channel-FC(x_j,W^c)=W^cx_j,j = 1,2,3,...,n. zj=ChannelFC(xj,Wc)=Wcxj,j=1,2,3,...,n.

  相位: 选择简化决策(消除pai相位),虽然可以区分不同的token,但是也忽略了不同输入图像的多样性。为了捕获不同输入的属性 使用一个估计模块 Θ \Theta Θ ,通过输入的特征取生成相位信息。 即 , θ j = Θ ( x j , W θ ) \theta_j = \Theta(x_j,W^\theta) θj=Θ(xj,Wθ)。相位也使用了上述公式的Channel-FC作为相位的估计模块。

θ j = C h a n n e l − F C ( x j , W θ ) = W θ x j , j = 1 , 2 , 3 , . . . , n . \theta_j = Channel-FC(x_j,W^\theta)=W^\theta x_j,j = 1,2,3,...,n. θj=ChannelFC(xj,Wθ)=Wθxj,j=1,2,3,...,n.

Token Aggregation

z j ~ = ∣ z j ∣ ⊙ cos ⁡ θ j + i ∣ z j ∣ ⊙ sin ⁡ θ j , j = 1 , 2 , 3... n . \tilde{z_j} = |z_j|\odot \cos\theta_j +i|z_j| \odot \sin\theta_j,j =1,2,3...n. zj~=zjcosθj+izjsinθj,j=1,2,3...n.

  不同的token( z j ~ \tilde{z_j} zj~)由token-FC来汇总, o j ~ \tilde{o_j} oj~为复数输出:

o j ~ = T o k e n − F C ( Z ~ , W t ) j = ∑ k W j k t ⊙ z k ~ , j = 1 , 2 , . . n . \tilde{o_j} = Token-FC(\tilde{Z},W^t)_j=\sum_kW_{jk}^t\odot \tilde{z_k},j = 1,2,..n. oj~=TokenFC(Z~,Wt)j=kWjktzk~,j=1,2,..n.

  其中 , Z ~ = [ z 1 ~ , z 2 ~ , . . . , z n ~ ] \tilde{Z} = [\tilde{z_1},\tilde{z_2},...,\tilde{z_n}] Z~=[z1~,z2~,...,zn~]

  通过加权使实部和虚部相加,最后得到实数的输出.相角 θ k \theta_k θk随着输入的数据可以动态的调节。最后得到的输出为:

o j = ∑ k W j k t z k ⊙ cos ⁡ θ k + W j k i z k ⊙ sin ⁡ θ k , j = 1 , 2 , . . . , n . o_j = \sum_kW_{jk}^tz_k\odot \cos\theta_k + W_{jk}^iz_k\odot\sin\theta_k,j =1,2,...,n. oj=kWjktzkcosθk+Wjkizksinθk,j=1,2,...,n.

Wave-MLP Block

  一个基础的block主要由两个channel-mixing MLP和相位感知token-mixing组成。channel-mixing MLP由两个channel-FC和非线性函数构成。token-mixing block组成了PATM模型。
  为了兼容计算机视觉的任务,将2D图像看作是 H × W × C H\times W\times C H×W×C.其中, H 、 W 、 C H、W、C HWC分别表示图像的高、宽和通道数。有两个平行的PATM模块,分别沿着高和宽来聚集信息。
和cycleMLP类似,不同分支用一个重新加权的模块求和。

  传统的 MLP-Mixer做不了语义分割和物体检测。为了解决这个问题,使用了一个简单的策略,限制FC层只使用本地窗口(local window)内的token。除了PATM模块,另一个直接连接输入和输出的通道用来保存原始的信息,即,最后的输出为三个分支的总和。

Experiemnts

  略

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
vector<PointVectorPair> points; for (size_t i = 0; i < input->size(); i++) { float px = input->points[i].x; float py = input->points[i].y; float pz = input->points[i].z; float nx = input->points[i].normal_x; float ny = input->points[i].normal_y; float nz = input->points[i].normal_z; points.push_back(PointVectorPair(Kernel::Point_3(px, py, pz), Kernel::Vector_3(nx, ny, nz))); } // ---------------------------------参数设置--------------------------------- const double s_angle = 25; // 平滑度,值越大越平滑,取值范围[0,90] const double edge_s = 0; // 边缘的敏感性取值范围[0,1] const double n_radius = 0.25; // 邻域点搜索半径 const std::size_t n_out = points.size() * 10; // 上采样后的点数 // ----------------------------------上采样---------------------------------- CGAL::edge_aware_upsample_point_set<CGAL::Parallel_if_available_tag>(points, std::back_inserter(points), CGAL::parameters::point_map(CGAL::First_of_pair_property_map<PointVectorPair>()). normal_map(CGAL::Second_of_pair_property_map<PointVectorPair>()). sharpness_angle(s_angle). // 控制输出结果的平滑度,值越大越平滑,取值范围[0,90]。 edge_sensitivity(edge_s). // 边缘的敏感性取值范围[0,1],边缘敏感度越大,在尖锐边缘处插入点的有限度越高 neighbor_radius(n_radius). // 邻域点的个数,如果提供,查询点的邻域是用一个固定的球面计算的半径 // 而不是固定数量的邻居。在这种情况下,参数k用于限制每个球邻域返回点的数量(避免高密度区域的点过多) number_of_output_points(n_out)); // 上采样后的点数 std::cout << "上采样完毕!!!" << std::endl;将上述代码中的CGAL带有法线的点云数据转换PCL库点云数据PointNormal
07-08
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值