ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【读点论文】LSNet: See Large, Focus Small感知与聚合范围分离,兼顾大视野信息与细节融合,计算复杂度线性于输入分辨率

2026/8/16 16:41:59 拓冰建站 浏览量
【读点论文】LSNet: See Large, Focus Small感知与聚合范围分离,兼顾大视野信息与细节融合,计算复杂度线性于输入分辨率

LSNet: See Large, Focus Small

Abstract

  • 视觉网络设计,包括卷积神经网络和视觉 Transformer,极大地推进了计算机视觉领域。然而,它们复杂的计算给实际部署带来了挑战,特别是在实时应用中。为了解决这个问题,研究人员探索了各种轻量级和高效的网络设计。然而,现有的轻量级模型主要利用自关注机制和卷积进行令牌混合。这种依赖性在轻量级网络的感知和聚合过程中带来了有效性和效率的限制,阻碍了在有限的计算预算下性能和效率之间的平衡。在本文中,我们从高效人类视觉系统中固有的动态异尺度视觉能力中得到启发,并提出了一种轻量级视觉网络设计的“看大,聚焦小”策略。我们引入LS(大-小)卷积,它结合了大核感知和小核聚合。它可以有效地捕捉大范围的感知信息,并实现动态和复杂视觉表示的精确特征聚合,从而实现对视觉信息的熟练处理。基于最小二乘卷积,我们提出了一种新的轻量级模型&最小二乘网络。大量实验表明,LSNet在各种视觉任务中取得了优于现有轻量级网络的性能和效率。代码和模型可从以下网址获得 [GitHub - THU-MIG/lsnet: LSNet: See Large, Focus Small CVPR 2025].
  • 论文地址:[2503.23135] LSNet: See Large, Focus Small
  • 针对现有轻量级视觉网络在感知与聚合过程中效率和有效性不足的问题,受人类视觉系统动态异尺度能力启发,提出 “See Large, Focus Small” 策略,设计了LS 卷积—— 结合大核静态卷积进行大视野感知、小核动态卷积进行小范围自适应聚合,进而构建了轻量级模型家族LSNet(包括 LSNet-T、S、B,分别为 0.3G、0.5G、1.3G FLOPs)。
  • 研究背景(现有轻量级模型在感知和聚合上的局限)、灵感来源(人类视觉系统的动态异尺度能力)、提出的策略(“See Large, Focus Small”)、核心操作(LS 卷积,结合大核感知和小核聚合)。LS 卷积的两个步骤:大核静态卷积(感知)和小核动态卷积(聚合)
  • 人类视觉系统:外周视觉“See Large”(大视野感知),中央视觉“Focus Small”(小范围聚合)。视网膜杆体细胞(外周,大视野)与锥体细胞(中央,细节)的分布特性。大核感知(LKP):大核深度卷积捕捉宽范围上下文关系。小核聚合(SKA):基于LKP结果的小核动态卷积,自适应融合相关特征。
  • 首先,关于大尺度和小尺度信息融合,需要结合 LS 卷积的设计。论文中提到 LS 卷积包括大核感知(LKP)和小核聚合(SKA)。通俗来说,LKP 就像用广角镜头看整体,捕捉大范围信息,SKA 像用长焦镜头聚焦细节,基于整体信息融合局部特征。需要解释清楚两者如何配合,比如 LKP 先获取大视野的关系,再指导 SKA 在小范围动态融合
  • 核心公式:LS 卷积的融合过程可表示为 yi=A(P(xi,NP(xi)),NA(xi))y_i = \mathcal{A}(\mathcal{P}(x_i, \mathcal{N}_P(x_i)), \mathcal{N}_A(x_i))yi=A(P(xi,NP(xi)),NA(xi))
    • P\mathcal{P}P(感知):用大核卷积(如 7×7 深度卷积)计算大范围内的特征关系,得到权重 wiw_iwi,公式为 wi=PW(DWKL×KL(PW(NKL(xi))))w_i = PW(DW_{K_L×K_L}(PW(\mathcal{N}_{K_L}(x_i))))wi=PW(DWKL×KL(PW(NKL(xi)))),本质是通过卷积操作提取大范围空间特征。
    • A\mathcal{A}A(聚合):用小核动态卷积(如 3×3),基于 (w_i) 融合小范围特征,公式为 yic=wig∗⊛NKS(xic)y_{ic} = w_{ig}^* \circledast \mathcal{N}_{K_S}(x_{ic})yic=wigNKS(xic),本质是通过动态权重对局部特征加权求和。
    • 复杂度控制:整体计算量为 O(HWC4(3C+2KL2+(2G+4)KS2))O(\frac{HWC}{4}(3C + 2K_L^2 + (2G + 4)K_S^2))O(4HWC(3C+2KL2+(2G+4)KS2)),与输入分辨率成线性关系,保证轻量级特性。

Introduction

  • 视觉网络设计一直是计算机视觉领域的研究重点,其中两种主要的网络架构,即卷积神经网络(CNN)和视觉 Transformer(vit),极大地拓展了各种计算机视觉任务的界限。然而,这两种方法在传统上计算量都很大,这给它们的实际部署带来了巨大的挑战,尤其是对于实时应用。

  • 最近,研究人员一直在积极探索视觉网络的轻量级和高效设计的实际应用。尽管有效,这些轻量级模型通常依赖于某些基本模块,如自我注意机制和卷积,用于令牌混合。这种依赖对轻量级网络中底层感知和聚合过程的效率和有效性提出了挑战,通常会损害体系结构的表达能力或推理速度

  • 从本质上来说,上下文感知和聚合是令牌混合的核心过程,有助于空间信息融合。感知对记号之间的上下文关系建模,而聚合基于对应关系集成记号特征。在现有的轻量级模型中,两种主要的令牌混合方法,自我注意和卷积,采用不同的感知和聚合过程。具体来说,自我注意通过整体特征的相互作用和通过所有特征的加权和进行整体聚合来使用整体感知。卷积使用表征之间的相对位置关系进行感知,并使用静态核权重聚集特征。

  • 然而,如图1(a)和(b)所示。两种方法都有局限性。(1)自我关注通常会导致对缺乏重要联系的区域的过度关注,从而导致不太关键的聚集,例如,在信息较少的背景中。此外,它的感知和聚合共享相同的混合范围。自注意力及其变体中的上下文扩展是以显著的计算复杂性为代价的。这些阻碍了轻量级模型在低计算预算下追求高表现能力。(2)在卷积中,由感知建模的表征之间的关系,即聚合权重,由固定的核权重确定

    • 在这里插入图片描述

    • 图1。自我注意(a)和卷积(b)的机制。(c)表明人类视觉系统可以通过周边视觉“看大”,通过中心视觉“聚焦小”。(d)显示了视杆细胞和视锥细胞的分布,取决于人眼中央凹的偏心率。它们有助于形成广泛的周边视觉和焦点中心视觉。

  • 因此,尽管卷积很有效,但它对变化的上下文邻域缺乏敏感性。这给轻量级模型的表达带来了限制,特别是考虑到轻量级网络的模型能力本来就有限。鉴于此,在有限的计算成本下,探索一种具有更有效和高效的感知和聚合过程的轻量级模型的令牌混合方法势在必行

  • 为此,我们首先彻底检查感知和聚合过程背后的直觉。我们发现它们与有效人类视觉系统中的动态异标度视觉能力现象密切相关。具体地说,如图1©所示。人类视觉系统遵循两步机制:(1)首先通过周边视觉的大视野感知捕获场景的广阔概貌,即“见大”。(2)随后,注意力可被引向场景的特定元素,通过中心视觉的小视场聚集(即“小焦点”)促进详细理解

  • 这种特征源于视网膜中两种类型的感光细胞 的不同空间分布和视觉能力,即视杆细胞和视锥细胞,如图1(d)所示。视杆细胞广泛分布在视网膜的周边区域,产生相对模糊的图像,空间细节有限。然而,它们在整个可见光谱范围内表现出广泛的响应,并与视网膜周边的视锥细胞一起有助于大视野周边视觉,从而允许“大视野”。此外,视锥细胞主要集中在中央凹,中央视觉的一个小区域。

  • 中央凹包含高密度的锥细胞,这些锥细胞构成了能够捕捉精细细节和复杂特征的最清晰区域,从而实现了“小焦点”。在外周感光细胞的有效大视场感知的指导下,中央凹可以通过小视场聚集有效地聚焦于细微特征的精确成像。这种“看大,聚焦小”的方法使人类视觉系统能够快速、熟练地处理视觉信息,从而促进准确、高效的视觉理解

  • 这些检查激励我们设计有效和高效的视觉网络,能够感知大视场并聚合小视场。为此,我们首先提出了一种新的操作,大-小(LS)卷积,旨在模拟人类视觉系统中观察到的“看大,聚焦小”策略,从而提取有辨别力的视觉模式。通常,LS卷积采用大核静态卷积进行大场感知,采用小核动态卷积进行小场聚合。它不是简单地结合大核和小核卷积,而是首先利用大核深度卷积捕获的广泛上下文信息来建模空间关系。然后,通过它们的参数化,构建了一个具有组机制的小核动态卷积操作,以融合高度相关的视野内的特征。

  • 通过这种方式,大核静态卷积很好地感知了放大的邻域信息,从而改进了关系建模,就像外围视觉系统一样。此外,得益于这一点,小核动态卷积可以自适应地聚合小环境中复杂的视觉特征,实现像中央视觉系统一样的详细视觉理解。同时,我们利用深度卷积和分组机制,高效地精细设计了LS卷积。聚合范围仅限于一个小区域。这些很好地确保了感知和聚合过程的低复杂性。因此,我们的LS卷积优先考虑性能和效率,使轻量级模型能够在低计算成本下充分利用表示能力

  • 我们认为LS卷积是令牌混合的基本操作,并将其与其他常见的架构设计相结合,形成LS块。在LS模块的基础上,我们提出了一个新的轻量级模型系列,称为LSNet。大量实验表明,与现有的最先进的轻量级模型相比,LSNet在各种视觉任务中具有更优的性能和效率。我们希望LSNet可以作为一个强大的基线,并激励轻量级和高效模型领域的进一步发展。

  • 卷积神经网络(CNNs)和视觉 Transformer(ViTs)在实际部署中计算成本高,轻量级模型虽被探索,但依赖自注意力或卷积进行 token 混合,存在局限:

    • 自注意力:易关注无关区域,感知与聚合范围一致,扩展上下文会增加计算复杂度;卷积:依赖固定核权重,对动态上下文不敏感,表现力有限。在有限计算资源下,设计更有效、高效的感知与聚合机制,平衡性能与效率。
  • 人类视觉遵循 “See Large, Focus Small” 双步机制:外周视觉通过杆体细胞实现大视野感知(“See Large”),捕捉场景概览;中央视觉通过锥体细胞实现小范围聚合(“Focus Small”),聚焦细节。该机制启发设计异尺度的感知与聚合过程,分别处理大范围上下文和小范围细节。

  • LS 卷积(Large-Small Convolution)大核感知(LKP):通过大核深度卷积(默认 Kₗ=7)捕捉宽范围空间关系,类似外周视觉;采用点卷积降低通道维度,控制计算成本;小核聚合(SKA):基于 LKP 结果生成动态权重,通过小核卷积(默认 Kₛ=3)和分组机制(默认 G=C/8)融合小范围内的相关特征,类似中央视觉;感知与聚合范围分离,兼顾大视野信息与细节融合,计算复杂度线性于输入分辨率

