feature map的几种连接形式

1、concatenate:通道合并,每个通道对应着对应的卷积

2、element-wise addition(计算量比1小)
将对应特征图相加,然后卷积。对应通道的特征图语义类似,对应的特征图共享一个卷积核。

对比:
add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征数(通道数)增加了,而每一特征下的信息是没有增加。
在这里插入图片描述
在这里插入图片描述
显然,concat计算量>add

另:在spindlenet中还有element-wise max和element-wise average方式
实验结果:max>avg>concate

### 如何实现FPN连接及其配置方法 #### 1. FPN 的基本原理 FPN(Feature Pyramid Network)是一种用于多尺度特征提取的网络结构,其核心思想是通过自顶向下的路径和横向连接来增强不同层次特征图的信息融合能力。具体来说,FPN 将深层语义丰富的高维特征与浅层空间精度高的低维特征相结合[^4]。 #### 2. FPN 连接的具体实现方式 为了实现 FPN 的功能,通常需要以下几个步骤: - **顶层特征处理** 对于输入图像经过骨干网络(Backbone, e.g., ResNet)后的最深一层特征 C5,先对其进行 \(1 \times 1\) 卷积操作以减少通道数并获得初始的金字塔顶部特征 P5[^4]。 - **逐级下采样与上采样** 利用双线性插值法对当前层的特征进行上采样,并将其与前一层的特征(如 C4、C3 和 C2)通过横向连接的方式相加,从而逐步构建出更精细的特征图序列 P4、P3 和 P2[^4]。 - **平滑卷积层** 每次完成上下采样的叠加之后,都会附加一个 \(3 \times 3\) 的卷积核作用于所得结果之上,目的是消除可能存在的混叠效应以及进一步优化最终输出的质量[^4]。 以下是基于 PyTorch 编写的简单版 FPN 实现代码示例: ```python import torch.nn as nn class FPN(nn.Module): def __init__(self, in_channels_list, out_channel=256): super(FPN, self).__init__() # 定义一系列1x1卷积调整各阶段feature map尺寸至统一大小(out_channel) self.lateral_convs = nn.ModuleList([ nn.Conv2d(in_ch, out_channel, kernel_size=1) for in_ch in in_channels_list]) # 平滑每一层输出使用的3x3 convs self.smooth_convs = nn.ModuleList([nn.Conv2d(out_channel, out_channel, kernel_size=3, padding=1)] * len(in_channels_list)) def forward(self, inputs): last_inner = self.lateral_convs[-1](inputs[-1]) # 获取最后一层lateral feature results = [] results.append(self.smooth_convs[-1](last_inner)) # 添加smoothed version of top-level lateral feature for i in range(len(inputs)-2,-1,-1): # 自倒数第二层开始向前遍历 inner_lateral = self.lateral_convs[i](inputs[i]) upsampled_feature = nn.functional.interpolate( last_inner, size=(inner_lateral.shape[2], inner_lateral.shape[3]), mode="nearest" ) last_inner = inner_lateral + upsampled_feature results.insert(0, self.smooth_convs[i](last_inner)) return tuple(results) # 假设in_channels分别为[C2,C3,C4,C5] model = FPN([256, 512, 1024, 2048]) ``` #### 3. 配置方法教程 当把 FPN 应用于实际项目比如目标检测框架 YOLO 中时,则需注意以下几点设置事项: - **选择合适的 Backbone 网络**: 不同版本的YOLO系列模型可能会采用不同的基础主干网路作为特征抽取器,因此要确认所选backbone能够提供足够的中间层输出供后续fpn模块接入使用[^1][^2]. - **修改neck部分定义**: 如果是在现有yolovX基础上加入新的necks组件如MAFPN或者BiFPN的话,则应该参照官方文档说明替换掉原有的simple fpn/pafpn等部件[^3]. - **训练参数微调**: 考虑到新增加了复杂的特征交互逻辑可能导致收敛速度变慢等问题,在实际调试过程中往往还需要适当延长epoch数量或是调节学习率衰减策略等等[^1]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值