GMTC 全球大前端技术大会 8 折涨价倒计时 2 天,现在购票立减 ¥960 ! 了解详情
写点什么

吴边:基于 AI 的医疗影像实践与应用

2019 年 10 月 08 日

吴边:基于AI的医疗影像实践与应用

互联网+医疗,曾被认为是技术难度相当大的一个结合,但随着人工智能、大数据、云计算的不断发展,智慧医疗时代已经来临。

6 月 30 日下午,在七牛架构师实践日第二十九期,微医人工智能资深技术专家吴边对于这一领域进行了《基于 AI 的医疗影像实践与应用》为题的实战分享。本文是对演讲内容的整理。



大家好!很高兴能参加七牛云组织的架构师实践日活动,让我能有机会跟大家关于医疗影像方面进行交流。


医疗人工智能的背景

首先我想大致讲一下医疗人工智能的背景。因为医疗是个非常庞大的领域,它从诊断这个最核心的部分开始往外延,一直服务到方方面面。从医院到社区到家庭,它的每个领域,只要是医疗信息化和大数据涉及的部门,都可以把人工智能嵌入进去。所以前不久,谷歌发布了报告,声称医疗人工智能可以开始起飞了。正是因为它确实是有用,对于医疗领域的那种巨大的需求。



医疗影像为什么需要人工智能参与?

今天我们主要讲医疗影像,影像里面就涉及到诊断,诊断就跟医生有关系。现在医院里阅片的过程,是通过专门的阅片医生,通过看各种仪器拿到的图片,找到病灶进行对比,从而诊断是什么疾病。那这里面为什么需要人工智能参与?


最主要的原因是人力资源跟不上。大家去医院看过病就知道,我们有时候拍一张片子,可能需要一周才能拿到,就是因为医生太少,结果就积压在那边。第二跟是因为工作量太大,医生看片的时间长了,很容易疲劳,疲劳就容易误诊,所以限制他们每天看的总数。最后一点,是因为人的心理,我们往往只去找我们想找的东西,一旦不注意,往往会对一些东西视而不见。对于医生来说,如果一种病的影像中有六种情况需要关注,而他当时如果正好只想着五种,剩下的那种一种可能就会容易被遗漏掉。


针对以上的问题,我们在微医云里已经开展了医疗人工智能的很多研究,这里面包括了全科和专科两种,专科主要是影像和各种介质的诊断,全科为交互式的机器人,可以与人进行对话交流,提供就医指导意见。


医学人工智能所面临的挑战

首先,医疗人工智能,与总体人工智能有什么关系?显然医疗人工智能很多受益于人工智能目前总体的发展,很多人工智能的最新技术,医学人工智能都可以直接拿来用,在研发上对我们助力是非常大的。但是医学人工智能,特别是影像领域也面临着特有的挑战。


第一是医疗影像的介质类型不同。它的对象不是我们人眼习惯看到的天然的东西,这样就会带来一个问题,缺少人生来就有的“熟悉感”,导致我们从直觉上分析它比较难。


第二个是数据缺乏。如果大家有搞过机器学习或自动学习,就知道标记的数据非常重要,但是经过标记的医学样本是非常缺乏的,究其原因,就在于医学是个非常专业的领域,必须要找有资格的专业从业者来进行标注,而不能像自然影像一样直接众包出去。而另一方面,不同的标注者经验参差不齐,为保证数据可靠必须要找专业医院、水平比较高的医生去做。而这些医生大多属于超负荷工作状态,人力很少,所以拿到数据的代价大,而且慢。


最后一个是模型的使用问题。因为我们现在做的很多神经网络模型,目前来说大部分还是黑箱,这对日常的应用没关系,但是对医学领域来说,医生使用一个模型只看到一个结果,但是他不知道为什么会导致这个结果。而目前我们的人工智能以辅助医生为主,最终诊断结果还是由医生签字负责。如果他不能理解,就会觉得不靠谱,就不愿意接受这样的东西。


面对挑战的应对之道

这里应对之道,首先我们要加强与医生的沟通,自己要成为专家。