Related Work

  • 高效的CNN。在过去十年中,CNN已成为各种视觉任务中的基本网络架构。为了促进其实际应用,研究人员投入了大量精力设计轻量级和高效的网络。例如,MobileNet和Xception提出了利用深度可分离卷积的架构。MobileNetV2引入了具有线性瓶颈的反向残差块,以提高效率。ShuffleNet和ShuffleNetV2结合了信道混洗和信道分割操作,以增强组信息交换。硬件感知神经架构搜索(NAS)也被探索用于获得紧凑的视觉网络。同时,考虑到有限的接受域,一些工作探索了增强轻量级CNN建模长距离依赖关系的能力。例如,ParC-Net引入了位置感知循环卷积,以拥有全局感受野。AFFNet提出了通过圆形填充进行全局卷积的自适应频率滤波。

  • 高效的ViTs。后来,自视觉 Transformer 问世以来,基于 Transformer 的架构在计算机视觉领域得到了广泛的应用。ViTs已经适应了不同的视觉任务,并显示出卓越的性能。同时,已经努力提高效率,从而为实际部署提供了轻量级的ViT。例如,MobileViT 结合了MobileNet块和MHSA块,实现了混合架构。EdgeViT 提出将自注意力和卷积相结合,以实现具有成本效益的信息交换。此外,为了缓解推理瓶颈,EfficientFormer 提出了一种维度一致的设计范式,增强了延迟和性能的权衡。FastViT 引入了结构重新参数化和大核卷积来增强混合ViTs

  • 高效的 Token Mixing。CNN和ViT分别采用不同的令牌混合方式,即卷积和自我关注,以及不同的感知和聚合过程。在此基础上,为了开发轻量级的视觉网络,研究人员探索了不同的有效令牌混合方式进行空间信息交换。例如,对于卷积,Involution利用MLP进行感知,得出以单个像素为条件的聚合权重。CondConv提出了具有全局上下文的每个示例路由,以线性组合多个卷积核。对于自我注意,EdgeNeXt提出了分割深度转置注意(SDTA)来混合多尺度特征。PVTv2采用线性空间缩减注意力(LSRA)来实现注意力层的线性计算复杂度。EfficientViT设计了级联组注意力,以有效提高能力。

Methodology

  • LSNet 受人类视觉 “外周大视野感知、中央小范围聚合” 启发,技术上通过 LS 卷积实现:大核感知(LKP)模拟外周视觉,用大核深度卷积捕捉宽范围上下文(如 Kₗ=7);小核聚合(SKA)模拟中央视觉,基于 LKP 结果的小核动态卷积(如 Kₛ=3)自适应融合小范围相关特征,两者范围分离,兼顾效率与细节。
  • 传统卷积用固定核权重,自注意力感知与聚合范围一致;LS 卷积创新在于:① 感知(大核静态)与聚合(小核动态)范围分离,分别处理全局与细节;② 聚合权重由感知结果动态生成,适应不同上下文;③ 结合深度卷积和分组机制,保持低计算复杂度,解决传统方法 “低效或表现力不足” 的问题。

