深度学习

理解和使用深度学习网络

基于Python和MATLAB的计算机视觉深度学习

本文来自Oge Marques博士华盛顿大学工程与计算机科学教授。奥格是一个书的作者,AAAS莱什纳研究员.他也是一个MATLAB的狂热爱好者,在他的课堂上使用MATLAB已经超过20年了。你可以在推特上关注他(@ProfessorOge).在这篇博文中,Oge将介绍如何使用Python和MATLAB进行深度学习,并给出一个计算机视觉的例子。
在过去十年中,深度学习(DL)技术极大地改变了计算机视觉领域,为经典任务(例如,万博 尤文图斯对象检测而且图像分类),并为解决具有挑战性的新问题打开大门,例如image-to-image翻译而且视觉答题(VQA)
DL在计算机视觉和相关领域(如医学图像分析)的成功和普及,在很大程度上是由丰富的工具、应用程序和框架的可用性所促进的Python而且MATLAB生态系统。
在这篇博文中,我将展示您的团队如何有效地使用MATLAB和Python,并提供一个易于遵循的方法,使您可以在使用深度学习构建计算机视觉解决方案时利用“两个世界的最佳”。万博 尤文图斯

背景

Python是一种编程语言,由Guido van Rossum在20世纪90年代初创建。它已经被许多数据科学家和机器/深度学习研究人员采用,这要归功于流行的软件包(例如,scikit-learn)和框架(例如,KerasTensorFlowPyTorch).
MATLAB是一种编程和科学计算平台,用于分析数据,开发算法,并在科学和工程的各种领域创建模型。它有被工业界和学术界的工程师和研究人员广泛采用的成功历史。它有许多专门的工具箱其中封装了相关算法、交互工具和丰富的示例,如机器学习深度学习图像处理,计算机视觉(仅举几例)。MATLAB也有活力用户群体谁贡献了额外的功能(包括应用程序和整个工具箱)以及在流行的代码共享存储库中越来越多的存在,例如GitHub
在我个人的经验中,我在不同的研究项目、课程、训练营和出版物中使用过MATLAB(25年并且还在继续增加)和Python(不到10年),大部分是在图像处理/分析、计算机视觉和(最近的)数据科学、机器学习和深度学习的背景下。
我还与多学科团队合作过,他们采用各种工具,精通各种技能。我知道促进和促进采用精简的、记录良好的深度学习工作流程是多么重要。我也强烈支持总是使用最好的可用工具,以最好的方式完成工作。幸运的是,您可以同时使用这两种语言,下面我们将展示这一点。

背景和范围

MATLAB和Python的互操作性在视频在线研讨会、博客文章和官方MATLAB文档.这些资源在学习时非常有价值如何从MATLAB调用Python脚本,反之亦然以下是一些主要原因从Python调用MATLAB的动机是:
  1. 促进使用不同框架和工具的团队成员和合作者之间的代码集成。
  2. 利用仅在MATLAB中可用的功能,例如应用程序和工具箱(包括由MATLAB社区贡献的第三方工具箱)。
在这篇博文中,我关注的是将MATLAB应用程序集成到Python深度学习工作流中,用于计算机视觉和图像分析任务,重点是传统深度学习工作流的数据准备阶段(图1)。更具体地说,我展示了您的团队如何利用选定的MATLAB应用程序的丰富交互功能来准备、标记、注释和预处理数据之前将它作为神经网络的输入——以及传统深度学习管道中的其他所有东西。
图1:基本深度学习工作流。
我假设:(1)你有一个Python的计算机视觉深度学习管道,你计划对它进行调整和重用,用于一个新的(一组)任务;(2)与新任务相关的图像将需要交互操作,如注释、标记和分割。

基本配方

假设你有在您的机器上安装和配置MATLAB和你最喜欢的Python设置(例如,使用Jupyter笔记本),从Python脚本调用MATLAB是一个简单的过程,其主要步骤是:
  1. (MATLAB)安装Python的MATLAB引擎API,它提供了一个名为matlab的Python包,允许您调用matlab函数并在Python和matlab之间交换数据。
  2. (在Python中)配置路径和工作目录。
  3. (在Python中)在后台启动一个新的MATLAB进程:
进口matlab.engine Eng = matlab.engine.start_matlab('-desktop')
  1. (在Python中)设置变量(例如,图像文件夹的路径)。
  2. (在Python中)调用您选择的MATLAB应用程序(例如,Image Labeler应用程序)。
  3. (MATLAB)与选定的应用程序(交互)工作,并将结果导出到工作区中的变量。
  4. (在Python中)保存工作流其余部分所需的变量,例如,图像文件名和相关标签(以及它们的边界框)。
  5. (在Python中)根据需要使用变量,例如,处理表格数据使用熊猫和使用图像相关的标签作为基础真理。
  6. 在您的工作流程中,重复步骤3到步骤7的次数尽可能多。
  7. (在Python中)退出MATLAB引擎:
