暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ITK简化将C++算法集成到Python中进行人工智能研发的过程

开源视界 2020-04-23
922

Tags: Deep Learning , ITK , Medical Imaging , Python

现在使用PyTorch、TensorFlow、scikit-learn和其他Python库让您在人工智能研究方面如鱼得水。但是多年来你一直在用c++开发算法。为了达到人工智能研究的下一个层次,你需要将那些c++算法引入到你的Python脚本中。你可以花几天/几周/几个月的时间用Python重新实现你的c++算法,或者更简单地你也可以将你的算法转换成Insight Toolkit (ITK)函数。好消息是ITK Python现在可以自动将C++代码包装成Python函数!

事实上医学图像处理研究人员和产品开发人员几乎都知道,ITK提供的图像归一化和增强技术支持50多种医学图像格式,并提供数百种用于提取医学图像中的生物标志的图像分析方法。然而,他们中的大多数人不知道的是:

ITK现在可以通过Python来使用,并且它与大多数流行的AI工具箱进行了紧密的集成。虽然ITK是用C++编写的,但在过去15年多的时间里,它一直使用SWIG和CastXML相关的工具来提供对Python的绑定。有一个好消息是,自从ITKv5.1发布以来,那些ITK Python绑定已经得到了完善,现在使用起来就像使用原生的Python库一样。这些新的接口还无缝地支持numpy数组、dask数组、xarray和许多其他的数据结构,包括ITK图像数据。例如,如果将numpy ndarray作为输入传递给ITK的图像过滤器,它将同样返回numpy ndarray。就像下面这个来自ITK Python快速入门指南的代码展示的一样:

image = itk.imread(input_filename)median = itk.median_image_filter(image, radius=2)itk.imwrite(median, output_filename)

ITK的远程模块提供了一个易于使用的管道,可以将高效的c++图像处理算法与Python集成在一起。比方说,作为你的医学成像人工智能研究的一部分,你想要在训练深度学习模型时模拟身体质量指数(BMI)随着数据的增加而发生的变化。或者你正在处理一个模糊的显微镜成像格式。或者你发现你的Python算法遇到了瓶颈,你想要用多线程的C++实现它。那么,您应该考虑编写一个ITK远程模块,该模块将自动包含到ITK Python中。

要创建ITK远程模块,请遵循ITKModuleTemplate提供的文档。正如在文档中所解释的,模板模块使用一个名为“CookieCutter”的Python包,该包会向您询问关于您想要构建的模块的一系列简单问题。然后,CookieCutter使用您的答案为该模块创建自定义构建环境。使用该环境,您只需遵循well-documented ITK process就可以构建一个标准的ITK类,例如itkImageToImageFilter。定义了该类之后,使用CMake启用ITK Python包装,然后编译它。你的类将作为ITK Python函数而被提供:

import itk
filtered_image = itk.your_image_filter(image)

就是这样! 在你的人工智能研究中使用ITK Python,并创建你自己的ITK远程模块,这将使你能够有效地将你的C++算法和专业知识与Python中最前沿的人工智能库结合起来。你也可以在PyPI上发布你的自定义ITK,让全世界都能访问你的软件…

混合渲染磁共振血管造影(MRA)和一些血管。分段后的血管(如图中红色部分所示)是通过包含在TubeTK模块中的使用C++实现的方法提取得到。而上图却是通过Jupyter Notebook Python脚本完成的。你的C++算法也可以类似地被包装为ITK模块,然后通过Python脚本使用。

文章转载自开源视界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论