Revisiting Self-Attention and Convolution

  • 自我关注和卷积是现有轻量级网络中建模视觉特征的两种突出的标记混合方式。对于输入图像,给定其特征映射 X∈RH×W×CX∈\R^{H×W×C}XRH×W×C,其中H×W是空间分辨率,C是通道数,令牌混合基于其上下文区域N(xi)为每个令牌 xi∈RCx_i∈\R^CxiRC生成特征表示 yi∈RCy_i∈\R^CyiRC

    • KaTeX parse error: Undefined control sequence: \label at position 79: …hcal {N}(x_i)) \̲l̲a̲b̲e̲l̲ ̲{eq:mixing}, (1…

    • 其中P表示感知,涉及提取上下文信息并捕获令牌之间的关系,A表示聚合,基于感知结果整合特征,并能够合并来自其他令牌的信息。

  • 在自注意中,它的感知 PatternP_{attern}Pattern 通过softmax归一化后的成对相关性获得xi和X之间的注意得分。它的聚合Aattn 通过注意力得分对X的特征进行加权,得到yi。如图2(a)所示,该过程可以概括为:

    • KaTeX parse error: Undefined control sequence: \label at position 170: …W_q)(XW_k)^T), \̲l̲a̲b̲e̲l̲ ̲{eq:attention} …

    • 其中Wq、Wk和Wv是投影矩阵。可以观察到,Patten和Aattn在信息量较小的区域涉及冗余的注意力和过度的聚集,限制了轻量级模型的有效性。此外,对于xi来说,它们在相同的语境尺度下运作。当增加混合范围N(xi)时,这种高标度特性导致显著的计算复杂性,在低计算预算下扩展感知上下文带来挑战。因此,现有轻量级模型中的自我关注及其变体难以在有限的计算成本下实现表示能力和效率之间的最佳平衡

    • 在这里插入图片描述

    • 图2:自我注意、卷积和LS卷积的比较。

  • 对于与K的核大小的卷积,上下文区域是以xi为中心的大小为K×K的邻域,表示为NK(xi)。感知Pconv利用xi和NK(xi)之间的相对位置来导出聚合权重。对于每个 xj∈NK(xi)x_j∈N_K(x_i)xjNKxi,其聚合权重是固定卷积核权重Wconv中相应相对位置的值。聚合Aconv然后利用权重对NK(xi)中的特征进行卷积。如图2(b)所示,整个过程可以表述为:

    • yi=Aconv(Pconv(xi,NK(xi)),NK(xi))=Pconv(xi,NK(xi))⊛NK(xi);(4)Pconv(xi,NK(xi))=Wconv,(5)y_i = \mathcal {A}_{conv}(\mathcal {P}_{conv}(x_i, \mathcal {N}_{K}(x_i)), \mathcal {N}_{K}(x_i)) \\ = \mathcal {P}_{conv}(x_i, \mathcal {N}_{K}(x_i)) \circledast \mathcal {N}_{K}(x_i); (4)\\ \mathcal {P}_{conv}(x_i, \mathcal {N}_{K}(x_i)) = W_{conv}, (5) yi=Aconv(Pconv(xi,NK(xi)),NK(xi))=Pconv(xi,NK(xi))NK(xi);(4)Pconv(xi,NK(xi))=Wconv,(5)

    • 其中⊛表示卷积运算。可以观察到,卷积中的令牌混合范围由核大小K决定,对于轻量级模型来说,核大小K通常很小,因此导致感知范围有限。此外,由感知Pconv建模的令牌之间的关系,即聚合权重,仅取决于相对位置,因此对所有令牌都是共享和固定的。它阻止了令牌适应其相关的上下文,限制了表达能力。考虑到轻量级网络固有的小建模能力,这种限制变得尤为明显。

