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

特征合并相关(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的行数要相同。

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第1张图片

结果:

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第2张图片

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

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第3张图片

结果:

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第4张图片

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

3、关于torch.stack函数

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

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第5张图片

结果:

torch.cat()\torch.stack()\concat操作\FPN类模型通道特征合并_第6张图片

你可能感兴趣的:(神经网络,计算机视觉,目标检测)