专栏首页基于深度学习的图像增强深度残差神经网络ResNet 学习笔记

深度残差神经网络ResNet 学习笔记

ResNet——MSRA何凯明团队的Residual Networks,在2015年ImageNet上大放异彩,在ImageNet的classification、detection、localization以及COCO的detection和segmentation上均斩获了第一名的成绩,而且Deep Residual Learning for Image Recognition也获得了CVPR2016的best paper,实在是实至名归。

介绍

本文采用了152层的残差神经网络,比去年的VGG还要多8层,但复杂度确比它低,最后以3.57%的top-5错误率赢得了2015年ILSVRC的冠军,同时在COCO detection 和 COCO segmentation 也获得了第一位。 源于网络深度的重要性,会引发一个问题:网络是否会随着深度的增加而获得越好的效果?增加深度会造成梯度消失或梯度爆炸。解决这个问题的方法是正则化初始化和正则化中间层,这样可以训练十几层网络。但是深层网络刚开始会收敛,之后会退化,也就是说随着梯度的增加,正确率会达到饱和,之后会下降。但这不是过拟合造成的,因为随着网络深度的增加会导致更高的错误率。下图就是一个典型的例子:

在本文中就使用残差网络来解决随着深度增加导致的性能退化问题,残差块如下:

我们假设期望的结果为一个潜在映射H(x),H(x) = F(x)+ x ,则F(x)= H(x) - x 为残差映射,其优化比H(x)更简单,所以使用残差网络相当于学习的目标不是最优解H(x)和全等映射x,而是他们的差。F(x)+ x 可以通过shortcut connections 这种前馈神经网络实现,在我们的实验中,shortcut connections就简化为图中的identity mapping,这样没有引入额外的参数,也不会增加计算的复杂性。

Shortcuts恒等映射

在本文主,我们认为一个残差块应该定义为:

其中,x,y分别代表这一层的输入和输出,F(x,{Wi})代表需要学习的残差映射。例如在上图2中,中间是2层网络,则

σ表示ReLU,x和F的维度必须相同,如果维度不同,就通过shortcut connections用一个线性投影Ws来使维度相匹配,如下:

残差函数F比较灵活,本文的实验中F有2-3个层,当然更多也是可以的,当只有1层时,就退化为线性。

网络结构

下图为VGG-19、34层的普通卷积神经网络和34层的ResNet网络的对比图。

由于shortcuts只能在输入输出维度相同时才能直接使用,当维度增大时,有两种选择:(A)使用额外的zero padding 来增加维度,这种选择不会引入参数(B)使用Ws投影到新的空间,用1*1的卷积实现,直接改变1*1卷积的filters数目,这种选择会增加参数。

实验

(1)使用color augmentation做数据扩增 (2)在每个卷积层之后,激活函数之前使用batch normalization (BN) (3)SGD作优化,weight decay =0.0001,momentum=0.9 (4)learning rate=0.1,当错误率停滞时除以10 (5)不使用dropout

普通神经网络结构 先评估18层和34层的网络结构,如下:

18层和34层的普通神经网络和残差网络实验结果对比如下:

其top-1错误率如下:

从上面两张图中,可以得出三个结论: ①34层的残差网络比18层的网络错误率降低2.8%,并且34层的网络训练误差更小,在验证集中更generalizable,这说明这种网络结构可以解决退化问题;(实验了plain-18和plain-34,展示了退化问题。说明了退化问题不是因为梯度弥散,因为加入了BN。另外也不能简单地增加迭代次数来使其收敛,增加迭代次数仍然会出现退化问题。) 参考链接:https://www.jianshu.com/p/e58437f39f65 ②34层的残差网络比34层的普通网络错误率下降3.5%,证明了残差网络在深度结构中的有效性; 最后,比较18层的普通网络和18层的残差网络,发现18层的残差网络更容易优化,收敛速度更快。 对于同等映射维度不匹配时,匹配维度有两种方法,zero padding不会增加参数,projection投影法会引入参数。本文比较了三种方式:(A)渐增维度使用zero-padding shortcuts(B)渐增维度使用projection shortcuts,其他使用全等映射(C)维度匹配或不匹配的同等映射全用投影法。实验结果如下:

