基于遗传算法的GLGM熵多阈值图像分割第三章_第1页
基于遗传算法的GLGM熵多阈值图像分割第三章_第2页
基于遗传算法的GLGM熵多阈值图像分割第三章_第3页
基于遗传算法的GLGM熵多阈值图像分割第三章_第4页
基于遗传算法的GLGM熵多阈值图像分割第三章_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 基于遗传算法的GLGM熵多阈值图像分割第三章 GPU加速和深度学习辅助诊断3.1 GPU加速 在本文中,我们共有两处涉及到GPU加速,图像分割和三维渲染,由于我们采用VTK来进行三维数据可视化,并且VTK中有封装的vtkGPUVolumeRayCastMapper类,可以方便地进行GPU的加速。我们遇到的问题在于图像分割部分。通常来讲,图像分割就是将图像分为不重叠的区域,每一个区域具有一些相同的特性,如亮度或纹理【22】。如果将图像的整个空域定义为 ,那么分割的目的就是要决定 ,全集为。因此,分割的所有像素集必须满足,此处 且 ,并且每一个 都是相连的。在医学图像的分割中,理想情况下,

2、这些子集会对应到不同的解剖区域或感兴趣区上。目前常见的分割方法类型有阈值法、区域生长法、聚类法、马尔科夫场模型、可形变模型、人工神经网络分割等等。在这些方法中,区域生长法是常用来分割单一或简单的结构【23,24】。在我们的实验中,采用了一种区域生长方法:置信连接算法。在ITK中,由itk:ConfidenceConnectedImageFilter类提供这个算法的一个CPU版本。这个算法对于三维图像的分割非常缓慢,所以我们使用了加速处理。GPU 适合于处理能够表示为数据并行计算( 同一程序在多个数据上并行执行) 的算术计算密度( 算术操作和存储器操作的比例) 非常高的问题。本文算法部分地属于这

3、一类问题,所以我们使用GPU进行了加速。3.1.1 概念定义 区域生长算法都要解决三个问题:第一,选择若干个种子点,种子点代表了需要分割的区域;第二,像素的合并判据,即生长过程;第三,确定生长过程停止规则【25】。置信连接算法是区域生长法的一种,其原理是基于区域统计,也就是使用全局信息来作为判据进行像素合并。首先使用表示目标区域的像素集合,使用表示区域外像素集合。然后,用来表示第种子点,这样,种子点就描述为,表示种子点的个数。对于种子点的邻域,我们使用表示,所以邻域像素描述为,表示邻域个数,在二维数据中一般,三维数据中一般。在迭代过程中,我们需要一个中转的需要检查的像素的队列,我们记为。表示这

4、个队列的长度,它会随着目标区域的扩大而逐渐变大或变小。该算法计算目标区域中包含的所有像素的强度值的平均值和标准差(初始化时为种子点的邻域)。此外,需要一个用户设置的倍率因子来乘以标准差,并以此定义一个在以均值为中心的取值范围。其公式表述如公式?,其中m和分别是区域内像素的均值和标准差,是用户指定的倍率因子,为图像,X为特定邻域的坐标位置。3.1.2算法描述第一步,选定种子点,设置倍率因子,设置迭代次数。第二步,将放入,将放入。第三步,计算的m和,如果,则使用其邻域计算m和。并以此得到范围。第三步,迭代中的所有邻域像素,共需要次迭代。第四步,判断的邻域,如果邻域像素的值在中, 则将放入队列尾部,

5、表示下一次需要再检查是否外部还有区域内的像素。将移出,将加入。第五步,重复第四步,直到中没有像素,表示在当前的判据内已经不存在区域外像素,完成一次迭代。第六步,如果迭代次数小于,则返回第三步。否则完成迭代,输出结果。从算法中,我们可以看到,这个过程会随着点数的扩大而迭代对应的次数,算法时间复杂度为,这是没有计入计算均值和标准差时间的。当我们使用三维数据时,由于点数的剧增,使得算法速度下降。例如,我们在实验中使用的一个344层的像素的CT扫描序列,整个数据的点达到90177536。这对于任何普通CPU来说都是一个巨大的数值。如果要实际应用,就必须对算法进行加速。 3.1.3 GPU算法设计Ope