先对与自然影像不同的介质类型进行简单介绍。最典型的是 X 光(左上),这个大家应该都比较熟悉。旁边是断层扫描,包括 X-CT、核磁共振成像等,它们的特点是 3D 的。下图居中是病理,它把人体的组织样本放大到可以看到细胞的程度,从而进行细胞学判断。右下是眼底影像。其他还包括超声和心电图,心电图是 1 维时间信息,但是我们可以把它当做一个广义的影像来看待。常规也是有的,比如左下是皮肤病的一个照片,我们也可以由这个照片去做诊断,这个用一般的数码相机就可以。



非完全标记

另一个是非完全标记。



这是一张病理图,左侧图中,黑圈部分是医生标的有癌细胞的地方。可以看到他只标了粗的、大的比较明显的区域。右侧两图是眼底照片,圈里面高亮的地方是病灶,但是也有很多地方没有标进去的。为什么没有标?因为太细太多了,多到如果一个个全部标记,医生实在受不了。我们看到的只是其中一张,真正的数据需要成千上万图,你如果都去标,医生很快就吃不消。因此他只会把这种比较明显的、大的标出来。


还有一种情况如下图。



这是 CT 里面的,标注的形式问题也不少。因为 CT 是一个三维的数据,我们人类虽然生活在三维的空间,但习惯看到的是二维的表面,所以我们实在没办法直接感知这种三维。因此最常见的办法,是把 3D 数据分层,把每一层东西标注。但是这样工作量太大,CT 扫描往往有几百层。因此在这张癌症肿瘤的图上,一个常见的做法是医生只把肿瘤最大的那一层标注,其他层就不再标注。还有稍微好一点的,所谓的 2.5D 的做法,是在若干个互相垂直的平面上标记,剩下的就不标。


我们做过机器学习的就知道,这里标的是正样本,是“有病”区域,没有标的是负样本,没有病。但是这边有病标成没有病,就是伪的负样本,对我们的模型会造成干扰。


所以目前常用的有这样几种方法:重采样方法、loss 加权、弱监督学习。其实他们想做的事情都是同一件事情,是要减少未标记的内容,一些伪负样本造成的影响,不对机器学习过程产生影响,这样会把它们忽略掉。


弱监督学习

我们先看个例子:弱监督学习。在病理图像的诊断中,我们自己遇到过和下面这个论文中提到的同样的场景:粗标记的一个代表,这个代表只告诉你一批样本里面有病或没病,但没有具体告诉你是哪一张有病。在下图中,粗标记只告诉你这张图上是不是有病变,但是不会告诉你癌变具体有多少,发生在什么位置。也就是说这个标记是一个很粗的范围,并不十分细致。



那么面对这样的情况,我们的方法是什么呢?先把大块这张图分成很多小块,把每个小块单独分类。下图是对小块进行分类的分类器,分成正样本、负样本。然后把这两个结果融合起来,只要小样本有病的,我就把整个大模块标记为有病。这个做法通过选择可以在机器训练的时候,可以把信号反向传播回去,但是有一个选择的过程。比如我们有时可以选择这八个分类结果,他们有病的最大值、概率值,然后把它作为一个最大值的操作。但是一般最大值不是反向可逆的,我们就改为类似于这样的一个过程,它错误纰漏可以反向从那边传回去。



医疗影像案例:眼底影像

眼底影像是通过眼底机器拍到的人视网膜照片。因为视网膜是很敏感的组织,人的很多疾病,像内分泌疾病、糖尿病等,很快会导致视网膜发生改变。同时视网膜相当于是给大脑上开了一个窗口,通过它我们可以得知很多神经系统疾病。



我们之前做的研究,怎么样通过视网膜去判断一个人脑中风的风险。下面呈现的是一个糖尿病病例,这边都是一些病灶,要去把这些病灶全部找出来。



