标签归档:分享总结

多任务深度学习框架在ADAS中的应用 | 分享总结

雷锋网AI科技评论按:在8月10日雷锋网AI研习社邀请了北京交通大学电子信息工程学院袁雪副教授给我们讲解了在高级辅助驾驶系统(ADAS)中的多任务深度学习框架的应用

内容提纲:

ADAS系统包括车辆检测、行人检测、交通标志识别、车道线检测等多种任务,同时,由于无人驾驶等应用场景的要求,车载视觉系统还应具备相应速度快、精度高、任务多等要求。对于传统的图像检测与识别框架而言,短时间内同时完成多类的图像分析任务是难以实现的。

袁雪副教授的项目组提出使用一个深度神经网络模型实现交通场景中多任务处理的方法。其中交通场景的分析主要包括以下三个方面:大目标检测(车辆、行人和非机动车),小目标分类(交通标志和红绿灯)以及可行驶区域(道路和车道线)的分割。

这三类任务可以通过一个深度神经网络的前向传播完成,这不仅可以提高系统的检测速度,减少计算参数,而且可以通过增加主干网络的层数的方式提高检测和分割精度。

以下为当天分享的内容总结。


图文分享总结


一、任务分析

WHO在2009年统计的一个数据显示,在全世界范围内每年由交通事故死亡的人数有123万人。但是我们知道,在朝鲜战争中,整个战争死亡的人数也差不多一百多万。也就是说,每年死于交通事故的人数差不多等于一次非常惨烈的战争的死亡人数了。根据WHO统计,在全世界范围内每年由交通事故造成的死亡人数有123万之多;而发生交通事故90%是由司机人为原因造成的,比如注意力不集中、超速、安全意识弱等等。所以目前减少交通事故的最主要途径通过采用高级辅助驾驶系统(ADAS)就是减少认为错误。


对于ADAS系统,基本上包括这些功能:夜视辅助、车道保持、司机提醒、防撞提醒、车道变换辅助、停车辅助、碰撞疏解、死角障碍物检测、交通标志识别、车道线偏移提醒、司机状态监测、远光灯辅助等。这些功能是ADAS所必备的。

为了实现这些功能,一般其传感器需要包括视觉传感器、超声波传感器、GPS&Map传感器、Lidar传感器、Radar传感器,还有一些别的通信设备。但是我们在市面上看到的大多数传感器其功能其实是比较少的,例如mobile I,它只有车道保持、交通标志识别、前车监测和距离监测的功能,但并不全面。从厂家或者用户的角度来说,自然我们希望能用最便宜的传感器来完成更多ADAS的功能。最便宜的传感器基本上就是视觉传感器。所以我们设计方案时就想,能不能通过算法将视觉传感器实现更多ADAS系统的功能呢?这就是我们整个研发的初衷。

此外,我们还需要考虑ADAS的一些特点。ADAS系统(包括无人驾驶)是在一个嵌入式平台下进行的,也就是说它的计算资源很少。那么我们也必须考虑如何在这样一个计算资源非常少的基础上,保证ADAS系统能够快速且高精度地响应,同时还能保证多任务的需求。这是我们第二个要考虑的问题。


为了解决以上两个问题,我们首先把ADAS的任务分解一下。如图所示,我们将ADAS的任务分解成目标检测与识别、图像分割、摄像机成像目标跟踪、图像分割。我们过去一年多的研发工作其实就是,用一个深度学习框架来同时实现上述这四个的功能。

对于一个前向传播的网络,其计算量和计算时间主要取决于它的参数数量,而80%的参数都来自全链接层,所以我们的第一个想法就是去掉全链接层。其次,网络越深,它的参数就会越多所以如果我们把目标检测与识别、图像分割、摄像机成像目标跟踪、图像分割做成四个网络的话,就会有X4倍的参数。

所以针对这两个考量,我们用一个主干的网络来做前面的运算,然后在后面再根据具体的任务分成多个小的分支加到主干网络上。这样多个图像处理的任务就可以通过一个主干网络的前向传播来完成了,其参数大大减少,计算速度也变的更快。同时我们也能实现多个任务同时进行的需求。另外,在最后我们还可以将多个结果进行融合,驾到训练过程的调整中,这样就可以提高我们结果的可信性。

但是在这个过程中我们也碰到一些难点。第一个难点就是我们在同一个网络中需要将较大的目标(例如车辆)和较小的目标(例如交通标志)同时检测出来。第二个难点是,测速测距时我们需要的目标的位置是非常精确的,目前这个问题我们还没有解决。

二、模型结构

