(DeepLab-resnet) + 深度学习部份层 小笔记。

首先说一下resnet:

1.解决卷积网络不断加深时出现的退化问题:即即使在训练集上都出现准确率在随着网络不断加深而降低的现象。

2.resnet实现:

一、减少传统卷积或者全连接的信息丢失问题,(因为会有x直接连接输至输出那里)。

二、每一层都用了BN!


1. BN要和Scale结合使用:

1. bn是实现权值参数的归一化:x_norm = (x - u) / std 

2. scale是实现把被你归一化打乱的特征恢复回来,使得上一层学到的特征依然保存下来:y = alpha * x_norm + betaalpha和beta为需要学习的参数。

 
  
 
  
那么caffe中的bn层其实只做了第一件事。scale层做了第二件事。这样你也就理解了scale层里为什么要设置bias_term=True,这个偏置就对应2)件事里的beta。(这两句来自百度知道)
我的理解,resnet的conv里没有bais项,只有weights,在紧接的bn层里,放置 bais项,给到scale里了。这是resnet的独特之处,其他的网络(如vgg,googlenet)的conv并不这样(它们的w b 共存),因为他们并不是每个conv后面都跟着bn层操作。
来自知乎大牛的回答。。。。。

2. caffe的Eltwise层

Eltwise:有三个可能操作

product:点乘

sum:相加(默认)

max:最大值


3.resnet v1 v2 的区别:

一:v2 在每一层前都用了Batch Normalization,
二:v2 对输入进行preactivation(预激活),而不是在卷积后再进行激活函数处理。


3.Resnet的单个Block结构:

(DeepLab-resnet) + 深度学习部份层 小笔记。_第1张图片

左右都是残差学习模块,且他们的in 和 out 都是depth一致。但是右边的三层卷机结构需要更少的参数,它有一个先降维再升维的操作。如下:

(DeepLab-resnet) + 深度学习部份层 小笔记。_第2张图片(这个Inception Net 我的上一篇博文有介绍。)

前两层卷积降维至64,第三层升维至256.。。减少很多参数啊~~~



如果in 和 out 的depth不一致,则,以下代码的else部份代码解决:

(DeepLab-resnet) + 深度学习部份层 小笔记。_第3张图片

depth为输出的维深度,线性映射指的是卷积操作,卷积核为1x1,步长为中间层卷积的步长stride。

好了,现在in 和 out 的 depth一致了,那么来解决图像的尺寸 wxh 的问题。两张图像得尺寸(长宽)一致才能对应像素去相加减啊。这就是上面代码的if部份解决的问题了:

对输入的图像进行下采样subsample,步长为中间那一层卷积的stride值。(第一三层的stride都是1,不改变图像的大小尺寸。)这样子操作,就使得这个要加到输出部份的shortcut的 wxh 和 depth都和输出一致了,就可以一一对应的加法操作了。

这几行代码简直短小精悍啊!!!




你可能感兴趣的:((DeepLab-resnet) + 深度学习部份层 小笔记。)