上图画框的地方,是医生给我们做标记。但是在图中有箭头指的地方,同样是有病变的,但是医生没有把它标进去。我们怎么来处理这个问题呢?第一是在这里加上一个常规的 SSD 的网络,然后这边进来了以后,这条通路是常规的通路,但我们这边加了一个这样的模块,把这个样本录进来之后,因为这个地方已经是 H-W-d 维的矩阵,在每个位置上都是一个样本。我们先把这些样本进行聚类,聚类的过程就是一个迭代的过程。聚类只对那些我们认定的这些部位进行。对这些已经标记的东西作为中心聚类了以后,我们就把剩下所有的这些没有标记的东西,跟它们进行对比。如果它的特征差别比较大的话,我们就把它的权重给降下来。也就是说我们把它认为是一个伪的负样本,反之则维持正常的权重。这样就在 AI 学习中避免了伪负样本的干扰。


用了这个技术以后,我们的模型就把之前没有找到的地方都标记了出来,就是图中蓝箭头指向的地方,相比原来的结果,有了一个巨大的提升。


作者介绍:


吴边,毕业于浙江大学生物医学工程专业,对类脑计算和人工智能有深厚的兴趣,拥有计算神经学,人工神经网络和机器学习方面的多年研究经验。曾任华盛顿州立大学研究助理教授,现任微医医疗影像智能研发工作负责人,睿医人工智能研究院高级研究员,致力于用深度学习等技术解决医疗领域的智能化需求。


本文转载自公众号七牛云(ID:qiniutek)。


原文链接:


https://mp.weixin.qq.com/s/mYhXyfpz4KcBq_LLAI9KBw


2019 年 10 月 08 日 10:25245

评论

发布
暂无评论
发现更多内容

《effective-go》 学习笔记

半亩房顶

golang

用户体验(UX)设计≠用户界面(UI)设计

刘华Kenneth

敏捷 设计 UX 用户体验

ARTS Week8

丽子

List 和 Map 的排序

方明

Java

learn go with tests 学习笔记(六)进程同步

半亩房顶

golang golang新手

关于微服务架构思考

Arthur

真正的勇士,会跨过六道裂谷,奔向云与AI的彼端

脑极体

nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

谙忆

你为什么还在用存储过程?

架构师修行之路

数据库设计 架构设计

原来你是这样的B+树

Java技术宝典

B+树

learn go with tests 学习笔记(五)并发

半亩房顶

golang golang新手

零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品

代码制造者

编程 低代码 行业资讯 零代码

MySQL事物-学习笔记

Edison

MySQL 数据库 数据库事务

我是如何参与硅谷顶级开源项目并赚得2500美金

阿水

硅谷 Minio

消息疯狂堆积!RocketMQ出Bug了?

Edison

RocketMQ 中间件

从数据中台到AI中台,企业到底要建什么中台?

脑极体

learn go with tests 学习笔记(七)反射

半亩房顶

golang 反射 golang新手

疫情之年 下半年区块链应用落地会加速么?

CECBC区块链专委会

区块链 场景应用落地

Python爬取微信公众号文章保存到数据库

wjchenge

“啰嗦”是成事唯一正确的方法

霍太稳@极客邦科技

团队管理 个人成长 团队协作 沟通

RocketMQ源码解析-开篇

Edison

RocketMQ 中间件

Executor看不懂?教你如何盘它

Edison

线程池 后端开发

数据采集能力受限?企业数字化运营如何迈出第1步

易观大数据

DevOps 技术栈

柴锋

Linux DevOps 运维 敏捷 Shell

政策加持迎来区块链技术应用“红利期”

CECBC区块链专委会

话题讨论 | 特朗普正式封禁微信,iPhone 和微信二选一?

InfoQ写作平台官方

写作平台 话题讨论

踩坑记 | Flutter升级影响了NestedScrollView?

哈利迪

android

500行代码写一个俄罗斯方块游戏

程序员生活志

以区块链为基础 通证经济是下一代互联网的数字经济

CECBC区块链专委会

区块链 落地应用

2.1.2 类加载器的工作原理与自定义加载器 -《SSM深入解析与项目实战》

谙忆

LeetCode题解:24. 两两交换链表中的节点,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

吴边:基于AI的医疗影像实践与应用-InfoQ