Fast.ai深度学习实战课程 Lesson7 学习笔记:CNN Architectures

本篇是AI100学院此前重点推出的《Fast.ai 深度学习实战课程》(中文字幕)第七节的学习笔记,分享者胡智豪。 如果你对深度学习感兴趣,该系列课程千万不要错过哦!

简述

本节课的内容比较多,但主要还是围绕着Fisheries竞赛,当中提出了许多前面的课程没见过的技巧和模型,例如使用了Resnet、InceptionV3模型,在网络结构上去掉全连接层,直接使用全卷积网络(Fully Convolutional Net),甚至Dropout层这些我们之前常用的层都不需要了。当中还介绍了kaggle竞赛的技巧,利用Data Leakage来提高成绩,还有利用一位参赛选手的贡献,提高模型的性能等等。

▌任务流程

1.利用ResNet提高猫狗大战的成绩

视频一开始,jeremy介绍了ResNet的结构,ResNet以它的层数之深著称,而理论上,模型的层数越深,识别图片的效果越好,因此作者甚至把它做到了1000层!另外有一些工作者,提出用50层ResNet + 一堆激活函数的结构性能就已经比1000层纯ResNet要好,因此Jeremy利用50层的结构来提高猫狗大战的成绩,最终做到99%以上的准确率。这一部分可以算为lesson3的延伸,因此Jeremy就没有把它列在了本节课的编程内容中,有兴趣的同学可跟着视频去做。

2.Data Leakage

Data Leakage是Kaggle比赛当中经常出现的情况,意思为一些与数据集本身内容无关或者相关程度很低的信息,往往能利用这些信息来提高预测的准确度。以Fisheries竞赛为例,此比赛的图片数据是由不同的船上不同的相机拍摄的,而这些船往往是专门出海捕捞一种鱼,因此暗示我们可能可以利用照片的尺寸(不同的相机拍摄有不同的尺寸)、或者照片中船只的样子(可能神经网络并不是识别鱼而是识别了船只),来预测这些图片中有某种鱼。这个技巧在kaggle比赛中不算作弊,相反所有人都可以用(只要你找得出),但对于实际工业应用就不行了,因为模型的泛化能力很低,这技巧只能用在竞赛中。以下是各种图片尺寸的数量:

我们利用Data Leakage来为模型增加一个输入——照片的尺寸,那么模型就变成了一个多重输入的模型。

3.Bounding Box

竞赛中有一位选手手动把数据集图片当中的鱼,用红框全部框出来了!因此我们可以利用这一个数据,作为模型的第二个输出,即除了让模型来预测图片里面有哪种鱼,还要预测出这条鱼在图片的什么位置!这样一来通过SGD,模型能不断修正预测出的位置框,使其与我们人工标注的方框尽可能重合,那么,相当于由我们人类来“教”模型该往哪些位置来寻找鱼类,人机合作!

4.Fully Convolutional Net(FCN)全卷积网络

这部分是本节课最酷的地方!我们以前利用VGG来修改后面的bn_layers,一般都包含Dense、MaxPooling、Dropout、BatchNorm层,但现在我们全部换掉!以前我们默认图片的大小是224x224,现在使用640x360大小的图片作为输入,那么以前用的全连接层就不适用了(因为shape不一致),而且图片尺寸变大后,Dense层的参数量将变得更加庞大。为了实现最后Dense层输出8个结果的效果,我们用多个卷积层来进行分类,最后输出8个结果,同时极大地减少了参数的数量!

而且最酷的是,可以利用这个网络,最后输出一个热力图,热力图上粉红色区域表示模型找到的鱼的位置,蓝色区域表示这些地方没有鱼!

5.InceptionCNN

InceptionV3是这两年来非常热门的模型,准确性比VGG高,仅次于Resnet,而参数量比VGG小,其独特的Inception结构让网络变得更深。Jeremy在最后一部分作为一个展示,利用几个Inception block,提高模型的预测准确性。详细的原理及应用Jeremy把它安排在了Part2,本次仅作为展示的形式,大家学完Part1之后继续学Part2吧!

▌概念解释

此部分重点解释一些本人认为在课程中有点难理解的部分,其它地方未涉及的见谅。

1.ResNet结构

本人按照Jeremy视频中的演示,画出了一张示意图,如图:

图中左边的结构是ResNet中每一个Block所包含的内容,有点像VGG的结构,唯一不同就在于,block的“输入”与block的“输出”用一个identity加了起来,ResNet的作者解释为,正因为有了这个identity的处理,使得模型在BackProp的时候在数学上不用担心梯度爆炸的问题,因此这个网络可以越叠越深。另外还有一些特性:

  • 图像数据在进入这些块(block)的时候,数据的维度是保持不变的,因为里面没有池化层的存在。
  • identity的处理是把块的输入(input_tensor)加上块的输出,这个input_tensor指的是这些块的输入,而不是指图片的原始数据输入。
  • 模型当中使用Average Pooling而不使用Max Pooling的原因是,形象地解释为Max Pooling专门看的是图片中的某一部分突出的地方,它能指出图片中某个地方是什么,而AveragePooling则专门看的是整张图片,看整张图片大体上像什么,而不管局部的细节。由于这个性质,AveragePooling常用于类似猫狗大战的图片识别中,因为图片的大部分都是猫或狗;但Average Pooling在Fisheries比赛中就不那么好了,因为Fisheries的每张图片中只有很少一部分是鱼,这时候Max Pooling才是最佳选择。
  • Clobal Average Pooling能够减少大量的参数,因此无需Dropout层。

2.Inception CNN

Jeremy给出的Inception block的搭建代码为:

把这代码以图的形式表示出来会帮助理解:

Jeremy指出,正是因为有了这些1x1的卷积层,极大地减少了参数的数量,使得Inception模型体积变小。同时一张图片每一层经过不同大小的卷积核,能识别出更加深层的信息。

3.Fully Convolution Networks

全卷积网络顾名思义就是网络中只包含卷积层,全卷积网络是一个非常酷的技术,常用于图片语义分割,按照Jeremy给出的链接,大家看以下两张图感受一下:

可以看出,以前我们的卷积神经网络只能识别出图中的物体属于哪个分类,现在FCN直接把图片中需分类的分类内容直接分割了出来,输出一张物体轮廓图,而且效果非常好。

▌代码解释

本文只对课程内核心代码进行解释,完整的代码可以点击这里下载。由于本节课代码量庞大,就不一一截图出来了,烦请直接下载ipynb文件,有问题的可以在这里回复或者邮件联系。

下载地址: http://geek.ai100.com.cn/wp-content/uploads/2017/05/lesson7_jto.ipynb

作者联系方式:justinhochn@gmail.com

原文发布于微信公众号 - AI科技大本营(rgznai100)

原文发表时间:2017-05-30

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能算法

机器学习三人行(系列十)----机器学习降压神器(附代码)

系列九我们从算法组合的角度一起实战学习了一下组合算法方面的知识,详情戳下链接: 机器学习三人行(系列九)----千变万化的组合算法(附代码) 但是,我们也知道算...

42290
来自专栏视觉求索无尽也

【图像检索】【TPAMI重磅综述】 SIFT与CNN的碰撞:万字长文回顾图像检索任务十年探索历程

基于内容的图像检索任务(CBIR)长期以来一直是计算机视觉领域重要的研究课题,自20世纪90年代早期,研究人员先后采用了图像的全局特征,局部特征,卷积特征的方法...

1.3K10
来自专栏机器之心

数据科学家必须了解的六大聚类算法:带你发现数据之美

433110
来自专栏AI研习社

使用深度学习来理解道路场景

语义分割是深度学习的方法之一,通过语义分割,我们可以对图片中的每一个像素赋予含义,即将像素划分到一个预先设定的类中。从上边的 GIF 图可以看出,我们在语义切分...

13720
来自专栏AI研习社

用 TensorFlow 让你的机器人唱首原创给你听

AI 研习社按:这篇文章会用一个简单的模型在 TensorFlow 上来实现一个音频生成器,GitHub 代码链接详见文末“阅读原文”。原文作者杨熹,载于作者的...

35590
来自专栏IT派

用 TensorFlow 让机器人唱首歌给你听

然后会用一些打过标签的音乐的数据,这些标签就是人类的各种情感。接着通过在这些数据上面训练一个模型,模型训练好后就可以生成符合要求关键词的音乐。

13220
来自专栏机器之心

业界 | Tensor Core究竟有多快?全面对比英伟达Tesla V100/P100的RNN加速能力

40390
来自专栏量子位

怎样构建深度学习模型?六步走,时刻小心过拟合 | 入门指南

13220
来自专栏机器学习之旅

总结:常见算法工程师面试题目整理(一)

最近抽风,出去面试了不少公司,和不少算法工程师招聘的朋友有所交流,整理了相关比较有意思的题目,供大家参考:

15740
来自专栏算法channel

@all: 新浪 机器学习算法岗 面试实录

二面面试官来了。是个算法大佬。是个专门做算法的。直接手出题,他说时间不多,就让我说思路。

19220

扫码关注云+社区

领取腾讯云代金券