这个是我们设计的网络的一个基本结构。它分为几个部分:主干网络(我们称为解码器)、多个分支(我们称为编码器)和基于CRF的结果融合。现在这个网络我们只设计了两个编码器,一个是检测任务编码器,还有一个是分割任务编码器,以后我们还可以增加其他的编码器。结果融合,主要是想用它来影响主干网络的一些权重选择。主干网络,我们选择了一些比较有人气的算法,例如VGG 16、GoogleNet、ResNet等。分割任务编码器我们用了FCN编码器,检测任务编码器我们用了YOLO9000编码器。

1、主干网络

下面我们来详细看一下这个网络各个部分。首先我们来看主干网络。主干网络我们使用了VGG、GoogleNet或者ResNet。这几个是可选择的。从右侧的这张图(纵轴是网络深度,圈的大小表示模型的大小)我们可以看到ResNet在深度和大小上都比较好,我们选择使用ResNet可以有比较好的实时性。

2、FCN语义分割解码器

然后我们看一下FCN语义分割解码器。在神经网络中,一张图片经过主干网络后,再对其提取高维特征图。其实这个过程就是用pooling的方法给它降维。结果到了输出高维特征图时,它只有原图像的1/32大小了。随后我们采用上采样把它升维成原图像大小。上采样的过程就如左侧所示,这个示例中我们将2*2的图像上采样成4*4的图像。

上采样的结果就是解码器预测出来的,我们将它与标注好的图像进行比较运算,算出loss,然后对权重进行修改。在上采样中一个问题就是,比较小的物体是计算不出来的。我们知道一些较浅的卷积层感知阈比较小,它会包含更多比较局部的信息;而较深的卷积层具有较大的感知阈,它能够学习到更加抽象的信息。于是FCN就通过将pool3、pool4和pool5的信息叠加在一起进行上采样,这样就可以做到同时上采样多个尺度的信息了。

3、目标检测/识别解码器 YOLO

其次我们再来介绍一下用于目标检测/识别的解码器YOLO。我们使用的是YOLO V2的解码器,但这里我们先介绍一下YOLO V1。这是YOLO V1的主框架,它的主干网络是Darknet19,我们不用管它。我们重点关注编码器的过程。主干网络输出的特征图,这种特征图会用1*1 的卷积核给正规化成7*7*30的特征图。那么这个30是什么呢?

在这样一个7*7的矩形框中,每一个方形框用一个点来表示。然后我们分别用5维表示包含这个方形框的一个矩形框,其中4维表示x、y、z、w,另外一维为confidence。

在YOLO V1中30维的前10个为两个这样的矩形框。它们的(x,y,z,w)分别表示了坐标预测,而另外一维为confidence预测。另外的20维为类别预测(也就是说在模型中有20种可能出现的例如汽车、行人之类的模型 )。

YOLO V2与V1最大的不同就是采用了Anchor boxes。所谓Anchor boxes就是每个中心预测(例如9种)不同大小和比例的建议框,每一个建议框对应一个4维的坐标预测、1维confidence预测和20维的类别预测。它提出一个非常有意思的思想就是维度聚类,也即现在训练集里通过聚类的方式算出Anchor boxes的大小。这样,例如它从9个boxes选出5个boxes。于是对于VOC数据集,总共就5*(4+1+20)=125个输出维度。

YOLO V2 Anchor boxes的选择以及维度聚类的思想对于我们车载摄像的问题是更有效的,因为我们摄像机的位置是相对固定的,所以我们可以算出每一个目标的大小都是相对比较固定的。

我们在YOLO V2的基础上也做了一些改动。首先是我们做了一些细粒度特征,来检测小目标。其次我们还在浅层特征中进一步地做坐标预测,然后加到我们的整个预测当中,这样可以提高小目标的预测。

4、一些思考

在这个研究的过程中,我们做了一些思考。

首先,在计算机视觉领域里,低中层视觉问题更关注原始视觉信号,与语义信息的联系相对松散,同时也是许多高层视觉问题的预处理步骤。本届CVPR有关低中层视觉问题的论文有很多,涵盖去模糊、超分辨率、物体分割、色彩恒定性(color constancy)。

其次,在最后的层中抽象的特征对分类很有帮助,可以很好地判断出一幅图像中包含什么类别的物体,但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓,指出每个像素具体属于哪个物体。

我们该如何将浅层特征和深层特征结合起来呢?这其实还需要进一步的研究。

 三、数据库建立

