直到今天,医学影像ai的研究和落地,还有多少问题没有解决?
任务的复杂多样、数据的非标孤立、标注的稀疏有噪、模型的脆弱不稳,这些成为医学影像ai学者难以回避的问题。而在现实环境中,ai模型面临的考验更为复杂、不确定性更大。
2020年可以称之为“医疗ai商业化的元年”,已经有多款医疗ai产品获得官方审批。在人们惊叹“中国ai速度”的时候、在医学影像ai的大规模商业化之前,我们仍然要冷静思考眼下的问题。
2021年1月9日,中关村医学人工智能研讨会举行。
本次研讨会由《中国图象图形学报》联合中国生物医学工程学会医学人工智能分会共同主办,中国科学院自动化所田捷教授、华西医院副院长龚启勇教授、中国科学院计算所周少华教授、中国科学院计算所赵地副研究员等分享了在医学影像的最新研究与应用进展。
周少华教授是中科院计算所研究员、香港中文大学(深圳)兼职教授。
曾获发明奥斯卡奖、西门子年度发明家、马里兰大学ece杰出校友等,任miccai协会财长和理事,曾担任miccai 2020程序联席主席,aaai、cvpr、iccv、miccai和neurips等会议的领域主席。
雷锋网了解到,2020年底,周少华教授入选美国国家发明家科学院(national academy of inventors, nai) fellow。nai是一个非政府、非营利性会员组织,成立于2000年。nai fellow是该院授予学术创新发明家的最高荣誉,旨在表彰对人类生活质量、经济发展和社会福祉影响重大的学术创新发明家。
迄今有1403名fellows(包括本年度新科fellows),其中有38名诺贝尔奖获得者、63名美国国家技术发明奖章(u.s. national medal of technology and innovation)和美国国家科学奖章(u.s. national medal of science)获得者、556名美国国家科学院(nas)、美国国家工程院(nae)和美国国家医学院(nam)院士、137名美国研究型大学校长或研究机构负责人等。
这些来自世界各地的院士共持有42700余项美国专利,创造了3600万个就业岗位和超过22000亿美元的收益。
演讲中,周少华教授列举了医学影像ai现阶段面临的七大问题。并且,围绕深度学习自动化、通用表征学习、学习与知识融合等技术,分享了自己最新的研究思路与应用进展。
征得周少华教授同意后,我们提供ppt供大家学习和下载。关注公众号《医健ai掘金志》,对话框回复“周少华”即可获取。
周少华:非常感谢大会的邀请,我会从算法的层面来分享一下医学影像ai分析的特点、技术与趋势。进行医学影像分析和处理,首先要知道医学影像有哪些区别于自然图像的特点。以下,我从影像、数据、疾病、标注、样本、任务、安全这七个要素来介绍其特点。
首先,医学影像多模高清。常见的影像多模态包含了x光、ct、核磁、pet-ct、超声。而且,现在单个模态(如ct)的图像精度非常高。精度很高之后,我们就可以利用现有的渲染技术,把影像渲染地像是照相机拍的。当然,这也给gpu训练带来了一定的挑战。
第二个特点是数据非标孤立。医学影像的数据采集没有同一标准,不同医院、影像科室的采集协议不太一样。而且,影像数据在不同医院之间是不互通的,属于一个孤岛的状态。甚至,同一家医院不同的科室之间的数据也是不互通的。
此外,医学影像是疾病的表征。
kahn’s radiology gamuts是一个疾病知识库,定义了大概17000多个条目。每一个条目可以想象成报告里的一个相关概念,这需要一个很大的知识库在底层作支撑。因此,要构建一个完全意义上的影像诊断系统,复杂度巨大。
而且,像肺结节等这样比较常见的疾病占据了大量数据;相反,大量的疾病只有非常少的数据,整个呈现一个典型的长尾分布。另外,像新冠肺炎这样的突发疾病,数据采集从一开始就很有难度。总之,疾病长尾突发。
从标注层面来看,数据的标注也是比较稀少的。我摘取了一些2019年miccai竞赛组织方提供的标注数量,有的只有33例;也有貌似很大规模的数据集(32万例),但确是把64×64的patch作为一个样本。
当然,业界也做出了很多努力,推出一些大型的数据集。
另外,即使是有标注的数据,标注也通常会有噪声。(i)上图可以看出,不同医生在标注器官时存在明显差异。(ii)把这个影像报告作为金标准,从中提取标注信息,也是有问题的。
有统计数字表明,15%的报告内容并没有完全准确地描述图像信息。即使是同一幅图像让两个不同的医生来看,可能30%的内容是不一致的,这也充分证明标注会有很多噪声。所以,标注稀疏有噪。
假设标注充分且没有噪声,实际中又面临样本各异不均的问题。
例如肺结节良恶性二分类的问题。左边是正样本,右边是负样本。可以看到,即使在同一类中,形态差异非常大。从样本的比例来看,负样本的数量远大于正样本,高好几个数量级。另外,很多负样本长得非常像正样本。
这些也给我们利用机器学习来进行医学影像分析带来很多困难。
从任务层面来看,如果想构建一个非常大型的ai系统,我们可以看一下总共有多少任务。
这边展示了几个典型任务,包括从头颅骨的x光片里找特征点、基于不同模态的脑配准、基于乳腺钼靶来检测肿瘤、腹部多器官分割、模拟冠脉血流情况。这是五个不同的任务。
回想一下,医学影像有不同的模态、不同的疾病类型、不同的技术、如果把这些要素进行排列组合,你会发现任务复杂多样。
另外一个就是医学影像的安全性。相比于自然图像,医学图像更加脆弱和不稳定,即安全脆弱不稳。
左边是刚才展示的头颅骨x光片,我们设计了一个特征点检测的算法。这些绿色的特征点,就是算法检测到的我们想要的位置。但是,如果在图像里加上一点干扰,这些特征点的位置就可以被任意操纵。
在这个例子当中,我们可以把这些特征点操纵成一个字母“m”的形状,而我们人眼察觉不到图像的变化。
因此,这个算法就处于非常脆弱的状态,在原图加上一些不太容易关注的变化,就会对输出结果产生巨大的影响。
我们也进行了一些定量化研究。假设对一个医学影像进行强度小于一个灰度级别的攻击,意图改变输出的结果。我们攻击的目标是让神经网络特征的平均值尽可能降低或增加。
上图中展示的一个是眼底图像,另一个是自然图像。可以看到,两者的变化差异非常大。医学影像在受到扰动后,很容易就把特征值缩小50%以上,而自然图像的变化是相对微弱的。随着网络的层数加深,这个现象进一步加剧,变得越来越不稳定了。这也从侧面证明,医学影像是一个相对不稳定的状态,很容易受到影响。
考虑到医学影像的这些特点,我们是否可以针对性地设计算法?
目前,最火热的算法是训练深度神经网络,所谓的深度学习。这个算法的假设条件是:我们有一个单任务,且有大量的标注数据,即“小任务、大数据”。在这个条件下,现在的深度神经网络可以做到非常好的效果。
例如,很多公司在某一类单任务的影像产品上可以真正达到实用级别。但是,这种模式不容易扩展,构建不了全面的、满足影像科医生所有任务的系统。
而实际情况需要我们去解决“大任务、小数据”的问题,即有大量的复杂多样的任务,每个任务拥有小量的标注数据。这给算法研究者提出了新的挑战:我们能否设计一些新的算法,来达到更好的效果。
“大任务、小数据”是一个非常宽泛的概念,在不同的方向上涌现出了不同类别的趋势性技术。今天我主要会介绍深度学习自动化、通用表征学习、学习与知识的融合这三类技术。
深度学习自动化的概念,比较容易理解。
这是一个非常简单的框架。
假设有一个输入的图像x,输出变量y,中间学习一个神经网络f,它的参数是w。我们会假设有一堆训练数据,就是{(xi,yi)}, 然后构建一个优化问题,定义一些损失函数或者正则项来学习w。
在这个框架之中,实际上有很多人工的部分(如图中黄色标识所示)。
第一个就是,很多 yi需要标注,标注的数据量越大越好。所以,我们的第一个研究就是,能否找到一些标注高效的算法(如自监督、半监督、弱监督学习等方法),减低对标注量的需求
其次,学习过程本身就是一个优化过程,就会有个目标函数。所以我们要提出这么一个损失函数、正则项,这些也是人为来定义的。现在,也有研究提出,让目标函数通过学习的方法,更明确地符合所提出的问题。
另外,就是网络结构的问题。现在很多做法是,直接拿一个现有的神经网络进行训练,没有仔细地调整结构。所以,我们需要研究,针对具体,是否存在最适合于这个问题的结构。目前的方法包括网络结构搜索和元学习。
还有一个大家容易忽略的点在于表达方面。因为x已经给定了它的表达,但是y可以引入不同的表达。不同的表达也有讲究,因为这会影响到训练本身,主要在于计算梯度回传时,它的大小是不一样的;而梯度回传的容易程度是训练神经网络时最重要的指标。所以,我们希望找到一个好的y的表达,能够更好地实现梯度回传。
输出表达
我们先看一个表达方面的例子:设计一个通用型的肿瘤检测的方案。一般对此类检测问题,我们会使用bounding box (bbox),二维的bbox有四个参数,即中心点和长宽。你也可以训练一个神经网络来寻找方框,但这个方框的表达在梯度回传时是非常低效的。因为它是由四个参数的差异,来控制了一个可能包含几百万个参数的神经网络训练,所以它不是很高效。
基于此,我们提出了bounding map(bmap)的概念,把一个原本是四个参数的方框变成了一个图像式的表达。这样做的好处在于,每一个像素点都可以回传一个有指导性的梯度信息。所以,梯度信息就更丰富,神经网络会学习得更好。
我们做了三种方框表达常用方法的比较。在运用了我们的新表达之后,性能有比较大的提升。
接下来介绍一下自监督的概念。
在实际中,我们可能只有少量的标注数据,却有大量的无标注数据。所以,一个直观的想法是:我们是否可以利用这些没有标注的数据,来帮助目标任务或者目标模型的训练。这个就是自监督的出发点。
我们要做的,就是去定义一个proxy task(代理任务),这个任务产生监督信号。利用这个监督信号,我们可以训练一个神经网络,得到一个预训练的模型。由于我们有大量未标注过的数据,而通常神经网络训练中见到的数据量越大,其学到的表征就会越鲁棒。
代理任务的设计就成为了一个研究的课题。我们可以去设计不同的代理任务。如果设计的好,就可以学到非常好的网络表征。
接下来,我们利用目标任务的少量已标注数据,把预训练模型通过迁移学习的方法得到最终的目标模型。
我们在这个方面也做了一些探索。
我们定义了一个“魔方复原”的任务,你可以想象成把一个三维的影像分为8块(2×2×2)。训练中,你可以像魔方一样打乱它,但任何一个图像的打乱过程都是已知的,我们可以通过训练神经网络去复原魔方。
在复原过程当中,神经网络就学到了图像本身的表征,然后再把它迁移到目标任务上。上面是我们的最后得到的效果。对比只利用标注数据从头训练的方式,我们的自监督方法在脑卒中分类、脑肿瘤分割等任务上的提升是显而易见的。当然,前提是我们有少量的有标注数据和大量的无标注数据。
显然,代理任务和目标任务的效果是相关的。目前,很多同行学者们尝试提出了不同的代理任务。我们探索了另一种可能,不提出新的代理任务,而是将目前已有的代理任务进行融合,看看结果是否会做的更好。
我们的直觉也很简单:经过训练之后,每个代理任务应该是找到特征空间的一部分,目标任务很可能占据了特征空间的另外一部分。如果代理任务完全覆盖了目标任务想要的特征空间,这个效果就会比较好。
因此,如果每个代理任务得到的特征空间相似度越小、互补性越强,通过融合后,它们覆盖的空间就越大,对目标任务的帮助也越大。
我们就据此设计了算法,去寻找这些互补的代理任务。上面图中,我们发现,在六个不同的代理任务中,其中三个任务是非常互补的。如果我把这三个任务融合起来,在这个物体识别实验上的性能可以提高到接近80%。回到刚才脑卒中的问题,在融合了两个代理任务后,性能提高到了90%以上。
标注高效的另外一个例子是部分监督。
以器官分割举例,目前存在很多不同的数据集,分别提供不同器官的分割标注。例如这里有五个不同的数据集,分别针对肝脏、肾脏、脾脏、胰腺等。如果能够整合这五个不同的的数据集,以此来扩大数据量,并融合所有数据集里的标注信息,是非常有意义的。
我们的做法很简单:训练一个分割网络,对每一个像素点进行多分类,即分成六类:肝脏、胰腺、脾脏,左右肾,还有背景。因此,每个像素都会输出一个六维的向量,代表是属于哪一个类别的概率(从p0到p5)。
对于只有肝脏标注的数据,p1代表肝脏,而“背景”则是变成了原先背景与其他器官的融合,因为所有的非肝脏像素点都是背景,背景的概率变成了五个概率的相加,即边缘概率。在这个条件下,我们就可以在损失函数里面使用边缘概率。通过这个机制,就可以利用所有的标注数据进行六分类网络训练,有效地把这些数据融合在一起。
同时,在这个文章里我们也提出了一个exclusion loss,利用一个非常显著的先验知识:这些器官之间是一定不相交的。
例如,回到刚才只有肝脏标注的数据,我也可以计算p2(胰腺)来预测胰腺区域,而胰腺区域一定是不能跟p1代表的肝脏区域是有交叉的。
所以,基于此可以设计一个损失函数,让这两个区域的exclusion要越小越好。
利用这两个损失函数训练的结果如上。实验中有30个数据是有全标注的,基于这些数据进行测试,得到的分割dice系数是0.87。针对只有单器官标注的数据训练二分类的分割网络,
它的dice没有这么高,只有0.85。通过我们的融合方法,进行一个部分监督的训练,利用了总共所有688个数据,我们模型的dice达到了0.93。
所以,我们通过一个非常简单的想法,就可以有效地把这个数据融合在一起,提升了分割的性能。
最近,我们还进行了一个比较“极端”的探索:在没有任何标注的条件下,也可以进行基于ct的新冠肺炎病灶分割。
我们的出发点是:不使用新冠肺炎病灶的分割标注,但是利用很多没有任何疾病的ct图像。
利用这些正常图,添加一些“人造病灶”。如果这些病灶与新冠病灶类似,我们就可以对病灶分割进行学习。因此,我们设计了一个人造的病灶生成器,该生成器的所有参数是由人工调控的。然后把“人造病灶”注入干净的图像里,就得到了训练样本,进而训练出一个分割网络。
与我们的方法对比的是anomaly detection(基于正常的图像来训练,从而检测是不是有异常)。
anomaly detection在分割上不是很擅长,性能较低,在三个不同新冠数据集的dice系数只有0.3左右;而我们的usl方法达到了60%以上,接近70%。 inf-net是一个半监督的方法,分割性能与我们相近。当然,以上方法得到的分割dice系数在临床上远没有达到应用的标准。但是,从研究角度来看,是一个非常有意思的探索。
通用表征学习,意在学习一个通用的表征来综合异质任务、拟合多域数据、耦合不同表达,她更符合“大任务、小数据”的思路。
目前我们的一个探索也是基于分割网络,意图设计了一个分割网络,可以适用于六个不同的分割任务:输入是ct图像,要求输出是肝脏分割;输入是mri图像,要求输出是前列腺分割,诸如此类。
我们采用的架构本身是通用的u-net,但是对不同的任务引入了紫色的adapter;
就是说,每一个任务会利用到通用网络本身的这些系数,也会利用到自带的adapter部分系数,共同组成了神经网络。这么做得的好处在于,利用一个网络,完成六个网络的事情。网络的参数量明显减少:我们用了原先网络接近1%的参数量,达到了与六个网络类似的分割性能。
另一个优势在于,网络的通用部分很容易自适应到一个新任务上。如果我们遇到第七个任务,我们只需要把通用的部门固定住,针对第七个任务的差异化表征进行微调,就可以得到非常有竞争力的分割结果。
这是另一个通用表征的例子,应用在mr的影像生成。
从x到y,我们可以设计一个神经网络,用f来代表,y=f(x)。通常情况下,我们也会设计一个逆网络:x= f-1(y),这样就可以从y回到x。这是一个比较重要的过程,因为引入一个回路,通过回路可以定义cycle consistency。
在此基础上,我们提出了一个非常简单的想法:不是训练两个不同的神经网络,一个正网络,一个逆网络,而是只训练一个神经网络; 也就是说,两个网络是互为自逆的。
训练过程也比较简单:第一次拿x作为输入,训练网络输出y。第二次拿y作为输入,反过来输出x。我们在这个mr的影像生成任务上达到了很好的效果,把信噪比提升了3db左右,这个效果相当惊人。
这也是一个通用表征的例子,因为我们用了一个表征完成了两件事情。
最后,再介绍一下学习与知识融合。
我们知道,医学影像有很多数据,可以通过机器学习(特别是深度学习)来建模。同时,医学影像有很多知识,我们也可以直接通过对知识进行建模。因此,将学习与知识进行融合,其效果比仅仅基于大数据的机器学习要好。
在实践中,我也经常观察到其提升了性能。下面举例说明。
这是一个胸片自动诊断的例子。
一般方法是训练一个‘黑盒’神经网络直接预测诊断结果。我们研究了一个方法,利用解剖结构分解的知识来提高性能,这也是我们跟临床医生交流之后了解到的。
看胸片进行诊断时,你会观察到肋骨可能会遮挡了肺部,妨碍诊断。因此,我们设计了一个分解网络把x光片一分为三:骨头投影、肺部投影、其他投影,然后和原图一起输入神经网络进行肺部疾病的自动诊断。这么做,可以从中间的肺部投影图中获取到很多更准确的诊断信息。实验结果表明,在14类疾病中,有11类疾病诊断预测都做得更好,而这11类疾病大多是和肺部直接相关的。
第二个例子是无配对的伪影去除:给神经网络一个有伪影的图,通过学习的方法把伪影消除。
这是我们网络的设计,里面就像是乐高一样进行模块搭建,搭建过程中就用到了很多知识。最终,网络也可以成功地分离出伪影,利用知识后搭建的神经网络,比一般黑盒的方法要提高不少性能。
另外一个例子,医学影像的层内精度比较高,但是层间精度不太高,很多层间信息会模糊。
如果是一个常规ct、层间精度不够高的脊柱图像,进行渲染之后,哪怕是骨骼都看不太清楚。
我们最近尝试进行了层间插值的工作,可以有效恢复层间的信息,更有利于诊断(效果如上图)。算法本身用到了图像精度方面的具体知识,因此我们也将其视为“学习与知识融合”的例子来展示。具体算法细节请参照发表的文章。
总结一下,我们分析了医学影像的七大特点,以及围绕这七大特点,我们提出的相应算法趋势。
最近,我们也写了一篇综述文章,也被proceedings of ieee接收。
最后,介绍一下monai。
monai是完全开源的社区,可以为医学影像分析的研究者提供深度神经网络方面的资源,由专门的团队来打造、测试这个软件,因此软件的可靠性非常高。
我也是monai项目的顾问,我们会提出很多的这些需求,也希望大家可以来使用monai。雷锋网