6、nCL的计算是通过将设备看作是相同的一种结构,如图?所示。它是由一个控制设备(Host)和一组计算设备(Computer Device)组成的。其中控制设备通常由一个CPU担任,而通常计算设备由一些其他GPU、CPU担任。计算设备会切分成很多处理元素(Processing Element),很多个处理元素可以组成组为一个计算单元(Computer Unit),一个计算单元内的元素之间可以方便的共享一块内存,只有一个计算单元内的元素之间可以进行同步操作。现代的GPU 的硬件体系架构被设计成为大规模并行的,可编程的,具有多级存储的阵列处理器结构。而OpenCL为所有的设备设计了一套统一的内存识别结

7、构如图?所示。OpenCL对于计算设备的内存分为三层:计算设备层面的global,计算单元层面的local,处理元素层面的private。而在软件接口上,OpenCL是通过给一个设备(Device)或一组设备建立一个上下文环境(Context)来进行管理,建立上下文之后,一个Context中的所有设备视为一个设备。然后通过命令队列(Command Queue)的方式为Context提供需要执行的程序(Program)和参数,并返回结果。OpenCL将处理元素称为WorkItem,将计算单元称为WorkGroup。另外,OpenCL中的程序并不是一个整体,而是包含若干个内核函数(Kernel),

8、内核函数是运行在WorkItem上。一个程序中可以同时包含几个内核,在执行时可以选择让Context运行哪个Kernel函数。于是我们可以直接对底层的WorkItem进行操作,也就可以通过对WorkItem、WorkGroup的精细操作来最大化并行的效果。图? OpenCL的内存逻辑结构 经过分析,有两个部分可以使用GPU来进行加速处理,一个是均值和标准差的计算,另一个是像素的生长过程。所以我们需要对这两个部分给出GPU内核上的算法过程。传入设备的像素可以分为若干组,OpenCL规定每一组的WorkItem数量必须相同。我们将组数记为。均值计算和标准差计算。而标准差计算,相当于计算方差,根据公

9、式?相当于计算平方和。我们希望将每一个像素作为并行单元,并且最终加和的结果也在GPU上完成。其中表示均值,表示方差,表示样本个数。我们设计的算法1需要几个参数,输入图像,输出图像,结果向量,计数位,图像尺寸。其中长度为,长度为1,过程如下:第一步,开辟WorkGourp中的数据变量localResult,大小为WorkItem的个数。并对每一个位点置0。第二步,对于第一个点,计算是否在区域内,如果在,则将放入localResult000。对于所有的WorkItem进行同样操作。第三步,使用barrier函数进行组内同步,直到WorkGourp中所有WorkItem都进行完第二步。对localR

10、esult中的结果进行加和并置入的对应位置。同时使用atom_inc函数对自加1,表示一组加和得出结果。第四步,直到等于。说明所有的组已经加和完成。使用任意一个WorkItem,对中的结果加和,并除以,得到全部区域内像素的均值,放入,结束。以上是求均值的方法,求平方和和此过程类似,记为算法2,只是在第二步中,置入localResult的是,最后对赋值不需要除以。生长过程。生长过程记为算法3,需要几个参数,输入图像,输出图像,判断图,判断位,判断范围,图像尺寸。其中长度为1。的尺寸和输入图像、输出图像相同,的取值意义如表?,其作用和CPU算法中的相似。值意义0未判断的像素1需要判断其邻域2正在判

11、断3判断过表? 判断图值的意义算法描述如下:第一步,对于第一个点,如果,则计算,并将置为区域内像素,否则结束。第二步,将置为2,迭代判断邻域,当邻域所在位置的取值为0时才判断。如果邻域像素位于范围内,则将其置为1,表示下一轮需要再次检查,并且将置为1;否则置为3,表示已经检查完毕,这个像素不需要再次检查。对于所有的WorkItem进行同样操作,得到一个按照判断完毕的以及是否需要下一轮计算的标记,结束。整个算法过程可以描述为图?。CPU部分算法描述如下:第一步,选定种子点,设置倍率因子,设置迭代次数。第二步,将放入。第三步,使用GPU算法1计算均值,得到结果m,使用GPU算法2计算平方和得到结果

12、。在CPU上,使用公式?,开方得到。然后计算出。第四步,使用GPU算法3进行判断,得到一次生长的结果和是否需要继续判断的标记。如果为1,则重复第四步,直到,完成一轮迭代。第五步,迭代完成之后,得到了一个新的,如果迭代次数小于,则进入第三步;否则结束,输出结果。图?3.1.4 实验结果及分析我们在实验中,使用了多幅图像对算法进行测试,其中,我们使用一副的图像进行了对比测试。硬件环境为:Intel Core i7-4720HQ 2.60GHz ,nvidia Gforce GTX 960M,软件环境为:Visual Studio 2015,ITK 4.12.2,VTK 8.0.0,OpenCL 1

