在本文中,我们创新性地将ContextAggregation模块引入到了YoloV8模型中,特别是在其Neck部分的三个输出特征中融入了该模块,从而实现了显著的性能提升。ContextAggregation模块的核心优势在于其强大的多尺度上下文聚合能力。通过该模块,YoloV8能够更有效地捕捉和利用图像中的全局视觉信息,特别是针对遥感图像中普遍存在的尺度变化严重、对比度低和分布密集等挑战,这一能力显得尤为重要。模块在特征域、空间域和实例域中分别进行上下文信息的聚合,从而极大地增强了目标特征的区分性,提高了目标检测和实例分割的准确性。
https://arxiv.org/pdf/2111.11057v2
遥感图像中的实例分割任务旨在对实例级别的对象进行逐像素标记,对于各种民用应用具有重要意义。尽管之前已取得了一些成功,但大多数为自然图像设计的现有实例分割方法,在直接应用于俯视遥感图像时,性能会急剧下降。通过仔细分析,我们观察到,挑战主要来自由于尺度变化严重、对比度低和分布密集而导致的对象特征缺乏区分性。为了解决这些问题,提出了一种新的上下文聚合网络(CATNet)来改进特征提取过程。所提出的模型利用了三个轻量级的即插即用模块,即密集特征金字塔网络(DenseFPN)、空间上下文金字塔(SCP)和分层感兴趣区域提取器(HRoIE),分别在特征域、空间域和实例域中聚合全局视觉上下文。DenseFPN是一个多尺度特征传播模块,通过采用跨级残差连接、跨级密集连接和特征重加权策略,建立了更灵活的信息流。利用注意力机制,SCP通过将全局空间上下文聚合到局部区域来进一步增强特征。对于每个实例,HRoIE自适应地为不同的下游任务生成感兴趣区域(RoI)特征。我们在具有挑战性的iSAID、DIOR、NWPU VHR10和HRSID数据集上对提出的方案进行了广泛的评估。评估结果表明,在相似的计算成本下,该方法优于当前最先进的技术。源代码和预训练模型可在https://github.com/yeliudev/CATNet上获取。
索引词-实例分割,目标检测,全局上下文聚合,自注意力
卫星和遥感技术的最新进展生成了大量高分辨率的遥感图像,给人工操作和处理带来了巨大挑战。因此,对这些图像进行自动分析和理解对于包括城市规划、资源探测和环境监测在内的各种民用应用变得越来越重要。作为计算机视觉中一项基础而又具有挑战性的任务,实例分割结合了目标检测和语义分割,旨在预测实例级别的对象二值掩码,已被广泛用于从光学遥感图像和合成孔径雷达(SAR)图像中提取精细的对象信息。近年来,它引起了相当大的关注。
关于目标检测和实例分割的大部分现有工作[1]-[7]在传统的前视场景中取得了成功。然而,当这些方法直接应用于遥感图像时,大量方法不可避免地会遇到性能下降的问题[8]-[12]。与自然图像相比,遥感图像通常是从顶部拍摄的,捕捉了大面积且对象差异有限的区域。我们分析了这些场景的特殊性,并将挑战分为五个不同的方面,即尺度变化、任意方向、密集分布、低对比度和杂乱背景,如图2所示。前三个方面导致对象模式复杂,而后两个方面则带来了来自背景的干扰信息。这些现象在自然场景中很少见,因此只有少数工作考虑了这些方面。我们认为,上述所有挑战都源于遥感图像中缺乏具有区分性的对象特征。也就是说,遥感图像中单个对象的视觉外观信息量不足以直接采用现有方案进行实例分割。
一个自然的问题是:如何增强不足的特征,以在遥感图像中实现更好的实例分割结果?考虑到在一般实例分割流程[3]-[5]中,对象表示直接从主干网或颈部的特征图中裁剪而来,仅包含具有不可逆信息损失的局部特征。在这项工作中,我们通过引入CATNet(一种用于全局上下文聚合的新框架)来缓解这个问题。核心思想是,来自不同特征金字塔级别、空间位置或感受野的图像上下文信息应为分割难以区分的对象提供额外的先验。请注意,现有工作[13]、[14]仅将上下文视为空间相关性。我们将上下文的概念扩展并明确分解为三个域,即特征域、空间域和实例域。这意味着在检测和分割对象时,该模型可以通过以下方式增强视觉信息:1)平衡异构特征;2)融合来自背景或其他相关对象的信息;3)自适应地精炼每个实例和任务的中间表示。这三个不同的域能够以从粗到细的不同粒度对全局视觉上下文进行建模,从而捕获更多具有区分性的对象信息。
所提出的框架旨在利用三个即插即用模块,并构建上述上下文聚合流程。图1展示了这些模块处理的对象特征的一瞥。在特征域中,我们认为,在主干网构建的特征金字塔中,灵活的信息流可以减少信息混淆,更有效地处理多尺度特征。正是基于这种分析,我们提出了密集特征金字塔网络(DenseFPN),以实现自适应特征传播。该模块具有金字塔结构,包含由自上而下和自下而上路径组成的可堆叠基本块。我们采用跨级残差连接[15]、跨级密集连接[16]和特征重加权策略,使模块能够学习其最佳特征传播方式。在空间域中,遥感图像中的长距离空间依赖性为模糊对象提供了比自然场景更多的补充信息。因此,采用空间上下文金字塔(SCP)来捕获每个特征金字塔级别中的全局空间上下文。该模块学习从整个特征图中聚合特征,并使用自适应权重将它们组合到每个像素中。这种策略确保了只有有用的全局信息被融合到局部区域中,而不会减少对象之间的差异。至于实例域,我们认为对象表示应针对每个实例和下游任务进行自适应精炼。例如,执行对象分类需要整体视图,而分割则需要更多放大的细节。不同实例对感受野大小的需求也不同。因此,我们引入了分层感兴趣区域提取器(HRoIE)来为每个实例和任务生成RoI特征。在从所有级别裁剪实例特征图后,该模块从最高或最低尺度开始,以分层方式逐级融合特征。利用像素级注意力机制来组合相邻特征图。这些模块轻量级且具有可扩展模型设计的灵活性。总体而言,本文的主要贡献有三方面:
本文的其余部分组织如下。第二节讨论了相关工作和比较。第三节介绍了DenseFPN、SCP和HRoIE的详细公式。第四节在公共数据集上展示了广泛的实验结果和深入分析。最后,第五节总结了结论性评论。
A. 遥感图像中的实例分割
实例分割是计算机视觉中一个具有挑战性且被广泛研究的问题。与物体检测[1]、[2]类似,大多数实例分割方法可以分为两种方案,即单阶段方法和两阶段方法。单阶段方法[6]、[7]采用了一种直接的设计,即采用自下而上的策略,在图像级别进行语义分割,并使用聚类或度量学习进一步分离单个物体。这些方法通常具有较高的效率,但在定位准确性方面受到较大限制。相比之下,两阶段方法[3]-[5]、[17]将分割流程分为两个阶段,即区域提议生成和任务特定的后处理,从而形成了自上而下的风格。得益于两次边界框回归,这些方法在物体定位和掩码预测方面通常能取得更好的结果。最近的一些工作[18]-[27]试图解决遥感图像中的场景分类和物体检测问题,但它们并没有特别关注实例分割。我们提出的上下文聚合策略可以融入单阶段和两阶段方法中,而由于不需要裁剪特征图,因此在单阶段方法中不使用HRoIE。进一步的实验结果表明,我们的模块可以稳定地提升性能。
B. 全局上下文建模
卷积神经网络(CNNs)最具代表性的特性之一是局部依赖建模。多个卷积层可以堆叠在一起以增加感受野,在低层次学习高分辨率的定位特征,在高层次学习低分辨率的语义特征。处理异质性的关键是适当地从主干网络中传播多层次的特征。早期工作[17]、[28]-[31]中的一个常见做法是采用多尺度特征传播策略,但这些方法只沿着固定路径传播特征。我们认为,灵活的信息流可以减少信息混淆,并更好地聚合多尺度特征。此外,长距离空间依赖建模也被证明对密集预测任务有效[13]、[32]。作为一项开创性工作,非局部神经网络(NLNet)[13]表明,可以通过计算像素级别的成对相关性来聚合全局空间上下文,但它也面临着计算成本高的问题。NLNet的一些扩展[33][35]试图通过简化相关性估计来解决这个问题。这些工作已经取得了有前景的结果,然而,所有这些方法都只将上下文的概念视为长距离空间相关性,忽略了特征和实例域中的全局依赖。
在本节中,我们介绍了我们的全局上下文聚合方法。如图3所示,整个框架可以分为三个子模块,即DenseFPN、SCP和HRoIE。这些模块旨在从不同域聚合全局上下文信息。
A. 概述
给定一张图像和一组感兴趣的物体类别,实例分割的任务是检测并分割中的所有物体,无论它们属于哪个预定义的类别。实例分割的输出将是一组元组集合,其中表示物体的边界框,表示一个二进制掩码,其中指示像素是否属于该物体,是一个描述物体类别的独热向量。注意,单个物体可能由不同的掩码表示。
我们采用Mask R-CNN[3]作为我们的基线,它是一个常见的两阶段实例分割框架。整个流程通过提取视觉特征、生成区域提议,并对每个提议执行边界框回归、物体分类以及掩码预测来构建。首先,通过从主干网络的每个阶段提取视觉特征来构建一个异质特征金字塔。为了使特征更具判别性,我们利用DenseFPN和SCP在不同层次和区域之间传播物体信息。在增强特征金字塔后,HRoIE会为每个提议生成任务特定的RoI特征。以下各节将介绍这些模块的详细信息。
B. 密集特征金字塔网络
多尺度特征传播旨在从不同主干阶段聚合视觉特征,即给定一个输入特征金字塔,其中表示来自第阶段的特征图,目标是在不同层次之间传播特征以生成一个增强的特征金字塔,其中的特征对于下游任务更具信息量。形式上,特征图或的分辨率是输入图像的。
DenseFPN的基本架构如图3(a)所示,其中每个节点代表一个特征图,线条代表信息流。该模块以作为输入,首先使用卷积将它们下采样到256个通道,生成。然后,对应用一个额外的卷积(步长)以生成。这样,就具有了相同数量的通道但分辨率不同。随后,这些特征通过几个堆叠的基本块进行特征级别的上下文聚合。在每个块中,输入特征金字塔通过自上而下和自下而上的聚合路径进行处理,其中采用了跨级残差连接[15]、跨级密集连接[16]和特征重新加权策略。
图4展示了基本块中的详细特征传播策略。在自上而下的路径中,每个特征金字塔级别的输出特征是通过融合当前级别和所有上级别的特征,然后对融合后的特征进行参数化变换而生成的。
其中,Transform(*)表示一个ReLU激活层后跟一个没有激活函数的瓶颈结构[15]。我们观察到,在瓶颈结构之前仅采用一个非线性层可以带来更好的性能。Resize(.)表示一个最大池化层,是一个用于从级别聚合特征到级别的可学习重新加权项。权重是与其级别长度相对应的向量,其值通过使用softmax从原始值归一化得到:
其中,表示原始权重向量,是每个元素的索引。使用上述归一化可以稳定学习过程。与自上而下路径类似,自下而上的特征通过以下公式计算:
其中,Resize(')表示双线性插值层,其他符号与公式1一致。我们采用残差连接来保留原始特征并防止梯度消失。利用灵活的架构和特征重新加权策略,DenseFPN能够在训练过程中优化特征域上下文聚合的信息流。
C. 空间上下文金字塔
在跨不同级别聚合特征图之后,特征金字塔仍然包含空间局部信息,因此我们引入空间上下文金字塔(SCP)来学习每个级别内的全局空间上下文,从而进一步增强特征。该领域之前的尝试[13]、[32][35]通常将几个视觉注意力块集成到主干网络中以实现全局感受野。这些块的一些架构如图5所示。在这些方法中,全局上下文网络(GCNet)[35]是一种简单但有效的方法,它将NLNet[13]和SENet[32]结合到一个单一的轻量级模块中。然而,我们观察到,在对象仅覆盖小区域的遥感图像中,这种设计可能会给对象带来太多无用的背景信息。为了解决这个问题,我们提议在这个结构之上添加一条额外路径来学习每个像素的信息量。我们的核心思想是,如果某个像素的特征足够信息丰富,那么就没有太多必要从其他空间位置聚合特征。这种软重新加权策略可以在减少信息混淆的同时有效地融合局部和全局特征。
SCP的架构如图3(b)所示。该模块也具有金字塔结构,因此可以轻松地插入到主干网络或颈部网络之后。每一层由一个具有残差连接的上下文聚合块(CABlock)组成。该块的详细设计如图5(d)所示。在每个块中,像素级空间上下文通过以下公式进行聚合:
其中,和分别表示特征金字塔中第层的输入和输出特征图,每个特征图包含个像素。表示每个像素的索引。和是用于投影特征图的线性变换矩阵。在实践中,我们使用卷积来执行映射。上述公式简化了广泛使用的自注意力机制[38],通过将查询和键之间的矩阵乘法替换为线性变换,从而大大减少了参数和计算成本。除了GCNet之外,我们还应用了与和形状相同的重新加权矩阵,以平衡每个像素聚合全局空间上下文的程度。该矩阵也可以通过对进行线性变换并使用softmax归一化来简单生成。
同样,是矩阵索引。我们对的有效性进行了大量实验。图7可视化了GCNet和SCP之间的特征聚合权重比较。结果表明,我们的模型倾向于聚合来自同一类别的对象特征。有关详细讨论,请参阅第IV-F节。
D. 分层感兴趣区域提取器
大多数两阶段目标检测和实例分割方法缺乏对RoI提取器的足够关注,由于仅考虑单一尺度,这可能会导致严重的信息丢失。该设计的初衷是使较大的候选区域能够从捕获更高定位准确性的低级特征中受益,而较小的候选区域由于高级特征具有更大的感受野,可以获得更多的上下文信息。我们认为这种硬性分配策略可能并不适合所有候选区域。最近的工作[17]、[39]也证明,简单计算从所有层裁剪的RoI特征的总和可以获得略好的性能。
在这项工作中,我们通过提出分层感兴趣区域提取器(HRoIE)来解决这个问题,以便为每个实例执行特定任务的RoI特征融合。该模块如图3(c)所示插入在SCP之后。我们的假设是,人类可以轻松地执行目标检测和分割,因为他们以分层的方式将注意力集中在对象上。例如,当一个人试图对对象进行分类时,他或她会首先查看对象本身。如果对象的外观不具有区分性,该人会逐渐查看周围的事物以获得更好的信息。相反,当在像素级别分割对象时,人类会查看整个对象以全面了解其形状,然后反复放大以获得更详细的边界信息以进行准确分割。我们通过使用RoIAlign[3]从中的所有特征金字塔级别裁剪候选区域的特征,并利用多个注意力块来根据实例和任务自适应地融合特征来实现上述想法。如图6所示,对于每个任务,RoI特征从一个空矩阵开始,并通过分层方式结合来自不同级别的特征:
其中,表示第层的裁剪特征,和表示不同级别的聚合RoI特征,是线性变换权重,表示通道维度上的矩阵拼接。上述过程计算了用于特征聚合的像素级注意力权重,因此
可以根据实例和任务自适应地生成RoI特征。在实践中,我们为目标检测头采用自下而上的路径,为掩码预测头采用自上而下的路径。
在本节中,我们将在iSAID、DIOR、NWPU VHR-10和HRSID数据集上对所提出的方法进行广泛评估。首先,在iSAID数据集上的实例分割任务下对模块进行评估,然后在DIOR和NWPU VHR-10数据集上的目标检测任务下进行评估,以证明该方法在光学遥感图像中的有效性。此外,还使用HRSID数据集来验证该方法在SAR图像中的泛化能力。
A. 数据集和评估指标iSAID [10]:iSAID是用于航拍图像实例分割的大规模数据集。iSAID中的所有图像均继承自DOTA [9](一种流行的用于方向目标检测的数据集)。它包含2,806张图像中的655,451个实例,共15个类别,所有对象均从头开始独立标注。图像的空间分辨率范围很大,在800至13,000之间。在训练和测试期间,我们将它们分割成的图像块。类别的缩写包括:SH-船,ST-储罐,BD-棒球场,TC-网球场,BC-篮球场,GT-田径场,BR-桥梁,LV-大型车辆,SV-小型车辆,HE-直升机,SP-游泳池,RO-环岛,SB-足球场,PL-飞机,HA-港口。
DIOR [11]:DIOR是一个仅使用水平边界框标注的复杂航拍图像数据集。它包含23,463张图像,共190,288个实例,涵盖20个对象类别。DIOR中的对象尺寸在类间和类内均存在严重差异。该数据集的复杂性还体现在不同的成像质量、天气和季节上。类别的缩写包括:AL-飞机,AR-机场,BF-棒球场,BC-篮球场,BR-桥梁,CH-烟囱,DA-水坝,ES-高速公路服务区,ET-高速公路收费站,GC-高尔夫球场,GT-田径场,HA-港口,OV-立交桥,SH-船,ST-体育场,SA-储罐,TC-网球场,TS-火车站,VE-车辆,WM-风车。
NWPU VHR-10 [8]:NWPU VHR-10是另一个广泛用于航拍图像目标检测的数据集。它包含800张高分辨率图像,其中650张为正样本(包含感兴趣的对象),150张为负样本(不包含感兴趣的对象)。该数据集包含10个对象类别的标注。所有对象均使用可公开访问的水平边界框进行标注。类别的缩写包括:AI-飞机,SH-船,ST-储罐,BD-棒球场,TC-网球场,BC-篮球场,GT-田径场,HA-港口,BR-桥梁,VE-车辆。
HRSID [12]:HRSID是最近引入的用于SAR图像中船舶检测和分割的数据集。该数据集包含总共5,604张高分辨率SAR图像,其中包含16,951个船舶实例。该数据集中的所有实例均使用像素级掩码进行标注。图像的空间分辨率为0.5米、1米和3米。
我们遵循标准的评估指标,即使用平均精度均值(mAP)来衡量检测和分割性能。当对象的边界框或掩码与其对应的真实值之间的交并比(IoU)大于阈值,并且预测的类别标签正确时,该结果被视为真正例。对于iSAID数据集,我们计算了在从0.05到0.95范围内的mAP均值。对于其他数据集,根据原论文,仅考虑下的mAP。
B. 实现细节
我们选择Mask R-CNN [3]、Faster R-CNN [1]和RetinaNet [2](以ResNet-50 [15]为主干网络)作为我们的基线。主干网络在ImageNet [52]上进行预训练,并在训练检测器时进行微调。第一阶段中的所有参数在预训练后均被冻结。除非另有说明,否则所有DenseFPN模块均包含5个基本块。为了稳定训练过程,在中间层中使用同步批归一化(SyncBN) [53]层。在测试时,我们还采用Soft-NMS [54]来抑制IoU大于0.5的重复结果,因为遥感图像中的大多数对象重叠严重。
我们使用随机梯度下降(SGD)优化器来学习所有模型的参数,初始学习率为0.01,动量为0.9,权重衰减为0.0001。每个训练批次包含8张图像。对于iSAID数据集,我们遵循标准的训练计划,在第8个和第11个训练周期时将学习率降低1/10,并在第12个训练周期时停止训练。对于DIOR、NWPU VHR-10和HRSID数据集,我们分别采用、和训练计划。C. 航空图像中的实例分割结果
我们首先在实例分割任务上评估了我们的方法。表I展示了当将所提模块融入不同框架时,在iSAID数据集上的对比结果。同时,还报告了各类别的实例分割平均精确度均值(mAPs)。对于目标检测和实例分割任务,我们的方法都能稳步提升性能。在所提的三个模块中,DenseFPN对mAPs的提升最为显著,而SCP和HRoIE也带来了相当大的增益,且仅增加了少量参数。
D. 航空图像中的目标检测结果
除了实例分割外,我们还发现我们的方法同样有益于目标检测任务。为了验证其效果,我们还在DIOR和NWPU VHR-10数据集上评估了我们的模型。表II和表III展示了我们的方法与之前最先进的方法在这两个数据集上的对比。注意,对于基于RetinaNet的方法,由于单阶段模型中不使用感兴趣区域(RoI)提取器,因此我们仅融入了DenseFPN和SCP。在DIOR和NWPU VHR-10数据集上的实验结果表明,我们的方法显著优于所有之前的方法。此外,使用ResNet-50作为骨干网络的我们的模型性能,甚至明显优于使用ResNet-101作为骨干网络的之前最先进的方法。
E. 合成孔径雷达(SAR)图像中的实例分割结果
除了光学遥感图像外,我们还在更具挑战性的SAR图像上评估了我们的模型。具体而言,SAR图像被视为单通道灰度图像,每个图像是通过在通道维度上堆叠三个单通道图像而构建的。表IV中的实验结果也表明,与自然图像的强基线相比,我们的方法即使使用更轻量的骨干网络也表现得更好。注意,在SAR图像中,我们没有观察到使用多尺度训练带来明显的增益,因此在执行数据增强时仅使用了多尺度测试。
F. 可视化
为了证明SCP的有效性,我们在图7中可视化了GCNet[35]和SCP中的上下文聚合权重。每一行表示所有类别的权重,这些权重被聚合到每个类别中。圆圈的大小和颜色深度分别表示GCNet和SCP中的权重。从可视化结果中,我们可以观察到我们的方法倾向于从同一类别的对象中聚合全局空间上下文。一些相似(如飞机和直升机)或语义相关(如船和港口)的类别在训练过程中也可以互相帮助。与我们的方法相比,GCNet不太关注相似或语义相关的对象,导致在图像中全局聚合特征时出现信息混淆。
图8展示了在iSAID、DIOR和HRSID数据集上的定性结果。每个图像块都通过其在SCP中的特征聚合权重以及最终的目标检测或实例分割结果进行可视化。结果表明,在大多数情况下,我们的方法更关注包含对象的区域,并将它们聚合到特征较差的区域。最终结果证明,我们的方法能够在多个场景中有效地检测和准确分割对象。
为了更深入地研究训练过程,我们还在图9(a)中可视化了总体训练损失。结合所提模块,模型可以更快地收敛,并在训练后达到更低的最终最小值。
G. 详细比较和消融研究
为了单独研究所提模块的重要性和有效性,我们进行了实验,将它们与一些代表性方法以及不同模块组合进行了比较。所有实验均在iSAID数据集上使用标准的训练和测试方案进行。浮点运算数(FLOPs)是使用输入计算的。
图9(b)和(c)比较了不同多尺度特征传播模块的目标检测和实例分割性能。数值结果报告在表V(a)中。与现有的代表性方法相比,DenseFPN在目标检测和实例分割任务上的表现都明显更好,且计算成本更低。我们还观察到,在DenseFPN中简单地堆叠更多基本块可以进一步提升性能,这表明其模型扩展的能力和灵活性。
表V(b)展示了多个空间上下文模块之间的比较。与基线相比,NLNet[13]可以在付出较大计算成本的情况下有效提升性能。GCNet[35]解决了计算复杂度的问题,但导致了另一个信息混淆的问题。借助重新加权上下文,我们提出的CABlock在使用不同通道缩减率时始终优于GCNet。进一步的实验表明,将CABlock从骨干网络移动到多尺度融合模块之后,可以在类似的计算成本下更好地提升性能。
表展示了多个感兴趣区域(RoI)提取器的比较。基线模型仅从单个特征图中裁剪RoI特征,导致严重的信息丢失,并取得了一般的结果。简单计算从多层裁剪的RoI特征的和或拼接可以略微提升性能。考虑到目标检测和实例分割任务需要不同的特征,引入自适应特征融合的分层RoI提取器(HRoIE)可以更好地为这些任务生成适当的RoI特征。
表展示了消融研究结果。所提出的三个模块均能在遥感图像的目标检测和实例分割上略微带来更好的结果。当它们相互协作时,性能提升仍然稳定,表明这些模块不会相互干扰。通过将这些模块全部组合在一起,可以实现最佳的实验结果,从而能够同时从多个域聚合多尺度上下文。请注意,模型训练不足。通过适当的数据增强或更长的训练计划,我们的模型可以实现更好的性能。
在本文中,我们对遥感图像中的全局视觉上下文进行了深入研究,并提出了所提出的CATNet,这是一个新型框架,能够利用三个轻量级的即插即用模块,即密集特征金字塔网络、空间上下文金字塔和分层感兴趣区域提取器,在特征域、空间域和实例域中聚合全局视觉上下文。研究表明,这三个模块之间的协作可以有效地增强区分性目标特征,从而提高目标检测和实例分割的准确性。在iSAID、DIOR、NWPU VHR-10和HRSID数据集上的实验结果表明,所提出的方法在相似的计算成本下显著优于最先进的方法。我们期望对全局视觉上下文的新理解以及所提出模块的设计将有益于该领域的未来研究。
致谢
本项目部分受到国家自然科学基金(41871246)和中国国家重点研究与发展计划(2019YFB2102901)的支持。
from mmcv.cnn import ConvModule
from mmengine.model import caffe2_xavier_init, constant_init
import torch
import torch.nn as nn
class ContextAggregation(nn.Module):
def __init__(self, in_channels, reduction=1):
super(ContextAggregation, self).__init__()
self.in_channels = in_channels
self.reduction = reduction
self.inter_channels = max(in_channels // reduction, 1)
conv_params = dict(kernel_size=1, act_cfg=None)
self.a = ConvModule(in_channels, 1, **conv_params)
self.k = ConvModule(in_channels, 1, **conv_params)
self.v = ConvModule(in_channels, self.inter_channels, **conv_params)
self.m = ConvModule(self.inter_channels, in_channels, **conv_params)
self.init_weights()
def init_weights(self):
for m in (self.a, self.k, self.v):
caffe2_xavier_init(m.conv)
constant_init(self.m.conv, 0)
def forward(self, x):
n, c = x.size(0), self.inter_channels
# a: [N, 1, H, W]
a = self.a(x).sigmoid()
# k: [N, 1, HW, 1]
k = self.k(x).view(n, 1, -1, 1).softmax(2)
# v: [N, 1, C, HW]
v = self.v(x).view(n, 1, c, -1)
# y: [N, C, 1, 1]
y = torch.matmul(v, k).view(n, c, 1, 1)
y = self.m(y) * a
return x + y
YOLOv8l summary (fused): 313 layers, 40,642,230 parameters, 0 gradients, 147.7 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [00:02<00:00, 5.58it/s]
all 230 1412 0.974 0.954 0.985 0.742
c17 40 131 0.998 0.992 0.995 0.822
c5 19 68 0.985 0.981 0.993 0.829
helicopter 13 43 0.975 0.897 0.977 0.603
c130 20 85 0.975 0.976 0.993 0.68
f16 11 57 0.998 0.93 0.99 0.672
b2 2 2 0.93 1 0.995 0.678
other 13 86 0.975 0.907 0.964 0.559
b52 21 70 0.985 0.962 0.987 0.85
kc10 12 62 1 0.974 0.989 0.834
command 12 40 0.994 1 0.995 0.829
f15 21 123 0.964 0.992 0.995 0.695
kc135 24 91 0.982 0.989 0.988 0.699
a10 4 27 1 0.379 0.813 0.423
b1 5 20 1 0.965 0.995 0.75
aew 4 25 0.954 1 0.986 0.776
f22 3 17 0.912 1 0.995 0.766
p3 6 105 1 0.968 0.995 0.806
p8 1 1 0.902 1 0.995 0.697
f35 5 32 1 0.86 0.99 0.55
f18 13 125 0.976 0.99 0.99 0.825
v22 5 41 0.995 1 0.995 0.716
su-27 5 31 0.994 1 0.995 0.862
il-38 10 27 0.99 1 0.995 0.839
tu-134 1 1 0.924 1 0.995 0.895
su-33 1 2 0.955 1 0.995 0.751
an-70 1 2 0.935 1 0.995 0.796
tu-22 8 98 0.999 1 0.995 0.836
完整项目:
https://blog.csdn.net/m0_47867638/article/details/142968600?spm=1001.2014.3001.5501