写在前面
新的一周又开始了,冲冲冲~
这一篇文章提出了新的范式,不知道未来会不会成为主流的能并行 ResNet、Transformer 的网络。本文源于 B 站大佬的一个视频分享,遂找来这篇文章精读下。
开头设问:图像是什么?怎么提取潜在特征?(大佬风格,i 了 i 了)
给出回答:卷积网络:将图像视为矩形框内有组织的像素,通过卷积操作在局部区域内提取特征;视觉 Transformer:将图像视为一组 patches 的序列,通过注意力机制在全局范围内提取特征。本文引入一种新的范式:上下文聚类:Context clusters (CoCs),将图像视为一个无组织的点集,通过简单的聚类算法来提取特征。具体来说,每个点包含原始特征(例如颜色)和位置信息(坐标)。一种简单的聚类算法用来将这些点分组并层次化的提取深度特征。本文提出的方法无卷积和注意力机制,仅仅依赖于聚类算法用于空间交互。实验效果很好。
提取图像特征的方式取决于如何解释图像:简单介绍下卷积神经网络 (ConvNets) 的特点,Vision Transformers (ViTs) 的特点。
对最近的工作的介绍,包含了一些联合卷积+注意力的方法。再之后是一些 MLP 和 Graph Network。接下来介绍自己提出的聚类方法。
将整个图像视为一组点的集合并将所有的点分组到聚类中心。每个类聚合周围的点到聚类中心,然后自适应的将中心点发散到周围所有点上,称之为上下文聚类。
将每个像素视为 5 维的数据点 (颜色 RGB + 2D 坐标),从而将图像转化为点云的集合,于是可以采用点云分析的方法。接下来引入一种简单的聚类方法将点分组到类。想法来自于 SuperPixel,即相似的像素被分组到一起,但是基础特征不同。
文本提出上下文聚类 Context Clusters (CoCs),本质不同于 ConvNets 或 ViTs,但同样也借鉴了一些级联的表示。
贡献如下:
挖一下聚类的旧报纸堆,超像素分割、细粒度识别。目前并未有工作通过聚类表示一般的视觉特征,本文旨在弥补这一缺失,提供数学和视觉上的可行性。
对 ConvNet 和 ViTs 的特点进行介绍,主要是卷积和注意力机制。不同于这两者,本文提出一种聚类算法的视觉表示,可以作为一个 backbone 来达到优良的可解释性。
CoAtNet、Mobile-Former、MLP-like models、Vision GNN (ViG)。
不同之处:本文直接应用聚类方法并展示了富有前景的泛化性和可解释性。
对于一幅输入图像 I∈R3×w×h\bold{I}\in\mathbb{R}^{3\times w\times h}I∈R3×w×h,每个像素坐标为 Ii,j=[iw−0.5,jh−0.5]\bold{I}_{i,j}=[\frac{i}{w}-0.5,\frac{j}{h}-0.5]Ii,j=[wi−0.5,hj−0.5],于是整体的点集为 P∈R5×n\bold{P}\in\mathbb{R}^{5\times n}P∈R5×n,其中 n=w×hn=w\times hn=w×h 为点的数量,每个点包含特征(颜色)及位置(坐标)信息,因此点集应该是无序且混乱的。一组点集可以被认为是一种统一的数据表示,因为大多数领域中的数据都被考虑是特征和位置信息的聚合。
如上图所示,采用类似 ResNet 的方式,利用上下文聚类块来提取级联的深度特征。对于一组点集 P∈R5×n\bold{P}\in\mathbb{R}^{5\times n}P∈R5×n,首先需要减少点的数量来增加计算效率,之后采用一系列的上下文聚类块来提取特征:平等地在空间内选取一些锚框,拼接最近邻的 kkk 个点并通过线性投影来融合这些点,注意:如果所有点按照顺序排列且 kkk 是合适的集合,那么就通过卷积来实现,例如 ViT。
分类任务:平均最后一个 block 的输出并用一个全连接层来分类。
检测和分割任务:通过位置重新对输出点排序来满足大多数检测和分割头的需要。
对于一组特征点集 P∈R5×n\bold{P}\in\mathbb{R}^{5\times n}P∈R5×n,基于它们的相似性将其分到一些类,每个点都只属于一个类别。
首先将 P\bold{P}P 投影到 Ps\bold{P}_{s}Ps;然后根据传统的超像素分割方法 SLIC 平等地在空间内选出 ccc 个中心, 其特征根据周围 kkk 个点来平均;之后计算这 Ps\bold{P}_{s}Ps 和中心点集的 cosine 相似度矩阵 S∈Rc×n\bold{S}\in\mathbb{R}^{c\times n}S∈Rc×n;最后分配每个点到最相似的中心,从而生成 ccc 个聚类。需要注意的是每个类都有着不同数量的点,极端情况下,一些类可能有0个点。在这种情况下,这些类是冗余的。而为了优化方便,在这些点中添加一个极微小值可以解决这一问题且没啥影响。
基于点到聚类中心的相似性动态地聚合这些点。假设一个类中包含 mmm 个点,其和聚类中心的相似性为 s∈Rms\in\mathbb{R}^{m}s∈Rm,将这些点映射到一个值域空间,得到 Pv∈Rm×d′\bold{P_v}\in\mathbb{R}^{m\times d^{\prime}}Pv∈Rm×d′,其中 d′d^{\prime}d′ 为值的维度。类似聚类中心,同样在值域空间提出一个中心 vcv_cvc,特征聚合可表示为:
g=1C(vc+∑i=1msign(αsi+β)∗vi),s.t., C=1+∑j=1msig(αsi+β)g=\dfrac{1}{C}\left(v_c+\sum\limits_{i=1}^{m}\operatorname{sign}\left(\alpha s_i+\beta\right)*v_i\right),\quad\text{s.t.,}~~C=1+\sum\limits_{j=1}^{m}\text{sig}\left(\alpha s_{i}+\beta\right) g=C1(vc+i=1∑msign(αsi+β)∗vi),s.t., C=1+j=1∑msig(αsi+β)其中 α\alphaα 和 β\betaβ 为可学习的尺度来缩放和变换相似度,sig(⋅)\text{sig}(\cdot)sig(⋅) 为 sigmoid 函数来重新缩放相似度到 (0,1)(0,1)(0,1)。viv_ivi 表示 pvp_vpv 中的第 iii 个点。这里不考虑 softmax 函数,因为这些点彼此之间不冲突。为了控制梯度,通过因子 CCC 来规一化聚合的特征。
每个聚类中心点基于相似度而聚合的特征 ggg 之后自适应地分发到每个点,于是点和点彼此之间能够通信且共享来自类中所有点的特征。对于点 pip_ipi,通过下式来更新:
pi′=pi+FC(sig(αsi+β)∗g))p_i^{\prime}=p_i+\text{FC}\left(\text{sig}\left(\alpha s_i+\beta)*g\right)\right)pi′=pi+FC(sig(αsi+β)∗g))
这表示同样的相似度处理程序以及用一个全连接层来匹配原始的特征维度(从值空间维度 d′d^{\prime}d′ 到原始维度 ddd)。
自注意力机制中的多头方法同样能够增强上下文聚类。采用 hhh 个头,设置值空间 pv\bold{p}_{v}pv 和相似度空间 Ps\bold{P}_{s}Ps 为 d′d^{\prime}d′。多头的输出之后拼接到一起,送入一个全连接层。
一些 ConvNets 和 ViTs 上的东西,例如级联结构和元 Transformer 结构,仍然适用于上下文聚类。
在每个阶段减少点的数量分别到 16,4,4,416,4,4,416,4,4,4 倍。第一阶段考虑周围的 161616 个邻居,剩下的阶段考虑周围 999 个最近的邻居。
计算效率:假设有 nnn 个 ddd 维度的点以及 ccc 类。计算特征相似性的时间复杂度为 O(ncd)\mathcal{O}(ncd)O(ncd),这对于高分辨率的输入图像来说是不可接受的,例如 224×224224\times224224×224。为了规避这一问题,采用 Swim Transformer 中区域并行的策略,将点划分到 rrr 个局部区域。于是计算复杂度变为 O(nrcrd)\mathcal{O}(\frac{n}{r}\frac{c}{r}d)O(rnrcd)。但这种策略会限制上下文聚类的感受野,使得局部区域无法通信。
所有的传统聚类方法以及超像素技术迭代地更新聚类中心直至收敛,然而会导致过高的计算成本,推理时间也会增加。在上下文聚类中,为了推理效率,将聚类中心作为可选的部分,从而能够在精度和速度间权衡。
将每个点单独划分到特定的中心,这不同于点云分析的设计理念。实际上本文有意依赖于这些传统的高性能聚类方法(非重叠聚类),但是重叠聚类不是关键部分且不会产生额外的计算负担。
数据集:ImageNet-1K 图像分类、ScanObjectNN 点云分类、MS COCO 目标检测、ADE20k 实例分割。
数据增强:随机水平翻转,随机像素擦除、混合、裁剪、标签平滑;AdamW,310 epochs, 0.9 momentum, 权重衰减 0.05,初始学习率 0.001,cosine 计划,8块 A100(有钱任性)。128 bath_size, Exponential Moving Average (EMA)。
‡\ddagger‡ 表示另一种区域划分方法,四个阶段的点数分别为 [49,49,1,1][49,49,1,1][49,49,1,1]。
提出一种新的特征提取算法用于视觉表示,上下文聚类。受益于点云分析和超像素算法,将图像视为无组织的点集,采用简单的聚类算法来提取特征。实验效果比 ConvNet 和 ViT 好,更重要的是表明了可解释性和泛化性。
主要限制在于精度和速度,后续如果有上下文聚类的设计理念可以应用于其他的类似检测和分割任务。
写在后面
这篇论文对比了 ConvNets 和 ViTs,从底层框架来说确实不同于上述两者。但是纵观深度学习大的方向,这种聚类的方法可能还是难以应用到多模态领域,反而在计算机视觉任务上应该值得探索一下。
下一篇:C++虚函数与多态