LS (Large-Small) Convolution

  • 受人类视觉系统表现出的动态异尺度视觉能力的启发,我们为感知和聚合过程引入了一种新的“看大,聚焦小”策略,旨在在轻量级模型中实现高效和有效的令牌混合,如图2.(c)所示。我们的方法能够有效地收集全面的上下文信息,并通过大范围感知对关系进行建模。它通过小场聚合在高度相关的环境中进行高效融合,进一步促进了详细的视觉表示。具体而言,对于表征xi,感知和聚合的上下文区域分别为NP(xi)和NA(xi),其中NP(xi)与NA(xi)相比包含更大的空间范围,该过程可以公式化为:

    • KaTeX parse error: Undefined control sequence: \label at position 82: …al {N}_A(x_i)) \̲l̲a̲b̲e̲l̲ ̲{eq:ls}. (6)
  • 可以观察到(1)感知P和聚合A分别涉及不同的上下文范围,即NP(xi)和NA(xi),从而允许利用异质尺度上下文信息并捕获总体上下文和细粒度细节。(2)对于具有较大空间范围的感知,可以采用成本效益高的操作,如大核深度卷积。因此,可以以最小的开销扩大感知上下文。(3)对于周围区域较小的聚集,我们可以采用自适应加权特征求和。由于聚合的范围有限,可以以较低的计算成本保证效率,并且可以减轻自我关注中不太重要的聚合。

  • 在此基础上,我们提出了一种新的LS(大-小)卷积。如图3(a)所示,对于每个标记,它引入了两个步骤:(1)大核感知Pls通过大核静态卷积来模拟与扩大的感受野的邻域关系。(2)小核聚合Als通过小核动态卷积自适应地整合周围特征。

    • 在这里插入图片描述

    • 图3。(a)我们提出的LS卷积的说明。(b)我们提出的LSNet的说明。LSNet有四个阶段,分别具有 H8×W8、H16×W16、H32×W32和H64×W64\frac H 8×\frac W 8、\frac H{16}×\frac W{16}、\frac H{32}×\frac W{32}和\frac H{64}×\frac W{64}8H×8W16H×16W32H×32W64H×64W 分辨率,其中H和W表示输入图像的宽度和高度。C代表通道尺寸。为了简单起见,省略了范数层和非线性。

  • 大内核感知(LKP)采用了大内核瓶颈块的设计。给定视觉特征图 X∈RH×W×CX∈\R^{H×W×C}XRH×W×C,我们最初利用逐点卷积(PW)将标记投影到较低的通道维度,即默认的C2,以降低计算成本并使模型尽可能轻量化。对于xi,我们使用核大小为 KL×KLK_L×K_LKL×KL 的大核深度卷积(DW)来有效地捕获 NKL(xi)N_{KL}(x_i)NKLxi 的大场空间上下文信息,其中 NKL(xi)N_{KL}(x_i)NKLxi 表示以xi为中心的KL×KL大小的周围环境。大核DW可以在最小的成本下很好地扩展接受域并增强上下文感知能力。然后,我们利用逐点卷积(PW)来建模令牌之间的空间关系,即为聚合步骤生成上下文自适应权重 W∈RH×W×DW∈\R^{H×W×D}WRH×W×D。整个过程可以表述为:

    • wi=Pls(xi,NKL(xi))=PW(DWKL×KL(PW(NKL(xi)))),(7)\begin {split} w_i & = \mathcal {P}_{ls}(x_i, \mathcal {N}_{K_L}(x_i)) \\ & = \text {PW}(\text {DW}_{K_L \times K_L}(\text {PW}(\mathcal {N}_{K_L}(x_i)))), \end {split} (7) wi=Pls(xi,NKL(xi))=PW(DWKL×KL(PW(NKL(xi)))),(7)

    • 其中 wi∈RDw_i∈\R^DwiRD 是 xi 的生成权重。

  • 小核聚合(SKA)采用分组动态卷积的设计。对于视觉特征图 X∈RH×W×CX∈\R^{H×W×C}XRH×W×C,我们将其通道划分为G组。每个包含 CG\frac C GGC 通道的组和同一组中的通道共享聚合权重,以减少轻量级模型的内存开销和计算成本。对于每个xi,我们对其由大核感知生成的相应权重 wi∈RDw_i∈\R^DwiRD 进行整形,以获得 wi∗∈RG×KS×KSw^∗_i∈\R^{G×K_S×K_S}wiRG×KS×KS,其中KS×KS是小核大小。

  • 然后,我们利用 wi∗w^*_iwi 来聚合其与 NKS(xi)高度相关的上下文,其中NKS(xi)表示以 xi 为中心的大小为KS×KS的邻域。具体而言,我们将 xi 的第 c 通道表示为 xicx_{ic}xic,其属于第 g 通道组。我们通过 NKS(xic)N_{KS}(x_{ic})NKSxicwig∗∈RKS×KSw^*_{ig}∈\R^{KS×KS}wigRKS×KS 之间的卷积运算获得了它的聚合特征表示 yicy_{ic}yic。通过这种方式,可以有效地表示自适应细粒度特征,使模型对不同环境中的动态和复杂变化敏感。整个过程可以表述为:

    • KaTeX parse error: Undefined control sequence: \label at position 114: …_{K_S}(x_{ic}) \̲l̲a̲b̲e̲l̲ ̲{eq:ska}. (8)

    • 与简单地将大核与小核卷积和其他动态卷积相结合相比,我们的LKP利用丰富的大视场视觉感知来指导SKA在高度相关的上下文中进行自适应特征融合。这使得能够对复杂的视觉信息进行更具辨别力的表示。因此,如表6和表7所示,LS-conv显示出优于它们的优势。我们还在补充中从数学角度进行了比较。

  • 复杂性分析。LS卷积的计算主要由三部分组成:Pls中的逐点卷积、Pls中KL核大小的深度卷积和Als中KS核大小的卷积聚合。它们的相应计算分别为 O(3HWC24+HWCD2)、O(HWCKL22)和O(HWCKS2)O(\frac {3HW C^2} 4+\frac {HW CD} 2)、O(\frac{HW CK^2_ L} 2)和O(HWCK^2_S)O43HWC2+2HWCD)、O2HWCKL2)和OHWCKS2。因此,总量为 O(HWC4(3C+2KL2+(2G+4)KS2)O(\frac{HW C} 4(3C+2K^2_L+(2G+4)K^2_S)O4HWC3C+2KL2+2G+4KS2,相对于输入分辨率具有线性计算复杂度。

LSNet: Large-Small Network

  • 使用LS卷积作为主要操作,我们提出了基本块,即LS块,以及轻量级模型设计,即LSNet,如图3.(b)所示。LS Block利用LS卷积来执行有效的令牌混合。采用跳跃连接,便于模型优化。此外,我们利用额外的深度卷积和SE层通过引入更多的局部电感偏置来增强模型能力。信道混频采用前馈网络(FFN)。

  • LSNet利用重叠补丁嵌入将输入图像投影到视觉特征图中。对于下采样,我们分别利用深度卷积和点卷积来降低空间分辨率和调制信道维度。此外,我们将LS块堆叠在前三个阶段。在最后一个阶段,由于分辨率较低,我们采用MSA块来捕获长程依赖关系。MSA块结合了多头自注意(MHSA),我们利用相同的深度卷积和SE层来引入更多的局部结构信息,如LS块

  • 我们为不同的计算预算构建了三种LSNet变体。小尺寸LSNet(LSNet-T)、小尺寸LSNet-S和基本尺寸LSNet-B的FLOP分别为0.3G、0.5G和1.3G。我们在后期使用了更多的块,因为在早期阶段以更高的分辨率进行处理更耗时。根据经验,我们默认情况下对所有模型变量使用KL=7、KS=3和G=C8。

Experiments

Image Classification

  • 我们在ImageNet-1K 上进行了与[Adaptive frequency filters as efficient global token mixers,Efficientvit, Edgevits]相同的训练配方下的实验,以评估LSNet在图像分类任务上的性能。

  • 如表1所示,我们注意到LSNet在各种计算成本下始终达到最先进的性能。此外,它还显示了准确性和推理速度之间的最佳权衡。例如,我们的LSNet-B的top-1精度比高级AFFNet高出0.5%,推理速度快了近3倍。它还分别以0.9%和1.2%的top-1准确率和更高的效率超越了RepViT-M1.1和FastViT-T12。对于较小的模型,我们的LSNet也以较低的计算成本获得了卓越的性能。具体来说,LSNetS的top-1精度分别比UniRepLKNet-A和FasterNet-T1高出0.8%和1.6%,同时吞吐量也更高。与StarNet-S1和EfficientViT-M3相比,LSNet-T的top-1精度也分别提高了1.4%和1.5%。这些结果很好地证明了我们的LSNet模型的有效性和效率

    • 在这里插入图片描述

    • 表1。ImageNet-1K上的分类结果。吞吐量在Nvidia RTX3090上进行了测试,其最大功率为两个适合内存的批处理大小。*表示使用RegNetY-16GF 作为教师模型进行蒸馏的结果,top-1准确率为82.9%。EFormer表示EfficientFormer。

Downstream Tasks

  • 对象检测和实例分割。我们评估了LSNet在对象检测和实例分割任务上的表现,以验证其可转移性。我们将LSNet集成到RetinaNet和Mask R-CNN中,并在COCO-2017上进行实验。如表2所示,与竞争对手的型号相比,我们的LSNet始终表现出卓越的性能。具体来说,在用于物体检测的RetinaNet框架中,LSNet-T在显著降低计算成本的情况下,比StarNet-S1高出0.6 AP和1.3 AP50。对于大型型号,我们的LSNet-B也超越了PoolFormer-S12和PVT Tiny,分别具有3.0 AP和2.5 AP的可观利润。当集成到Mask R-CNN框架中用于对象检测和实例分割时,LSNet-S分别比SHViT-S3和EfficientViT-M5获得了0.5 APb和2.5 APb的有利改进。与RepViTM1.1相比,LSNet-B的APb和APm也分别提高了1.0和0.6,证明了其在 transferring 方面的优势。

    • 在这里插入图片描述

    • 表2。COCO上的对象检测和实例分割结果。APb和APm分别表示边界框AP和掩码AP。按照惯例,骨干网的FLOP(G)是在512×512的图像裁剪上测量的。

  • 语义分割。我们通过在ADE20K上进行实验来评估LSNet在语义分割任务上的表现。我们将LSNet纳入语义FPN分割模型。如表3所示,LSNet在不同模型尺度的所有比较中表现明显更好。它可以在低计算成本下实现卓越的性能。具体来说,LSNet-T的表现明显优于VAN-B0 1.6 mIoU,并且比PVTv2-B0高出2.9 mIoU。对于较大的模型,LSNet-S分别比先进的RepViT-M1.1和SHViT-S3提高了0.4 mIoU和1.0 mIoU,计算复杂度更低。此外,LSNet-B分别以1.6和2.0 mIoUs的优势超过了SwiftFormer-L1和FastViT-SA24。这些结果进一步证明了LSNet的有效性。

    • 在这里插入图片描述

    • 表3。ADE20K上的语义切分。在512×512的图像裁剪上测量骨干网的FLOP(G)。

Robustness Evaluation

  • 我们在各种基准上对LSNet进行了鲁棒性评估,包括ImageNet-C、ImageNet-A、ImageNet-R和ImageNet Sketch。我们报告了ImageNet-C的平均损坏误差(越低越好)和其他数据集的前1精度。如表4所示,LSNet显示出强大的域泛化能力和对损坏的鲁棒性,实现了最先进的性能。例如,与UniRepLKNet-A相比,LSNet-B在ImageNet-C上减少了1.3 mCE,在ImageNet-A、ImageNet-R和ImageNet Sketch上分别获得了1.2%、1.5%和1.5%的前1精度增益。LSNetT在ImageNet-A和ImageNet Sketch上的表现也分别显著优于StarNet-S1 2.2%和3.7%,突出了其强大的泛化能力。
    • 在这里插入图片描述

    • 表4。基准数据集的稳健性评估结果,其中我们报告了ImageNet-C的mCE和ImageNet-A、ImageNet-R和ImageNet Sketch的前1精度。

Model Analyses

  • 我们在ImageNet-1K上进行实验来分析LSNet中的设计元素。由于训练时间和计算资源的限制,所有模型都训练了100个迭代周期。LSNet-T用于分析,默认情况下KL=7,KS=3,C/G=8。

  • LS卷积的有效性。我们通过首先将我们提出的LS卷积与“w/o LS conv.”进行比较来分析其有效性,在“w/o LS-conv.”中,所有LS卷积都被恒等函数替换。如表5所示,与“无LS卷积”相比,我们的LS卷积提高了2.3%的top-1精度,仅增加了0.02G的FLOP。此外,我们通过直接用其他方法替换所有LS卷积,将我们的LS卷积与其他有效的令牌混合方法进行了比较。

    • 在这里插入图片描述

    • 表5。LS控制器的优越性。

  • 如表5所示,LS卷积以较低的计算成本实现了卓越的性能。通过采用其他方法,top-1的准确度持续下降。与(S)W-SA、SDTA和LSRA相比,LS卷积在FLOP较少的情况下,top-1精度分别提高了0.8%、1.0%和1.1%。此外,LS卷积的top-1精度分别比RepMixer和CGA高出1.9%和1.1%。同时,我们通过简单地替换LS卷积,将我们的LS卷积与其他动态卷积进行了比较。如表6所示,由于结合了大场感知和小场聚集,LS卷积在准确性和效率方面比其他方法更具优势。例如,LS卷积在top-1精度上分别以1.8%和1.6%的幅度超过了CondConv和DYConv,很好地显示了其有效性。

    • 在这里插入图片描述

    • 表6。比较其他conv。

  • 大内核感知的重要性。我们通过首先将其与“w/o LKP”进行比较来验证大核感知(LKP)的效果,其中我们去除了LKP中的大核深度卷积。如表7所示,我们可以观察到,在没有大视场感知的情况下,top-1的准确率显著降低了1.1%。我们进一步研究了LKP中大内核大小(即KL)的影响。如表7所示,随着内核大小的增大,模型性能继续提高,这表明了用大接受域捕获上下文信息的好处。此外,top-1精度在核大小为7左右达到饱和点,这与之前工作中的观察结果相似。

    • 在这里插入图片描述

    • 表7。LKP和SKA。

  • 小内核聚合的重要性。我们首先将小核聚合(SKA)与“w/o SKA”进行比较,展示了它的重要性,在“w/o”中,我们利用KS×KS核大小的静态深度卷积来直接处理LKP的结果作为输出。请注意,“w/o SKA”是大核和小核卷积的组合。表7显示了比较结果。我们可以观察到,我们的LS卷积在top-1精度上明显优于“w/o SKA”1.5%。它突出了我们的LS卷积相对于大核和小核卷积的简单组合的优越性。此外,我们通过在SKA中采用不同的KS来检查聚合的上下文范围,即NKS(xi)的影响。如表7所示,在KS为3的情况下,我们可以实现精度和计算成本之间的最佳权衡。它证明了适应性聚集在高度相关环境中的有效性。

  • 群体数量的影响。我们检查了LS conv中不同数量的组(即G)的影响。随着G的增加,具有共享聚合权重(即C G)的信道数量减少,计算成本增加。如表8所示,随着 CG\frac C GGC 从1增加到32,top-1精度从71.7%降低到70.9%,同时计算复杂度也降低了。它显示了对不同信道执行不同聚合方式的好处,因为它们通常编码不同的表示子空间和不同的语义属性。此外,我们可以观察到, CG=8\frac C G=8GC=8 达到了最佳平衡。

    • 在这里插入图片描述

    • 表8。其他设计。

  • 额外DW和SE层的影响。我们通过分别去除额外的深度卷积和SE层来验证它们的效果,分别表示为“w/o DW”和“w/o SE”。在表8中,它们分别将top-1的准确性降低了0.5%和0.3%,表明了引入更多局部结构信息的有效性。

  • 将LS卷积推广到其他架构。我们通过将LS卷积转移到其他视觉网络来展示它的泛化。具体来说,我们在两种广泛认可的架构上进行了实验,即ResNet和DeiT,分别简单地将它们的所有3×3卷积和自我注意替换为LS卷积。所有模型都在相同的设置下训练了300个迭代周期。如表9所示,将LS卷积结合到ResNet50和DeiT-T中,分别将其top-1精度显著提高了1.9%和0.8%,这展示了其良好的泛化能力。

    • 在这里插入图片描述

    • 表9。LS卷积在其他架构上的泛化能力。我们简单地将ResNet和DeiT的3×3卷积和自注意分别替换为LS卷积。

Conclusion

  • 在这项工作中,我们提出了LSNet,这是一个新的轻量级视觉网络家族,它集成了受人类视觉系统启发的“看大,聚焦小”策略。LSNet结合了LS卷积,这是一种结合了大核感知和小核聚合的新操作,能够高效准确地处理视觉信息。大量实验表明,LSNet实现了最先进的性能和效率权衡。它显示了在不同任务中优于其他人的优势。我们希望LSNet可以作为一个强大的基线,并激励在开发轻量级和高效的视觉网络方面取得进一步进展。

A. Implementation and Architectural Details

A.1. Implementation Details
  • 对于ImageNet-1K上的图像分类。具体来说,我们采用224×224的标准图像大小进行训练和测试。所有模型都从头开始训练了300个迭代周期。我们使用带有余弦学习率调度器的AdamW优化器。初始学习率设置为4×10−3,总批大小设置为2048。对于数据增强,我们利用mixup、RandAugment、CutMix和随机擦除等。表10提供了LSNet的训练细节。

    • 在这里插入图片描述

    • 表10。ImageNet-1K上的训练细节。

  • 对于COCO-2017上的对象检测和实例分割。具体来说,我们利用AdamW优化器,对模型进行12个迭代周期的训练,批量大小为16。训练分辨率为1333×800,初始学习率设置为2×10−4。学习率在第8个和第11个历元以0.1的速率衰减。我们使用预训练的ImageNet-1K权重初始化主干。

  • 对于ADE20K上的语义分割,所有模型都由AdamW优化器进行40K迭代训练,批量大小为32。我们采用幂为0.9的多学习率调度,初始学习率为2×10−4。我们采用512×512的训练分辨率,并在ADE20K验证集上报告单尺度测试结果。骨干模型使用ImageNet-1K上的预训练权重进行初始化。

  • 为了进行稳健性评估,我们采用了ImageNet-C、ImageNet-A、ImageNetR 和ImageNet Sketch基准测试。具体来说,ImageNet-C由应用于ImageNet测试集的算法生成的损坏组成。ImageNet-A包含被ResNets错误分类的自然发生的示例。ImageNet-R包括ImageNet中对象类的自然呈现,结合了各种纹理和图像统计信息。ImageNet Sketch包括通过谷歌图像查询收集的所有ImageNet类的白色和黑色草图。

A.2. Architectural Details
  • 表11显示了LSNet变体的架构细节,这些变体通过每个阶段内的块数和通道数来区分。
    • 在这里插入图片描述

    • 表11。LSNet变体的架构细节。

B. More Comparisons

  • 我们从数学的角度对LS卷积和其他卷积进行了更多的比较。具体来说,对于简单地将大核与小核卷积相结合,它遵循与标准卷积类似的感知Pconv和聚合Aconv过程,即利用相对位置进行关系建模,利用静态核权重进行特征集成。

  • 然而,与LS卷积相比,由于缺乏对不同上下文的适应性,它的建模能力有限。在其他动态方式中,Involution 利用MLP进行感知Pinv,以导出以xi为条件的聚合权重。它的聚合Ainv然后使用权重将NK(xi)中的特征与 yi=Ainv(Pinv(xi),NK(xi))=MLP(xi)⊛NK(xi)y_i=A_{inv}(P_{inv}(x_i),N_K(x_i))=MLP(x_i)⊛N_K(x_i)yiAinvPinvxi),NKxi))=MLPxiNKxi 的过程进行卷积。虽然聚合过程是动态的,但其感知过程仅限于xi,这导致与LS卷积相比,邻域关系建模不足。此外,CondConv提出了具有全局平均池和MLP的每个示例路由,以线性组合多个卷积核,用于其感知Pcond中的聚合权重。其聚合Acond然后将NK(xi)中的特征与权重进行卷积。它的过程 yi=Acond(Pcond(X),NK(xi))y_i=A_{cond}(P_{cond}(X),N_K(x_i))yi=AcondPcondX),NKxi)) 可以公式化为 yi=(∑MLP(GAP(X))⋅Wcond)⊛NK(xi)y_i=(\sum MLP(GAP(X))·W_{cond})⊛N_K(x_i)yi=MLPGAPX))WcondNKxi。然而,与LS卷积不同,CondConv利用了依赖于示例的感知,这阻止了不同的令牌适应不同的上下文。