在数据库这方面,我们发现国内的路况与国外路况很不一样,且中国的车的种类也多种多样。所以我们开发了一种半自动标注软件,也就是我们可以通过算法自动完成车辆标注,同时我们还可以手动修正误差较大的标注。目前我们已经标注了5万张矩形标注数据集。我们力争在年底能够开放数据集,另一方面我们也能协助企业建立数据库。

另外在数据库建立方面,我们还要拓展一下数据库类型。例如通过原来白天的图片,我们可以生成黑夜的图片,增加到我们的训练样本中去。

四、结果显示

雷锋网注:此处结果显示仅为展示部分视频的截图,视频详细内容请关注  AI 研习社:第9期·分享回顾|袁雪:多任务深度学习框架ADAS中的应用


雷锋网

CVPR 2017精彩论文解读:综合使用多形态核磁共振数据的3D生物医学图像分割方法 | 分享总结

雷锋网 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 科技评论整理。感谢刘凯老师带来的分享。

雷锋网

CVPR 2017精彩论文解读:显著降低模型训练成本的主动增量学习 | 分享总结

雷锋网 AI 科技评论按:计算机视觉盛会 CVPR 2017已经结束了,雷锋网 AI 科技评论带来的多篇大会现场演讲及收录论文的报道相信也让读者们对今年的 CVPR 有了一些直观的感受。

论文的故事还在继续

相对于 CVPR 2017收录的共783篇论文,即便雷锋网 AI 科技评论近期挑选报道的获奖论文、业界大公司论文等等是具有一定特色和代表性的,也仍然只是沧海一粟,其余的收录论文中仍有很大的价值等待我们去挖掘,生物医学图像、3D视觉、运动追踪、场景理解、视频分析等方面都有许多新颖的研究成果。

所以我们继续邀请了宜远智能的刘凯博士对生物医学图像方面的多篇论文进行解读,延续之前最佳论文直播讲解活动,陆续为大家解读4篇不同的论文。

刘凯博士是宜远智能的总裁兼联合创始人,有着香港浸会大学的博士学位,曾任联想(香港)主管研究员、腾讯高级工程师。半个月前宜远智能的团队刚刚在阿里举办的天池 AI 医疗大赛上从全球2887支参赛队伍中脱颖而出取得了第二名的优异成绩。

在 8 月 1 日的直播分享中,刘凯博士为大家解读了「Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally」(用于生物医学图像分析的精细调节卷积神经网络:主动的,增量的)这篇论文,它主要解决了一个深度学习中的重要问题:如何使用尽可能少的标注数据来训练一个效果有潜力的分类器。以下为当天分享的内容总结。

图文分享总结

刘凯博士:大家好,我是深圳市宜远智能科技有限公司的首席科学家刘凯。今天我给大家介绍一下 CVPR 2017 关于医学图像处理的一篇比较有意思的文章,用的是 active learning 和 incremental learning 的方法。

今天分享的主要内容是,首先介绍一下这篇文章的 motivation,就是他为什么要做这个工作;然后介绍一下他是怎么去做的,以及在两种数据集上的应用;最后做一下简单的总结,说一下它的特点以及还有哪些需要改进的地方。

其实在机器学习,特别是深度学习方面,有一个很重要的前提是我们需要有足够量的标注数据。但是这种标注数据一般是需要人工去标注,有时候标注的成本还是挺高的,特别是在医学图像处理上面。因为医学图像处理需要一些 domain knowledge,就是说医生对这些病比较熟悉他才能标,我们一般人是很难标的。不像在自然图像上面,比如ImageNet上面的图片,就是一些人脸、场景还有实物,我们每个人都可以去标,这种成本低一点。医学图像的成本就会比较高,比如我右边举的例子,医学图像常见的两种方式就是X光和CT。X光其实一个人一般拍出来一张,标注成本大概在20到30块钱人民币一张;CT是横断面,拍完一个人大概有几百张图片,标注完的成本就会高一点,标注的时间也会比较长,特别是CT,因为医生要看好几百张。

举个例子,比如标1000张,这个数据对 deep learning 来说数据量不算太大,X光需要2到3万人民币、3到4天才能标完;CT成本就会更长,而且时间成本也是一个很重要的问题。那我们怎么解决深度学习在医学方面、特别是医学图像方面的这个难题呢?那我们就要用尽量少的标注数据去训练一个 promising 的分类器,就是说一个比较好的分类器。

