雷锋网 AI 科技评论按:计算机视觉盛会 CVPR 2017已经结束了,雷锋网 AI 科技评论带来的多篇大会现场演讲及收录论文的报道相信也让读者们对今年的 CVPR 有了一些直观的感受。
相对于 CVPR 2017收录的共783篇论文,即便雷锋网(公众号:雷锋网) AI 科技评论近期挑选报道的获奖论文、业界大公司论文等等是具有一定特色和代表性的,也仍然只是沧海一粟,其余的收录论文中仍有很大的价值等待我们去挖掘,生物医学图像、3D视觉、运动追踪、场景理解、视频分析等方面都有许多新颖的研究成果。
所以我们继续邀请了宜远智能的刘凯博士对生物医学图像方面的多篇论文进行解读,延续之前最佳论文直播讲解活动,此次是第2篇。
刘凯博士是宜远智能的总裁兼联合创始人,有着香港浸会大学的博士学位,曾任联想(香港)主管研究员、腾讯高级工程师。半个月前宜远智能的团队刚刚在阿里举办的天池 AI 医疗大赛上从全球2887支参赛队伍中脱颖而出取得了第二名的优异成绩。
在 8 月 1 日的直播分享中,刘凯博士为大家解读了「Joint Sequence Learning and Cross-Modality Convolution for 3D Biomedical Segmentation」(用于三维生物医学分割的合并序列学习和多形态卷积)这篇论文,它主要解决了一个三维生物医学图像分割中重要问题:如何综合使用多种形态的 MRI 数据进行区域分割。以下为当天分享的内容总结。
刘凯博士:大家好,我是深圳市宜远智能科技有限公司的刘凯,我们的官网是 yiyuan.ai。这里也有我的微博ID,我经常会发一些跟人工智能相关的资料和文章,大家可以关注一下。今天讲的也是关于生物医学图像的应用,是结合序列学习和交叉模态卷积的3D生物医学图像分割。其实在医学图像方面,分割,英文是segmentation,是非常重要的工具或者应用。
我先讲一下这篇文章的主要内容,它讲的是对核磁共振图像中的脑部肿瘤部位进行切割的例子。右边的图给出来的就是什么叫“对肿瘤部位进行切割”。我们通过MRI拍出来图片,如果有一些跟正常的大脑皮层细胞不太一样的部位,这些部位就很有可能是有脑部肿瘤,所以要把它切出来,切出来之后再做相应的研究。比如这三个例子可以看到大脑中有一些病变的位置,要达到的就是最右边一列的样子,把它们切出来。这个工作其实不算太容易,主要有几个方面的原因。
首先比较难定位到哪些是肿瘤部位,因为肿瘤部位的形状千奇百怪,没有固定的形状,不像人脸识别的时候,每个人的五官都差不多,位置区别也不会很大。比如说神经胶质瘤和胶质母细胞瘤的形状两种就就很不同,就是不同的肿瘤形状也不一样。然后肿瘤的分布很广泛,可能分布在大脑的任何区域,那跟人脸也不一样了,就跟刚才我说一样。
那怎么去实现、怎么去解决这些难点呢,这篇文章提出来一个思路就是交叉形态卷积的方法做一个 encoder-decoder 的网络结构,然后同时用LSTM对2D的切片序列建模。
这里有个概念,因为MRI也是跟CT一样断层扫描的过程,就是它一层一层,一层扫出来的就是一个2D的图片,然后多层累计起来就是3D的,但是其实切割是要切割出3D的脑部肿瘤位置,这样就需要把2D的变成3D的,把2D的切片之间的关系通过LSTM描述出来,最后把多模态卷积和LSTM网络结合在一起,达到3D切割。
刚才提到多模态的概念,就是因为这个是MRI特有的特征,因为CT里面并没有。这里有四个模态,就是通过四种方式扫描脑部得到MRI数据,这是这里列出来的四个的名字,我们先不用管它这四个具体是什么意思,只是知道它有四种模态就行了,这四种模态对最终切割的结果是有直接的作用的。现在大多数的3D图像切割方法只是用了一个模态,或者把多个模态分别来做,然后再堆积起来。
这个方法的framework大概是这样的,从左到右看。
首先每一个脑部的MRI数据,他都是通过四种模态切出来的,这里用四种不同的颜色来表示,相当于每一个slice就是我说的那个2D的图片。
切完之后他会把四个模态,就是到图b这个阶段了,四个模态交叉在一起做一个multi-modal的encoder,这个encoder就是用一个神经网络来实现的。
四个模态encode到一起之后,在这一步就用神经网络把四个模态下的脑部切割出来了,这是2D的情况下。
然后再加上convolution LSTM把2D的切割、2D和2D之间的dependency描述出来之后就形成了3D的切割,然后再做一下decoder,展现成最后这种形式。在最中间有一个切割出来的东西,其他没被切割到的background。
这就是一个大体的流程,然后对具体对每一个细节的过程,我再详细介绍一下。
第一个模块就是multi-modal的encoder,这里的网络结构最主要的几个方面是用四个卷积核,通过batch-normalization,然后加一个非线性变换,在后面有四个最大池化层。这就是先简单介绍一下,如果要详细了解这个网络结构是怎么设计的,可以去读一下这篇论文。
另外一个嗯比较重要的部分就是多模态交叉卷积。四个模态的数据进入到这个卷积网络之后,他就会把每一个模态下面的cross在一起,然后通过一个三维的卷积,卷积的大小里有个C×4,就是因为他每个channel里面有 c 个slice,就是说它是一个立体结构了,一个长宽是H、W,高是C的这种。四个模态弄到一起就是C×4×H×W,有大小。
然后在这里,是用4×1×1的一个卷积核,做卷积之后得到每一层的切割出来的特征。切割出来之后,然后就进入了后面的convolution LSTM。
这个convolution LSTM跟普通的LSTM有一个区别,就是把原来的矩阵相乘替换为一个卷积操作,就是普通的乘法变成卷积层,这样它就能够在把之前状态的空间信息保留着。其实它的目的就是,卷积LSTM会描述一个2D切割边缘的趋势,比如说这一张中切片它的形态是这样的,然后到下一张它会有一个轻微的变化,要把这种变化描述出来。
因为刚开始有一个图像的encoder,还是要把它解析出来。最后就有一个soft-max的分类,也是一个两分类的,就是每一个像素是前景还是背景的概率。是前景的话,就是我们要切割出来的部位;如果是背景的话就不是我们感兴趣的地方。
它的实验部分做了两个,第一个跟医学没有关系,这个通用的场景就不讲了。我讲一下跟医学相关的那个,他有一个公开的脑部MRI的数据,就叫BRATS-2015。
他切的是神经胶质瘤这个疾病,它的严重程度分为五种,0 就是非肿留,1 是脑细胞坏死,2 是水肿,3 是非增强性肿瘤,4 是增强性肿瘤,数字从低到高,它严重程度会越来越高。临床上是从三种不同的方面去评价切分的效果:
第一种,完全把四种严重程度的病都切割切割出来,相当于区分肿瘤和非肿瘤;
第二种,部分切割,只关注 1、3、4 这三种。2 的水肿,其实也是比较容易混淆的,就是它不是真正的肿瘤
第三种,只关注增强型的肿瘤,就是最严重的那种
最右边是一个图例,看这几种方法哪一个切的好一些。第二列是就是ground truth,第三列是U-Net,是一个提的比较早、比较通用的一个benchmark的方法,来做数据切割;然后第四列的CMC,cross-modality convolution,这个也是这篇文章提出来的;然后CMC+convolution LSTM,就是描述了切片与切片之间的dependency的算法。可以看出来,最后一个跟ground truth是比较接近的。
这里有从三个方面看的评价结果,三个指标。其实都是算它切割得跟ground truth重合的部分的比例,第一种“Dice”就是它的 overlap 部分,除以他们两个面积交集和并集的一个平均,这里的P就是predict出来的区域,然后T是ground truth的区域。PPV是positive predicted value,那是他的交集部分除以预测的区域;sensitivity就是交集的面积除以ground truth区域。这里也是跟U-Net比较了一下。
我下面补充一下这个U-Net的概念,如果没有医学图像切割的一些知识背景的话,可能不太理解它。其实U-Net就是一个网络结构,参考文献在最下面。这种网络结构,就是画出来长得字母U,然后所以叫yU-Net。
它之所以长成这样,是因为这个图像进来,最左边可能大家看的不是很清楚,图像里其实是一个一个的细胞,它们都连在一起,但是边缘是有一些线割开的。网络的目标是把这些细胞一个一个地切开,就像最右边的这种情况。网络刚开始的时候用的卷积就先是3×3的卷积,然后加上ReLu这个非线性变换,然后一步一步做下去。其实这个网络结构还是挺深的,如果有兴趣可以去看一下这篇文章。其实这个算法对大物体小物体的切割都是做得还不错的,就是因为这种U结构的,先对大物体切割,然后再去对小物体切割。
这里面还有一些trick,就是在BRATS-2015这个数据上来,因为这个数据量其实不大,好像正例一共只有60多个,负例两百多个。这里也出现了一个数据不均衡的问题,它是用median frequency平衡法,这个很简单,这个算式里有一个除法,就是分子式median frequency,就是每一个类的平均frequency,除以这一类总的出现的次数。如果出现次数越多,那它这个权重就会越小,就是赋了一个比较小的权重,就在 loss 函数里对这一类的数据设定了一个权重,相当于下采样的过程。
在这个学习过程中使用了two-stage training,第一个阶段是只采用了包含肿瘤的切片,然后用median frequency减少大类的权重。第二阶段是降低学习率,然后把median frequency这种限制去掉,它的分布就是接近你的真实的分布,因为如果使用median frequency,它的分布是会变的,但是真实数据中那个大类的确实会存在,还是要去描述这个问题,先保证了这个模型第一部分不收敛到大类这个问题之后,然后第二个阶段去再去慢慢的学习真实的分布。
在第一阶段的时候避免采样到空的序列,就是先去采样了有肿瘤问题的,然后再在训练LSTM的时候也用了正交初始化的方法处理梯度消失的问题。这种方法其实都是可以用的,不一定非得这个问题上去用。
我读到最后就发现一个不太好的一个地方,就是他在前面后面都提到了这个KU-Net,它说了跟它的方法模型是最相关的,其实这个KU-Net就是用U-Net+RNN,他用RNN也是去描述2D切片之间的dependency。
这篇论文里方法的不同就是,它用的交叉模态的方法去代替U-Net的那一部分,然后用LSTM去代替RNN那一部分。从直观上来讲应该会比这个KU-Net效果要好,但是他说因为没有公开代码不进行实验对比,我觉得这个理由不是特别充分。其实写文章的时候既然他都给了U-Net的比较了,然后这种跟他更相关的、而且思路上也挺像的,应该更要比较一下才对。
(先上一次论文讲解中的问题开始)
Q:Sequntial learning的时候有没有用move-and-average,就是有没有移动平移法
A:这个那篇文章里面并没有讲,但是我觉得这个移动平均法在sequntial的学习的时候还是可以用的,就是相当于你在不同的步骤的预测值都做一个平均,还是有一定的推广性的。
Q:关于医学图像数据不平衡的问题
A:其实不平衡的问题,解决方法有好多种,最简单的就是上采样和下采样。如果那些大类的数据特别多,做一下下采样,然后小类的做一下上采样。这个比较简单,然后我在实际问题中有一些经验,其实不是这一类多就一定要下采样,这一类少就一定要上采样,其实要看它具体的分布。
有的时候,比如说我们在做肺结节检测的这个过程中,通过肺CT或者X光去看那个肺部有一些会癌变的结节,去找这些病变的点。其实在这里面小结节会比较多,大结节会比较少。在这种例子里,大家直观的很可能觉得要下采样小结节,那实际上并不是的,我们这反而是上采用了上采样的小结节,就是把它的数据要增多。因为小结节比较难分,它其实很小,跟background非常像,然后就容易被忽略掉,然后大结节就很明显,即使只有少量的数据,它也能分出来的。
所以这个跟实际的应用有关系,一般情况下做模型之前一个很大的步骤是要去处理数据,有的时候一些trick是从数据得到灵感,就应该去怎么去实现。包括数据增强也好,怎么解决数据偏移也好。这是预处理的部分。
然后在实际训练中解决数据不平衡的问题可以通过一个叫hard negative mining的方式,就比如刚开始的数据不平衡,有的倾向于分到大类那一部分。而且你这个模型在分的时候,前期会有一些分错的,分错了就说明这个模型分的效果还不太好。比如说把小类的分到大类里面去了,明显是分错了,然后就把这些分错的小类的找出来,做一下增强,比如说做两倍的增强,然后再放到模型里面、再去学,这样持续下去,就会有针对性的把小的数据去增强,慢慢把数据变平衡了。这个思路其实是跟刚才的数据预处理是一样的,但是更灵活一些,因为在训练之前,直接把小的类做增强,这种是比较主观的,实际上不一定小类的就难分,最好先去模型试一下,看哪些比较难分,然后就专注于这种数据去做数据增强。其实上一篇论文讲解直播的时候,论文里面也提到这个思路。
然后数据增强的时候其实也挺有意思的,上一篇论文里面提到要根据泛化能力比较强的做增强,而不是统一形式的增强。我们在实际在做的时候,也还是以肺结节为例子,我们在做hard negative mining的时候,因为在肺结节检测里面少,就是发现肺结节在跟常规思路的机器学习方式有一些相反的现象。其实正例跟负例相比,本身是偏少的,因为他那个肺里面有很多部位结节是很少的。但是实际模型去训练,然后训练的时候就会发现好多并不是结节的预测成结节了。这个需要hard negative mining,就是要把negative的sample要增强一些。原来我们心想的通常情况下是应该把少的那一部分增强,那肺结节检测是实际上是相反的。在脑部切割的时候也会有这个问题。
然后最近关于一个segmentation的一个新的方法,目前还没有用到在segmentation里面,我只是有一个想法,提出目标检测Fast-RCNN这一系列的何恺明发了一篇文章,是Fast-RCNN的延续,叫做Mask-RCNN,就不光是把那个目标能检测出来了,还能把目标的轮廓给画出来。这样的话就非常像这里,比如说把病变的位置detect出来,其实是在这个地方画了一个rectangle,这是找出它的位置了。如果我们要把病变区域切出来的,就要沿着它的轮廓,把它做一个mask。我觉得这个方法是可以试一下的,就相当于把目标检测和segmentation结合在一起了,所以还是一个挺好的思路。
(等待问题过程中顺便插播一则公司介绍)
我们宜远智能位于深圳,也是一个初创公司,主要是做人工智能在医学图像处理上的应用,然后做一些基于医学图像的辅助诊断,大家有兴趣的话可以去我们官网看一下。我们现在也在招人,如果有兴趣的话可以在微博里面艾特我或者发邮件给我,邮箱地址是 kennethkliu@foxmail.com。加我的微信也可以,但是微信的话我也不会发太多东西。微信号是 kenneth_liukai。
Q:这个问题有人问,我重复一下。也是数据不平衡的问题,当positive和negative不平衡的时候可以做hard negative mining。那么假如第一次分类有部分数据分错了,那么增强的权重是重采样权重还是梯度的权重?
A:这个是两种都可以,我们实际中一般是数据重采样。如果增加梯度的权重,其实不知道是针对哪一种。只是说这个权重的话,就把数据重新放进去。增加权重也可以,但是你增加这个权重的时候,学的时候就不只针对分错的那些了,会对所有的数据都增加了权重。那么还是重采样来得更直接一些,就是分错的那个数据再重新放进去,或者是加倍重新放进去,再去训练,这个都是可以的。
其实在图像上面做数据增强,不光是重采样,还有一些时候为了增加它的泛化性,会做一些偏移、切割、平移这种操作,也是很有效果的。
Q:除了重采样,还有其他办法解决数据不平衡的问题吗?
A:重采样跟数据不平衡,其实是同一个思路。因为数据不平衡,你为了能达到平衡,那就是要打乱原来的数据分布了。除非这个模型对数据不平衡的状况不敏感,就是说即使数据不平衡,也能学出来,大类就大类的学,小类就小类的学。这种就是要考验模型的能力的,有些模型即使类别比较小的也是能够学出来的,要看这个模型的区分能力了。
Q:如果数据图像label有时标错的比较厉害,标错的比例甚至达到1/3,有没有什么数据清洗的办法?
A:对这个这个问题非常好,因为在医学图像里面这个问题特别严重。
其实医学标注数据是有很强的背景知识要求,一般都是要比较高水平的医生标的才会比较准确。
对普通的医生来说,比如说有一些结节,或者一些脑部的MRI上病变的位置,其实在那里,但他就看不到,因为他知识水平有限,他就没见过这种东西。我们也曾经试过要用好几个医生然后去标,水平不一样,指标的差异还挺大的,跟ground truth差距就更大了。
当然了这个ground truth也不是标准的ground truth,只是三个专家级的医生标的共同的结果。这种方法可以这么来,就是说你的模型也可以去标一下。如果这个模型是完全基于现在这种“脏”数据学出来的,那么它真的是没办法能够学得好,那它就是去拟和这个“脏”数据了。如果有另外一个好的模型,就可以transfer过来,它去把这个数据标一遍,跟达到1/3标错的那个数据一起,相当于两个专家会诊一样。它会有一个统计分布,这种情况下能够一定程度上把那些“脏”数据给剔除掉。这是一种思路。
另外的话,有一些如果他标错了,就会出现同样的图像、非常相近的图像,得到了不同的label。这种就是标注相冲突的,这也是一个问题。我们就可以拿一个ImageNet pre-train的model去看两个图像的差异。假如说真的差异很小,然后label标注的截然相反,就可以做一定形式的过滤。
这个问题我不知道回答的好不好,我就是以我的经验来说。这其实是一个开放性的问题,可能有很多的方法去实现。其实做机器学习,ground truth就相当于一个先知,告诉你哪些是真的标注数据,那才是真正的标注数据。那实际上很多都是人标的,人的知识水平就限制了标注质量的好与差。
雷锋网 AI 科技评论整理。感谢刘凯老师带来的分享。
相关文章: