💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡
遥感目标检测的研究主要集中在改进方向边界框的表示上,而忽略了遥感场景中独特的先验知识。 这类先验知识对于准确检测微小目标至关重要,因为这些目标往往需要更大的上下文信息才能被正确识别。提出的 LSKNet 可以动态调整其大的空间感受野,以更好地模拟不同目标的距离上下文,从而提高遥感目标检测的精度。 LSKNet 是第一个在遥感目标检测中探索大选择性核机制的方法。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。
专栏地址:YOLOv8改进——更新各种有效涨点方法——点击即可跳转
1. 原理
大型选择性核 (LSK) 块是大型选择性核网络 (LSKNet) 的基本组件,专为遥感物体检测而设计。LSK 块背后的主要原理涉及动态调整网络的接受场,以捕获准确检测遥感图像中的物体所需的不同上下文信息。以下是 LSK 块的关键元素和机制:
关键原理和机制:
大型核卷积:
顺序分解:大型核卷积分解为一系列较小的深度卷积,核大小和扩张率不断增加。这种方法有助于有效地扩展接受场,而不会在特征图之间引入间隙。
效率:与直接使用单个大型卷积核相比,此方法减少了参数数量,使其在计算上高效,同时仍能捕获长距离依赖关系。
- 空间核选择:
自适应聚合:LSKNet 不是根据通道维度选择核(如 SKNet 中所示),而是专注于空间维度。这使网络能够更好地捕捉图像空间内不同目标的空间变化。
动态加权:大型深度核处理的特征根据输入进行空间加权和合并。这种动态加权使网络能够自适应地调整每个目标的感受野,从而增强遥感图像中各种物体的检测性能。
- LSKNet 块架构:
两个子块:每个 LSKNet 块由两个主要子块组成:
大核 (LK) 选择子块:通过大核卷积序列和空间选择机制动态调整感受野。
前馈网络(FFN)子块:用于通道混合和特征细化,包括全连接层、深度卷积、GELU 激活和另一个全连接层。
- 模型变体:
LSKNet 有不同的变体,例如 LSKNet-T(Tiny)和 LSKNet-S(Small),特征通道数和每个阶段的 LSKNet 块数各不相同,可以灵活地平衡性能和计算效率。
LSKNet 中的 LSK 块通过利用大型分解核和空间选择机制来动态调整感受野,从而引入了一种新颖的方法。这种设计有效地捕获了准确检测遥感图像中的物体所需的各种上下文信息,使 LSKNet 成为遥感物体检测任务的强大而高效的骨干。
2. LSKblock的代码实现
2.1 将LSKblock添加到YOLOv8中
关键步骤一: 将下面代码粘贴到在/ultralytics/ultralytics/nn/modules/conv.py中,并在该文件的all中添加“LSKblock”
class LSKblock(nn.Module):
def __init__(self, dim):
super().__init__()
self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)
self.conv1 = nn.Conv2d(dim, dim // 2, 1)
self.conv2 = nn.Conv2d(dim, dim // 2, 1)
self.conv_squeeze = nn.Conv2d(2, 2, 7, padding=3)
self.conv = nn.Conv2d(dim // 2, dim, 1)
def forward(self, x):