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