13、.2。倍率因子均为2.5,种子点一个坐标为430,329,329,灰度值-791。通过改变迭代轮次得到如表?所示的对比结果。图?是在i=10时CPU和GPU分割三维体绘制的效果。迭代次数模式时间(s)点数模式时间(s)点数加速比i=1CPU33.5193830535GPU13.80738006192.43i=2CPU73.1755753867GPU16.54457195344.42i=5CPU249.785;12123935GPU19.0631172248213.10i=7CPU459.052;29442886GPU32.7122904914314.03i=9CPU966.722;303980

14、25GPU34.2673032068428.21i=10CPU1148.54;30538974GPU36.7333051570131.26i=12CPU1629.48;30672445GPU38.8133068480741.98表? 迭代对比图? 左图为GPU效果,30538974点,右图为CPU效果,30515701点从结果中我们可以看到,随着轮次的增加,点数的增多,GPU的加速比会越来越明显,在达到10轮和12轮基本分割整个肺之后,加速比可以达到30以上。根据前人研究总结的医学图像分割中GPU加速的评价指标【Medical-image-segmentation-on-GPUs-A-comp

15、rehensiv_2015_Medical-Image-Analy】,在数据并行度方面,随着运算轮次增加,点数的增多,并行度不断提高;在线程数方面,随着点数的增多,item与item之间,group与group之间的同步性不断提高;在分支数方面,原子操作仅在group与group的合并中用到,我们使用的三维图像,每一组数量在256,远远小于10%,属于低分支数;在内存占用方面,相比CPU版本,我们仅在和方面产生内存差距,内存占用属于中等;在同步性方面,随着点数的增多,item与item之间,group与group之间的同步性不断提高;最后,在加速比方面,当分割出整个肺时,加速比可以达到30以上

16、,这是一个较大的加速比。3.2 深度学习识别图像随着大数据时代的到来,深度学习技术已经成为当前人工智能领域的一个研究热点,其已在图像识别、语音识别、自然语言处理、搜索推荐等领域展现出了巨大的优势,并且仍在继续发展变化【26】。最近几年,深度学习(Deep learning)理论在图像识别领域取得了令人振奋的性能提升,并迅速成为了学术界和产业界的研究热点。图像分类是指根据图像信息中所反映的不同特征,把不同类别的特征区分开来的图像处理过程。图像分类方法主要分为线性分类和深度神经网络方法【20】。本文的系统平台设计中,我们实现了一种优化过的卷积神经网络来识别皮肤黑色素瘤的良恶性,并将此集成到系统平台

17、。3.2.1算法描述自2006年以来,提出了大量的新的更深的卷积神经网络(CNN, Convolutional Neural Network)【27】。例如AlexNet【28】,ZFNet 【29】 , VGGNet 【30】 , GoogleNet 【31】 and ResNet【32】。这些网络有一个共同特点就是越来越深。同时,对CNN进行优化也一直没有停止。CNN具有局部连接、权值共享和池化操作等特性,在图像分类、人脸识别等多个计算机视觉任务中被广泛应用。该算法在进行图像分类时存在收敛速度慢、过拟合的问题。CNN 由于引入权值共享机制,大大降低学习的参数量,且相对其他方法有更高的分类精

18、度,然而该算法在对图像进行分类时存在收敛速度慢、过拟合的问题。我们针对黑色素瘤的图像特点,提出将改进的卷积神经网络算法用于建立皮肤癌良恶性预测模型,该模型对于黑色素瘤良恶性预测的效果更好,收敛速度更快。CNN中的卷积层包含三种运算:卷积、非线性激活函数和最大值池化【33】。卷积层结构的核心是使用局部最优的稀疏结构取代原有的全连接方式,用多层感知器取代传统卷积层加大量滤波器的传统方式,最大限度避免冗余,并利用稠密计算实现训练过程的加速【34】。卷积神经网络结构在构建皮肤癌良恶性预测模型中,存在计算速度较慢,预测精度不高的问题。我们在卷积神经网络最后一个池化层后增加一个卷积层和池化层,这样就增加了

