Concepts and Tricks In CNN
转自:http://blog.cvmarcher.com/posts/2015/05/17/cnn-trick/
这篇文章主要讲一下Convolutional Neural Network(CNN)里面的一些概念以及技巧。
Receptive Field (感受野)
这是一个非常重要的概念,receptive field往往是描述两个feature maps A/B上神经元的关系,假设从A经过若干个操作得到B,这时候B上的一个区域areabareab只会跟a上的一个区域相关areaaareaa,这时候areaaareaa成为areabareab的感受野。用图片来表示:
在上图里面,map 3里1x1的区域对应map 2的receptive field是那个红色的7x7的区域,而map 2里7x7的区域对应于map 1的receptive field是蓝色的11x11的区域,所以map 3里1x1的区域对应map 1的receptive field是蓝色的11x11的区域。
那么很容易得出来,receptive field的计算公式如下:
- 对于Convolution/Pooling layer:
其中riri表示第ii层layer的输入的某个区域,sisi表示第ii层layer的步长,kiki表示kernel size,注意,不需要考虑padding size。
- 对于Neuron layer(ReLU/Sigmoid/…)
Coordinate Mapping
通常,我们需要知道网络里面任意两个feature map之间的坐标映射关系,如下图,我们想得到map 3上的点p3p3映射回map 2所在的位置p2p2。
计算公式如下:
- 对于Convolution/Pooling layer:
其中pipi表示第ii层layer的输入的某个点,sisi表示第ii层layer的步长,kiki表示kernel size,paddingipaddingi
- 对于Neuron layer(ReLU/Sigmoid/…)
上面是计算任意一个layer输入输出的坐标映射关系,如果是计算任意feature map之间的关系,只需要用简单的组合就可以得到,下图是一个简单的例子:
Convolutionalize (卷积化)
最近掀起了FCN(全卷积网络)风,这种网络里面不包括全连接层(fully connected layer)。
卷积层跟全连接层的区别
卷积层的操作跟传统的滑窗(sliding windows)很相似,把kernel作用于输入的不同的区域然后产生对应的特征图,由于这样的性质,给定一个卷积层,它并不要求输入是固定大小的,它可能根据输入大小的不同而产生大小不一样的特征图。
全连接层的操作是把输入拉成一个一维的向量,然后对这一维的向量进行点乘,这就要求输入大小是固定的。
那么如果使用一个包含fc层的模型(如AlexNet)就必须使用固定大小的输入,其实有时候这是非常不方便以及不合理的,比如下图,如果我要把红框的塔输入网络,就必须得对它进行变成,假设是放到AlexNet里面,因为输入是224x224,那么就会对图片产生变形。
那么有没有办法使得网络可以接受任意的输入?实际上是可以的,只需要把全连接层变成卷积层,这就是所谓的卷积化。这里需要证明卷积化的等价性。直观上理解,卷积跟全连接都是一个点乘的操作,区别在于卷积是作用在一个局部的区域,而全连接是对于整个输入而言,那么只要把卷积作用的区域扩大为整个输入,那就变成全连接了,我就不给出形式化定义了。所以我们只需要把卷积核变成跟输入的一个map的大小一样就可以了,这样的话就相当于使得卷积跟全连接层的参数一样多。举个例子,比如AlexNet,fc6的输入是256x6x6,那么这时候只需要把fc6变成是卷积核为6x6的卷积层就好了。
例子:(1) 用全连接的: full-connected.prototxt,(2) 改成全卷积:full-conv.prototxt
Concepts and Tricks In CNN的更多相关文章
- Deep Visualization:可视化并理解CNN(转)
转载地址:https://zhuanlan.zhihu.com/p/24833574 一.前言 CNN作为一个著名的深度学习领域的“黑盒”模型,已经在计算机视觉的诸多领域取得了极大的成功,但是,至今没 ...
- Deep Visualization:可视化并理解CNN
原文地址:https://zhuanlan.zhihu.com/p/24833574 一.前言 CNN作为一个著名的深度学习领域的“黑盒”模型,已经在计算机视觉的诸多领域取得了极大的成功,但是,至今没 ...
- (转) [it-ebooks]电子书列表
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...
- CNN tricks
Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei) http://lamda.nju.edu.cn/weixs/projec ...
- Deep Learning in a Nutshell: Core Concepts
Deep Learning in a Nutshell: Core Concepts This post is the first in a series I’ll be writing for Pa ...
- (转) Deep Learning in a Nutshell: Core Concepts
Deep Learning in a Nutshell: Core Concepts Share: Posted on November 3, 2015by Tim Dettmers 7 Comm ...
- 【CV】CVPR2015_A Discriminative CNN Video Representation for Event Detection
A Discriminative CNN Video Representation for Event Detection Note here: it's a learning note on the ...
- CNN for NLP (CS224D)
斯坦福课程CS224d: Deep Learning for Natural Language Processing lecture13:Convolutional neural networks - ...
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
随机推荐
- PHP使用正则表达式验证电话号码(手机和固定电话)
这个还不错,很有用. tel='验证的电话号码'; $isMob="/^1[3-8]{1}[0-9]{9}$/"; $isTel="/^([0-9]{3,4}-)?[0 ...
- gerrit的merge conflict
找了很多资料,最后参考http://blog.csdn.net/w_jewelry/article/details/8123639 解决的. 先把gerrit的那几个commit abandon掉. ...
- JAVA: 接入YSDK遇到的问题
JAVA后台接口: 1, 腾讯开放平台: http://wiki.open.qq.com/wiki/%E9%A6%96%E9%A1%B5 2,YSDK介绍,大概流程: http://wiki.open ...
- Ninja:Java全栈Web开发框架-Ninja中文网
相信不少业界人士都还停留在SSh的时代 其实我想给大家推荐的一个轻量级框架那就是Ninja; Ninja是一个Java全栈Web开发框架,稳定.快速.非常高效. 商业价值 在你的下一个项目中,Ninj ...
- ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作
正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台 - (void)applicationDidEnterBackground:(UIApplication *)appl ...
- JS复习:第七章
第七章 函数表达式 一.定义函数的方式有两种:函数声明和函数表达式. 1.函数声明: function functionName(arg0 , arg1 , arg2){ //函数体... } 函数 ...
- 数据库中,char 与 varchar2 的区别
区别1: char 是定长的字符串 varchar2 是变长的字符串 区别2: name char(10) zhangsan__ 如果实际长度不足10,使用空格补齐 name varchar2 ...
- Linux启动新进程的几种方法及比较[转]
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- emoji图像转码解码 存入数据库
public String emojiConvert1(String str) throws UnsupportedEncodingException { String patternString = ...
- dplyr 数据操作 统计描述(summarise)
在R中,summary()是一个基础包中的重要统计描述函数,同样的在dplyr中summarise()函数也可以对数据进行统计描述. 不同的是summarise()更加的灵活多变,下面来看下summa ...