C. Qualitative Analyses

C.1. Analyses for LS Convolution
  • 我们通过可视化分析定性地展示了LS卷积的有效性。具体来说,我们基于LSNet-T,采用有效感受野方法将LS卷积与卷积和自我注意进行比较。我们分别介绍了最先进的RepMixer和CGA作为卷积和自我注意力的代表。此外,我们只是将模型中的所有LS卷积替换为其他卷积。如图4所示,RepMixer和CGA分别受到静态卷积核和基于窗口的自我关注引起的不自然模式的影响。相比之下,LS卷积具有中心区域聚焦和广泛的外围观察,显示出平滑的视觉处理。同时,与去除LKP中大核深度卷积的“w/o LKP”相比,LS卷积表现出更大的有效感受野。这归因于LKP有效捕获广泛上下文信息的能力。

    • 在这里插入图片描述

    • 图4。有效感受野的可视化。(a)和(b)显示,RepMixer和CGA在有效感受野中表现出不自然的模式。(c)说明LS卷积能够同时实现广泛的外围感知和中心视图聚焦。(d)表明,与(c)相比,没有LKP,LS卷积的感受野较小,表明LKP的有效性。

  • 此外,我们对LS卷积中的聚合权重进行了可视化。具体来说,我们获得了每个令牌在其参与的所有聚合过程中对应的聚合系数的累积值。然后,我们在第三阶段可视化最后一层中所有通道的绝对值的平均值,并进行上采样以供显示。如图5所示,SKA的聚合权重具有良好的可解释性。

    • 在这里插入图片描述

    • 图5。LS卷积中聚合权重的可视化。第二行显示聚合权重与语义相关区域具有良好的相关性。第三行表明,集成LKP使LS卷积能够捕获具有改进上下文信息的更精确的视觉模式。

  • 它们有效地增强了语义相关的视觉区域,并准确地捕获了图像中的判别模式。此外,与“无LKP”相比,LS卷积更精确地强调了重要的视觉区域,展示了LKP对空间关系的改进建模。基于LKP和SKA,LS卷积可以帮助模型在有限的计算成本下掌握关键的视觉信息,从而提高效率和有效性。

  • 此外,我们还将LKP和SKA生成的特征图可视化,以便进行更多检查。具体来说,我们在第一阶段使用大核深度卷积和小核动态卷积后的特征进行演示。如图6所示,LKP生成的特征图表现出广阔的接受域,捕获了场景中广泛的上下文信息。这一特征让人联想到人类的周边视觉系统,擅长感知周围的环境。另一方面,基于LKP,SKA进一步展示了在图像中捕捉更精细细节的能力。它可以产生更微妙的特征,如头发的渐变和清晰的轮廓。这种行为类似于人类的中央视觉系统,它擅长辨别精细的细节和高分辨率的信息。得益于它们,LS卷积可以很好地帮助模型实现有效和高效的感知和聚合过程。

    • 在这里插入图片描述

    • 图6。LKP和SKA特征图的可视化。每个部分的第二列显示了LKP可以包含场景的广阔视图。每个部分的第三列表明,基于LKP,SKA可以进一步掌握更微妙的特征和详细的模式。

