前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ResNet和DenseNet

ResNet和DenseNet

作者头像
微风、掠过
发布2019-03-04 16:18:34
8740
发布2019-03-04 16:18:34
举报
文章被收录于专栏:机器学习算法与理论

ResNet 深度深 每一个 Inception 宽度广

一个Kernel(一个核KKD,设D个通道channel)就是一个对应的feature map. 第一个核会在每一个通道上都(卷积)走一遍,然后将对应每个通道的卷积值加起来,形成第一个feature map. 其他依此类推。对于各个通道而言,核的值均可不一样,所以D个通道并不共享权值,所谓权值共享是在整张图上不同位置会共享同一个kernel。

多通道卷积 对于D通道图像的各通道而言,是在每个通道上分别执行二维卷积,然后将D个通道加起来,得到该位置的二维卷积输出,对于RGB三通道图像而言,就是在R,G,B三个通道上分别使用对应的每个通道上的kernel_sizekernel_size大小的核去卷积每个通道上的WH的图像,然后将三个通道卷积得到的输出相加,得到二维卷积输出结果。因此,若有M个卷积核,可得到M个二维卷积输出结果,即M个Feature map,这m个特征图是取决于m个卷积核,而通道在这里被消去了。而下一层的卷积核的个数又是由上一层的kernel数决定的。Conv 1*1的核 能够保持输出图和原图一样,且计算量较小。在有padding的情况下,也能保持输出图片大小和原来的一样,因此是output(W,H,M)。 如果这里有连着的一堆差不多同质的数据 就可认为是把某个作为一帧中的多个通道堆叠起来进行卷积,然后输出一个具有几个feature map(由核的数目决定)的输出。

每一层都连着其以下的所有层,或者说每一层都与前面各层相连,且中间使用batch-normalization.

每个卷积层的输出feature map数量很少,该连接方式使得特征和梯度的传递更加有效。 Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision. alleviate the overfitting. 因为梯度在很多层之间不停地传递,这样就会出现层数越深梯度消失的情况。对于densenet,每层都可以直接 从损失函数和原始输入信号中获取梯度,从而带来隐含的深度监督。 dense connection 的这种连接方式减少了网络的参数,可在一定程度上抑制过拟合。 网络更窄,参数更少。 DenseNet [….] 表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。 denseblock 在两个相邻的denseblock之间,使用了卷积和池化操作,作为转移层和改变feature map的尺寸。

k=卷积核的数量即grow rate. 作者选择k=32 或者48.( 每个dense block中每层输出的feature map个数) bottleneck layer每个dense block 的33卷积前都包含了一个11的卷积操作。另外这里每个dense block的33卷积前面都包含了一个11的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征,何乐而不为。另外作者为了进一步压缩参数,在每两个dense block之间又增加了11的卷积操作。 因此在后面的实验对比中,如果你看到DenseNet-C这个网络,表示增加了这个Translation layer,该层的11卷积的输出channel默认是输入channel到一半。如果你看到DenseNet-BC这个网络,表示既有bottleneck layer,又有Translation layer。 再详细说下bottleneck和transition layer操作。在每个Dense Block中都包含很多个子结构,以DenseNet-169的Dense Block(3)为例,包含32个11和33的卷积操作,也就是第32个子结构的输入是前面31层的输出结果,每层输出的channel是32(growth rate),那么如果不做bottleneck操作,第32层的33卷积操作的输入就是3132+(上一个Dense Block的输出channel),近1000了。而加上11的卷积,代码中的11卷积的channel是growth rate4,也就是128,然后再作为33卷积的输入。这就大大减少了计算量,这就是bottleneck。至于transition layer,放在两个Dense Block中间,是因为每个Dense Block结束后的输出channel个数很多,需要用11的卷积核来降维。还是以DenseNet-169的Dense Block(3)为例,虽然第32层的33卷积输出channel只有32个(growth rate),但是紧接着还会像前面几层一样有通道的concat操作,即将第32层的输出和第32层的输入做concat,前面说过第32层的输入是1000左右的channel,所以最后每个Dense Block的输出也是1000多的channel。因此这个transition layer有个参数reduction(范围是0到1),表示将这些输出缩小到原来的多少倍,默认是0.5,这样传给下一个Dense Block的时候channel数量就会减少一半,这就是transition layer的作用。文中还用到dropout操作来随机减少分支,避免过拟合,毕竟这篇文章的连接确实多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.02.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档