【深度学习】神经网络中的特征融合方式(add/concate)

小结

concat是通道数叠加,描述图像本身的特征增加了,而每一特征下的信息是没有增加

add为简单的像素叠加,通道不变;add后描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。

特征add的时候就是增加特征的信息量,特征concat的时候就是增加特征的数量注重细节的时候使用add,注重特征数量的时候使用concat

作用和注意事项

Concate

  • 作用:Concate操作用于将两个或多个张量在某个维度上连接在一起,生成一个更大的张量。这可以用于在深度学习模型中增加通道数或特征维度,以便在后续层中更好地捕获不同特征之间的关系。

  • 示例:在卷积神经网络中,特征图通常具有形状为(batch_size, channels, height, width),如果要在通道维度上连接两个特征图,可以使用concatenate操作,结果将是形状为(batch_size, channels1 + channels2, height, width)的特征图。

  • 注意:在连接时,两个张量的维度(除了连接维度)必须保持一致。例如,在通道维度上连接时,其他维度的尺寸必须相同。

Add

  • 作用:Add操作用于将两个张量逐元素相加在一起,生成一个新的张量。这可以用于实现跳跃连接(skip connection)或残差连接(residual connection),以促进梯度的流动,提高训练稳定性,以及在深层网络中减少梯度消失问题。

  • 示例:在残差网络(ResNet)中,残差块的输入特征与残差块的输出特征被相加在一起,以生成最终的块输出。这有助于网络在训练时更容易地学习恒等映射。

  • 注意:相加操作要求相加的张量具有相同的形状,因为它们是逐元素相加的。

直观理解

concat作用

concat是通道数的增加,也就是说描述图像本身的特征数(通道数)增加了,而每一特征下的信息是没有增加;横向或纵向空间上的叠加。

add作用

add为简单的像素叠加,是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。

add操作经典代表网络是ResNet,concate操作经典代表网络是Inception系统网络中的Inception结构和DenseNet。
add操作相当于加入一种先验知识。我觉得也就是相当于你对原始特征进行人为的特征融合。而你选择的特征处理的操作是element-wise add。通过add操作,会得到新的特征,这个新的特征可以反映原始特征的一些特性,但是原始特征的一些信息也会在这个过程中损失。
但是concate就是将原始特征直接拼接,让网络去学习,应该如何融合特征,这个过程中信息不会损失。
add其实是concate的一种特殊情况。但是concate带来的计算量较大,在明确原始特征的关系可以使用add操作融合的话,使用add操作可以节省计算代价。

数学表达

对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。下面具体用式子解释一下。由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。假设两路输入的通道分别为X_1,X_2,\cdots ,X_cY_1,Y_2,\cdots ,Y_c。那么concat的单个输出通道为(*表示卷积):

而add的单个输出通道为:

因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”(可能不太严谨)的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)。FPN[1]里的金字塔,是希望把分辨率最小但语义最强的特征图增加分辨率,从性质上是可以用add的。如果用concat,因为分辨率小的特征通道数更多,计算量是一笔不少的开销。
 

CPN[2]为了进一步减少计算量,对于分辨率小的特征图在add前用1x1的卷积减少了通道数。

有一个例子是ResNet[4]的skip connection。这里的add主要是为了保持mapping的identity性质,使梯度回传得更加容易。同样的操作在LSTM[5]里的cell state也能看到。

当然,如果不在乎计算量且数据足够的时候,用concat也是可以的,因为这两个本身就是包含关系。实际上concat在skip connection里用的也比add更普遍,比如U-Net[6]、DenseNet[7]。 

 其他理解

concatenate和add可以相互转化

 图来自文章Deepside: A general deep framework for salient object detection

concat是肯定是计算量大于element-wise add的,但个人认为,concat避免了直接add对信息造成的负面影响。而且逐元素加和的方式要求不同层的feature map具有完全一致的channel数量,而cancat不受channel数量的限制(yolov3里就是concat,做concat操作的两层通道数不同)。

Resnet,Densenet等神经网络中,常常采用add来连接特征层,Unet中常常采用concatenate。因为Unet是做图像分割的,图像分割是像素级分类,对特征的数量要求很高。而add是在一个特征上增加其语义信息,举个例子,一张脸,没有通过add话,你可能只会看到眼睛,通过add后你可以看见鼻子,眉毛,这样就可以增加置信度更好的判断这个人是谁,从而增加目标检测的准确率。

参考链接

如何理解神经网络中通过add的方式融合特征?

神经网络特征层concatenate和add层的不同——(一看就懂系列!!!)

concat与add操作辨析

  • 16
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值