C.2. Analyses for Downstream Tasks
  • 我们展示了将LSNet集成到Mask RCNN框架中用于对象检测和实例分割任务,以及集成到Semantic FPN框架中用于语义分割任务时的定性结果。如图7所示,该模型可以实现对不同图像中实例的精确检测和分割。此外,如图8所示,该模型展示了生成高质量语义分割掩码的能力。
    • 在这里插入图片描述

    • 图7。COCO-2017上对象检测和实例分割的定性结果。

    • 在这里插入图片描述

    • 图8。ADE20K上语义分割的定性结果。上排显示了 GT 掩模,下排显示了预测掩模。

D. Contribution, Limitation

  • 总之,我们的贡献有三方面,具体如下:

    • 我们提倡一种新的策略“看大,聚焦小”,灵感来自人类视觉系统,用于轻量级和高效的网络设计。通过包含广泛的感知范围和丰富的上下文信息,它有助于集中特征聚合,促进详细的视觉理解。

    • 我们提出LS卷积作为一种在轻量级模型中建模视觉特征的新操作。LS卷积集成了大核感知和小核聚合,通过有效和高效的感知和聚合过程实现了对视觉信息的熟练处理。

    • 我们提出了一种新的轻量级视觉网络家族,即LSNet,它建立在LS卷积之上。大量实验表明,与其他轻量级网络相比,LSNet在广泛的视觉任务中实现了最先进的性能和效率权衡。

  • 限制。由于计算资源有限,我们不会将LSNet的应用扩展到其他场景,如视觉语言任务或无监督学习。出于同样的原因,我们没有在大规模数据集上研究LSNet的预训练,例如ImageNet-21K。然而,我们热衷于在未来探索LSNet的更多应用。

  • 本文借鉴人类 “先看整体、再盯细节” 的视觉习惯,设计了 “大核感知 + 小核聚合” 的融合方式:

    • 大尺度信息捕捉(像用广角镜看全景):先用大尺寸的卷积核(比如 7×7)“扫描” 图像,捕捉大范围的上下文关系,比如一张照片中 “天空在上方、地面在下方” 这种整体布局,类似人类用 peripheral vision( peripheral vision:外周视觉)快速掌握场景全貌。
    • 小尺度信息聚焦(像用放大镜看细节):在大尺度信息的 “指导” 下,用小尺寸的卷积核(比如 3×3)重点融合局部相关的细节,比如根据 “天空在下” 的整体信息,聚焦融合 “云朵的边缘”“阳光的光斑” 这些小范围特征,类似人类用 central vision( central vision:中央视觉)盯着细节看。
  • 模型实现:在lsnet/detection/model/lsnet.pylsnet/segmentation/model/lsnet.py文件中,实现了 LSNet 模型,其中LSConv类体现了 LS 卷积的思想。LSConv类中包含LKP(大核感知部分)和SKA(小核聚合部分),与论文中提出的 LS 卷积结构相呼应。

    • class LSConv(nn.Module):def __init__(self, dim):super(LSConv, self).__init__()self.lkp = LKP(dim, lks=7, sks=3, groups=8)self.ska = SKA()self.bn = nn.BatchNorm2d(dim)def forward(self, x):return self.bn(self.ska(x, self.lkp(x))) + x
      
    • 仓库的主要目录结构包含了不同任务的子目录以及一些通用的文件和脚本,如下所示:

    • lsnet/
      ├── .gitignore
      ├── README.md
      ├── README_robustness.md
      ├── engine.py
      ├── eval.sh
      ├── eval_robust.sh
      ├── flops.py
      ├── losses.py
      ├── main.py
      ├── requirements.txt
      ├── robust.py
      ├── robust_utils.py
      ├── speed.py
      ├── train.sh
      ├── utils.py
      ├── detection/
      ├── segmentation/
      ├── model/
      ├── logs/
      ├── data/
      ├── figures/
      
    • 通用文件和脚本:main.py:用于模型的训练和测试,提供了分布式训练的支持。requirements.txt:列出了项目所需的 Python 依赖库。speed.py:用于测试模型的吞吐量。flops.py:可能用于计算模型的浮点运算次数(FLOPs)。

    • 检测任务(detection/):基于MMDetection实现目标检测和实例分割任务。detection/model/lsnet.py:定义了用于检测任务的 LSNet 模型。detection/configs/:包含检测任务的配置文件,如deepfashion.py定义了 DeepFashion 数据集的配置。

    • 分割任务(segmentation/):基于MMSegmentation实现语义分割任务。segmentation/model/lsnet.py:定义了用于分割任务的 LSNet 模型。segmentation/logs/:包含训练和测试的日志文件,如lsnet_t_semfpn.json和lsnet_b_semfpn.json记录了训练过程中的损失和准确率等信息。

  • LSNet网络的整体结构构建。首先通过patch_embed将输入图像进行块嵌入,然后根据不同的阶段和深度构建多个Block,每个阶段之间可能会有下采样和通道调整操作。最后根据是否使用蒸馏学习,构建相应的分类头。

    • class LSNet(torch.nn.Module):def __init__(self, img_size=224,patch_size=16,in_chans=3,num_classes=1000,embed_dim=[64, 128, 192, 256],key_dim=[16, 16, 16, 16],depth=[1, 2, 3, 4],num_heads=[4, 4, 4, 4],distillation=False,):super().__init__()# 图像块嵌入层,将输入图像转换为嵌入向量resolution = img_sizeself.patch_embed = torch.nn.Sequential(Conv2d_BN(in_chans, embed_dim[0] // 4, 3, 2, 1), torch.nn.ReLU(),Conv2d_BN(embed_dim[0] // 4, embed_dim[0] // 2, 3, 2, 1), torch.nn.ReLU(),Conv2d_BN(embed_dim[0] // 2, embed_dim[0], 3, 2, 1))# 计算注意力比率resolution = img_size // patch_sizeattn_ratio = [embed_dim[i] / (key_dim[i] * num_heads[i]) for i in range(len(embed_dim))]# 构建不同阶段的块self.blocks1 = nn.Sequential()self.blocks2 = nn.Sequential()self.blocks3 = nn.Sequential()self.blocks4 = nn.Sequential()blocks = [self.blocks1, self.blocks2, self.blocks3, self.blocks4]# 循环构建每个阶段的块for i, (ed, kd, dpth, nh, ar) in enumerate(zip(embed_dim, key_dim, depth, num_heads, attn_ratio)):for d in range(dpth):blocks[i].append(Block(ed, kd, nh, ar, resolution, stage=i, depth=d))if i != len(depth) - 1:blk = blocks[i+1]resolution_ = (resolution - 1) // 2 + 1# 下采样层blk.append(Conv2d_BN(embed_dim[i], embed_dim[i], ks=3, stride=2, pad=1, groups=embed_dim[i]))# 通道调整层blk.append(Conv2d_BN(embed_dim[i], embed_dim[i+1], ks=1, stride=1, pad=0))resolution = resolution_# 分类头self.head = BN_Linear(embed_dim[-1], num_classes) if num_classes > 0 else torch.nn.Identity()self.distillation = distillationif distillation:self.head_dist = BN_Linear(embed_dim[-1], num_classes) if num_classes > 0 else torch.nn.Identity()self.num_classes = num_classesself.num_features = embed_dim[-1]
      
  • Block类是LSNet中的基本构建块,根据深度和阶段的不同,选择不同的混合器模块(RepVGGDWAttentionLSConv),并在最后使用前馈网络模块。

    • class Block(torch.nn.Module):    def __init__(self,ed, kd, nh=8,ar=4,resolution=14,stage=-1, depth=-1):super().__init__()if depth % 2 == 0:# 偶数深度使用RepVGGDW和SE模块self.mixer = RepVGGDW(ed)self.se = SqueezeExcite(ed, 0.25)else:self.se = torch.nn.Identity()if stage == 3:# 第三阶段使用多头自注意力模块self.mixer = Residual(Attention(ed, kd, nh, ar, resolution=resolution))else:# 其他阶段使用LSConv模块self.mixer = LSConv(ed)# 前馈网络模块self.ffn = Residual(FFN(ed, int(ed * 2)))def forward(self, x):return self.ffn(self.se(self.mixer(x)))
      
    • 输入特征x首先通过mixer模块进行特征混合,然后通过se模块进行通道注意力调整(在某些情况下se为恒等映射),最后通过ffn模块进行前馈处理。整个过程是一个顺序的信息融合过程。

  • MSA 模块信息处理过程解析,Attention类实现了多头自注意力(MSA)模块:

    • class Attention(torch.nn.Module):def __init__(self, dim, key_dim, num_heads=8,attn_ratio=4,resolution=14):super().__init__()self.num_heads = num_headsself.scale = key_dim ** -0.5self.key_dim = key_dimself.nh_kd = nh_kd = key_dim * num_headsself.d = int(attn_ratio * key_dim)self.dh = int(attn_ratio * key_dim) * num_headsself.attn_ratio = attn_ratioh = self.dh + nh_kd * 2# 线性变换得到Q、K、Vself.qkv = Conv2d_BN(dim, h, ks=1)# 投影层self.proj = torch.nn.Sequential(torch.nn.ReLU(), Conv2d_BN(self.dh, dim, bn_weight_init=0))# 深度卷积层self.dw = Conv2d_BN(nh_kd, nh_kd, 3, 1, 1, groups=nh_kd)# 计算注意力偏移索引points = list(itertools.product(range(resolution), range(resolution)))N = len(points)attention_offsets = {}idxs = []for p1 in points:for p2 in points:offset = (abs(p1[0] - p2[0]), abs(p1[1] - p2[1]))if offset not in attention_offsets:attention_offsets[offset] = len(attention_offsets)idxs.append(attention_offsets[offset])self.attention_biases = torch.nn.Parameter(torch.zeros(num_heads, len(attention_offsets)))self.register_buffer('attention_bias_idxs',torch.LongTensor(idxs).view(N, N))@torch.no_grad()def train(self, mode=True):super().train(mode)if mode and hasattr(self, 'ab'):del self.abelse:self.ab = self.attention_biases[:, self.attention_bias_idxs]def forward(self, x):B, _, H, W = x.shapeN = H * W# 得到Q、K、Vqkv = self.qkv(x)q, k, v = qkv.view(B, -1, H, W).split([self.nh_kd, self.nh_kd, self.dh], dim=1)q = self.dw(q)q, k, v = q.view(B, self.num_heads, -1, N), k.view(B, self.num_heads, -1, N), v.view(B, self.num_heads, -1, N)# 计算注意力分数attn = (q.transpose(-2, -1) @ k) * self.scale# 加入注意力偏移bias = self.attention_biases[:, self.attention_bias_idxs] if self.training else self.abbias = torch.nn.functional.interpolate(bias.unsqueeze(0), size=(attn.size(-2), attn.size(-1)), mode='bicubic')attn = attn + bias# 注意力分数进行softmax操作attn = attn.softmax(dim=-1)# 计算输出x = (v @ attn.transpose(-2, -1)).reshape(B, -1, H, W)x = self.proj(x)return x
      
    • MSA 模块的信息处理过程如下:线性变换:通过qkv层将输入特征x线性变换得到查询(Q)、键(K)和值(V)。深度卷积:对查询(Q)进行深度卷积操作,增强特征表示。计算注意力分数:计算 Q 和 K 的点积,并进行缩放。加入注意力偏移:通过attention_biasesattention_bias_idxs为注意力分数加入偏移,增强模型的表达能力。Softmax 操作:对注意力分数进行 softmax 操作,得到注意力分布。计算输出:根据注意力分布对值(V)进行加权求和,得到输出特征。

  • 对于图像分类任务,最常用的损失函数是交叉熵损失(Cross - Entropy Loss)。它可以衡量模型预测的概率分布与真实标签的概率分布之间的差异,促使模型输出的类别概率更接近真实标签。支持蒸馏学习(distillation参数),可能会使用蒸馏损失(Knowledge Distillation Loss)。蒸馏损失的主要思想是让学生模型(LSNet)学习教师模型的输出,从而提高学生模型的性能。通常,蒸馏损失由两部分组成:一部分是学生模型的预测结果与真实标签之间的交叉熵损失,另一部分是学生模型的预测结果与教师模型的输出之间的软标签损失。为了防止模型过拟合,可能会在损失函数中加入正则化项,如 L1 或 L2 正则化。正则化项可以约束模型的参数,使模型更加泛化。

  • lsnet/robust.py 文件代码,主要用于对模型在 ImageNet-A 和 ImageNet-R 数据集上进行鲁棒性评估,计算模型在这两个数据集上的准确率。

  • # 判断是否指定了 ImageNet-A 数据集的路径
    if args.ina_path:# 读取 ImageNet-A 数据集中所有类别的 WordNet ID(WNID)imagenet_a_wnids = open('imagenet_a_wnids.txt').read().splitlines()# 读取所有 ImageNet 类别的 WordNet IDall_wnids = open('imagenet_wnids.txt').read().splitlines()# 创建一个布尔掩码,用于标记 ImageNet-A 数据集中的类别在所有 ImageNet 类别中的位置imagenet_a_mask = [wnid in set(imagenet_a_wnids) for wnid in all_wnids]# 使用 torchvision 的 ImageFolder 类加载 ImageNet-A 数据集,并应用测试数据转换ina_dataset = torchvision.datasets.ImageFolder(args.ina_path, transform=test_transform)# 创建 ImageNet-A 数据集的数据加载器,设置批量大小、工作线程数、是否使用内存锁页等参数ina_data_loader = torch.utils.data.DataLoader(ina_dataset, batch_size=int(1.5 * args.batch_size),num_workers=args.num_workers,pin_memory=args.pin_mem,drop_last=False)# 调用 evaluate 函数对模型在 ImageNet-A 数据集上进行评估,传入数据加载器、模型、设备和掩码test_stats = evaluate(ina_data_loader, model, device, mask=imagenet_a_mask)# 打印模型在 ImageNet-A 数据集上的准确率print(f"Accuracy on the ImageNet-A: {test_stats['acc1']:.1f}%")
    # 判断是否指定了 ImageNet-R 数据集的路径
    if args.inr_path:# 定义所有 ImageNet 类别的 WordNet ID 列表all_wnids = ['n01440764', 'n01443537', 'n01484850', ...]  # 此处省略了大量的 ID# 定义 ImageNet-R 数据集中的 WordNet ID 列表imagenet_r_wnids = ['n01443537', 'n01484850', ...]  # 此处省略了部分 ID# 创建一个布尔掩码,用于标记 ImageNet-R 数据集中的类别在所有 ImageNet 类别中的位置imagenet_r_mask = [wnid in set(imagenet_r_wnids) for wnid in all_wnids]# 使用 torchvision 的 ImageFolder 类加载 ImageNet-R 数据集,并应用测试数据转换inr_dataset = torchvision.datasets.ImageFolder(args.inr_path, transform=test_transform)# 创建 ImageNet-R 数据集的数据加载器,设置批量大小、工作线程数、是否使用内存锁页等参数inr_data_loader = torch.utils.data.DataLoader(inr_dataset, batch_size=int(1.5 * args.batch_size),num_workers=args.num_workers,pin_memory=args.pin_mem,drop_last=False)# 调用 evaluate 函数对模型在 ImageNet-R 数据集上进行评估,传入数据加载器、模型、设备和掩码test_stats = evaluate(inr_data_loader, model, device, mask=imagenet_r_mask)# 打印模型在 ImageNet-R 数据集上的准确率print(f"Accuracy on the ImageNet-R: {test_stats['acc1']:.1f}%")
    
  • 读取 ImageNet-A 和所有 ImageNet 类别的 WordNet ID。创建一个布尔掩码,用于标记 ImageNet-A 数据集中的类别在所有 ImageNet 类别中的位置。使用 torchvision.datasets.ImageFolder 加载 ImageNet-A 数据集,并应用测试数据转换。调用 evaluate 函数对模型在 ImageNet-A 数据集上进行评估,并打印准确率。

  • 在检测和分割任务里,特征提取与融合是关键步骤,能够为下游任务提供有力支持。骨干网络负责从输入图像中提取基础特征。在 lsnet/detection/model/lsnet.pylsnet/segmentation/model/lsnet.py 中,LSNet 类作为骨干网络,借助一系列卷积层与模块来提取不同尺度的特征。

    • class LSNet(torch.nn.Module):def __init__(self, img_size=224,patch_size=16,frozen_stages = 0,in_chans=3,num_classes=1000,embed_dim=[64, 128, 192, 256],key_dim=[16, 16, 16, 16],depth=[1, 2, 3, 4],num_heads=[4, 4, 4, 4],pretrained=None,distillation=False,):super().__init__()resolution = img_sizeself.patch_embed = torch.nn.Sequential(Conv2d_BN(in_chans, embed_dim[0] // 4, 3, 2, 1), torch.nn.ReLU(),Conv2d_BN(embed_dim[0] // 4, embed_dim[0] // 2, 3, 2, 1), torch.nn.ReLU(),Conv2d_BN(embed_dim[0] // 2, embed_dim[0], 3, 2, 1))resolution = img_size // patch_sizeattn_ratio = [embed_dim[i] / (key_dim[i] * num_heads[i]) for i in range(len(embed_dim))]self.blocks1 = nn.Sequential()self.blocks2 = nn.Sequential()self.blocks3 = nn.Sequential()self.blocks4 = nn.Sequential()blocks = [self.blocks1, self.blocks2, self.blocks3, self.blocks4]for i, (ed, kd, dpth, nh, ar) in enumerate(zip(embed_dim, key_dim, depth, num_heads, attn_ratio)):for d in range(dpth):blocks[i].append(Block(ed, kd, nh, ar, resolution, stage=i, depth=d))if i != len(depth) - 1:blk = blocks[i+1]resolution_ = (resolution - 1) // 2 + 1blk.append(Conv2d_BN(embed_dim[i], embed_dim[i], ks=3, stride=2, pad=1, groups=embed_dim[i]))blk.append(Conv2d_BN(embed_dim[i], embed_dim[i+1], ks=1, stride=1, pad=0))
      
  • 特征金字塔网络(FPN)能够融合不同尺度的特征,增强特征的表达能力。在 lsnet/detection/model/lsnet_fpn.py 中,LSNetFPN 类实现了 FPN 的功能。

    • @NECKS.register_module()
      class LSNetFPN(nn.Module):def __init__(self,in_channels,out_channels,num_outs,start_level=0,end_level=-1,add_extra_convs=False,extra_convs_on_inputs=True,relu_before_extra_convs=False,no_norm_on_lateral=False,num_extra_trans_convs=0,conv_cfg=None,norm_cfg=None,act_cfg=None,upsample_cfg=dict(mode='nearest')):super(LSNetFPN, self).__init__()# ... 省略部分代码 ...self.lateral_convs = nn.ModuleList()self.fpn_convs = nn.ModuleList()for i in range(self.start_level, self.backbone_end_level):l_conv = ConvModule(in_channels[i],out_channels,1,conv_cfg=conv_cfg,norm_cfg=norm_cfg if not self.no_norm_on_lateral else None,act_cfg=act_cfg,inplace=False)fpn_conv = ConvModule(out_channels,out_channels,3,padding=1,conv_cfg=conv_cfg,norm_cfg=norm_cfg,act_cfg=act_cfg,inplace=False)self.lateral_convs.append(l_conv)self.fpn_convs.append(fpn_conv)def forward(self, inputs):# ... 省略部分代码 ...# build lateralslaterals = [lateral_conv(inputs[i + self.start_level])for i, lateral_conv in enumerate(self.lateral_convs)]# build top-down pathused_backbone_levels = len(laterals)for i in range(used_backbone_levels - 1, 0, -1):if 'scale_factor' in self.upsample_cfg:laterals[i - 1] += F.interpolate(laterals[i],**self.upsample_cfg)else:prev_shape = laterals[i - 1].shape[2:]laterals[i - 1] += F.interpolate(laterals[i], size=prev_shape, **self.upsample_cfg)# ... 省略部分代码 ...
      
    • LSNetFPN 中,lateral_convs 模块对骨干网络输出的不同尺度特征图进行 1x1 卷积,生成侧向连接特征图。接着,通过上采样和相加操作构建自顶向下的路径,融合不同尺度的特征。

  • LSNetFPN 中的特征融合主要体现在自顶向下的路径构建过程中。在 forward 方法里,通过 F.interpolate 函数对高层特征图进行上采样,使其与低层特征图尺寸相同,然后将它们相加,实现特征融合。

    • # build top-down path
      used_backbone_levels = len(laterals)
      for i in range(used_backbone_levels - 1, 0, -1):if 'scale_factor' in self.upsample_cfg:laterals[i - 1] += F.interpolate(laterals[i],**self.upsample_cfg)else:prev_shape = laterals[i - 1].shape[2:]laterals[i - 1] += F.interpolate(laterals[i], size=prev_shape, **self.upsample_cfg)
      
  • LSNetFPN 中,还可以通过添加额外的卷积层和转置卷积层来进一步融合特征。

    • # add extra conv layers (e.g., RetinaNet)
      extra_levels = num_outs - self.backbone_end_level + self.start_level
      assert extra_levels >= num_extra_trans_convs
      extra_levels -= num_extra_trans_convs
      if self.add_extra_convs and extra_levels >= 1:for i in range(extra_levels):if i == 0 and self.add_extra_convs == 'on_input':in_channels = self.in_channels[self.backbone_end_level - 1]else:in_channels = out_channelsextra_fpn_conv = ConvModule(in_channels,out_channels,3,stride=2,padding=1,conv_cfg=conv_cfg,norm_cfg=norm_cfg,act_cfg=act_cfg,inplace=False)self.fpn_convs.append(extra_fpn_conv)
      # add extra transposed convs
      self.extra_trans_convs = nn.ModuleList()
      self.extra_fpn_convs = nn.ModuleList()
      for i in range(num_extra_trans_convs):extra_trans_conv = TransposedConvModule(out_channels,out_channels,2,stride=2,padding=0,conv_cfg=conv_cfg,norm_cfg=norm_cfg if not no_norm_on_lateral else None,act_cfg=act_cfg,inplace=False)self.extra_trans_convs.append(extra_trans_conv)extra_fpn_conv = ConvModule(out_channels,out_channels,3,padding=1,conv_cfg=conv_cfg,norm_cfg=norm_cfg,act_cfg=act_cfg,inplace=False)self.extra_fpn_convs.append(extra_fpn_conv)
      
  • 在目标检测任务中,FPN 输出的多尺度特征图能够为不同大小的目标检测提供支持。较大尺度的特征图适合检测小目标,而较小尺度的特征图适合检测大目标。通过骨干网络提取基础特征,利用 FPN 融合不同尺度的特征,为目标检测和语义分割等下游任务提供了丰富且有效的特征表示。