如何利用AI技术做食管癌识别和辅助诊断
扫描二维码
随时随地手机看文章
(文章来源:人人都是产品经理)
通常的图像分类任务动辄几十万、上百万,甚至上千万的数据量相比,医疗影像它的数据量是非常少的。同时,由于设备参数、医生的拍照手法或拍摄角度、光照的明暗不同,食管的表观变化非常复杂。那么,我们怎样才能在这样的条件下得到一个可靠稳定的模型?
采用Feature map。Feature Map是卷积核卷出来的,你用各种情况下的卷积核去乘以原图,会得到各种各样的feature map。你可以理解为你从多个角度去分析图片。而不同的特征提取(核)会提取不同的feature,模型想要达成的目的是解一个最优化,来找到能解释现象的最佳的一组卷积核。
在同一层,我们希望得到对于一张图片多种角度的描述,具体来讲就是用多种不同的卷积核对图像进行卷,得到不同核(这里的核可以理解为描述)上的响应,作为图像的特征。他们的联系在于形成图像在同一层次不同基上的描述。下层的核主要是一些简单的边缘检测器(也可以理解为生理学上的simple cell)。
在拿到食管数据之后,如何判别这个食管属于健康正常食管还是病变食管呢?当我们判断一个食管是否异常食管时,只需要找到一个病变区域,就能够说明这个食管是异常的。但是反过来,在正常图像中,并不能说找到一个正常特征,就说明这个食管是正常的。只能说在这张图像中我们没有找到异常特征,它可能是见正常的。
因此,在正常特征和异常特征之间,我们更倾向于提取病变特征,抑制正常特征。病变和正常的case都会经过神经网络,以得到特征向量。对于这个向量,我们希望尽可能凸显异常特征,让正常特征趋近于0。我们是如何把这种信息建模到模型中的呢?我们对模型进行了重新建模,最后准确率大概在97%左右。前面的模型相对来说比较简单,第三个模型主要是区分炎症和癌症,它与前两个问题不大一样。
一般情况下,病变的食管图像里都会伴随着一些炎症的特征。我们对癌症的判断往往是通过一个纹理特别小的区域得出的,因此需要提取出更加精细化的特征。比较好的做法就是让很多专家把病灶区非常严谨地标注出来,这样我们只需要对这个区域进行识别就好了。这个标注量非常大,因此数据异常匮乏。我们没有癌症区域的标注数据,但又希望得到非常精细化的特征,如何解决这个矛盾呢?
幸运的是,我们虽然无法获取到非常精准的病变区域标注影像,却能够相对容易地知道一张图像是否包含癌症,因为只需要跟病例对应关联起来就好了。这样一来,我们可以更容易地得到图像全局的标签。
如果一张图像包含了癌症,必然会有一个或几个区域包含了癌症的特征。也就是说,如果我们把图像切分成几个patch,必然会有某个或某几个patch包含癌症特征。基于这样一种思路,我们采取了多序列的学习方式。这个方法的内在思想很简单,就是把图像切分成若干个patch,然后对每个patch建模,判别这个patch发生癌症的概率。我们最后把所有patch里面癌症概率最高的那块,作为图像是否包含癌症的标签。
做的过程当中,我们会逐渐积累精准标注的数据,这些数据非常少,不足以虚拟一个模型。但图像中的特征都是最精准的,是经过人为校验和标注的。我们怎样才能把这种少量的、精准的数据强化到癌症识别中去呢?这是个非常有意思的问题,如果能解决这个问题,即使只有少量标准数据,我们也能不断提升。这里主要采用了多任务学习的方法,这个方法需要完成两个任务:
基于有病变区域标注的数据建立有监督的学习任务;对于没有病变区域标注的数据,建立前面提到的多序列学习任务。这两个模型共享特征提取网络,特征提取网络必须同时满足两大任务,这样才能把精准标注的特征强化到癌症识别中去。
辅助诊断的目的是什么呢?我们希望机器最终能够像临床医生一样具备诊断疾病的能力。在介绍辅助诊断项目之前,我们先来看看一个医生或者一个普通的学生是如何成长为一名专家的:一个学生从刚入学开始,学习了大量专业课程,阅读了大量专业医学文献后,就可以积累一定程度的医学知识。当医学知识达到一定程度之后,就可以去医院里面实习,由临床医生结合一些真实案例,指导他去学习诊断的技能。
医学知识图谱的构建,也就是机器学习知识的过程;有了知识之后学习诊断的能力,也就是建立疾病判别的一些模型;让机器在与专家的博弈过程中,不断提升诊断水平,逐渐逼近甚至超过专家。医疗知识图谱的构建过程中,我们首先要对文本数据进行处理。文本数据分成两类,一类是半结构化数据,一类是非结构化数据。
我们可以把病史分为几个部分:疾病的情况、入院的治疗经过、入院的依据等;把病史分为这样几部分信息后,再对每一类信息进行细化和提取;经过提取之后,非结构化的文本就变成了计算机能够理解的结构化文本;我们会把这些信息转化为医学知识图谱存在电脑里,于是计算机就把这个知识学会了。
诊断的过程是这样的,首先把一段人类语言描述的病情转化成计算机可以理解的结构化知识。有了结构化的知识以后,机器就能理解这个人的情况,把知识推送到疾病诊断模型当中,模型将给出一个疾病列表,诊断模型的流程大致就是这样。