torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并

本文介绍了在特征合并中两种常用的方法:FPN(Feature Pyramid Network)和BiFPN(Bi-directional Feature Pyramids Network)。详细阐述了FPN的通道合并策略以及BiFPN中通过学习权重参数实现特征融合的不同。同时,对比了torch.cat()和torch.stack()在PyTorch中用于特征拼接的差异,强调了它们在拼接维度、张量大小匹配上的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特征合并相关(concat)


1、合并方法

(1)FPN

先用1*1卷积合并通道数,然后上采样,对应元素直接相加。如此合并之后为减少混叠效应,再用3*3卷积进行处理得到每一层级最后的特征图;除此之外,为不同层次的输出通道设置固定维数(因为所有层次都像传统的特征化图像金字塔一样使用共享的分类器/回归器)

与此同时由于FPN不同级别特征图尺寸不同所以对应的锚框大小也不同(但是长宽比例都是相同的)。另外,由于不同尺度的存在,ROI Pooling层也要设置不同的尺度(用于提取ROI)(ResNets中没有预先训练的fc层:这些层是随机初始化的)

(2)BiFPN

对于特征融合,从FPN 开始普遍采用的是一个特征先 Resize ,再和另一层的特征相加。作者认为这样的方式是不合理。因为这样假设这两层的特征有了相同的权重。考虑它们最终的贡献应该不同,因此,一个常规的想法是加入权重参数w来自动学习重要性。

2、torch.cat()函数

torch.cat ( (A, B), dim=0)接受一个由两个(或多个)tensor组成的元组,按行拼接,所以两个(多个)tensor的列数要相同。

torch.cat ( (A, B), dim=1)是按列拼接,所以两个tensor的行数要相同。

结果:

在深度学习处理图像时,常用的有3通道的RGB彩色图像及单通道的灰度图。张量size为c*h*w,即通道数*图像高度*图像宽度。在用torch.cat拼接两张图像时一般要求图像大小一致而通道数可不一致,即h和w同,c可不同。(如果我们直接使用cat(A,B),默认从第0维进行合并)

结果:

总结:使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

3、关于torch.stack函数

torch.stack()函数同样有张量列表和维度两个参数。stack与cat的区别在于,torch.stack()函数要求输入张量的大小完全相同,得到的张量的维度会比输入的张量的多出1维,并且多出的那个维度就是拼接的维度,那个维度的大小就是输入张量的个数。

结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值