点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转载自:AI缝合术
一、论文信息
1
论文题目:A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection
中文题目: 用于小目标检测的基于增强层间特征相关性的轻量级融合策略
论文链接:https://ieeexplore.ieee.org/abstract/document/10671587
官方github:https://github.com/nuliweixiao/EFC
所属机构:北京理工大学
关键词:特征融合、轻量级、小目标检测
二、论文概要
Highlight
图5. 在UAVDT上,低光和相似背景条件下,ClusDet、DREN、GFL和我们提出的方法的检测结果可视化。左侧是待检测的原始图像,右侧是不同方法检测到的定位效果图像。红色框是真实情况,绿色框是预测结果,紫色框代表我们方法的优势检测结果。
图5。左图:原始ResNet50的第一阶段特征,右图:嵌入SRU的ResNet50的第一阶段特征。
图6. 在COCO数据集上,RetinaNet与我们方法的定性结果比较。红色框是真实标签,绿色框是预测结果。
特征图是从特征金字塔的第一阶段提取的。颜色越亮表示模型对该区域的关注度越高。
研究背景:
无人机图像中小目标检测的挑战:无人机图像具有高分辨率和显著的背景噪声,这使得目标检测更加困难。特别是小目标的低分辨率使得它们更容易受到噪声的影响,导致有效信息有限。
多尺度特征融合的重要性: 通过增强网络对小目标的感知能力,多尺度特征融合可以提高检测精度。然而,传统的特征金字塔网络(FPN)中的简单拼接或加法操作未能充分利用多尺度融合的优势,导致特征之间的相关性不足。
本文贡献:
轻量级融合策略的需求:为了在有限的计算资源下高效利用多尺度融合,提出了一种基于增强层间特征相关性(EFC)的轻量级融合策略,以替代FPN中的传统特征融合策略。
总体结论:
本文提出了一种基于增强层间特征相关性的轻量级融合策略(EFC),通过GFF和MFR两个主要组件,有效提高了小目标检测的精度,同时显著减少了计算资源的消耗。通过在VisDrone、UAVDT和COCO数据集上的广泛实验,证明了该方法的有效性。此外,该方法具有良好的灵活性和通用性,可以广泛应用于各种基础网络,并进一步提高现有方法的性能。
三、方法
1
图2. 基于EFC轻量级融合策略(EFC)的FPN框架详细结构。以GFL作为基础检测器。值得注意的是,这种方法可以灵活地应用于任何基于FPN架构的检测器。EFC用GFF和MFR替换了传统的融合策略和颈部的大核卷积。
图3. FTU结构示意图。
EFC由两个主要组成部分构成:GFF和MFR。 GFF增强了相邻特征之间的相关性,并专注于关键信息。MFR分离强和弱的空间信息,利用轻量级卷积模块实现精确的特征转换。这种方法减少了不相关信息的提取,同时在深层网络中保留了小对象的关键细节。
1. Grouped Feature Focus Unit (GFF) 用于增强特征相关性,它通过关注不同特征之间的空间上下文信息来提高特征的语义表示。GFF 实现过程:
空间聚焦:首先,GFF 通过上采样和 1×1 卷积操作来确保特征图的通道数保持一致,然后将低分辨率的特征图与高分辨率的特征图进行元素级相加,得到粗略的特征图。接着,使用 1×1 卷积将特征图压缩到单个通道,以聚合空间信息,并通过 Sigmoid 激活函数生成空间聚焦权重。
特征分组与融合:将空间聚焦后的特征图沿通道维度分成多个组,对每个组内的特征进行交互操作。具体来说,使用卷积模块对每个组内的相邻通道特征进行细化,生成一个注意力掩码,该掩码捕获了不同通道间的特征相关性。然后将这个掩码应用于细化后的特征,最后将各组的特征连接起来,形成聚合且高度相关的相邻特征。
空间映射归一化:将分组聚合后的特征嵌入到具有多层原始特征融合(MFF)的归一化层中。通过使用特征图的均值和标准差进行归一化,从而融入更多小目标的空间位置信息。通过这种方式,我们获得了具有强特征相关性和丰富空间信息的特征。
2. Multilevel Feature Reconstruction Module (MFR) 用于特征重建和转换,旨在减少特征融合过程中产生的冗余特征,并保留更多关于小目标的信息。MFR实现过程:
特征分离:首先,MFR 从不同阶段的特征图中提取强特征和弱特征。这一步骤涉及到将特征图中的强信息和弱信息分离,以便独立处理。
特征转换:对于强特征,MFR 应用 1×1 卷积来生成包含更多详细信息的特征图。对于弱特征,MFR 利用设计的 Feature Transformation Unit (FTU) 来生成具有丰富语义信息的特征图,同时使用较少的计算资源。FTU 通过深度可分离卷积来实现,这种卷积操作降低了计算和参数开销。
级联融合:最后,MFR 将通过特征转换单元处理的特征与显示更多详细信息的特征图合并,生成最终的特征图。这个特征图包含了详细信息和跨通道信息交换。
四、实验分析
VisDrone数据集上的结果: 通过将EFC集成到不同的FPN网络中,与基线模型相比,检测精度提高,同时参数和GFLOPs减少。特别是,使用GFL作为基线检测器时,我们的方法在VisDrone数据集上实现了30.1mAP,比基线模型提高了1.7%。
UAVDT数据集上的结果: 在UAVDT数据集上,我们的方法在AP50上比基线模型提高了2.0%,在AP、AP50和AP75上分别比最新的轻量级方法CEASC提高了0.9%、0.6%和1.1%。
COCO数据集上的结果: 在COCO数据集上,我们的方法在APs上比基线模型提高了1.7%,在AP50、AP75、APM和APL上也有所提高。
五、代码
1
温馨提示:对于所有推文中出现的代码,如果您在微信中复制的代码排版错乱,请复制该篇推文的链接,在任意浏览器中打开,再复制相应代码,即可成功在开发环境中运行!或者进入官方github仓库找到对应代码进行复制!
import torch
import torch.nn as nn
import torch.nn.functional as F
# 论文题目:A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection
# 中文题目: 轻量级融合策略增强层间特征相关性,用于小目标检测
# 论文链接:https://ieeexplore.ieee.org/abstract/document/10671587
# 官方github:https://github.com/nuliweixiao/EFC
# 所属机构:北京理工大学
# 关键词:特征融合、轻量级、小目标检测
# 微信公众号:AI缝合术
class EFC(nn.Module):
def __init__(self,
c1, c2
):
super().__init__()
self.conv1 = nn.Conv2d(c1, c2, kernel_size=1, stride=1)
self.conv2 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
self.conv4 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
self.bn = nn.BatchNorm2d(c2)
self.sigomid = nn.Sigmoid()
self.group_num = 16
self.eps = 1e-10
self.gamma = nn.Parameter(torch.randn(c2, 1, 1))
self.beta = nn.Parameter(torch.zeros(c2, 1, 1))
self.gate_genator = nn.Sequential(
nn.AdaptiveAvgPool2d((1, 1)),
nn.Conv2d(c2, c2, 1, 1),
nn.ReLU(True),
nn.Softmax(dim=1),
)
self.dwconv = nn.Conv2d(c2, c2, kernel_size=3, stride=1, padding=1, groups=c2)
self.conv3 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
self.Apt = nn.AdaptiveAvgPool2d(1)
self.one = c2
self.two = c2
self.conv4_gobal = nn.Conv2d(c2, 1, kernel_size=1, stride=1)
for group_id in range(0, 4):
self.interact = nn.Conv2d(c2 // 4, c2 // 4, 1, 1, )
def forward(self, x):
x1, x2 = x
global_conv1 = self.conv1(x1)
bn_x = self.bn(global_conv1)
weight_1 = self.sigomid(bn_x)
global_conv2 = self.conv2(x2)
bn_x2 = self.bn(global_conv2)
weight_2 = self.sigomid(bn_x2)
X_GOBAL = global_conv1 + global_conv2
x_conv4 = self.conv4_gobal(X_GOBAL)
X_4_sigmoid = self.sigomid(x_conv4)
X_ = X_4_sigmoid * X_GOBAL
X_ = X_.chunk(4, dim=1)
out = []
for group_id in range(0, 4):
out_1 = self.interact(X_[group_id])
N, C, H, W = out_1.size()
x_1_map = out_1.reshape(N, 1, -1)
mean_1 = x_1_map.mean(dim=2, keepdim=True)
x_1_av = x_1_map / mean_1
x_2_2 = F.softmax(x_1_av, dim=1)
x1 = x_2_2.reshape(N, C, H, W)
x1 = X_[group_id] * x1
out.append(x1)
out = torch.cat([out[0], out[1], out[2], out[3]], dim=1)
N, C, H, W = out.size()
x_add_1 = out.reshape(N, self.group_num, -1)
N, C, H, W = X_GOBAL.size()
x_shape_1 = X_GOBAL.reshape(N, self.group_num, -1)
mean_1 = x_shape_1.mean(dim=2, keepdim=True)
std_1 = x_shape_1.std(dim=2, keepdim=True)
x_guiyi = (x_add_1 - mean_1) / (std_1 + self.eps)
x_guiyi_1 = x_guiyi.reshape(N, C, H, W)
x_gui = (x_guiyi_1 * self.gamma + self.beta)
weight_x3 = self.Apt(X_GOBAL)
reweights = self.sigomid(weight_x3)
x_up_1 = reweights >= weight_1
x_low_1 = reweights < weight_1
x_up_2 = reweights >= weight_2
x_low_2 = reweights < weight_2
x_up = x_up_1 * X_GOBAL + x_up_2 * X_GOBAL
x_low = x_low_1 * X_GOBAL + x_low_2 * X_GOBAL
x11_up_dwc = self.dwconv(x_low)
x11_up_dwc = self.conv3(x11_up_dwc)
x_so = self.gate_genator(x_low)
x11_up_dwc = x11_up_dwc * x_so
x22_low_pw = self.conv4(x_up)
xL = x11_up_dwc + x22_low_pw
xL = xL + x_gui
return xL
if __name__ == '__main__':
x1 = torch.randn(1,32,256,256)
x2 = torch.randn(1,32,256,256)
x = (x1,x2)
model = EFC(32,32)
print(model(x).shape)
便捷下载
https://github.com/AIFengheshu/Plug-play-modules/blob/main/(TGRS%202024)%20EFC.py(点击文末阅读原文)
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~