深度学习网络研讨会2020,第6部分:医学图像的深度学习概述
从系列中:2020年深度学习网络研讨会
深度学习是一项使人工智能(AI)取得显著进步的主要技术。虽然你可能知道深度学习的主流应用,比如你的Xfinity语音遥控器、Siri或Alexa,但你对医疗工程和科学中的人工智能应用有多熟悉?
MathWorks开发人员已经在MATLAB中应用了深度学习函数®工程和科学工作流程。通过一个心脏MRI示例的镜头来概述使用MATLAB的深度学习。你会看到:
- 深度学习在医学工程和科学中的应用,以及它如何推动MATLAB的发展
- 如何研究、开发和部署您自己的深度学习应用程序
- MathWorks工程师可以做些什么来帮助您在深度学习方面取得成功
您还将看到技术演示,包括:
- 半自动地面真实图像标注
- 磁共振成像语义分割算法的训练与评价
- 生成优化的本地嵌入式代码
今天的议程基本上分为,今天演讲的三个主要章节。我们将快速概述一下工程和科学领域的深度学习,或者我们作为一家公司在图像深度学习方面所做的工作,然后我们会讲一个实际的例子。我们将在MATLAB中开发一个实际的深度学习解决方案,然后在MathWorks中找到一些深度学习支持。
所以这里只是一个非常非常高水平的概述——深度学习是一项真正推动人工智能大趋势的技术。自20世纪50年代以来,人们对人工智能产生了极大的兴趣。为了便于定义,我们将人工智能定义为任何允许计算机或机器模仿人类智能的技术。这并不一定意味着它本身就必须是智能的,它只需要能够欺骗人类,以便相信与他们互动的机器具有智能行为。
直到80年代,我们才开始研究算法和方法,让机器从数据中学习任务,而不需要明确地编程来做这些测试。这就是事情开始变得真正令人兴奋的地方。然后,让我们进入今天的主题,使用深度学习,使用神经网络直接从数据中学习任务,这是一种使用机器深度学习执行人工智能的更高层次、更复杂的方式。
因此,深度学习已经成为我们日常生活的一部分。当我们与设备交谈时,我们看到了它。我知道我有一个苹果手表,我不断地告诉它提醒我这个或尝试做那个或为我自己总是忘记做的事情设置计时器,人脸检测,以及一个特别令人兴奋的改变商业空间的方式,自动驾驶。
很多时候,我们倾向于在一些有趣的项目的背景下听到机器学习和深度学习,有人正在做,然后在网上发布,从lot’s的事情中得到很多有趣的东西,比如探测物体——一只狗、一只猫、一只松鼠或任何东西,然后,当然,延伸到自动驾驶,识别自行车、行人和其他汽车。
但如果你看一下这个例子,移到右边的图像,我们实际上可以看到深度学习在工程和科学中的应用。这个例子是看一下壳牌工业公司的生产线。他们有点像监控机器,确保一切正常。
我见过很多——或者和很多顾客交谈过——我个人觉得,更可怕的例子之一是在手术过程中监控外科医生,他们实际上会注意外科医生是否拿了手术刀,使用了它,然后确保他们把手术刀放回托盘上,因为很明显,偶尔人类可能会犯一个小错误,把异物留在人体内。这是我听说过的最可怕的应用之一,但使用机器学习和人工智能有望缓解这个问题。因此,深度学习真的,真的开始渗透到当今世界。
下面是另外几个在行业中使用MATLAB进行深度学习的例子。实际上,在自动化缺陷检测方面,我们已经在很多方面得到了应用。我在很多地方都看到了,很明显,它对质量控制非常重要——在其他一些行业中,汽车控制和地震事件检测也是如此。
我们也非常参与研究,这里有几个例子,如果你对这些信息感兴趣的话,可以链接一下。我们会做一个和左边这个类似的例子。我们将看一下如何在核磁共振扫描中分割感兴趣的区域。很明显,这是一个组织切片,来看看这些类型的任务。
以上就是对深度学习的概述以及到目前为止我们在MATLAB中所做的一些事情。这只是一个非常快速的时间轴,展示了深度学习如何随着MATLAB的发展而发展,老实说,这个时间轴远远超过了2016年。多年来,我们的工具产品中一直有一个神经网络工具箱,直到2017年,我们决定将名称从神经网络改为深度学习,以跟上时代的步伐。然后你会看到每年我们都在为这个领域添加越来越多的功能。
其中一些新功能和新工具本身就是深度学习工具——创建神经网络、不同类型的层、权重共享和训练循环等等,但同时,还支持代码生成等功能,这样当你最终需要部署你的深度学习算法时,就可以以非常简单的方式实现。现在,2020年已经过去了一半,我们已经有了一个相当大的新功能列表。然后进入2020年下半年,我们肯定会看到更多,所以睁大眼睛。
这里有几个例子,同样是关于图像和视频的深度学习——自动驾驶,符号检测,当你开车穿过一个空间时能够识别物体,然后是一个语义分割的例子,能够在视频中逐像素标记感兴趣的物体。这是另外几个例子,这次是关于信号的。所以我不会在这个问题上花太长时间,因为我们今天的主要兴趣是图像。
我简单地说一下,但我们确实有一个强化学习工具箱。在座有人知道强化学习的概念吗?这是你们熟悉的,不熟悉的,感兴趣的,还是不感兴趣的?我们有一个熟悉强化学习的人,他对强化学习很感兴趣,而且他已经做过了。好了,好了。
所以对于那些不是很熟悉的人来说,这就像是在一个全新的层面上学习。我喜欢把它想象成你带着一个婴儿,把他放在一个环境中,告诉他试着做一些事情,一边做一边学习。这就像适应性学习,如果你愿意的话,只是尝试不同的模拟,最终学会如何——在右边的例子中,走路。在左边的箱子里,在车流中穿行。这有点像实时学习。
所以我不会在强化学习上花太多时间。这完全是另一个话题了。让我们来关注一下图像的深度学习。
因此,我们已经介绍了一些我们可以支持的工程科学领域特定深度学习应用的例子。还有其他几个原因,你可能想要认真考虑使用MATLAB进行深度学习。所以我们有多平台部署解决方案。我们的目标是能够将深度学习算法部署到最终部署系统的任何环境中。
我们有各种各样的功能和工具来提高平台生产力,能够加速使用gpu,在云上工作,等等。此外,我们在PyTorch中支持大量与TensorFlow的互操作性。我们知道世界不是围着我们转的。这个领域有很多玩家,我们尽最大努力确保我们与操场上的其他孩子友好相处。
而一切的中心就是人,对吧?所以我们有可以支持你的人。我们有一个非常非常丰富的客户基础,同时也提供了很多社区工具。世界杯预选赛小组名单所以它真的都在那些建造这些伟大工具的人周围流传。
这是我们今天将要看到的内容的预览,一些关于平台生产力的信息。所以这里有一些工具,你可以看看如何提高你的工作效率。但还有一些东西我们今天不会讲,但肯定是我鼓励你探索的,那就是我们如何连接到其他资源,如AWS、Azure、Docker和NVIDIA容器。
因此,为了给MathWorks参与深度学习的其他公司打个小结,今年早些时候,我们很高兴被贴上了领导者的标签,根据独立的Gartner Magic Quadrant for deep learning and Machine learning Platforms,我们试图创建一个尽可能完整的平台,以支持典型深度学习工作流的所有需求。
好了,现在让我们进入这个的核心部分。这节课剩下的部分将会遵循这四个方面。因此,我们将看看人工智能驱动系统设计中的这四个步骤,从数据准备开始,到实际训练人工智能模型,一小部分模拟和测试,最后,讨论部署。
让我们来看看今天的问题。对于今天的例子,我承诺了一些核磁共振和句法分割。
对于那些可能不熟悉Sunnybrook心脏数据集的人来说,我想这是一个公开的数据集,大约有45个患有不同心脏疾病的病人和一些专家标记的心脏不同部位的轮廓。所以我们今天的目标是,正确地分割,这些心脏图像中的左心室。我们实际上会利用一个已经被训练过的现有神经网络,VGG16神经网络,并使其适应我们的用例。
所以,就像我承诺的,我们将从数据准备开始。这里有什么动机吗?这是卡帕西先生在2018年的TrainAI会议上展示的一张幻灯片。他评论说,当他攻读博士学位时,他花了大量的时间,也许,专注于开发模型和算法,真正专注于这一切的科学。这很好,因为当你在做研究的时候,有很多公开可用的数据集可以利用。
突然之间,当你进入商业领域时,这些数据就成了你的财富。这是你的金子。所以你实际上要花更多的时间来确保你的应用程序和目标有正确的数据,而花更少的时间关注模型和算法。所以数据准备实际上是一项相当重要的任务,如果你在此之前一直在研究深度学习,我相信你可能已经以某种方式、形状或形式找到了答案。
所以我们要看一些帮助处理数据的工具。特别地,我将尽力强调更多用于医学图像处理的工具,而不仅仅是一般的图像处理。我们来看看今天的例子。
我们会快速介绍一下MATLAB桌面。这是MATLAB的最新版本,MATLAB R2020a。这是我们的桌面。这是你第一次打开MATLAB时会看到的。
在大多数情况下,与您交互的主要面板在这里——命令窗口。你可以创建一些变量,对这些变量进行操作,创建可视化,等等。在大多数情况下,这是相当简单的。我认为命令窗口有点像我的谷歌聊天或者Skype之类的因为它是你与MATLAB对话的地方,偶尔会发现一些漂亮的小彩蛋。
当你使用MATLAB的时候,你可以跟踪你的工作空间。这只是告诉你你可以使用什么样的数据。现在我知道我有几个不同的东西是打开的。我可以处理变量,比如b x之类的。
最后,你有一个命令历史。听起来就是这样。它是您使用过的所有命令的历史记录。如果我想重复我的任何步骤,我可以很快地完成。
特别是对于新手,甚至是一些MATLAB老手,请注意上面的工具条。这是一个发现MATLAB新特性的好地方。通常,你会从将数据导入MATLAB开始,对吧?我也非常喜欢plot标签,因为我很直观,然后我们今天会花很多时间在APPS标签上。好了,这就是MATLAB的概述,我们马上进入演示。
就像我提到的,我们要看一下心脏图像我们要准备一些数据。我在这里所做的是一个包含几个文件夹的项目(第1部分、第2部分和第3部分)——这是发送给您的演示时您将看到的内容。我认为这是不言自明的。当你打开项目时,你会得到快捷方式来打开那些部分它会为你加载所有东西。
现在我们开始看数据集。这是一个MATLAB实时脚本的例子。顺便说一下,如果你不熟悉它,一个很好的跳过不同部分的方法是选择你感兴趣的部分,然后点击运行,这里的运行部分,这将允许你浏览演示。让我们开始吧。
就像我说的,只是试图处理数据,甚至加载数据有时都是一个挑战。这是我最喜欢的方法。我喜欢使用MATLAB中所有可用的应用程序。所以现在,我很幸运。我碰巧在MathWorks工作,所以我真的有我们创造的每一个工具箱。你的应用列表可能比我的要少一点。
但是,我们今天使用的是图像,因此我只对Apps选项卡的这一部分感兴趣,更具体地说,我们使用的是DICOM,因此我将继续打开DICOM浏览器,以调出我的心脏DICOM图像。继续,选择我的dicom所在的文件夹,我们将拉入我们的心脏切片来查看。
非常快速简单。图像设置在[?]的两个时间点。水晶?]和[?[?]远侧地。我们可以做很多事情。首先,我们可以将该系列导入到工作区中。然后我们可以在MATLAB中使用它来进行运算。
我们还可以把它形象化。我们可以在体积查看器中查看。等一下,让我——开始。我们还有体积查看器。我个人非常喜欢这个,特别是在处理医学图像时,因为许多医学图像本质上是体积的,对吧?所以我可以研究体积。
如果我已经有了标签,我可以把它拉进来,你可以看到标签在我的图像上的覆盖。操纵方式,以查看图像的任何我想要的。然后导出渲染。导出我想要可视化我的图像的方式,这样我就可以为论文或报告或演示重新创建这个可视化。
这是对MATLAB中dicom的快速介绍。我们实际上有一个非常丰富的dicom工作集合——在我们的图像处理工具箱中有一个非常丰富的dicom工作函数集合。找到它的方法是去我们的“读取和写入图像数据文件”部分,你可以在这里找到完整的列表。所以这是一个很好的资源可以利用,看一看。
现在我们已经学习了如何在MATLAB中引入dicom,让我们来谈谈如何组织数据,为深度学习做准备。到目前为止,我认为最好的方法是使用imageDatastores。这是一个容器。我指向图像所在的位置我说要创建这个指向图像所在位置的容器。这是我想要的文件扩展名。
然后现在,如果我要看一下我创建的图像数据存储,我有105张图像要处理,还有一些关于它们存在的位置,它们在哪个文件夹中,等等,以及如何读取它们的信息。通过使用数据存储,你现在可以在图像处理和计算机视觉工具箱中解锁更多的功能。其中一个例子就是快速加载图像,为深度学习做准备。快速地讲一下,图像标签器。
我会尽量找出大家感兴趣的区域。就像我提到的,我们已经有了专家标签,但如果你没有专家来为你的图像贴上标签,这是一种开始这样做的方法。我们有很多选择,你可以创建一个多边形你可以尝试用这种方式抓取你感兴趣的区域,这取决于你有多少时间。
但对我来说,我真的喜欢贴标签机我可以开始一个小标签的数据集,但是如果我有一种算法或者half-trained神经网络这种已经很好地找到感兴趣的地区,我可以导入到镜像贴标签机和半自动的过程,然后就用我的人类时间仔细检查标签是多好,在培训前,在你的神经网络。
我们有几个问题。对于非常大的数据集,如何处理标签呢?所以,在这种情况下,能够实现半自动化是一件非常好的事情。在某些情况下,这是可能的。在某些情况下,并非如此。
你一次能处理多少个标签并保持任务的快速?这是一个非常好的问题,这完全取决于你的应用程序。你可能需要很多标签,或者你真的只关心几件事。
如果你正在创造一辆自动驾驶汽车,你可能只需要担心你可能会在道路上找到的东西。但你不一定要能分辨出房子和摩天大楼的区别,对吧?只要知道他们不在路上,你只需要继续在路上。当然,这取决于问题的性质。最后,一旦你有了足够的数据,你至少可以开始工作,你导出你的标签,然后开始实际的训练。
我们的数据准备到此结束。好的,让我们开始讨论如何训练一个人工智能模型。真正美妙的是,当你试图在MATLAB中解决这个问题时,我们基本上可以从一套完整的算法和预先构建的模型开始。这里有几个例子是机器学习中可用的算法决策树,朴素贝叶斯;在深度学习中,cnn在图像处理中非常普遍;GANs, LSTM等等,这个列表还在继续。
我们还支持导入预构建的模型,这就是今天这个例子要用到的,还有很多很多医学图像处理和深度学习的参考例子,以及其他行业特定的例子,你可以参考和构建。我很喜欢这些参考例子的地方是,你经常可以换掉数据集从代码中得到很多东西而不需要做很多改变,这很好。
好的,如果你参加了我们这周之前的一些系列,网络研讨会,其中一些可能看起来很熟悉。但我们有很多工具,可以让创建神经网络的过程更容易。在这个例子中,这是深度网络设计器应用程序,它只是一个创建或导入现有神经网络的视觉环境,修改它们,改变它们,用它们做新事情,然后导出它进行训练。能够以一种可视化的方式来做这个非常非常好,就像这里有一个完整的列表一样。有时,当你开始使用一个新的工具箱时,你并不总是知道有哪些函数可用,但有一个完整的列表真的很好。
2020A的新功能是在同一个应用程序中导入数据并执行训练,所以它实际上更像是一个工作流应用程序,而不是简单地创建深度网络。这是可以用的。还有一件事,我不认为在这个视频中可以看到,实际上你可以导出代码,哦,在这个视频中可以看到,你可以导出训练的代码。所以如果你有一个本地数据集你想要弄清楚它是如何工作的,然后你想要扩展或扩大训练到一个更大的数据集,你可以通过生成代码,然后在云中或任何你的数据上重新运行它来实现。
这也是相当新的。事实上,我开始爱上这个特别的应用程序了。所以我强烈建议大家尝试一下。这是我们的实验管理器,基本上,它允许你用不同的参数尝试一系列不同的训练设置,看看你得到什么类型的结果。最棒的是,它实际上保存了你尝试过的所有不同的事情——所有你尝试过的不同的事情,不同的实验,如果你愿意的话。这样,如果你要写一份报告的话,你就可以参考它了,你已经把所有这些都保存了下来现在你可以在发表你的作品时参考所有这些。这个应用程序叫做实验管理器。
好吧,让我想想,问几个问题。是的,幻灯片会在演讲结束后与观众分享。好的,继续。
我们也支持硬件加速。我提到过这个,我没有时间详细讲这个,但基本上只要你想在任何地方进行训练,放大,缩小,在GPU上,你可以使用的东西。然后,如果有关于这方面的问题,我肯定会把它转移到最后,但如果与其他框架进行互操作——将TensorFlow或PyTorch神经网络导入MATLAB或导出到PyTorch或TensorFlow,等等,所有这些事情——通过我们对ONNX框架的支持,这是可能的。如果大家有兴趣,我们可以在问答环节讨论这个问题。
实验经理,[?Mron, ?]只对神经网络起作用。它是深度学习工具箱的一部分。但我们确实有一些更传统的机器学习产品,可以做类似的事情,比如贝叶斯优化,所以如果你感兴趣的话,这可能是另一节课的内容。
实验管理器自动链接。Melissa问了一个很好的问题,实验管理器会自动链接到工作项目吗?是的,它是。这实际上是你们的实验管理器项目是你们的MATLAB项目,这很方便,有点像集成在一起。
好了,让我们快速地看一下建模。这可能会有点长,但我们会尽最大努力达到目标。好,回到左心室分割。下面是第2部分,建模的过程。好了,我们从这里开始。
在开始的时候,我们做的事情和上次做的完全一样我们把数据导入MATLAB。我们使用imageDatastore指向数据所在的位置。让我展示一下输出,我们可以实时看到它的运行。我们有805张图片要处理。实际上,我们已经明确地指定了希望如何读取dicom。
在另一个文件夹中,我们也有地面真相蒙版。因此,与其创建一个地面真值蒙版的imageddatastore,我们实际上会告诉MATLAB这些是像素标签,我们会创建一个pixelLabelDatastore来做这个。现在它知道文件夹里的所有东西都是像素标签。它们有两个类别——背景和左心室容积,等等,等等,现在这是定义的。
我很喜欢数据存储。我喜欢数据存储的一些原因是,它让我对800多张图像的巨大数据集的情况有了一个很好的、高层次的概述。所以现在我可以很快看到我有一个不平衡的数据集,比我的左心室体积像素更多的背景像素,这可能是我以后训练或准备训练我的神经网络时需要考虑的东西。是的,标签是分开存放的[?很好的问题。
这里,为了让我们了解图像的实际样子,我创建了自己的函数,它会随机选择一张图像并显示轮廓,心脏图像的像素标签。我们在整个心脏上都有切片。我看看能不能得到几个不同的。他们现在都在中间。
好了,开始吧。这里更靠近心脏的顶点。有些更——哦,这个在心脏的顶端,那个在更低的顶端。还有一些在中间。所以我们的图像中有一些多样性,这可能会影响我们神经网络的学习方式。
很快地,我知道在幻灯片中我展示了如何通过应用程序执行训练的视频。现在,这个例子将带我们了解如何通过编程代码行执行训练。我想让大家注意的关键函数是trainNetwork函数。它有三个输入,一个是数据源,所以我们必须把两个数据存储合并成一个数据源,提供给火车网络;神经网络本身,这个层图,就是这个lgraph的意思;以及训练选项,训练超参数。这就是我们下一节要讲的三件事。
这更多的是题外话,但你可以执行数据增强的事情,比如旋转图像,平移图像,放大或缩小图像作为一种增强或增强你正在处理的数据的方式,特别是如果你处理的是一个相当小的数据集。这可能是一些有用的东西。创建一个具有您想要的所有不同类型的增强功能的数据增强器,然后将它们组合到指定的附加数据增强功能的数据源中,这是相当容易的。这就是我们的数据源。我们现在明白了。
现在,有一个小步骤需要注意,这很重要,特别是当你试图证明你创建了一个神经网络,即使是在从未见过的数据上也能完成工作。这就是将数据集划分为训练集,验证集和测试集。我们简单地讲一下。你可以看到图像的分布。
现在我们要创建一个神经网络。我做的很快很简单。我只是用VGG16创建一个段层图。如果您感到好奇,可以打开关于这个函数的文档来了解更多信息。
我们来看看标签的不平衡。我们讲过背景像素比左心室体积像素多很多。所以你可以做的一件事是你可以在像素分类层,神经网络的最后一层,处理类别权重,并使用它来惩罚背景像素的过度分类。
另一个很好的新功能,实际上,你可以使用骰子作为你的精度度量。这实际上适应了语义分割问题中可能存在的不平衡。我不需要创建权重,我只需要使用DicePixelClassificationLayer。所以基本上,我已经去掉了最后一层,并在最后添加了我的新层,现在我有了一个可以执行语义分割的神经网络,以及这种内置的方法来处理有偏差的数据集。
跳过本节。这只是做了一个可视化和双重检查,以确保神经网络看起来不错。现在我们进入到训练网络函数的最后一个输入,它只是为了设置那些执行训练的超参数。现在,我不打算进行训练了因为上次我做的训练,花了大约10个小时,我们肯定没有时间了。相反,我将向你们展示如何进行这种训练。
当我运行这行代码时,它会给我一个漂亮的图形告诉我在x段时间内我的准确率有多高。我选最后一个。我是在服务器上运行还是在云上运行?这是一个非常好的问题,我将利用这个机会强调一些东西。
在本例中,我将它设置为自动,因此无论我是否有自己的并行池或计算机能检测到的任何资源,它都会在那里运行。现在,我们的深度学习工具的优点在于,我们一直在努力包容你完成训练的方式。所以你可以在你的单个CPU或GPU上进行训练,它恰好连接到你的计算机上,你也可以连接到一个并行池,那就是你现在可以开始访问云的地方。通常当我训练这个的时候,我实际上会选择并行,以便将工作发送到我在云中心上创建的集群。
在这里结束。基本上,一旦神经网络得到了充分的训练,我们就可以引入我们的测试数据集并对其进行语义分割,处理图像,然后还可以利用这个漂亮的内置函数来评估我的神经网络在测试数据集上的表现。这需要一点时间来运行,所以我实际上不打算完成这个例子,但是当我把最终结果发送给你时,你绝对欢迎看看结果。
好的,继续,我们有——我确实想花点时间谈谈模拟和测试,特别是在医学成像的背景下,因为我知道很多人,特别是在医疗设备领域,一直在问问题——比如,将人工智能引入临床环境意味着什么?这对FDA来说意味着什么?为了拥有带有AI算法的设备?所以这是需要注意和思考的,以及你需要在你的AI上执行什么样的验证和验证。
答案是模糊的。我们还不知道。FDA仍在决定如何在他们的设备上使用人工智能系统。我知道他们已经批准了一些,但肯定没有一个自主系统,据我所知,没有任何人为干预。这是一件值得关注的有趣的事情。但这只是题外话。
我会快速地过一遍,但我们确实有办法部署你最后的神经网络。在这个例子的最后,我基本上保存了一个神经网络。这个神经网络是我的最终迭代。我如何把它放在我最终部署的解决方案上,无论是嵌入的还是某个服务器上,无论它碰巧在哪里?所以我们有它的解,我这里确实有一个这样的解的例子,我现在很快地讲一下。
基本上,这个例子是建立在这个特定的doc例子之上的,所以当你收到代码时,你可以打开这个doc例子。基本上,这里重要的部分是阅读先决条件,因为有一些设置需要完成。你想要设置你的语义分割网络,让它在GPU上本机运行。还有一些额外的库和东西需要处理。
但在一天结束的时候,重要的是你有办法部署你的最终网络。这是一个例子,比方说,我想把一个算法放在我的最终设备上,加载它,预测,这是我的算法。有趣的是,首先,我们可以自动地做这个。我们将自动生成代码,这是最终代码的一个示例。
这都是由MATLAB自动生成的,很好。我能看到它是怎么分解的。你可以看到代码本身的所有注释也在最终结果中,我可以很好地概述我的结果是什么。该代码可以部署了。把它带到该去的地方。
相关产品2022世界杯八强谁会赢?
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。