前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战演练 | 基于深度学习训练模型正确识别肺炎X光图片

实战演练 | 基于深度学习训练模型正确识别肺炎X光图片

作者头像
用户1621951
发布2019-11-14 18:06:07
2.1K0
发布2019-11-14 18:06:07
举报
文章被收录于专栏:数据魔术师数据魔术师

前情提要

肺炎是由多种病源菌引起的肺充血,水肿,炎性细胞浸润和渗出性病变,是生活中较为常见的一种疾病。早期感冒咳嗽如果护理不当,既有可能转化为肺炎。临床常见且可发生于任何人群。临床表现主要有发热,咳嗽,咳痰,呼吸困难等。

X线检查是肺部疾病诊断的基本方法。一般在x光片上显示为双肺纹理增多增粗紊乱。并见斑片状密度增高影,边缘模糊。如何用胸部X光检测是否发生肺炎?我们搜集来了专业医生的解答并辅以图片对比说明:

本次实战演练我们选取了AI研习社网站中的一则竞赛题:胸腔X光肺炎检测。基于深度学习训练模型正确识别肺炎X光图片。

赛题链接:https://god.yanxishe.com/13

大赛简介

数据描述:

数据集中共包含5857张胸腔X光图片,其中训练集4099张(正常图片+肺炎图片),测试集 1757张(训练模型正确识别肺炎X光图片,0=正常,1=肺炎)。

数据集下载链接:

https://dwz.cn/A6mbBKZk

结果文件上传实例:

提交CSV文件。

第一个字段位:测试集图片ID;

第二个字段位:0=正常,1=肺炎;

如图所示:

评审标准:

Ture: 模型分类正确数量

Total: 测试集样本总数量

奖金介绍:

本次比赛共设置3种奖项:参与奖(Participation Award);突破奖(Prizes);排名奖(Ranking Award)。具体奖励标准可至大赛官网查询。

Inception介绍

概览:

本文的图像分类项目使用的就是Inception v3在正式介绍inception之前,非常有必要引入一张CNN结构的演化图:

受到计算机性能的影响,LeNet虽然在图像分类中取得了较好的成绩,但是并没有引起很多的关注。直到2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷积神经网络乃至深度学习重新引起了广泛的关注。它本质上就是扩展 LeNet 的深度,并应用一些 ReLU、Dropout 等技巧。AlexNet 有 5 个卷积层和 3 个最大池化层,它可分为上下两个完全相同的分支,这两个分支在第三个卷积层和全连接层上可以相互交换信息。

这之后,一直到GoogLeNet出来之前,大部分流行 CNN 仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。但是这里一般设计思路的情况下会出现如下的缺陷:

  1. 参数太多,若训练数据集有限,容易过拟合;
  2. 网络越大计算复杂度越大,难以应用;
  3. 网络越深,梯度越往后穿越容易消失,难以优化模型。

那么解决上述问题的方法当然就是增加网络深度和宽度的同时减少参数,Inception就是在这样的情况下应运而生。

Inception 家族的主要成员,包括 Inception v1、Inception v2 和 Inception v3、Inception v4 和 Inception-ResNet。每个版本都是前一个版本的迭代进化。但是并不是说版本更高的网络工作效果越好。根据已有数据,或许较低版本工作效果更好。例如,本文的图像分类项目使用的就是Inception v3。它们的计算效率与参数效率在所有卷积架构中都是顶尖的。了解 Inception 网络的进化过程可以帮助我们更好地构建自定义分类器,优化速度和准确率。

Inception v1

论文:Going deeper with convolutions

论文链接:

https://arxiv.org/pdf/1409.4842v1.pdf

这是Inception网络的第一个版本。首先通过一个小例子看一下这个网络可以用于解决什么样的问题,以及如何解决?

这是三张小狗的图像。但是图像中小狗本身的占比是依次减小的。

  • 由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难。信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的图像偏好较小的卷积核。
  • 非常深的网络更容易过拟合。将梯度更新传输到整个网络是很困难的。
  • 简单地堆叠较大的卷积层非常消耗计算资源。

解决方案:在同一层级上运行具备多个尺寸的滤波器是不是可以有效地避免解决上手问题呢?作者基于此想法设计了 Inception 模块。下图是「原始」Inception 模块。它使用 3 个不同大小的滤波器(1x1、3x3、5x5)对输入执行卷积操作,此外它还会执行最大池化。所有子层的输出最后会被级联起来,并传送至下一个 Inception 模块。网络本质上会变得稍微「宽一些」,而不是「更深」。

第一张图是论文中提出的最原始的版本,所有的卷积核都在上一层的所有输出上来做,那5×5的卷积核所需的计算量就太大了,造成了特征图厚度很大。为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低特征图厚度的作用。实现降维的Inception模块可以构建GoogleLeNet(也就是Inception v1的网络结构)。GoogLeNet 有 9 个线性堆叠的 Inception 模块。

