Concepts and Tricks In CNN

这篇文章主要讲一下Convolutional Neural Network(CNN)里面的一些概念以及技巧。

Receptive Field (感受野)

这是一个非常重要的概念,receptive field往往是描述两个feature maps A/B上神经元的关系,假设从A经过若干个操作得到B,这时候B上的一个区域 areab areab只会跟a上的一个区域相关 areaa areaa,这时候 areaa areaa成为 areab areab的感受野。用图片来表示:

receptive_field.jpg
receptive_field.jpg

在上图里面,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:
ri=si(ri+11)+ki ri=si⋅(ri+1−1)+ki

其中 ri ri表示第 i i层layer的输入的某个区域, si si表示第 i i层layer的步长, ki ki表示kernel size,注意,不需要考虑padding size。

  • 对于Neuron layer(ReLU/Sigmoid/…)
ri=ri+1 ri=ri+1

Coordinate Mapping

通常,我们需要知道网络里面任意两个feature map之间的坐标映射关系,如下图,我们想得到map 3上的点 p3 p3映射回map 2所在的位置 p2 p2

coordinate_map.jpg
coordinate_map.jpg

计算公式如下:

  • 对于Convolution/Pooling layer:
pi=sipi+1+(ki12paddingi) pi=si⋅pi+1+(ki−12−paddingi)

其中 pi pi表示第 i i层layer的输入的某个点, si si表示第 i i层layer的步长, ki ki表示kernel size, paddingi paddingi

  • 对于Neuron layer(ReLU/Sigmoid/…)
pi=pi+1 pi=pi+1

上面是计算任意一个layer输入输出的坐标映射关系,如果是计算任意feature map之间的关系,只需要用简单的组合就可以得到,下图是一个简单的例子:

coordinate_map_example.jpg
coordinate_map_example.jpg

Convolutionalize (卷积化)

最近掀起了FCN(全卷积网络)风,这种网络里面不包括全连接层(fully connected layer)。

卷积层跟全连接层的区别

卷积层的操作跟传统的滑窗(sliding windows)很相似,把kernel作用于输入的不同的区域然后产生对应的特征图,由于这样的性质,给定一个卷积层,它并不要求输入是固定大小的,它可能根据输入大小的不同而产生大小不一样的特征图。

sliding-windows.png
sliding-windows.png

全连接层的操作是把输入拉成一个一维的向量,然后对这一维的向量进行点乘,这就要求输入大小是固定的。

那么如果使用一个包含fc层的模型(如AlexNet)就必须使用固定大小的输入,其实有时候这是非常不方便以及不合理的,比如下图,如果我要把红框的塔输入网络,就必须得对它进行变成,假设是放到AlexNet里面,因为输入是224x224,那么就会对图片产生变形。

warp-image.png
warp-image.png

那么有没有办法使得网络可以接受任意的输入?实际上是可以的,只需要把全连接层变成卷积层,这就是所谓的卷积化。这里需要证明卷积化的等价性。直观上理解,卷积跟全连接都是一个点乘的操作,区别在于卷积是作用在一个局部的区域,而全连接是对于整个输入而言,那么只要把卷积作用的区域扩大为整个输入,那就变成全连接了,我就不给出形式化定义了。所以我们只需要把卷积核变成跟输入的一个map的大小一样就可以了,这样的话就相当于使得卷积跟全连接层的参数一样多。举个例子,比如AlexNet,fc6的输入是256x6x6,那么这时候只需要把fc6变成是卷积核为6x6的卷积层就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值