18—concat与add区别
问题
在网络模型当中,经常要进行不同通道特征图的信息融合相加操作,以整合不同通道的信息,在具体实现方面特征的融合方式一共有两种,一种是 ResNet 和 FPN 等当中采用的 element-wise add ,另一种是 DenseNet 等中采用的 concat 。他们之间有什么区别呢?
add
举个例子:
1 |
|
从中可以很容易地看出,add 方式有以下特点:
- 做的是对应通道对应位置的值的相加,通道数不变
- 描述图像的特征个数不变,但是每个特征下的信息却增加了。
concat
也举个例子
1 |
|
从中可以很容易地看出,concat 方式有以下特点:
- 做的是通道的合并,通道数变多了
- 描述图像的特征个数变多,但是每个特征下的信息却不变。
多一点理解
DenseNet和Inception中更多采用的是concatenate操作,而ResNet更多采用的add操作,Resnet是做值的叠加,通道数是不变的,DenseNet是做通道的合并。你可以这么理解,add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。
add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)
参考资料
18—concat与add区别
https://kongyan66.github.io/2022/11/23/深度学习基础/18_特征融合concat和add的区别/