先贴下第一、二篇的链接。

现在代码中参数设置最多这部分代码来了,开始细细理解参数的设置。

四.3D CNN用做结节检测

一个3d cnn网络用来检测可疑结节。它是一个3D版本同时改进于Unet网络的RPN网络来作为主干网络。(前面说过单类别目标检测算法,两步算法中的第二步已经不在需要,那么算法统一退化成一步算法。)由于这个任务中只有两类(结节和非结节),预测结果直接作为检测结果不需要额外的分类器。它很类似于一步检测系统YOLO和SSD(现在当然还有何凯明等人的RetinaNet等)。这个结节检测模型简称N-Net,N代表nodule。

A.Patch-based input for training(输入训练的基础块)

目标检测模型通常采用基于图像的训练方法:把全体图像作为训练模型的输入。然而,这对于3D CNN来说由于GPU内存的限制这是不可行的。当肺部扫描的分辨率保持在一个很好的水平时,即使是一个样本占用的显存也会超过主流的最大gpus的内存。

为了克服这个问题,会先从这些肺扫描(也就是这些ct序列中)提取出小的3d小块独立地作为网络的输入。这块的尺寸是128×128×128×1 (Height×Length× W idth×Channel,下面的标注都是这个意思)。两种类型的块被随机选择。第一,70%选择的输入至少含有一个结节。第二,剩下的30%的输入随机从序列中裁剪可能不存在任何结节。后一种输入保证了足够的负样本的覆盖。

如果一个块的范围超出了肺扫描的范围,那么就像在预处理那步中一样用170值来填充。目标结节不一定非要处在块的中心位置,但是要满足离块的边缘要大于12个像素点(当然一些超大的结节除外)

采用数据增广的方式来缓解过拟合问题。这些块随机左右翻转和缩放(0.8到1.15之间),还尝试了其他扩展,如轴交换和旋转,但没有显著的改进。(想想也是已经是原数据中随机剪切的块,轴交换和旋转弄不好已经在随机剪切已经有相类似的了)。

B.Network structure(网络结构)

检测网络由一个UNet主干网络和一个RPN输出层组成,如图5所示(上图,本来不准备贴的不过后来一想对理解的帮助比较大就贴一下。)U-Net骨干网使网络能够捕获多尺度的信息,这是至关重要的,因为结节的大小有很大的变化。RPN的输出格式使网络能够直接生成候选框。