eng.exit ()

一个例子

这是一个例子在医学图像分析(使用深度学习)的范围内,如何一起使用Python和MATLAB完成两项不同的任务:皮肤病变分割和(医学)图像(ROI)标记。
尽管它们之间存在差异,但每个任务都遵循前面提到的相同的基本方法。下面将描述每个案例的具体情况。

任务A:皮肤病变分割

任务:给定一个包含皮肤病变的图像数据集,我们希望构建一个深度学习解决方案来分割每个图像,即将每个像素分为病变(前景)或图像的其余部分(背景)。
存在的问题:为了训练和验证用于图像分割的深度神经网络,我们需要同时输入图像和分割掩码(图2),这本质上是二值图像,其中前景像素(在这种情况下对应于病变)被标记为白色,背景像素被标记为黑色。网络的工作是学习新图像的分割掩码。
图2:皮肤病变分割:输入图像(左);二值分割掩码(中间);分割图像,绿色轮廓勾勒病灶区域(右)。
基本工作流程通常由使用卷积网络体系结构组成,例如U-net和它的变体,有多个实现的例子Python而且MATLAB.然而,该解决方案的一个关键组成部分是手工创建训练和验证所需的二进制掩码。除了少数公开可用的数据集外,这个耗时且专门的任务必须使用功能强大的交互工具来执行。
解决方案:使用MATLAB图像裂殖体应用程序来创建二进制掩码,并利用现有的(在本例中使用Python)工作流来处理其他所有事情。图像分割器允许您手动创建掩码,并提供几种(半)自动化技术来加快过程和优化结果(图3和图4)。最终分割掩码图像和原始图像的分割版本都可以导出到MATLAB工作区和/或保存到磁盘。
图3:图像分割程序:加载包含皮肤病变的图像。
图4:Image Segmenter app:在选择了几个前景控制点(绿色)和一个背景控制点(红色)后,应用Graph Cut算法的结果。面具看起来是覆盖在原始图像的顶部。

任务B:(医学)图像(ROI)标记

任务:在与任务a类似的上下文中,我们希望构建一个深度学习解决方案,用于检测每个图像中的感兴趣区域(roi),即在图像中的每个相关区域周围设置边界。最常见的ROI是病变;其他可能的roi可能包括贴纸、尺子标记、水气泡、墨水标记和其他工件。
存在的问题:为了训练和验证用于ROI/对象检测的深度神经网络,我们需要输入图像以及相关ROI的标签和坐标,这些标签和坐标可以表示为矩形(最常见的)、多边形或基于像素的掩码(类似于分割中使用的掩码)。网络的工作是学习新图像的相关roi的位置和标签。
同样,与我们在任务A中看到的类似,解决方案的一个关键组件是手工创建培训和验证所需的roi(多边形和标签)。除了少数公开可用的数据集外,这个耗时且专门的任务必须使用功能强大的交互工具来执行。
解决方案:使用MATLAB图片标志应用程序来创建和标记roi,并利用现有的工作流来处理其他所有事情。Image Labeler允许您创建不同形状的ROI标签,为它们分配不同的名称和颜色,并提供了几种算法来帮助自动化和加快过程并优化结果(图5)。生成的ROI可以导出到MATLAB工作区,随后在您的Python代码中用作变量(参见GitHub上的例子详情)。
图5:在包含工件的皮肤镜图像上下文中的Image Labeler应用。选定的图像包含两个矩形roi,标记为病变而且贴纸

关键的外卖

深度学习项目通常是协作性的工作,需要为工作使用最好的工具,实现有效的代码集成、开发和测试策略,促进沟通,并确保代码的可重复性。在开发深度学习项目时,您的团队可以(也应该)利用MATLAB和Python的优点。在这篇博文中,我展示了如何使用Python和MATLAB一起完成一些与计算机视觉和医学图像分析问题相关的任务。
Python和MATLAB的集成远远超出了这篇博文的范围;查看下面列出的参考资料了解更多信息。

了解更多

这篇博客的灵感来自于卢卡斯最近的博客文章García还有一系列很棒的视频希瑟·高尔Yann Debray及其同事。我强烈建议您关注它们,并查看它们提供的非常有用的示例和教程。如果你对深度学习工作流程的其他方面感兴趣,以下是我在其中发表的一些博客文章:
|
  • 打印
  • 发送电子邮件

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。