人工智能

应用机器学习和深度学习

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

本文来自Oge Marques,博士工程与计算机科学教授。Oge是一个书的作者,美国科学促进会莱什纳研究员.他也是一个MATLAB爱好者,在他的课堂上使用MATLAB已经超过20年了。你可以关注他的推特(@ProfessorOge).在这篇博客文章中,Oge将介绍如何使用Python和MATLAB进行深度学习的计算机视觉示例。
深度学习(DL)技术在过去十年中极大地改变了计算机视觉领域,为经典任务(例如,金宝搏官方网站对象检测而且图像分类),并为解决具有挑战性的新问题打开大门,例如image-to-image翻译而且视觉问答(VQA)
深度学习在计算机视觉和相关领域(如医学图像分析)的成功和普及,在很大程度上是由丰富的工具、应用程序和框架的可用性所促进的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中)根据需要使用变量,例如,使用pandas处理表格数据,并使用与图像相关的标签作为基本真理。
  6. 在工作流程中根据需要重复步骤3到步骤7的次数。
  7. (在Python中)退出MATLAB引擎:
eng.exit ()

一个例子

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

任务A:皮肤病变分割

任务:给定一个包含皮肤病变的图像数据集,我们希望构建一个深度学习解决方案来分割每张图像,即将每个像素分类为属于病变(前景)或属于图像的其余部分(背景)。
存在的问题:为了训练和验证用于图像分割的深度神经网络,我们需要输入图像以及分割掩码(图2),这本质上是二进制图像,其中前景像素(在这种情况下对应于病变)被标记为白色,背景像素被标记为黑色。网络的工作是学习新图像的分割掩码。
图2:皮肤病变分割:输入图像(左);二进制分割掩码(中心);分割图像,绿色轮廓勾勒出病变区域(右)。
基本的工作流程通常包括使用卷积网络架构,例如U-net以及它的变体,有很多例子可以实现Python而且MATLAB.然而,该解决方案的一个关键组成部分是手动创建训练和验证所需的二进制掩码。除了少数公开可用的数据集外,这项耗时且专门的任务必须使用强大的交互工具来执行。
解决方案:使用MATLAB图像裂殖体应用程序来创建二进制掩码,并利用现有的(为了本例,使用Python)工作流来完成其他工作。Image segter允许您手动创建掩码,并提供了几种(半)自动技术来加快过程和细化结果(图3和图4)。最终分割掩码图像和原始图像的分割版本都可以导出到MATLAB工作空间和/或保存到磁盘。
图3:图像分割应用程序:加载包含皮肤病变的图像。
图4:Image segter 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:图像标签应用程序在皮肤镜图像中包含工件。所选图像包含两个矩形roi,标记为病变而且贴纸

关键的外卖

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

了解更多

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

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。