雷锋网按:目前全球范围内大约有 4.15 亿的糖尿病患者,单是中国就有 1.1 亿左右,而糖尿病视网膜病变致盲问题也愈发受到人们的关注。
据悉,只要在发病初期定期进行眼底检查,失明风险可下降 94.4%。但由于眼底病灶微小,部分医生经验不足等原因,使得诊断中可能出现漏诊、误诊的情况,因此,借助 AI 辅助诊断是未来的一大趋势。
那么如何将人工智能应用在眼底检测当中,雷锋网邀请医疗影像公司肽积木CEO柏文洁做了一期以《探讨医疗人工智能之眼科AI的真实应用场景》为主题的公开课,从算法、工程、产品、业务等多个角度进行剖析。
柏文洁,肽积木科技 CEO。毕业于中国科技大学,香港浸会大学访问研究助理。共发表论文 12 篇,1 作 4 篇,引用次数过千次。AI 算法工程师,研究方向主要集中在算法、非线性科学领域,擅长数学建模,独创的 LP-NET 算法在病灶识别方面取得国际领先水平。
此外,柏文洁还是大数据领域的连续创业者,是大数据公司信柏科技、时趣互动运营核心创始成员,在大数据、人工智能产品、运营、推广等业务环节有丰富经验。柏文洁创立的医疗人工智能公司肽积木科技,已推出医疗影像诊断机器人与医疗大数据人工智能训练平台。
本次公开课包括以下内容:
糖网眼底筛查为什么成为了热点
应用于眼底判断的机器学习和深度学习技术
当前的分类算法在实际解决眼底判读问题时面临的挑战
工程化解决眼底应用判读
眼底产品运营环节遇到的挑战以及推进思路
以眼底为代表的筛查类型AI判读发展趋势
(注:本次雷锋网硬创公开课中,柏文洁展示大量的案例,并回答多位读者的精彩问题,所以推荐优先观看视频。)
今天有机会来跟大家一起探讨一下医疗人工智能在眼科AI的真实应用场景。我是来自肽积木的柏文洁,肽积木是专门致力于医疗影像和AI结合的公司,今天我向大家详细介绍一下AI医疗影像的现状与总结。
首先其实跟大家聊一聊,为什么糖网眼底筛查成为当前的热点,其实我们知道最有名的人工智能公司——DeepMind其实已经在做糖网的相关工作,Google前一段时间和学术机构联合发布了在糖网筛查糖网分级诊断成果。
国内就我们所知道的情况不下十家在做这块的内容,首先想给大家简单解释一下为什么它会这么热。
我们先来看一张眼底图,给大家做一下简单的科普,我们看到这张眼底图就是从瞳孔拍过去的,从视觉里能够看到的情况,中间圆圆的部分是我们的视盘,也就是眼部神经集中的出口,旁边相对暗一些的是黄斑区域,它是眼部接受神经视觉最敏感的区域。我们这张图选择了最典型、有各种各样病灶类型的一张眼底,也就是有糖网问题的一个眼底。首先包括了硬性渗出,像右上角它其实是有蛋白质的产生,右边有棉絮斑,下方有出血点,左边也有一些微动脉血管瘤。
在医生的实际诊断过程当中,医生一方面需要能够看出病人的病灶到底在什么区域,同时需要告诉病人大概的病程。初步病程可能只会看到一些微动脉血管瘤,再往后发展会发现渗出,包括棉絮斑,甚至到出血等比较严重的问题。
实际我们在做眼底筛查过程当中最核心的问题其实是分级,同时包含能不能把病灶给标出来,让大家知道处于什么样的状态。
回到刚才那个问题,为何眼底这么热?
核心原因在于眼科医生资源极度匮乏,因为只有匮乏的地方,AI才能够帮助到大家,才有可能产生巨大的市场机会。这一点上,中国是拥有最多糖尿病高血压慢病人群的国家,我们国家有2.8亿的高血压患者和1.1亿的糖尿病患者。1亿多的糖尿病患者中80%以上其实都有可能患有糖网病,其中3000万患者患有糖网病。
目前我们差不多有3000万的糖网病患者,而其中1100万已经发展成为视力受损的糖尿病患者。
这些糖尿病群体都应该定期去做眼底筛查,尤其已经发展出来的可能每隔三个月就得做一次糖网筛查。中国目前的眼科大夫只有3万多人,眼科门诊量有8000万人次。在这么大的市场需求下,我们只有很少的眼科大夫资源,这中间存在着严重的不对称。
我们前段时间通过市场调研,看到基层一些社区医院甚至没有相应的眼底设备进行筛查,有着巨大的资源缺口。
眼底受到如此大的关注,还有一个很重要的原因是相对而言,它有比较丰富的物料,国际上各种各样的公开数据集上均有着比较多的数据,如X光、CT在内的学习物料。
最著名的其实是Kaggle比赛,之前一次有8万张片子的比赛数据集,而且包含不少分类。除了Kaggle之外,其他比较知名的包括ADCIS、DRUVE、STARE、HRF、DRIONS、DIARE数据库,也在做相应的整理。
可以看到整个公开市场和行业内找到的数据集也接近有十万张片子。这其实为我们很多深度学习或者说人工智能提供了一个相对好的数据集,而且我们可以直接将我们的技术应用在环节中。
所以我们解释了为什么眼底是一个比较热门的点,我们接下来看一看应用在眼底判断当中的机器学习和深度学习到底是一个什么样的状态。
通常来讲,它没有非常大规模的物料,在kaggle的数据集出现之前,其实在眼底方面很难去做比较好的分类,就包括国际的一些公开标准,整个分类的过程可能都是我去数对应病灶的数目,然后数大概会在几个象限有相应的病灶分布,所以在传统方里面解决的通常都是病灶识别。
这里面包含了二维高斯的滤波识别血管、Canny算子识别视盘,应用最典型、也最多的是拓扑学的方法。拓扑学方法我们会用多个形态学去找出血点和微动脉血管瘤。
不久前研究者开始用拓扑学去找血管,但对于眼底图片来讲,虽然人眼看过去差不多,但它其实是有一个非常大的分布。实际我们看到拓扑学找血管这块,在局部它可能会有比较好的效果,但是换到另一维度上效果可能就不是很好。
我们可以看到之前有学者利用传统方法做精度统计,从2000年以后这些学术结果都发布在相关的Paper上,我们整体看到大家也会比较投机取巧,很少有同时去汇报精度Accuracy和Sensitivity或者Specificity。通常都是偶见精确度,基本上没有超过90%的。
在另外一个维度,它的召回率也普遍只有80%,难以达到实际工程化的水平。
上图右侧是之前在学术文章中发表的统计图,我们可以看到基本上在80%左右待定的区间摇晃。事实上我们看到它一些针对性的结果,通常也都是针对比较小的数据集。像Adcis其实也只有几十到一百张的量级,实际上我们在真实使用的场景里很难达到工程化的水平和效果。
接下来我们看看在实际商用情况下,国内一些软件企业的应用进展。
根据我们之前调研的情况来看,国内软件的功能其实也基本上以渗出或者以出血点判断为主,做诊断的比较少。当然因为最近整个发展过程可能相对来讲会有一些诊断,但之前基本上都比较一致,以判断渗出和出血点为主。没有标记的平时基本上耗时在半分钟左右,有标记的处理时间差不多在三分钟到五分钟之间,实测下来针对特定的场景比较有效,但依然依赖于医生的判读。医生的判读时间大约耗时五分钟,这其实也取决于我们实际拍摄的情况和环境到底会是一个什么样的状态。
上图是我们之前看到的对接基层医院的友商的截图,可以看到基本上在渗出和出血点这两块。这是另外一个,也是在讲出血点,包括他的这个像素、占比之类的相关信息。
传统的分类方法基本上是利用传统方法识别出病灶数量的多少,然后利用一定的阈值直接来做回归,判断我到底如何去做分类。没有Kaggle数据集之前因为没有足够的物料,所以基本上没有人用深度学习的方法在做这块的东西,有了Kaggle数据集后大家才开始用深度学习,也在该过程当中取得了较好的效果。
刚才我们首先展示了眼底到底是一个什么样的问题,然后我们看到传统的机器学习方法或者其他传统方法它其实解决了哪些问题,但是它又存在怎样的现状?
我们看到当前的分类算法在实际问题当中会遇到一些挑战,即使我把刚才的算法本身做得很好,但是我在实际解决实际问题,在解决工程问题的时候,它又会有哪些不一样的挑战和变化。
举一个简单例子,因为肽积木在做这件事情的过程当中,从基层医院收集了大量的眼底数据。我们可以看到,基层医生包括社区医生拍出来的片子实际上和大家看到像教科书一样的片子其实有非常大的差异。
如何在过程当中解决掉这些问题?我们首先得来看一看它们到底会是什么样的情况。
我们现在看的是同一个人在同一个时间拍出来的不同的眼底照片。第一张很明显,大家可以看到欠曝,就是它没有曝光到位,基本上到下半部就已经变得相当的模糊,而且上半部分反而又有点过曝。
第二张图片显然没有对准焦,而且整体上右偏就没有对得很清楚。
第三张图片这个人在拍摄的过程中眼珠转了一下,它其实没有拍在一个比较正位的位置,因为没有视盘作为参照系,所以基本上不知道它在拍什么。
第四张照片是很典型的过曝。所有的这些场景在我们实际工程化处理的过程当中必须把它清掉,要不然对实际的判读会有非常大的影响。
另外一个维度,我们也找了其他的片子,即使看到一个人都可能拍出不同的这种感觉和效果之外。基层大夫很有可能干的事情我没有把这个相机推到足够的眼底深处,所以我拍出来是一只眼睛,就是我们左上角第一张图的这个效果。
第二张图就很明显看到这是一张拍糊了的眼底;左下角这一张它的整个右下角,其实是出现了伪影,而且出现了比较大面积的镜头不干净。右下角的就直接干脆就过曝了,这个过曝和刚才那个完全不一样,它是漏光漏了好大一块。
像刚才那一类片子我们还能勉强进行判读,但是对比这几类片子,我们必须在实际的筛查过程当中就能把它去掉。
除了这些会造成我们在算法应用过程当中的一些问题和困难之外,不同的眼底设备也会出现不一样的效果。这里我们选择了三家三个典型的眼底图片,第一个是国产的,可以看到颜色比较灰暗,这个是缩小的效果,把它放大之后看,整体就不是很清楚。
第二张是台湾生产的手持设备,整体偏黄,当我们把它放到比较大的时候,会有比较明确的噪点,而这些噪点,容易干扰机器是不是微血管瘤或者其他的效果。
最右边是佳能相机,是医院里面用的主流设备之一。
拍出来这些结果相对来说效果会比较细腻完整一些,我们在公开数据集里获取的图像都会是右边这一类组成的。
所以在这个过程中,我们要把眼底诊断的图片做成一个能够工程化应用的逻辑,同时应对几种场景。
另外,像我们看到Kaggle数据很典型:左眼一只,右眼一只,然后组合起来做一些分级诊断。目前的实际情况,在基层医院大夫能拍好就已经很难得了,基本上是拍正位的眼球。
实际上大家可以想象一下,人体眼球是一个球形物体,透过瞳孔看进去的时候,只能看到一个区域。而整个眼底其实都应该被观察到,在这个过程当中一些有经验的大夫,会让你同时上下左右来看前方,他就能够透过瞳孔看到你全部的眼底情况。
按照严格标准的眼科大夫去拍图的话,他是要能够从多个维度去进行拍摄,最后拼成一张像我们看到的左边这张图,由右边四张图拼出来的图景,用这样的方式我们就能够看到完整的情况。这一点我们看到有些医院做了,有些医院没有做,而且有些医院可能照出来的情况它也是一张图,但它只有一个侧位,因为它会有重点地去往边上看。
在这个维度上我们如何去整合这些数据其实也一样,也在实际过程当中需要去解决的一些问题。
总结一下我们在实际工程应用场景过程当中遇到的这个数据问题已经包含了很多种。第一个就是的拍摄范围是不是只是两张正对视盘的图片,还是说我有多张照片的组合,还是说有实际情况,我根据他这个去调整,这会对我们的结果产生什么样的影响。
还有在医生手法上,因为他手法的不足,可能造成模糊或者过曝或者曝光不足等等,这一系列方法到底要怎么样去解决。包括镜头的问题、包括伪影、包括噪点这一系列的问题。在这个过程当中,简单来讲,我们可以最简单最粗暴的方法,把不合格的都去掉,同时算法能够把它在整个过程当中能够有足够的泛化效果。
不能像我们传统做法那样做,只能接受局部的,或者说比较少量的情况。
除了我们所面临数据问题之外,其实在标注上也有非常多的问题。
我们在医疗或者医疗影像这个判读过程当中标注的问题要远远大过数据的问题。
第一,像最知名的Kaggle的数据集,它的标注其实有非常多的差异性。另外一个DIARE数据库能够看到的医生标注的差异性其实是非常大的。
国内的医生其实没有特别统一的标准,实际上我们有时候通过各种各样方式获得医生的标注往往是年轻大夫,而这点上不够充分。
包括我们之前在一些医院做测试,这家医院可能表现已经超过95%了,但是换到另外一家医院可能只有80%多。仔细来看,实际上是因为中度和重度、轻度和中度两可之间的结果会发生一些判读上的异常。
在这一点上,对我们实际机器学习的过程其实会增加一定的难度,因为我们学习的对象本身就有一定误差的,另外我们到底用什么样的方式去做标注其实也非常关键。
就拿眼底来看,有几类型的标准方式,第一个医生直接拿着这个眼底图进行判读,然后分类。但是这里面一般有经验的大夫会在拍眼底照之前就已经用眼科的专用镜片,看到眼底的实际情况之后,再对眼底照片下结论,这个过程会有一些差异。
同时在眼科判读,尤其是糖网的判读过程当中有一个精标准,我用FFA也就是荧光造影去看结果,最终它可能和我们实际获取的眼底照片会有非常显著的差异。
这点差异会在我们刚才提到的kaggle数据集或者DIARE数据集里面都会有一个明确的体现。
整体上来讲,第一我们在目前这个维度上如果是用医疗上的手法、诊疗上的手法经后期确诊之后的结果来进行前期的判读,虽然严格意义上来讲它是准确的,但是它会导致一个问题,当医生并不是只用于一个方法进行判读的时候,会造成我过度在可能不存在这个特征的照片上进行学习。
如果我完全依赖这张照片医生对他的分析,那又会导致因为医生本身就有一定的不确定性,或者说有一定的判断误差。甚至会出现一个医生前后看两次都会有不一的特点。
但是可能对眼底图会稍微好一些,不过整体上来讲这个标注非常非常的难拿,所以我们接下来也是想给大家分享一下,因为这些数据大家都能下得到,也是想跟大家分享一下,像Kaggle数据集和DIARE的数据库,我们在这个过程当中实际看到的情况是什么样子。
DIARE的数据集,左边这张图大家应该能看得很清楚,左边这张是原图,右边是医生的标注结果,DIARE数据库挑了很多类别、很多种病灶,会同时让四五个大夫来标,右边其实会把每个大夫当时在这张图上画的框都框出来。我们选择的是出血,出血就是图片上这些偏红色成片的,基本上可能就是出血。
大家可以两边对照着来看,比较典型的是视盘正下方的区域所有大夫都给它标出来了,这块就比较典型,包括右下角也是好多大夫都在标注。
可能对于这些明显的区域来讲,大夫可能会比较好办一些,但是我们看到右边一些零零散散的地方,可能只有一个大夫或者两个大夫给他标出来。所以在我们获取标注的过程当中,我们其实需要非常准确和靠谱的判断机器才能够学,但是实际能够看到的这个情况我们会有比较大的一个差异。
所以大夫之间的意见首先就是不同意的,而这个数据库说白了显然是比较资深的几位大夫一起来判读,但依然会有一些差异:包括大夫的一些方式方法、行为特点都会在里面显示,对于同样两块区域可能有些大夫一笔就画过,但有些可能就不是。
我们回到即使是Kaggle数据集,我不知道观众朋友们看到这三张片子会是一个什么样的感受。这三张片子都属于非常严重的,糖网发生严重病变的这三张图例。
但从这图片像我们做了这么多眼底、看这么多眼底之后,其实依然不能很明确的判读这几张就是有问题有病,尤其到第三张,我们看到基本上是一团黑,Kaggle其实有不少这样类型的片子,这些他们能给出一个明确的判读说这个是重度病变甚至是增殖性病变,基本上我们可以判断Kaggle一定是用了其他的判读依据来进行判读,而不单单是这一张照片。
所以这样的结果其实会出现我刚才说的那种问题,我可能借助了其他的特征,而这张图片上的特征并不足以让我判断,所以就会导致机器去学习一些不必要的特征。
我举个简单例子,如果我们在这个健康图片里这种黑色图片少一些,而在这种增殖性病变或者重度病变的图片里这种黑色图片多一些,机器很自然地就会认为偏黑的图片可能会是有增值性的体现,但其实它可能是曝光不足的原因造成的。
而且这里头当然也可能有其他的一些原因,就好比说如果我的眼睛已经发生严重性问题了,眼部的水晶体已经不太透光了,或者说白内障那种直接就被挡住了。但是整体上因为像kaggle这种公开数据集我们是找不到任何周边资料的,所以就没有办法去针对他进行进一步的细化。实际上我们看到包括在Google前一阵子发表在JAMA的数据分类核心算法,其实就是从我们看过去,包括它也公开了网络结构。重点是他集合了54位大夫,虽然不是每张图都是由54位大夫同时读,基本上每张图片在训练集上有7到8位医生,在测试集上可能会更多一点。
但整体上我相信它能取得那么好的结果是对这个数据集本身做了非常多的处理和非常多的精挑细选,所以在结果上效果非常好。整体上针对于这些数据,我们的标记其实是一个非常非常大的问题。
我们讲了数据问题,讲了标注问题,然后在实际应用场景当中当然也有技术问题,技术问题的话就是我们能看到的,像传统的方法淡化的效果非常差。
今天给大家介绍了非常多不一样的问题包括不一样的设备拍出来场景、不一样的医生拍出来不一样的场景。我们能够看到传统问题它针对的都是好大夫、好设备出现各种各样的情况。
一旦涉及到问题比较差的可能就得再去调整参数,这一定是我们不能接受的,我们还是得能做出比较通用化的结论出来。
在另外一个点上,我们也能看到在用深度学习来做这件事情的过程当中也有一些有趣的点,我不能叫它是难点,但我认为它们是一些比较有趣的点。
第一个是分类数据集不足, Google整理大概是4万的数据,Kaggle的数据集是8万的数据集。我们看到ImageNet或者其他的世界上比较公开的大型数据训练集基本上都是在百万量级的。
而且我们要注意的是像ImageNet都是非常小的图片,眼底其实很大,虽然比病历还要小一些,但它已经比普通处理图片要大。所以它其实包含的特征会更加多,包含特征越多,就需要更多更大量的数据集才能够学得更好。
我们看到分类数据集不足,在这个过程当中其实眼底没有必要用那么深的网络,但是我们还是需要主要的数据才能够把特征学习出来。
另外一个点是我们看到的物体的识别,它其实是不适用的,我们之前也有FCN的方法,在图片里面能快速定位物体,包括像汽车、树、人,但是这种方法基本上在医学图片里面都不太适用,因为医学的病灶说实话长得比较“自由奔放”。所以它不会像树木、汽车有一些比较明显的这种形态特征。所以在这个过程当中,我们更多是通过经验来看你和正常的差异到底是多大。
传统的物体识别那一套方法其实不太适用的。另外一块,既然物体识别不适用,那我们是不是就用图像切割的方法,Image Segmentation其实也是我们目前深度在这块用的比较多的一个内容。但事实上我们看像FCN会有一些比较通用的一些问题,包括识别的边缘不是很清晰,这个点我们可以看到很多这种FCNN网络做出来的都是看到边缘,不是很成规则和清楚。另外,它缺少足量的标记。因为像包括像ImageNet这一块就是用来做Image Segmentation学习的,基本上数量要少很多。
对于医疗图片来讲,我们假设说想要用Image Segmentation来做的话,我们看到学习的物料非常少。如果让医生非常精确地给你标记出来病灶,不仅是标注病病灶这个区域,而且要把它整个连边缘带描绘出来其实是非常困难的一件事情,而且当图片放大到一定范围之内,其实有一些边缘本身就是我们学习对象本身边缘也不清晰,所以其实在这个过程当中我们可以看到技术在这一块还是有一些问题需要去突破需要去解决。
当然这和CT或病理切片有一点不一样。我们简单举几个例子,病理切片因为它图像比较大,我可能缩成每一小块,每一小块去做分类就好了,我最后能拼出来的就像一个图像切割的图。
但是眼底不能,因为它就是一张图,所以它不能再切,它再切其实就看不出来整体的特征。因为它是一个完整构成的图像,而不像说病理我单独一块拿出来,是可以单独做判读的,就是没有特别明显的位置特征,而眼底有明显的位置特征。而CT目前大家的研究重点是能不能把一些结节先初筛出来,而不是落实在判读维度上。
回过来说在眼底,虽然大家直观地看过去它是一张二维图,但是在这个维度上我们还是有很多可以判读的点去参照和思考。
接下来来看一看我们怎么应用工程化的方法实际来解决眼底应用判读问题。
首先,在切入实际用深度算法改进技术的同时,我们第一步要做的是优化数据。
我们肽积木收到公开数据集10万的边缘,然后包括我们在基层医院和三甲医院获取到差不多10万的数据源,对于这些数据如何进行预处理,然后加工标记,其实在过程当中非常重要。
刚才看到的那些问题图片,这部分目前我们没有看到对应的医生,标注是可用还是不可用的边缘。
所以在实际过程当中我们会先去做一些聚类的处理,把这些有问题的先筛出来,把明显过曝或者明显过暗的这些片子筛出来。
在这个过程当中,需要收集到足够多的基层数据,然后在基层数据的基础之上获得我们有价值的数据。第二,我们肽积木在这个过程依托于医疗这个大数据平台,构建了一个标记平台。
目的是为了让大夫更好地帮助我们进行标记,然后进行一些补充和辅助以及人工参与的辅助标记,具体怎么来操作我会给大家简单介绍一下。
这是我们的标记平台,简单的来讲,我会把眼底图片放在这个屏幕的中央,大夫可以借助于上面有一个十字,它可以用来画出病灶的区域,可以比较快的在图片上画病灶,同时给张图片贴上我们想要的一些标签。标签包括说明图片可用不可用、到底处在哪个病程、还有哪些其他的问题和特征。
这样的好处是我们能够收集和获取更大量的医生的标记,在该过程当中,我刚才其实也提到像这种病灶类的标记,或许是非常困难的。如果真的让大夫给你打标签可能还OK,但如果让大夫真的手动不停的给你去做一些病灶的标记的话,那难度会非常大。
所以我们在实际过程当中会采用第一种方法是让机器而先做一层判读,就像我们现在展示的这张图片,它其实是一个很典型的有渗出的情况,我机器会先跑出来一轮,然后医生在进行校准。我圈出来这块区域还是有的,然后那块区域其实没有。这么一个处理的方式和方法,会大规模地降低医生的工作量,然后我们能够快速获取更多病灶标记类的片子、边缘。
第三种,这张图大家可能有点眼熟,就是刚才那张我在讲DIARE数据库有医生标注差异的一个片子,我们在这个维度上相当于先获取医生的标记,在这个过程当中,因为基本上当医生圈出出血点后,普通的医生或者说经过训练的实习生也能够看得出来这块其实是出血部分。
医生的时间成本会比较高,他给我们圈出大概范围,我们再找相应实习生或者我们内部的员工再对这个数据进行精标注,然后获取更大量的数据集,这个数据集我们可以用在对于原有数据集的加工上,包括像我们刚才说的DIARE数据集,我们用这样的方法就已经经过一轮精加工。在这个维度上,通过一系列标记平台,以及在标记平台上进行各种辅助操作,以及引入第三方人力的方法,我们就获得了更大量的有精细边界,比较精确的病灶标记,以及对应到比较大量的标签。这样才为接下来的训练提供了非常好的物料基础,这是整个过程当中的一个核心和关键。
我们接下来看一看,在实际过程当中对于病灶标记我们采用的是一个什么样的网络,以及如何选定网络?
首先是FCN网,给大家简单介绍一下FCN网络以及眼底病造的应用以及U-net网络构建的过程。
首先深度网络应用在图像分割和识别过程当中,实现像素级的识别就是Semantic Segmentation,也是Fully convolutional network,我在下面贴了两个非常典型的网络结构,基本的思路是说我之前的深度网络是一层一层地把特征往高层提取,在高层我最终利用这个全连接我做了一个分类器,然后判断在每个分类上的概率是什么样子,如果把这一层全连接拿走,那相对应地会得到一张缩小的图。看能不能再把它逐步放大,这样子就得到一张和原图等大的图,能够实现对每一个像素的判断。
右面其实是一个更加漂亮的网络结构。就是conv-conv-pool,conv-conv-pool,其实一层一层的把图缩到一个比较小的维度上,然后这个时候我们再来up-sampling,然后conv,然后往上层走。所以input的是一张RGB的图片,出来的就会是一个Segmentation的图片。实现了每个像素点上的区别,每个像素点上的特征标记。其实这张例子也能体现我刚才说的,FCN网络的边缘有点像『狗啃的』这种感觉。右边它会把一些高层信息再落回到低层信息当中来,虽然左边这个结构没有右边结构那么优美,但它其实在实际工程当中用的效果会更好一些。
在这个维度之前我们看到大家很自然地会想到说FCN应该是可以直接用于眼底病灶的切分和处理的,这是我们在一篇理论里面看到的效果,左边是原图,中间是Background,右边是用FCN做出的结果,我相信这应该是他挑的自己做出结果最好的一张图,因为这张图的病灶区域比较大。可以看到说它优点其实非常明显,它比传统方法要快很多,基于整图的识别,所以它速度非常快。
对于前期的信息把握得非常好,但是问题就是说虽然这是它最好表现的一张图,但它局部特征信息提取的精度其实非常不足,而且对于一些微小点,尤其到了一些边缘处,它其实识别得非常不好。
同时,对于病灶领域,另外一个非常有名的网络叫U-net,其实它大致的原理与FCN是一致的。是它有一点,它认为对于特定病灶的区域的判读和分割,其实依赖于周围的信息,所以它实际上在构建这个网络的过程当中,我最终可能希望判读的是中间255×255这块区域的图像的分割结果,但是我输送进去的是一个388×388的图片,也就是我一个大图,然后生成一个中间这部分小图的结果,所以在他一层一层往下down的过程当中,它会不断的去掉切掉周围的一些,因为靠它边缘的这些它会舍弃,然后当它回来的时候,它会选择原图中间那部分来进行合并。
这样子的网络结构第一是看上去很优美,但第二个很重要的原因是它其实参考了周围的信息。我们看到它底下的切割结果用来做Tissue Segmentation其实效果还是蛮不错,整个它其实做了一个很典型的切分,但是我们实际在应用U-net来做我们眼底的时候我们可以看到它这个网络还是比较适合于大片的图像切割。
就像我们看到它当时最典型的问题其实是用于淋巴结的,它其实每个区域都有相应的组织,所以它会把整个图做一个明确的区分。但是用到眼底过程当中,因为我们的病灶数量太小,分布范围太少,所以我们会有大量的全黑图,或者大量没有病灶的图,所以导致的结果就是U-net通常训练就成了一张全黑的结果,然后它这张全黑的图依然可以取得比较好的准确率。
因为我全黑了,它剩下来的只有少量的判决错误,所以U-net其实也不能完全直接应用于眼底图片。回顾了我们在用深度学习方法或者深度网络来进行图像切割常见的做法和方法之后,肽积木提出了一个LP-Net的算子,核心是基于局部信息的深度神经网络算子,这个核心的原理是利用基于局部信息的fcn网络构建针对单个像素点计算的分类算子。
核心就是,第一它其实还是一个基于fcn为基础的深度技术,因为看到的就是fcn还是有它非常明显的优点的,第一个学习能力很强,适应不同的场景,就像刚才我们实测的情况,不同的设备对于我们的训练结果不会有特别大的影响和差异,所以它泛化能力很小很好,而且运算速度会非常快。
在这个过程当中还是把它的局部深度学习方法整合成了这个对应的分类算子,这样的好处就是说我其实是作为一个像素级的区分避免了传统fcn的边缘模糊以及小病灶难以识别的问题,
也就是说我其实是一个像素、一个像素看过去的,而且这里面其实在某种程度上也应用了U-net的一些核心思想,这些核心思想就包括说我要参考周围的信息,但是周围信息其实也是利用局部信息来进行自我学习,对于医生的描述性依赖语言会比较低,然后结合结合周围的场景,也不仅仅只看像素点的特点,所以泛化能力整体上还是呈现一个非常好的一个效果。
这是肽积木LP-NET算子的运行结果,其实就能够看到我们的效果还是不错。这个结果是针对Accuracy数据集的一个测试结果,包括说像Accuracy到0.91,Sensitivity是在0.85,然后整个AUC值会非常的高,差不多是0.99。
我们基本上是针对到因为差不多一张原理图大小可能有不一,我们把它统一在1024×1024的情况之下的话,它的运算时间差不多在13秒到15秒之间。
我们用的GPU大致情况会在下面体现,这个是我们在实际用LP-NET的算子在标记过程当中样张的一些呈现,我们可以看到它不会像传统的FCN方法,周围的边缘会非常的不清晰。而整体上它还是比较清晰,还可以看到一些非常小的点,它都能够准确无误的给它找到相应的结果。
除了这些还有包括像这个,刚才那个是大面积病灶,我们翻下来的这张图,这张图其实它的病灶的范围不会特别多,而且这里面有一个非常典型的混淆点,视盘右下角有一块黄色的区域,这个其实是棉絮斑,实际在传统方法的判读里面经常会把它误认为渗出。我们用这样的一个算子,用深度学习的好处就在于说它各方面各维度的特征都会统一参考,而不仅仅是看我形态特征或者色彩颜色特征,它不仅仅是这样的一个逻辑。
所以在这个过程当中我们最终选择了一个工程化的路径。
虽然看上去只是一个简单的眼底图,但其实也是需要经过一系列的判读。首先是包括我是否是眼球,如果不是眼球的话,我们会放到VGG里面去判读你到底是什么,以前有一个笑话说有人去测智商,然后机器告诉他你不要放一个石头过来测试,我觉得它们这个虽然很蠢,但是它们也是应该用了这样的一个模式,我首先看看你是不是人的眼球,你不要骗我,所以如果是眼球的话我们再去判断你是不是健康的眼球,然后生成相应的描述。
这样的一个好处是我的速度会非常快,就尤其在我们实际选择工程应用场景里面去做筛查这个逻辑,如果你是健康的,那其实我不需要花太多时间在你上面,直接得到健康正确的结果就好了。
如果你不是健康的眼球,我们在进行相应的分级算法,包括去判读你的视盘黄斑区域,然后进行位置标记明确病灶到底在哪,根据这所有的信息,再去生成对应的描述文件。
这是肽积木用眼底生成技术做的一个C端 APP——DOCE,大家可以去测一测,至少目前你们拿一个桔子去测试应该是不会有什么好的结果的。我们基本上就是利用眼底图片能够快速的定位我们的病情,然后自动生成报告,诊断结果清晰、可读操作也比较简单,反正大家在自己手机上也都可以试一下。然后用AI机器人自己自动识别等级,包括标记我都可以给你标注出来,所以准确率高。基本上我们是用的三甲提供的一些数据库,机器的准确率基本上能持平顶尖的医生。
最后我给大家简单讲一讲,眼底产品运营环节遇到的各种各样的挑战以及推进的一些思路。
实际上我们看到的应用场景来讲,其实主要还是包含两个层面,第一个是诊疗,第二个是筛查。对于诊疗来讲,是整个我们能够纳入到三甲大夫的操作流程当中,同时也观察说基层大夫的应用情况,它们两个会有比较明确的一个差异。
三甲大夫都是会先拿病历自己去看一遍,然后对有价值的病例再进行相应的操作,而且更多的时候是为了留底。因为说实话比较有意思的一些案例,他拍照片留下来自己以后作为学习或者作为作为教学案例来讲会比较有意义一些。
另外一块我们看到实际基层大夫,他们的拍摄情况之前也给大家做了一个详细的介绍,其实还是会比较千差万别。然后筛查领域其实我们可以看到,因为以前有一个眼科大夫一直跟我讲眼底是人能够直接看到的唯一大脑组织,所以它对于一些比较早期的像血管疾病,甚至包括一些特定的疾病包括一些糖尿病,能够看到比较早期的一些病变,所以用来筛查糖尿病,前期都能够得到比较好的结果。
我们在整个糖网的这个逻辑体系里面,大家之所以关注和热衷,其实还是因为它的应用场景非常的广泛,所以在这个过程当中,我们其实希望第一,要建立标准。现在其实更多的就是大家通过各种各样的技术方式和方法都能够学出一个还不错,当然这个里面工程化实际应用会有比较大差异,但是核心是能够建立一个大部分医生都认可的眼底筛查的标准会非常重要。
然后在面向基层的重点是实际落地过程当中,要平衡医疗资源,所以我们会面向基层面向社区。在这个过程当中除了这些以外,还可以为提供年轻医生的学习和培训的相应的工作。
最后简单讲一讲,以眼底为代表的像这类筛查类型的AI的判读的一个发展趋势到底是什么样子。
整体上来讲,筛查类型的这个AI判读可能和辅助分级,可能和做病理切片的判读不太一样,它并不核心体现在虽然它也部分地体现在这个诊疗过程当中,但它并不是作为最终诊疗判读的标准和依据,所以我们在这个过程当中更多的是实现和帮助他来进行分级诊疗。我通过AI能够做第一层的预筛查,节省医生大量的时间,有问题的、有针对性的再重新进行引流和配比。
然后第二个就是能够辅助进行医生资源的再分配。
我们一直在说AI要学习医生,那学习医生出来之后,其实就是制作医生的分身能够重新把这些医生的分身放在一些以前可能医疗资源极度缺乏的一个应用场景当中,同时最核心的一个点就是目前我觉得,包括我们看过去很多的AI医疗公司其实并没有完整的实现商业化场景,而在这个过程当中,大家只有实现真正的商业应用场景才能够真正地实现长久的发展。
这是我对整个筛查类AI的发展趋势的判断,基本上核心就落在三点:分级诊疗、资源和资源的再分配、以及产业化。