那我们就要考虑要多少训练数据才够训练一个 promising 的分类器呢?这里有个例子,比如左边这个图,这个模型的 performance 随着数据的增加是一个线性增长的过程,就是说数据越多,它的 performance 就越高。但在实际中,这种情况很少出现,一般情况下都是数据量达到一定程度,它的 performance就会达到一个瓶颈,就不会随着训练数据的增加而增加了。但是我们有时候想的是把这个临界点提前一点,让它发生在更小数据量的时候。比如右边这个图的红色虚线部分,用更小的数据达到了相同的 performance。我们的文章里就是介绍主动学习 active learning 的手段,找到一个小数据集达到大数据集一样的效果。

怎么样通过 active learning 的方式降低刚才右图里的临界点呢?就是要主动学习那些比较难的、容易分错的、信息量大的样本,然后把这样的样本标记起来。因为这些是比较难分的,容易分的可能几个样本就训练出来了,难分的就需要大量的数据,模型才能学出来。所以我们先去学这些难的。

怎么去定义这个“难”呢?就是“难的”、“容易分错”、“信息量大”,其实说的是一个意思。这个“信息量大”用两个指标去衡量,entropy大和diversity高。entropy就是信息学中的“熵”,diversity就是多样性。这个数据里的多样性就代表了模型学出来的东西具有比较高的泛化能力。举个例子,对于二分类问题,如果预测值是在0.5附近,就说明entropy比较高,因为模型比较难分出来它是哪一类的,所以给了它一个0.5的概率。

用 active learning 去找那些比较难的样本去学习有这5个步骤

  1. 首先,把所有的未标注图片数据在大量自然图像中训练的网络,大家知道现在有很多常用的网络,从最初的LeNet、AlexNet、GoogLeNet、VGG、ResNet这样的网络中去测试一遍,得到预测值。 然后挑出来那些最难的、信息量大的样本去标注

  2. 用这些刚刚标注了的样本去训练深度学习网络,得到一个网络N

  3. 把剩下没有标签的图像用N过一遍,得到预测值,挑一遍那些最难的,用人工去给它标注

  4. 把刚刚标注了的样本和原来已经标好的样本一起,也就是整个标注集拿来继续训练这个网络

  5. 重复3到4这个步骤,直到当前的分类器可以对选出来的比较难的图像很好的分类了。

刚才的文字讲解可能不是很直观,我们用一个图来看一下。这个图从左到右看,一开始灰蒙蒙的意思是都还没有标注,然后用一个pre-trained model去预测一遍都是哪个类。这样每个数据上都有一个概率,可以根据这个概率去选择它是不是难分的那个数据,就得到了中间这个图,上面那一段是比较难的,然后我们把它标注出来。然后用一个 continuous fine-tune 的 CNN,就是在原来的模型上再做一次 fine-tune,因为有了一些标注数据了嘛,就可以继续 fine-tune了。 fine-tune后的模型对未标注的数据又有了一个预测的值,再根据这些预测值与找哪些是难标的,把它们标上。然后把这些标注的数据和之前就标注好的数据一起,再做一次 continuous fine-tune,就得到 CNN2了。然后依次类推,直到把所有的数据都标完了,或者是在没有标完的时候模型的效果就已经很好了,因为把其中难的数据都已经标完了。

刚才我们提到了两个指标来判定一个数据是不是难分的数据。entropy比较直观,预测结果在0.5左右就认为它是比较难分的;但diversity这个值不是很好刻画,就通过 data augmentation数据增强的方式来设计指标,就是说从一个图像设计出一系列它的变形。这些变形就可以是靠翻转、旋转、平移操作等等,一个变成了好几个甚至十几个,增加了它的多样性。然后对这些所有的变形去预测它们的分类结果,如果结果不统一的话,就说明这副图像的diversity比较强,那么这张图像就是比较难分的,是hard sample;反之就是比较好分的,那么就不去做它的增强了。然后对所有增强以后的数据的预测值应当是一致的,因为它们代表的是同一个东西,但是也有一些例外,如果是像我刚才说的那样的简单的数据增强。

这就会产生一个问题,原始的图像,比如左边这只小猫,经过平移、旋转、缩放等一些操作以后得到9张图,每张图都是它的变形。然后我们用CNN对这9张图求是一只猫的概率,可以看到上面三个图的概率比较低,就是判断不出来是一只猫,我们直观的去看,像老鼠、狗、兔子都有可能。本来这是一个简单的例子,很容易识别出来这是一只猫,但是增强了以后反而让模型不确定了。这种情况是需要避免的。

所以这种时候做一个 majority selection,就是一个少数服从多数的方式,因为多数都识别出来它是一只猫了。这就是看它的倾向性,用里面的6个预测值为0.9的数据,上面三个预测值为0.1的就不作为增强后的结果了。这样网络预测的大方向就是统一的了。

