Concat层的作用就是将两个及以上的特征图按照在channel或num维度上进行拼接,并没有eltwise层的运算操作,举个例子,如果说是在channel维度上进行拼接conv_9和deconv_9的话,首先除了channel维度可以不一样,其余维度必须一致(也就是num、H、W一致),这时候所做的操作仅仅是conv_9 的channel k1加上deconv_9的channel k2,Concat 层输出的blob可表示为:N*(k1+k2)*H*W。通常情况下,考虑到Concat是希望将同大小的特征图拼接起来,那为什么会产生同大小的特征图呢?显然离不开上采样和下采样的操作,接下来,以Caffe为例,介绍一下这两种拼接的方式,如下:

  • 选择axis=0,表示在num维度上进行拼接,可表示为:(k1+k2)*C*H*W;
  • 选择axis=1,表示在channel维度上进行拼接,可表示为:N*(k1+k2)*H*W。

注意,卷积运算是三维的(不要想成二维的,当然这应该在学卷积的时候说过的),卷积核的数量就是feature map的channel,feature map的num通常是minibatch的数目。可问题是,这两种Concat的方式应该如何选择呢?(ps:如果自己不会用,很自然就是看看别人怎么用)

那么接下来我们就看看到底怎么用。

目前我见过的大都是在channel维度上进行拼接,其实也容易想到,因为我们说feature map 的num是minibatch的图片数目,比方我们的batch是32,但是我们有4张显卡同时训练,显然minibatch等于8,这个8表示的是每张显卡一次性处理的图片数目,这么说来,如果在num维度上拼接的意思就是将同一张显卡处理的feature map数目重复的加倍了,当然由于上下采样并不是严格的互逆运算,所以在重复的特征图上像素值还是存在差异。反之,如果是在channel 维度上拼接,此时channel 的数量增加了,也就是说同一个大小的特征图有了更多的特征表示,很多论文都已经证实其可以提高检测性能,但是如果不是cancat的方式,而是增加原有的卷积层的channel数目会导致显存占用增加,速度下降,这样一来concat的方式在不失速度的前提下,提高了精度,这也是其主要的贡献。当然光说不行,我把这两种方法都试验一下,供大家参考。

在试验之前介绍一下我的环境,我采用的是VGG模型加的改进,训练中用了4个TITAN X,minibatch等于8,在保证其它情况一致的情况下进行如下试验:

  1. 在num维度上进行拼接;显然,在num维度上拼接的话,concat层输出的num个数就变成16了,如下表统计的结果显示,此种操作的效果很差,出现missing GT position for label的warning,不建议使用。
  2. 在channel维度上进行拼接,在channel维度上的拼接分成无BN层和有BN层。

(1)无BN层:直接将deconvolution layer 和convolution layer concat。实验结果表明,该方式取得的结果精度较低,低于原有的VGG模型,分析主要的原因是漏检非常严重,原因应该是concat连接的两层参数不在同一个层级,类似BN层用在eltwise层上。

(2)有BN层:在deconvolution layer 和convolution layer 后面加batchnorm和scale层(BN)后再concat。实验结果表明,该方式取得了比原有VGG模型更好的检测效果(表中的迭代次数还没有完哦),增加了2%的精度,但是速度上慢了一些。

总结:concat层多用于利用不同尺度特征图的语义信息,将其以增加channel的方式实现较好的性能,但往往应该在BN之后再concat才会发挥它的作用,而在num维度的拼接较多使用在多任务问题上,将在后续的博客中介绍,总之concat层被广泛运用在工程研究中。

