https://blog.tensorflowcn.cn/2020/03/using-tensorflowjs-to-deploy-radiology-based-image-search-application.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-EVlSbNYXkT7UKPioe4zJ9omOUnoL0zqSXoPu8vRZkENQQ7rISOraCATJedkEe6k7p4KkO1aqtA2z6FDeqPqaUlUQ0Updrv0zZ8MCoORlJzAV90dtL4oiE7wPFTy5RtuuDjQqLAq6_h4/s1600/fig1.png
Erwin John T. Carpio 博士客座文章
作为一名来自菲律宾的医生和放射科医生,我一直希望学习如何开发和将机器学习(以下简称 ML)模型应用于我的执业领域。然而,当我开始学习时,机器学习对我来说就像一门外语。我只有有限的编程经验,而且没有正规的计算机科学背景,我感觉这个领域对我来说遥不可及,尤其是当我尝试查看现有研究时。但当我开始我的学习之旅并发现这个领域比我最初想象的更容易获得时,情况很快发生了变化。
RadLens:一个用于反向图像搜索的网络应用
我目前专注于创建一个名为 RadLens 的工具,以激励像我一样的从业者。我希望它能帮助我的领域中的其他人考虑如何使用机器学习工具来辅助他们日常的实践。它是一个正在进行的工作(目前尚未获得 FDA 作为医疗器械的批准,不应用于诊断)。
当然,在任何医疗机器学习应用中,最重要的是收集一个大型、多样化的训练数据集并进行严格的评估。对于临床级应用,这可能包括数千张甚至更多由专家分级的图像。在我的应用中,我专注于构建一个小型工具作为概念证明。我希望该工具能帮助我的工作,尽管我最终仍然是负责做出准确诊断的医生。
我的日常工作包括识别和诊断骨折,这就是为什么我首先想看看我是否可以,作为一个最小可行原型,构建一个能够对前臂的两种骨折类型(蒙特吉亚和加莱齐)进行分类的网络应用。然而,除了检测实际骨折之外,放射科医生还接受过训练,以了解身体的各种解剖(正常)变异,以便我们能够将这些变异与实际病理区分开来。解剖变异的例子是足部骨。放射科医生接受过训练,知道这些解剖变异和实际骨折碎片之间的区别。
我们有时会查找参考教材中的解剖变异,以确保我们看到的是一个骨头,而不是一个实际的骨折碎片。有很多足部骨头,从记忆中手动找到教材中的相应页面可能会很麻烦。我决定看看我是否可以为 RadLens 的第二个版本训练一个新的 ML 模型,以检测我在自己的实践中经常看到的几种不同的足部骨头。
我想构建能够做到的网络应用
- 记住第一个网络应用程序中骨折类型的图像和第二个应用程序中 6 种足部骨头/解剖变异类型的图像。
- 使用设备的摄像头实时扫描我认为可能是骨折(对于第一个网络应用)或足部骨头/解剖变异(对于第二个网络应用)的东西。
- 自动将我引导至 Google 图像搜索,以便我可以自己交叉引用怀疑的“骨折”或“足部骨头/解剖变异”。
下面详细介绍了 RadLens 的两个版本或迭代。
RadLens(版本 1)是一个网络应用,它使用你的设备摄像头
扫描 X 光图像并尝试预测该图像中显示的骨折类型(如果有骨折),而无需将任何图像上传到云端,以保护患者隐私。如果发现系统训练过的骨折之一,它会返回一个分数,表示它对分类的信心程度。由于所有推断都在本地机器上执行,因此这使得这个过程更快,因为分类不需要服务器。重要的是,RadLens 还会返回一个指向 Google 图像搜索的链接,这样我就可以浏览此骨折的其他图像,并使用它们来帮助我诊断。
RadLens 的初始版本专注于对两种类型的骨折进行分类(例如,
蒙特吉亚 和
加莱齐 前臂骨折)。用户体验流程如下
|
使用 RadLens 版本 1。 左:使用手机摄像头实时扫描前臂的 X 光图像。 中:RadLens 将骨折类型分类为蒙特吉亚或加莱齐。 右:单击超链接以浏览 Google 图像搜索,查找检测到的骨折类型的图像以进行交叉引用。 |
指向 Google 图像搜索的超链接非常重要,尤其是 RadLens 仅在少量数据集中进行过训练。这使得使用此工具成为互动式,我可以在使用过程中评估其准确性,并使用它可能犯的任何错误来帮助指导我的未来工作。我可以探索类似的案例并验证模型是否正确,或者决定是否需要收集额外的训练数据,或者是否需要咨询其他医疗专业人员。
构建 RadLens
我决定不开发一个与放射科医生一样准确的 AI 模型,而是专注于帮助我更快地搜索参考的小型模型。为了构建 RadLens 的第一个版本(用于骨折),我的初始原型是用 Python 编写的,使用 Tensorflow,利用一种称为
迁移学习 的技术,该技术使你能够训练一个新的模型,该模型重用另一个在大型数据集中训练的模型学习的一些特征。在使用这种方法进行了一段时间的实验后,我决定采用更简单、更具普遍性的方法。
我发现了
可教机器,这是一个由 Google 开发的网站,它允许你的计算机识别你自己的图像、声音和姿势。你甚至可以使用 UI 上传训练数据,如果你愿意,这样训练就可以在网络浏览器中实时进行。我使用可教机器产生的模型创建了
RadLens(用于足部骨头/解剖变异)的第二个原型。可教机器非常适合构建简单的交互式原型,可以帮助向放射科医生传达 ML 的潜在用例如何促进他们的工作。我选择的训练 ML 模型的当前过程可能不适合构建临床级应用(为此,你需要一个由计算机科学家和医生组成的团队,他们使用更多数据一起工作),但对于我的目标,帮助其他放射科医生了解 ML 如何帮助他们的日常工作,我发现它非常有用。
作为额外奖励,使用可教机器意味着,我可以专注于使用一种编程语言(JavaScript),而不是使用我的项目中的两种编程语言(Python 和 JavaScript)。更棒的是,推断是在网络浏览器中使用运行在你笔记本电脑或手机上的 TensorFlow.js 执行的;这意味着患者数据仍然是私密的,并且永远不会上传到中央服务器进行分类,并且推断时间也更快,因为没有到服务器的往返时间。
展望未来
如今,大多数针对医疗保健的 ML 解决方案都是预先打包的,虽然很强大,但也有很多局限性。这些系统具有庞大的文件大小和有限的部署,因为模型必须保留在中央 IT 系统内。此外,它们可能非常昂贵,因此只有大型医院和诊所才能负担得起使用它们。由于它们已经过预先训练和预先打包,因此本地放射科医生很难重新训练它们,以用于可能更符合本地实践需求的用例。我本质上是想将具有成本效益的 ML 放在本地放射科医生的手掌中。构建概念验证系统比我最初想象的更容易获得。
在未来,我希望通过添加目标检测来进一步改进网络应用,以在图像本身的可见边界框中突出显示找到的骨折或骨头。目前,该应用仅执行图像分类,这会检测到存在,但不会显示位置。
我了解到,ML 作为一项技术,既可以横向扩展,也可以纵向扩展。横向应用广泛而普遍。这些通常是通过更大规模的 AI 专家团队的努力实现的,因为他们横跨医学计算机视觉的广阔画布。我希望激发人们对 AI 开发的纵向扩展的兴趣,因为它变得越来越适应世界各地特定放射科医生的个别用例。我认为,现在没有什么比使用网络和 TensorFlow.js 更适合做到这一点的了,它可以轻松地让人们尝试和实验在他们的利基领域使用机器学习的可能性。