Inception v2 & v3

论文:Rethinking the Inception Architecture for Computer Vision

论文链接:

https://arxiv.org/pdf/1512.00567v3.pdf

这两个结构来自同一篇论文,作者提出了一系列能增加准确度和减少计算复杂度的修正方法。在这一篇论文中,作者表示非常深的卷积网络自 2014 年以来就成为了计算机视觉领域的主流,它在各种基准测试中都获得了非常多的提升。只要有足够的标注数据,增加模型大小与计算成本可以在大多数任务中快速提升模型质量。因此,作者积极探索扩展网络的方法,旨在通过适当的分解卷积与积极的正则化尽可能高效地利用添加的计算。他们在 ILSVRC 2012 分类任务挑战赛的验证集上证明了模型的优秀性能,使用每个推断过程有 50 亿次乘加运算的模型,作者实现了单帧评估 21.2% top-1 和 5.6% top-5 误差率,且模型的总参数还不到 250 万。

以下首先介绍 Inception V2:

问题:

  • 减少特征的表征性瓶颈。直观上来说,当卷积不会大幅度改变输入维度时,神经网络可能会执行地更好。过多地减少维度可能会造成信息的损失,这也称为「表征性瓶颈」。
  • 使用更优秀的因子分解方法,卷积才能在计算复杂度上更加高效。

解决方案:

  • 将 5×5 的卷积分解为两个 3×3 的卷积运算以提升计算速度。尽管这有点违反直觉,但一个 5×5 的卷积在计算成本上是一个 3×3 卷积的 2.78 倍。所以叠加两个 3×3 卷积实际上在性能上会有所提升,如第一张图所示。
  • 此外,作者将 n*n 的卷积核尺寸分解为 1×n 和 n×1 两个卷积。例如,一个 3×3 的卷积等价于首先执行一个 1×3 的卷积再执行一个 3×1 的卷积。他们还发现这种方法在成本上要比单个 3×3 的卷积降低 33%,这一结构如第二张图所示。此处如果 n=3,则与上一张图像一致。最左侧的 5x5 卷积可被表示为两个 3x3 卷积,它们又可以被表示为 1x3 和 3x1 卷积。
  • 如果该模块没有被拓展宽度,而是变得更深,那么维度会过多减少,造成信息损失。因此,扩展模块中的滤波器组(即变得更宽而不是更深),可以很好地解决表征性瓶颈。如第三张图所示。

前面三个原则用来构建三种不同类型的 Inception 模块(这里我们按引入顺序称之为模块 A、B、C,这里使用「A、B、C」作为名称只是为了清晰期间,并不是它们的正式名称)。架构如下所示。这里,「figure 5」是模块 A,「figure 6」是模块 B,「figure 7」是模块 C。

其次介绍Inception v3:

问题:

  • 作者注意到辅助分类器直到训练过程快结束时才有较多贡献,那时准确率接近饱和。作者认为辅助分类器的功能是正则化,尤其是它们具备 BatchNorm 或 Dropout 操作时。
  • 是否能够改进 Inception v2 而无需大幅更改模块仍需要调查。

解决方案:Inception Net v3 整合了前面 Inception v2 中提到的所有升级,还使用了:

  • RMSProp 优化器;
  • Factorized 7x7 卷积;
  • 辅助分类器使用了 BatchNorm;
  • 标签平滑(添加到损失公式的一种正则化项,旨在阻止网络对某一类别过分自信,即阻止过拟合)。

Inception v4 & ResNet

论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

论文链接:

https://arxiv.org/pdf/1602.07261.pdf

由于篇幅所限,并且鉴于我们已经对本文所使用的Inception V3模块具有了一定的了解,关于Inception v4 & ResNet的介绍我们在此不再赘述。根据 CS231n 中所介绍的,Inception V4 基本上是当前在 ImageNet 图像分类任务 Top-1 正确率最高的模型。因此之后的项目中一定会再有机会进行详细阐述。

算法说明

导入数据

数据格式转换

图像增强

分割数据集

构建模型

训练模型

模型预测

使用模型预测测试集,并将结果输出到csv

提交训练

没能冲进前三甲,不过比上次的垃圾分类项目进步了很多,最关键的是这个官网有奖金拿啊,满足!再接再厉!

总结

和上次的垃圾分类项目进行对比,两次比赛项目中可以获得一些经验与技巧:不同的预训练模型、不同的优化器、不同的loss函数、不均衡采样都可能对结果产生影响,但是如何组合出最好的结果还是需要大量的尝试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据魔术师 微信公众号,前往查看

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

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

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