从上可以发现,B比A的效果稍好一些,因为zero padding的部分没有参与残差学习。C比B也稍好一些,但是考虑到不增加复杂度和参数free,不采用这种方法。

更深的瓶颈结构:

考虑到我们能承受的训练时间,将残差块(building block )修改为瓶颈(bottleneck)设计如上图。首端和末端使用11卷积用来削减和恢复维度,剩下中间3\3的卷积为瓶颈部分。与原来结构相比,这两种结构的时间复杂度相似。此时,没有引入参数的全等映射对这种瓶颈结构就显得非常重要,如果使用投影法(projection)会使得时间复杂度和模型大小加倍,所以要使用zero padding的同等映射。

探索大于1000层的网络 我们设置大于1000的网络结构深度,我们的方法没有出现优化困难的问题,测试误差仍然比较好,为7.93%,但是结果比110层的网络要差,尽管两者的训练误差相似,这是因为过拟合,可以使用maxout/dropout来解决过拟合的问题,但本文的实验没有使用任何maxout/dropout等强大的正则化方式。

程序实现

这里我以CIFAR10为数据集,写了一个简单的ResNet用于图像分类,最后的top-1正确率为83%左右,主要程序如下:

参考链接: https://www.jianshu.com/p/e58437f39f65 https://blog.csdn.net/diamonjoy_zone/article/details/70904212

推荐两篇写得比较详细的残差网络的博客: https://blog.csdn.net/loveliuzz/article/details/79117397 https://blog.csdn.net/qq_40027052/article/details/78261737

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Unpaired Image Enhancement Featuring Reinforcement-Learning-Controlled Image Editing Software

    论文题目: Unpaired Image Enhancement——Featuring Reinforcement-Learning-Controlled Im...

    Natalia_ljq
  • 基于深度卷积神经网络的图像超分辨率重建(SRCNN)学习笔记

    目前,单幅图像的超分辨率重建大多都是基于样本学习的,如稀疏编码就是典型的方法之一。这种方法一般先对图像进行特征提取,然后编码成一个低分辨率字典,稀疏系数传到高分...

    Natalia_ljq
  • Learning to See in the Dark(CVPR2018)

    这篇论文最大的贡献之一就是提供了一个真实世界的低光照图像和对应reference的数据集,但这些图像不是传统的类型,属于raw sensor data,低光照图...

    Natalia_ljq
  • 在终端使用脚本查看网站 SSL 证书信息

    之前遇到过一次赛门铁克很久的证书被Chrome弃用的问题,涉及到了查看证书。当然第一个大家会想到的是在浏览器中查看,但是总是感觉不够极客。后来摸索找到了终端查看...

    技术小黑屋
  • 做olap一定要要了解的Druid存储结构

    导读:Apache Druid是一款优秀的OLAP引擎,众所周知数据存储格式对一款存储系统来说是最核心的组件,Druid的数据格式是自定义的,以此保证了在海量数...

    Spark学习技巧
  • Linux(Ubuntu 18.04)上安装Anaconda步骤详解

    Anaconda是最受欢迎的python数据科学和机器学习平台,用于大规模数据处理,预测分析和科学计算。Anaconda发行版附带了1,000多个数据包,con...

    砸漏
  • Linux(Ubuntu 18.04)上安装Anaconda步骤详解

    Anaconda是最受欢迎的python数据科学和机器学习平台,用于大规模数据处理,预测分析和科学计算。Anaconda发行版附带了1,000多个数据包,con...

    砸漏
  • 微信小程序1

    小程序组件化开发框架 https://tencent.github.io/wepy/

    达达前端
  • linux下测试磁盘的读写IO速度

    有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决...

    一见
  • 开发常用的优质开源项目

    YApi是由去哪网前端团队开源的一款接口管理工具,功能强大,可以轻松的自己部署。而且支持使用docker部署,使用成本很低了。

    剑行者

扫码关注云+社区

领取腾讯云代金券