大家好,我是灿视。
今天我们来聊下在CV中常用的特征融合手段。
看文章之前,别忘了关注我们,在我们这里,有你所需要的干货哦!
这是目前更新的《百面第三版的汇总》,我们会持续更新,欢迎关注!
特征融合目前有两种常用的方式,一种是
操作,这种操作广泛运用于
与
中。一种是
操作,这种操作最广泛的运用就是
,
等网络中。如下图所示:
也有如
这样的,多分辨率之间使用
形式的特征融合。
>>> import torch
>>> img1 = torch.randn(2, 3, 58, 58)
>>> img2 = torch.randn(2, 3, 58, 58)
>>> img3 = img1 + img2
>>> img4 = torch.cat((img1, img2), dim=1)
>>> img3.size()
torch.Size([2, 3, 58, 58])
>>> img4.size()
torch.Size([2, 6, 58, 58])
>>>
那么对于
操作与
操作,它们中间有哪些区别与联系呢?
和
形式都可以理解为整合多路分支
的信息,只不过
比较直观(同时利用不同层的信息),而
理解起来比较生涩(为什么两个分支的信息可以相加?)。
操作时时将通道数增加,
是特征图相加,通道数不变。
对于两路通入而言,其大小(
)是一样的。假设两路输入的通道分别为
,
。
则对于
的操作,通道数相同且后面带卷积的话,
等价于
之后对应通道共享同一个卷积核。
当我们需要聚合的两个分支的
叫做
与
的时候,我们可以使用
, 概括为:
对于
的操纵,可以概括为:
因此,采用
操作,我们相当于加入一种先验。当两个分支的特征信息比较相似,可以用
来代替
,这样可以更节省参数量。
操作而言,通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。
层更像是信息之间的叠加。这里有个先验,
前后的
语义是相似的。
因此,像是需要将
与
的
进行融合,如果它们语义不同,则我们可以使用
的形式,如
,
这种编码与解码的结构,主要还是使用
。
而如果
与
是相同语义,如
与
是不同分辨率的特征,其语义是相同的,我们可以使用
来进行融合,如
等网络的设计。
- END -
大家好,我是灿视。目前是位算法工程师 + 创业者 + 奶爸的时间管理者!
我曾在19,20年联合了各大厂面试官,连续推出两版《百面计算机视觉》,受到了广泛好评,帮助了数百位同学们斩获了BAT等大小厂算法Offer。现在,我们继续出发,持续更新最强算法面经。
我曾经花了4个月,跨专业从双非上岸华五软工硕士,也从不会编程到进入到百度与腾讯实习。