Concat层解析的更多相关文章

  1. slice层解析

    如果说之前的Concat是将多个bottom合并成一个top的话,那么这篇博客的slice层则完全相反,是把一个bottom分解成多个top,这带来了一个问题,为什么要这么做呢?为什么要把一个低层的切 ...

  2. Eltwise层解析

    Concat层虽然利用到了上下文的语义信息,但仅仅是将其拼接起来,之所以能起到效果,在于它在不增加算法复杂度的情形下增加了channel数目.那有没有直接关联上下文的语义信息呢?答案是Eltwise层 ...

  3. json两层解析

    public class Demo { public static void main(String[] args) { try { // 创建连接 服务器的连接地址 URL url = new UR ...

  4. Caffe_Scale层解析

    Caffe Scale层解析 前段时间做了caffe的batchnormalization层的解析,由于整体的BN层实现在Caffe是分段实现的,因此今天抽时间总结下Scale层次,也会后续两个层做合 ...

  5. ASP.NET SignalR2持久连接层解析

    越是到年底越是感觉浑身无力,看着啥也不想动,只期盼着年终奖的到来以此来给自己打一针强心剂.估摸着大多数人都跟我一样犯着这样浑身无力的病,感觉今年算是没挣到啥钱,但是话也不能这么说,搞得好像去年挣到钱了 ...

  6. Euclideanloss_layer层解析

    这里说一下euclidean_loss_layer.cpp关于该欧式loss层的解析,代码如下: #include <vector> #include "caffe/layers ...

  7. Spring的Service层与Dao层解析

    本文转载于网络,觉得写得很透彻. dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的.service层是面向功能的,一个个功能模块比如说银行登记并完成一次存 ...

  8. Mybatis框架基础支持层——解析器模块(2)

    解析器模块,核心类XPathParser /** * 封装了用于xml解析的类XPath.Document和EntityResolver */ public class XPathParser { / ...

  9. TCP协议详解7层和4层解析(美团,阿里) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握

    如果想了解HTTP的协议结构,原理,post,get的区别(阿里面试题目),请参考:HTTP协议 结构,get post 区别(阿里面试) 这里有个大白话的解说,可以参考:TCP/IP协议三次握手和四 ...

随机推荐

  1. By.cssSelector定位元素一个不足发现

     这个如果用cssSelector定位,代码如下,此时输出的数值是0 System.out.println(driver.findElements(By.cssSelector("div[c ...

  2. HashMap,HashTable,concurrentHashMap,LinkedHashMap 区别

    HashMap 不是线程安全的 HashTable,concurrentHashMap 是线程安全 HashTable 底层是所有方法都加有锁(synchronized) 所以操作起来效率会低 con ...

  3. 半夜思考之查漏补缺, Spring 的 Bean 后处理器

    有一篇写的是容器后处理器, 这篇是 Bean 后处理器 , 我对这个 Bean 后处理器的理解就是一个 AOP 编程 . Bean 后处理器 : 是一种特殊的 Bean , 这种 Bean 不对外提供 ...

  4. YARN的重启动问题:RM Restart/RM HA/Timeline Server/NM Restart

    ResourceManger Restart ResourceManager负责资源管理和应用的调度,是YARN的核心组件,有可能存在单点失败的问题.ResourceManager Restart是使 ...

  5. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  6. win7右下角的同步中心怎么去除

    “开始”-“运行”-“regedit”,在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Syncmgr\Handlers” ...

  7. BZOJ 1340: [Baltic2007]Escape逃跑问题

    1340: [Baltic2007]Escape逃跑问题 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 285  Solved: 133[Submit] ...

  8. NOI前总结

    最近也就是天天考试,总结一下. 7.1 开场T1T2都是不可做的概率期望,只有T3看起来可做,于是怒干4h+,将题解里面的所有结论都推出来了,大模拟写的一点毛病都没有,可还是因为2-SAT掌握不熟结果 ...

  9. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程

    我们在之前的文章中中已经讲到了正确部署运行cas server 和 在cas client中配置. 在此基础上 我们去掉了https的验证,启用了http访问的模式. 单点登录(七)-----实战-- ...

  10. centos详细安装redis步骤

    1. 从官网(http://redis.io)下载最新稳定版2. 使用命令解压下载的tar包:tar –zxvf redis-3.2.0.tar.gz3. 通过命令cd redis-3.2.0进入源码 ...