主干网络具有前馈路径和反馈路径(图5a)。前馈路径从两个3×3×3卷积层都是24通道开始的。然后是四个3d残差块与四个3d最大池化层((池化尺寸是 2 × 2 × 2 步长是2)交错进行每个3d残差块由三个残差单元组成。残差单元如图5b所示。前馈路径中的所有卷积内核有一个内核大小为3×3×3和1的填充(为了保持卷积前后尺寸不变same)。

反馈路径由两个反涡层和两个组合单元组成。每个反卷积层(其实可以用上采样是类似的)的步长为2,核大小为2。每个组合单元连接一个前馈blob和一个反馈blob,并将输出发送到一个残差块(图5c)。在左边的组合单元中,我们引入位置信息作为额外的输入(Section IV-C中有细节描述)。那么特征图的结合单元尺寸是32×32×32×131。紧随其后的是两个1×1×1卷积运算分别是64和15的通道数,最终结果的矩阵尺寸是32 × 32 × 32 × 15。

这个4d输出张量改变为32 × 32 × 32 × 3 × 5的形状。后面两个维度分别对应锚和回归量。这个设计的灵感来自于RPN,在每个位置网络都有三个不同尺度的锚,分别对应长度为10、30、60 mm的三个边框。所以有32×32×32×3个锚框。这五个回归值分别是(ˆo, ˆdx, ˆdy, ˆdz, ˆdr)。对第一个回归值使用的sigmoid激活函数:pˆ = 1 /(1+ exp(−oˆ)) (这个每个值的范围是(0,1),还有一个是(-1,1)所以要区分下,就是faster-rcnn中获得候选框的自信度是一样的)(这个自信度我也是刚看懂的,推荐看caffe版的写的会比较详细的主要算法出来之时是caffe大行其道之时)。而后面四个量不使用激活函数。

C. Location information(定位信息)

建议的位置也可能影响到判断是否为结节,是否为恶性,所以我们也在网络中引入位置信息。对于每一个块计算其相应的裁剪位置,这些特性图的尺寸是(32×32×32×3)。这个裁剪位置有三张特征图,对应于X,Y,Z的标准化坐标。在每个轴上,每个轴上的最大值和最小值分别归一化为1和-1,分别对应于肺段的两端。

D. Loss function(损失函数)

表示目标结节的真实边界框为(Gx, Gy, Gz, Gr),表示锚的边界框(Ax, Ay, Az, Ar)。其中前三个元素表示块的中心点的坐标,最后一个元素表示边长。计算IOU(Intersection over Union)来决定每个锚边界框的的标签。那些锚边界框的IOU大于0.5的作为积极正标签而那些锚边界框的IOU小于0.02的作为消极负标签。剩余那些在训练过成中被忽略。预测的概率和锚边界框标签分别用pˆ和p表示。请注意,p∈{ 0,1 }(0代表消极负例子,而1代表积极正例子),那么对于这个框的分类损失函数可以定义为Lcls = p log(ˆp) + (1 − p) log(1 − pˆ)。

那么边界框的回归标签可以定义如下:dx = (Gx − Ax)/Ar, dy = (Gy − Ay)/Ar, dz = (Gz − Az)/Ar, dr = log(Gr/Ar).对应的预测值分别为ˆdx, ˆdy, ˆdz, ˆdr。那么便可以定义回归总损失函数为:Lreg = (k∈{x,y,z,r} )S(dk, ˆdk)其中损失度量是平滑的L1范数函数:S(d, ˆd) = |d − ˆd|, if |dk − ˆd| > 1; (d − ˆd) 2 , else.

每个锚边界框的损失函数定义为:L = Lcls + pLreg.这个方程表明回归损失只适用于正样本,因为只有在这些情况下p = 1。整体损失函数是一些选定锚边界框损失函数的平均值,我们使用正样本的平衡和难以分类的负样本的挖掘来做选择。(具体可看下节)

E. Positive sample balancing(正样本的平衡)

对于一个大结节,有许多相应的正锚边界框。为了降低训练样本之间的相关性,在训练阶段只随机选取其中一个样本。

虽然我们从luna16中移除了很多小尺度的结节,但是剩下这些结节尺度的分布任然是高度不平衡的,小结节的数目远多于大结节。如果采用均匀采样,经过训练的网络会对小结节产生偏置。这是不必要的,因为大结节通常比小结节是更强的癌症指标。因此在训练集中增大了大结节的采样频率(就是缩放翻转更多次产生更多的大结节数据),其中大于30mm的结节采样频率为其它结节的2倍和大于40mm的结节采样频率为其它结节的6倍。

F. Hard negative mining(难以分类负样本的挖掘)

负样本比正样本多得多。虽然大部分阴性样本可以通过网络轻松分类,但也有少数样本结节外观相似,难以正确分类。针对这一问题,提出了一种常用的目标检测技术——难分类样本挖掘技术。我们在训练中使用简单的在线版本的难分类样本挖掘。

首先通过将块输入到网络中,我们得到了输出映射,它代表了一组不同置信度的边界框(也就是B网络结构中中我说的自信度,用不用写的那么高大上啊,之前一直觉得这个出来的莫名奇妙我是谁?我在哪?)。其次,随机选取N个阴性样本,形成候选池。第三,对池中的负样本进行降序排序利用分类置信度得分,选取前n个样本作为难以分类的负样本。其他负样本被丢弃,不计入损失计算。使用随机选择的候选池可以降低阴性样本之间的相关性。通过调整候选池的大小和n的取值,可以控制难分类样本挖掘的强度。

G. Image splitting during testing(测试过程中的图像分割)

网络训练完成后,整个肺扫描可作为输入,获取所有可疑结节。因为网络是完全卷积的,所以这样做很简单的。但这在我们的GPU内存限制下是不可行的。尽管网络在测试中需要的内存比在训练中要少得多,但这一需求仍然超过了GPU的最大内存。为了解决这个问题,我们将肺扫描分为几个部分(208 × 208 × 208 × 1 每个部分),分别处理她们,然后把所有结果结合起来。为了消除卷积计算中不需要的边界效果,我们将这些分割保持在一个大的空白(32像素)上。

这一步将输出许多结节建议候选框{xi , yi , zi , ri , pi}。xi , yi , zi代表候选框的中心。ri代表半径,pi代表自行度。然后进行非最大抑制(NMS)操作,排除重叠候选框。基于这些候选框,另外一个模型用作预测癌症的可能性。

这部分终于完了加油,下面那部分还没涉及到先不翻译了。希望对你有帮助!!

DSB2017第一名论文理解: 3D Deep Leaky Noisy-or Network(三)相关推荐

  1. DSB2017第一名论文理解: 3D Deep Leaky Noisy-or Network(一)

    Kaggle上2017年肺结节检测比赛第一名的算法,其代码的github通道. 论文:https://arxiv.org/abs/1711.08324 我也是没办法,代码又跑不起来,里面还有很多细节参 ...

  2. DSB2017第一名论文理解: 3D Deep Leaky Noisy-or Network(二)

    ps:主要是看了之后过几天就是不是特别清晰了,故大概能看懂的感兴趣的地方记录下. 代码论文等基础信息在上一篇. 三.数据和预处理 A.数据 训练本模型用了两个肺扫描数据集:肺结节分析数据集简称LUNA ...

  3. 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》阅读笔记(二)

    <Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network>阅读笔记–翻译 ...

  4. DSB2017第一名代码复现

    DSB2017第一名代码复现 训练 准备数据集 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容 ...

  5. 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》论文解析

    本文解析的三维深度神经网络(3D deep neural network)是"grt123团队"在Kaggle举办的DSB2017中获得了第一名,若其代码公开于Github. 引言 ...

  6. Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network 论文阅读

    paper:https://arxiv.org/abs/1711.08324 源码:https://github.com/lfz/DSB2017 简介 简介--从CT扫描图像进行自动诊断肺癌需要两个步 ...

  7. DSB2017第一名代码尝试运行(记录自用)(四)

    1.今天较为仔细地看了grt团队的测试代码,发现他们用的测试代码的方式是,首先将输入的数据填充使其符合,边长(分割步长)为144,重叠边缘为32(确保结节不会全在分割得到块的边缘)的3d矩阵.接着将3 ...

  8. DSB2017第一名代码尝试运行(记录自用)(五)

    ps今天居然忘了之前懂的地方,又花时间重新理解了一遍.看来记录还是非常重要的. 主要是将代码中构造标签这一块说下细节.之前的博客中说过:制作了一个24*24*24*3*5的标签.一起看你可能理解不了把 ...

  9. DSB2017第一名代码尝试运行(记录自用)(一)

    1.一开始尝试运行测试部分代码.但是stage2 data什么.而后训练部分也是一样stage1 data是什么.后来问了下师傅,就是DSB2017竞赛用的数据集.可以他之前感觉内存不够删掉了. 2. ...

最新文章

  1. 有了“手掌”,机械手也能盘“核桃”,耶鲁出品 | Science子刊
  2. flutter 页面加载动画_Flutter撸一个加载动画
  3. 互联网泛娱乐直播安全的解决之道
  4. vs android 压缩,Android Studio是否压缩classes.dex文件?
  5. php连接数据库navicat,navicat数据库如何连接php
  6. 计算机工作对身体有害吗,在电脑前长时间工作会对身体有害处吗?
  7. SpringBoot+EHcache实现缓存
  8. 【调试手段】GDB调试
  9. bus,device,driver三者关系
  10. python 特征选择卡方_4. 机器学习之特征选择-Python代码
  11. proxy ip 收集方式总结
  12. 应用 Remoting
  13. 武汉大学计算机学院应时老师,肖春霞 - 教师简历 CV- 武汉大学计算机学院
  14. 并行计算,网格计算与分布式计算的…
  15. 2022学生党蓝牙耳机怎么选?最新蓝牙耳机排行榜
  16. 恒流恒压线性充电芯片MST4210
  17. 爬虫(7):忽略安全证书爬取12306数据
  18. tkinter GUI编程
  19. java bs设计模式_Java进阶篇设计模式之十三
  20. 鲁大师电动车智能化测评报告第十六期:破局者与搅局者之争

热门文章

  1. CYQ.Data 数据框架 加快开源速度 发布V1.5.5版本源码
  2. PHP消息通信机制测试代码
  3. Angular ngTemplateOutlet
  4. 列表list,元组tuple,字符串
  5. CoreMotion(加速计)
  6. OJ 注意点及知识点总结
  7. html5 乱码解决方案
  8. WPF: 结束程序及关闭所有窗口
  9. CString 和 char * 的相互转换
  10. (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试