卷积中add与concat操作区别及作用

几何图示区别

在这里插入图片描述
add操作
在这里插入图片描述
N i N_i Ni经过一个尺寸为3X3,步长为2的卷积之后,特征图尺寸减小为原来的一半然后和 P i + 1 P_{i+1} Pi+1这个特征图做add操作,得到的结果再经过一个卷积核尺寸为3X3,stride=1的卷积层得到 N i + 1 N_{i+1} Ni+1

作用区别

concat作用
concat是通道数的增加,也就是说描述图像本身的特征数(通道数)增加了,而每一特征下的信息是没有增加;横向或纵向空间上的叠加.
add作用
add为简单的像素叠加,是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。
如何选择
a d d 是 描 述 图 像 的 特 征 下 的 信 息 量 增 多 了 , 但 是 描 述 图 像 的 维 度 本 身 并 没 有 增 加 , 只 是 每 一 维 下 的 信 息 量 在 增 加 , 这 显 然 是 对 最 终 的 图 像 的 分 类 是 有 益 的 。 而 c o n c a t e n a t e 是 通 道 数 的 合 并 , 也 就 是 说 描 述 图 像 本 身 的 特 征 增 加 了 , 而 每 一 特 征 下 的 信 息 是 没 有 增 加 。 \red{add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。} addconcatenate
因 此 a d d 相 当 于 加 了 一 种 p r i o r , 当 两 路 输 入 可 以 具 有 “ 对 应 通 道 的 特 征 图 语 义 类 似 ” ( 可 能 不 太 严 谨 ) 的 性 质 的 时 候 , 可 以 用 a d d 来 替 代 c o n c a t , 这 样 更 节 省 参 数 和 计 算 量 ( c o n c a t 是 a d d 的 2 倍 ) \red{因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似”(可能不太严谨)的性质的时候,可以用add来替代concat,这样更节省参数和计算量(concat是add的2倍)} addprioraddconcatconcatadd2

数学解释区别

对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。下面具体式子解释一下,由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。假设两路输入的通道分别为 X 1 , X 2 , . . . , X c X_1,X_2,...,X_c X1,X2,...,Xc Y 1 , Y 2 , . . . , Y c Y_1,Y_2,...,Y_c Y1,Y2,...,Yc.
那么concat单个输出通道为:
在这里插入图片描述
add单个输出通道为:
在这里插入图片描述

程序区别

add

def _merge_function(self, inputs):
    output = inputs[0]
    for i in range(1, len(inputs)):
        output += inputs[i]
    return output

concat

t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat([t3, t4], 0)) ==> [4, 3]
tf.shape(tf.concat([t3, t4], 1)) ==> [2, 6]

引用链接
[1]https://blog.csdn.net/weixin_39610043/article/details/87103358
[2]https://blog.csdn.net/andyjkt/article/details/107590669
[3]https://zhuanlan.zhihu.com/p/110204563

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