这篇文章的创新点除了active learning之外,它在学习的时候也不是从batch开始,而是sequential learning。它在开始的时候效果就不会特别好,因为完全没有标注数据,它是从一个ImageNet数据库训练出的模型直接拿到medical的应用里来预测,效果应该不会太好。然后随着标注数据的增加,active learning的效果就会慢慢体现出来。这里是在每一次fine-tune的时候,都是在当前的模型基础上的进一步fine-tune,而不是都从原始的pre-train的model做fine-tune,这样就对上一次的模型参数有一点记忆性,是连续的学习。这种思路就跟学术上常见的sequntial learning和online learning是类似的。但是有一个缺点就是,fine-tune的参数不太好控制,有一些超参数,比如learning rate还有一些其它的,其实是需要随着模型的变化而变化的,而且比较容易一开始就掉入local minimal,因为一开始的时候标注数据不是很多,模型有可能学到一个不好的结果。那么这就是一个open的问题,可以从好几个方面去解决,不过解决方法这篇文章中并没有提。

这个方法在机器学习方面是比较通用的,就是找那些难分的数据去做sequntial的fine-tune。这里呢主要是用在了医学图像上面,然后用两个例子实验了结果,一个是结肠镜的视频帧分类,看看有没有病变、瘤之类的。结论是只用了5%的样本就达到了最好的效果,因为其实因为是连续的视频帧,通常都是差不多的,前后的帧都是类似的,不需要每一帧都去标注。另一个例子也是类似的,肺栓塞检测,检测+分类的问题,只用1000个样本就可以做到用2200个随机样本一样的效果。

这个作者我也了解一些,他是在 ASU 的PhD学生,然后现在在梅奥,美国一个非常著名的私立医院梅奥医院做实习,就跟需要做标准的医生打交道比较多。这相当于就是一个从现实需求得出来的一个研究课题。

总结下来,这篇文章有几个比较好的亮点。

  • 从标注数据来说,从一个完全未标注的数据集开始,刚开始的时候不需要标注数据,最终以比较少量的数据达到很好的效果;

  • 然后,从sequntial fine-tune的方式,而不是重新训练;

  • 选择样本的时候,是通过候选样本的一致性,选择有哪些样本是值得标注的;

  • 自动处理噪音,就是我刚才举的猫的那个例子,数据增强的时候带来的噪音,通过少数服从多数的方式把那些噪音去掉了;

  • 在每个候选集只选少量的patches计算熵和KL距离,KL距离就是描述diversity的指标,这样减少了计算量。传统的深度学习的时候会需要在训练之前就做数据增强,每个样本都是同等的;这篇文章里面有一些数据增强不仅没有起到好的作用,反而带来了噪音,就需要做一些处理;而且还有一些数据根本不需要增强,这样就减少了噪音,而且节省了计算。

这篇文章其实还比较简单,但是思路是很好的,因为提出的问题是在现实中非常常见的。有一些缺点就是:

  • sequntial fine-tune,就跟机器学习提出incremental learning和online learning的时候遇到的问题类似,就是说怎么样才能达到和batch learning的时候一样的效果。

  • 以我们在公司以及以前的研究经历来看,在标注好的那些数据上也有一些可以借鉴的思路可以加进来,比如 hard nigtive mining 有一个思路,因为在医学图像还有其它的一些数据上面,真正有病的数据是比较少的,就会出现这个模型分类的结果倾向于他没有病,就会出现一个问题是模型的有偏。这种时候用hard mining的方法就把分错的那些重新送入模型里面去重新训练。

  • 这个工作也可以在其它方面推广,不过推广的例子还有待研究,这里只用了medical的例子。

我今天分享的大概就是这些内容。其实这里还有一个更详细的解释,最好还是把论文读一遍吧,这样才是最详细的。

提问环节

Q:为什么开始的时候 active learning 没有比random selection好?

A:其实不一定,有时候是没有办法保证谁好。active learning在一开始的时候是没有标注数据的,相当于这时候它不知道哪些数据是hard的,在这个医学数据集上并没有受到过训练。这时候跟 random selection 就一样了,正在迁移原来 ImageNet 图像的学习效果。random selection 则有可能直接选出来 hard的那些结果,所以有可能比刚开始的active selecting要好一点,但这不是每次都是 random selection 好。就是不能保证到底是哪一个更好。

(完)

雷锋网 AI 科技评论整理。系列后续的论文解读分享也会进行总结整理,不过还是最希望大家参与我们的直播并提出问题。

雷锋网