19、网络深度,通过实验我们发现这可以应用于复杂的图像分类任务,并且提高了分类准确率,解决分类效果在输出层和前一卷积层之间受限问题。设计的卷积神经网络结构如图?所示。图? CNN结构流程图对应图?中的网络结构,预测结构模型如图?所示。首先将黑色素瘤图像输入到数据层,通过卷积层和池化层进行特征提取,两个全连接层对前层提取的特征映射到样本标记空间,最后经softmax 分类器分类,输出分类的结果。图? 预测模型结构CNN目前最常用的激活函数是ReLU,其公式如下,其中x 表示输入值,ReLU 函数是分段函数,如果x 大于0,输出即保持原值,否则输出为0。我们采用了这个激活函数。另外,深度学习训练一般要求

20、数据集足够大,为提高准确率需加深网络层数,所以模型训练一般会花费比较长的时间,所以选择优化方式,提高收敛速度和预测精度且缩短训练时间是一项需要着重考虑的因素。本文测试了三种优化的方式,AdaDelta、Adam和随机梯度下降SGD。3.2.2实验和结果本文在Caffe中搭建了模型并进行训练,训练得到.caffemodel文件,使用该文件,可以对图像进行识别分类。我们采用的数据来自公开数据集ISBI (生物医学成像国际研讨会)提供的900 例有注释的黑色素瘤数据。3.3 本章小结本章对采用的置信连接算法进行了分析,并给出了GPU加速优化的算法。最后实验结果表明,加速算法是成功的,具有较高倍数的加

21、速比,尤其是当数据规模较大时。该方法可以在实际使用中,并快速得出结果。最后,对加入系统的一个深度学习模型,一个基于Caffe训练的黑色素瘤的良恶性预测模型,进行了简单的描述。第五章 基于Gabor直方图熵的图像分割第五章 软件测试一个实际使用的程序,需要考虑程序的稳定性和健壮性。我们对如下几个方面进行了测试并得出了一些结果:内存泄露,误操作的限制,数据安全性。5.1 内存泄漏在C+程序中,内存泄漏是一个非常常见的问题,在我们使用的各个开发库中,Qt具有良好的内存管理,不存在内存泄漏。最容易发生内存泄漏的是VTK,好在VTK提供了一个和Qt集成的内存泄漏的查看器,如图?所示,在DEBUG模式下打

22、开,可以查看当前已经使用的VTK类的引用数,这并不是实例的数量,同时当程序关闭时,就可以查看是否有内存泄漏的情况,如图?所示为程序关闭时发生了泄漏,对于VTK来说,就是依然存在引用数不为0的对象。虽然这能确保程序没有内存泄漏,但并不能准确定位泄漏的位置,所以还是需要通过经验性的调试才能找到泄漏地点。图? VTK的类引用数窗口图? VTK报告发现内存泄漏其次,ITK也是容易发生内存泄漏的,虽然ITK对内存管理优秀,在程序退出的时候不会发生泄漏的问题,但在我们开发的过程中,发现ITK的对象可能在程序运行过程中没有删除的情况,这就导致程序在运行操作一段时间后,内存会发生溢出。由于VTK本身的DEBU

23、G功能,在结束时,已经不存在提示有内存泄漏的情况,我们把测试的重点放在了打开文件和图像分割两个过程上,这两个过程由于存在中途需要删除临时对象的操作,所以需要格外关注。测试项步骤描述预期效果测试效果打开一个序列1点击文件-打开,选择一个DICOM序列并打开打开正常 打开正常,数据管线添加一条数据连续打开两个序列1点击文件-打开,选择一个DICOM序列并打开2再次打开一个序列打开正常打开正常,数据管线添加两条数据尽可能打开多的序列1不断打开序列打开删除交替操作1点击文件-打开,选择一个DICOM序列并打开2再次打开一个序列3删除第一个序列4再次打开一个序列打开正常,删除正常,在删除之后内存应该减小到和打开另外两个序列相同水平打开正常,在删除之后,内存虽然不是完全相等,但是降低在同一水平。对一个图像进行分割1分割2观察分割过程中的内存涨落变化分割开始,会拷贝数据,并构造中间的ITK对象占用大量内存。在结束之后,会首先删除分割滤波器的对象,然后删除分割管线中的图像,仅保留新创建的SourceItem,占用少量内存表现正常,符合预期分割之后并删除1分割数据2删除滤波器数据删除之后,应该和创建滤波器之前的内存占用处于同一水平。表现正常,符合预期5.2 误操作限制我们对误操作添加了一些限制,并设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论