图像语义分析和显著性检测(文字版)

点击这里收听本期节目音频版

编辑: 肖怡婷

本期嘉宾: 秦瑶(UCSD 博士学生) (G)

主播: 舒晏 (S), 阿拉法特 (A)

A
在主动学习的那期节目中,我们举了这样一个例子,如果我们有很多路况的图片,我们需要把图中的重要信息圈出来,比如说路牌,行人或者其他车辆。在那期节目中我们是从如何减少人工标识数据的工作量这个角度来看待这个例子的,但是这类问题其实是属于计算机视觉中的一个大类的问题,叫图像分割,image segmentation。
S
除了自动驾驶车辆会用到这个技术以外,医学图像的处理也会用到,比如说在自动圈出并且识别 X 光中的异常区域的时候,我们就需要机器能够把可疑的区域分割出来。大家可以想象这是一类很难的任务,如果说图像分类只是判断图片中包含哪一类的物体,那么图像分割就是要判断图中的每一个区域都分别包含哪些物体,这些区域甚至有的时候可以精确到一个像素。那么今天我们的嘉宾会和我们介绍这个难题要怎么解决。

 01:06 
A
大家好,欢迎收听德塔赛。我是阿拉法特。
S
我是舒晏。今天我们请到的嘉宾是和我一个实验室的同学:秦瑶。
G
大家好,我是秦瑶,今年是 UCSD 的博三学生。我的研究主要致力于图像分割,之前也做一些 显著性检测方面的研究。今天很高兴可以跟大家分享我的学习经验和心得。
S
秦瑶刚刚从微软剑桥研究院实习回来,在微软她的工作就是围绕图像分割的。秦瑶,你可以先给我们大体的介绍一下你实习时候的工作吗?
G
好的。这个暑假我们主要是用 3D 深度学习的方法来解决图像分割。我们主要的数据集是从医院采集的一些医疗图像数据。在这个问题中,有一个很重要的问题,就是当我们在训练模型的时候,一般来说我们可能只有一个医院的数据,但是我们又不得不用我们训好的模型在另外一个医院的数据上测试。一个普遍的问题就是从这两个不同的医院采集的数据,它们的分布是不一样的,这就导致当我去测试我的模型的时候,我训练的模型很可能是在训练集上过拟合的,所以测试结果就不会很好。这也是整个暑假在做研究的时候非常致力于去解决的一个问题。
A
在你们工作的项目中,这个数据是微软从英国本地医院收集的吗?
G
我们的训练集是从英国本地的医院,但是我们的测试集就从美国的医院这边的数据。所以我们的实验就会发现:当医院用不同的仪器去给人体拍照的时候,得到数据的很多性质都会有相应的变化。
S
那为什么我们不能从多个医院来采集更丰富的训练数据?这样的话,它是不是会 generalize 的好一点呢?
G
的确,但是对于医院来说,数据是需要考虑到病人各方面的因素,一般来说都是需要保密的。所以其实医疗图像一个很重要的问题,就是数据很有限,包括我们用深度学习的方法去做的时候,当然也都是希望如果说我们有越多的数据,我们的模型可能会被训练得更好。但是首先,数据的收集就是很重要的一点。就好像对于微软来说,他们也在致力于和各个医院去协商,希望能够得到更多的数据以供于研究。
A
那具体到你这个项目中,你们收集的数据是具体什么样的数据?
G
我们采集的数据需要分割的就是人体的不同器官。当然我们也有一些公共数据集,在那样的数据集中,就是人体大脑的一些肿瘤,我们也是需要去分割出不同的肿瘤。所以主要是两个:一个是在 CT 成像中的器官,还有一个可能是脑部 MRI 的一个肿瘤的判断。

 04:32 
A
那么秦瑶,你的工作主要是围绕图像分割,你能给我们讲一下这个问题是怎么定义的吗?
G
好的。对于我自己而言,我觉得图像分割其实可以分为两种:一种就是有点像二值分割。对于一幅给出的图像,你只需要分出前景和背景,你也不需要标出前景到底是什么。那么我之前有做过关于显著性检测这方面的研究。所谓显著性检测,你可以把显著的东西看作是前景,就好像当你瞬间去看一幅图片的时候,什么样的东西最可以在一瞬间抓住你的眼球,那么这样东西我们就把它定义为显著的东西。当我们做显著性检测的时候,一定程度上相当于前景和背景的一个分割,只不过对于每一个像素,我们并不是告诉它一定是前景或者背景,而是说我们给出它一个概率,它成为前景的概率究竟是怎样的,也就是它成为显著对象的概率究竟是怎么样的。
A
你可以给我们具体举个例子吗?显著性检测这个技术有什么具体的应用吗?当你从一个图像中分出一个前景之后,这样做的目的是什么?
G
其实显著性检测可以作为计算机视觉里面很多非常热门的任务的一些预处理。当你可以锁定你的目标对象到底在哪些地方,你就可以减少你的计算量。因为很多背景的东西其实你并没有那么在乎,你也不需要花费精力去研究它们。
A
那么另外一类问题是什么样的?
G
另外一类问题就是语义分割。这类问题就更加的难,因为你不仅要把不同目标对象从背景中分割出来,同时你还要需要给它们一个相应的标签,告诉我们这个目标对象究竟是椅子,还是桌子,还是人。
A
这就是把图像分割出来,并且在上面标注上它是什么东西。
G
是这样的,而且这样的标注是对应于每一个像素而言的。也就是说,对于任意一个在图像中出现的像素,我们都知道它的标签究竟是怎么样的。所以当你在做分割的时候,你不仅会知道这个目标对象是什么,同时你也可以知道它在哪里。
S
因为在语义分割里面,每张图都是逐像素标注的。也就是说在图片很高维的时候,其实我们每一张图是要有几十万甚至是上百万个标签的,是这样吗?
G
其实并不是这样。当我们在标真值的时候,我们只需要标出目标对象的边缘,这样在边缘内部的所有的像素点我们都可以认为是拥有同一种标签。但是即使是这样,标注真值的过程仍然是一个非常耗费人力和时间的一个过程。所以在这个领域,我们也有弱监督的语义分割。也就是说,我们给出的真值不是逐像素的真值,不是每一个像素我们都知道它的标签是怎么样的,而是说给出一幅图,我们的真值告诉你这幅图中存在哪些标签,我不知道这些标签到底在哪里,但是我知道这幅图它包含了哪几类的标签。这样其实更增加了我们训练的难度,因为我们训练的时候只拥有 Image-level 的真值,但是在做预测的时候,我们需要做 Pixel-level 的预测。

 08:10 
A
现实生活中,一张图片上面的物件可以说是非常的多。我们需要提前把所有的物件的名称都标出来吗?你需要多少类别?需要提前定吗?
G
这是一个很好的问题。其实对应于不同的数据集,我们就会有不同的对象类别。例如在比较有名的 Pascal VOC 数据集上,我们就有 21 种不同的对象;对于我暑假做的医疗图像的 Prostate 数据上,我们就有七种不同的类别,对应于人体的七种不同的器官。当我们在预测的时候,我们只是需要预测每一个像素成为每一种类别的概率。需要注意的一件事情就是,其实在我们的生活中有各种各样的对象,但是对于一个数据集而言,可能我们只标注了 20 种对象。其他没有被标注出来的对象,我们自动把它们归为背景。所以背景是涵盖了很多我们不知道的对象的。

 09:14 
A
那么我们从语义分割说起吧!秦瑶你知道的比较早期的语义分割的方法是什么样的?
G
我最开始接触语义分析的时候,那个时候深度学习也比较火,所以大家那时候都开始用深度学习 来做语义分析。最开始 FCN (Fully Convolutional Neural Networks) 这篇论文就很成功的把深度学习的技术用于了语义分割,并且取得了很好的分割效果。这篇论文主要的创新点就是它每一层都是卷基层,而之前用于图像分类的大多数神经网络,它们后面都会用全连接层来得到整幅图,给整幅图一个标签。但是对于语义分割而言,我们需要的是一个逐像素的标注,我们还需要的是像素点与像素点之间的关联,位置的信息,以及上下文的关联。所以 FCN 的作者就是把原本 VGG 后面三层全连接层全部转换成了卷基层,这样我们再用网络做预测的时候就可以更多地保留像素点之间的关联位置信息和上下文信息。

 10:38 
S
我们知道在卷积神经网络中,我们给一个比如说 224×224 的图片输入。经过了几层卷积层和几层池化层之后,它会一点一点可能会降到 32×32 这么一个大小的特征图。我们是怎么把这个比较小的特征图和我们在高精度的这个图片上的像素联系起来的?
G
在已有的技术中有两种比较常用的方法,第一种是双线性插值,通过插值的方法把缩小的 32×32 的特征图再放大回原图的分辨率;另一种方法就是通过解卷积层,通过网络去学习卷积层中的参数,然后再把缩小的特征图扩展成原来的分辨率。因为我们得到的真值是对应于原图大小的,所以我们希望最后的预测也是基于原图大小的。通过这两种方式,我们把特征图扩展成原图的大小,那么我们就希望我们原图大小的预测可以和真值尽可能的接近。
A
你刚刚提到两种不同的方法来把小的特征图,还原回一个高精度的原始的图像的大小。在这个还原过程中,你显然会损失很多信息,这种信息的损失会给我们的问题带来什么困扰吗?
G
会的。首先,最主要的一个问题就是,我们通过这样的还原的方式,得到的分割出来的对象,它们的边缘都不会那么的精细,都会有一定的模糊。为了解决这样的问题,在语义分割这个领域有一个非常普遍的后处理方式,就是 CRF (Conditional random field),那么这个方法也是非常流行,基本上我们用神经网络得到的一个预测图,经过 CRF 之后,那么我们都可以得到一个效果上的提升,因为我们通过对比经过 CRF 前后的预测图,发现对象都会有一个更加清晰和明确的边缘,这是通过预处理的方式来解决信息损失的问题。另外一种方式就是近几年提出的扩张卷积神经网络,它是改变了卷积层的结构,在不增加可学习参数数目的情况下,当我们在做预测的时候,它可以增加我们参照的原文的大小,其实一定程度上实现了池化的作用,所以相应的我们也就可以减少整网络中池化层的个数,这样的话我们得到的特征图也就具有更高的分辨率。

 13:40 
S
那么刚才我们主要聊了图像分割里面的一类问题,叫做语义分割。其实还有另外一类问题,我们之前提到过的,是显著性检测。那么秦瑶你在显著性检测方面有哪些经验,你做过哪些工作呢?
G
首先我想先说一下显著性检测,其实它不可以严格的当做分割。因为如果说我们去分割一个图像的时候,其实我们的标签都是离散的,它是什么标签就是什么标签 ,但是在显著性检测里面我们只有两个标签,那就是前景或者背景,所以其实我们是给每个像素一个成为前景的概率。所以说我们最后得到的预测的图其实不是只有 0 和 1,而是说每一个像素它的值其实都是 0 到 1 之间的一个连续的值,来衡量它成为前景的概率。如果说这个像素是属于显著对象的话,也就是说它成为前景的概率也就会更高,但如果说它这个值越低,也就意味着它更有可能成为背景。例如显著性检测我之前的一个项目,当时那篇文章的灵感其实是来自于我本科的第一个项目,当时我做的是有点社会学里面的意见传播。那么在意见传播里面,元胞自动机是非常有名,也非常popular的一种方式。我们发现一个非常有意思的现象。例如选举,那么选举的话,我们就需要做出不同的选择。当我们发现我们不断的和我们的邻居,和我周围的人去交流你到底选谁,然后再相应的改变我自己的意见的时候,通过不断的意见交流和演化,我们最后发现整个小团体中会出现一种稳定的现象:具有相同观点的人会抱团。就好像假设我们都想选A,那么这些人会集中在一些区域,想要选B的人也会集中在一个区域,最后就会呈现一种稳定的状态,这些抱团的区域他们也很难被外面持有不同观点的人所影响,有点相当于形成了一种局部环境。其实在意见传播领域,元胞自动机非常的受到重视,也得到了广泛的应用,但是它从来没有被应用到例如像 computer vision 这样的问题中,尤其是像显著性检测。我们当时想要应用它,也是想要把它当做一种意见传播,把它当作一种传播机制,因为我们观察到其实当我们在做二值分割的时候,如果我们把对象中的每一个像素都当作一个人的话,这些人其实就是一个抱团的非常小的一个团体,他们具有相同的属性,就是说我们都想要,我们都是成为前景,我们都是想要选 A 的那些人。背景其实就是剩下的大集体,他们都想要选 B,所以说他们也有一定的相似性。所以当我们观察到这样一种性质的时候,我们觉得可能元胞自动机可以在显著性检测这个任务上得到一定的运用。在元胞自动机中,非常关键的一点就是说当我在和邻居交流的时候,我要怎么样去改变我的意见,这个更新的规则是非常重要的。因为当你制定一个比较合适的更新规则的时候,你可能会得到的是一个最后通过不断的迭代更新之后,整个团体最后呈现了一派祥和,他们都非常的稳定。但是如果你这个更新机制是另一种更新机制的话,可能最后演变的结果就是这个团体完全没有任何规律,非常杂乱,各执己见。
A
这个系统会不会收敛,取决于你的传播机制是什么样的。
G
是这样的。系统会不会收敛,非常关键的因素就是你究竟是如何根据邻居的意见来改变自己的意见的。所以当时我们通过观察图像,我们觉得在图像中非常显而易见的一点就是,如果我和周围的邻居非常相似,我们就应该持有比较相似的一个成为前景的概率;如果我和邻居很不一样,那我就应该就是说跟他趋近,既然我们不是一类人,我们就不应该想持有相同的意见。所以当时我们先通过非常简单的颜色的特征来作为判别我究竟和你是不是一类人的基准。如果我和你一类,那么我在下一次更新的时候,那我就想要跟你更相同,所以我就会受到你的影响去改变我自己的观点;但如果我发现这个邻居和我不是一类,那么假设他的显著度非常的高,那我就希望我自己的显著度非常的低,做一些相应的改变。
S
这一切全部都是基于最开始是只考虑颜色这一个特征是吗?
G
是这样的。在我们最开始的那篇论文中,我们只考虑了颜色的信息,因为颜色的信息是非常好提取的,你不需要花费任何的时间,或者再提出其他的算法来提这个特征。鉴于深度学习在提取特征上有非常大的优势,所以后来我们也用已有的深度学习的方法来提取图像的特征,作为取代颜色特征来代表每一个像素的一个象征。后来我们的实验结果也的确发现,用深度学习提取的特征能够更好地提高我们分割的准确性。

 20:15 
A
在你早期的那篇论文中,你说只比较颜色。那会出现两个区域,虽然它们间隔非常远,但只是因为它们的颜色都是非常相近的,我们说两个间隔很远的红色区域,会因为这个原因使得它们成为前景的概率都是相对比较高,会出现这种状况吗?
G
这是一个很好的问题。我刚刚强调了更新机制是非常重要的,因为它可以直接决定这个系统最后究竟是呈现一个稳定还是杂乱无章的状态。同时在更新的过程中,我们也要限定我应该要和哪些人交流。在我们的算法中,我们只和我们周围两层的邻居交流。其实我们假想一下,在现实社会中,当你想要去改变自己的意见,你找别人去分享自己的意见或者说想要倾听别人的意见的时候,其实你也是只找那些和你关系很亲密的一些人去交流的。你很难说我和整个系统的所有人都去交流。所以一定程度上,当我们在定义了邻居的范围之后,其实也就避免了你刚刚说的这样的情况,就是可能相距很远的只是具有相同的颜色特征的这两个像素之间的相互影响。刚刚我们描述的是单层的元胞自动机,这种元胞自动机可以直接得到一个预测结果图。其实元胞自动机是一个非常灵活的东西,它其实更像是一种框架,你制定相应的更新规则,可能就会得到不同的结果。所以我们也提出了一种多层的元胞自动机,它主要就是用于融合不同的,已有的,最新的,最好的方法。就好像如果说我们现在有五种一流的方法,并且每一种方法都可以相应地输出一个显著图,这样我们就会有五幅不同的预测图。那么我们知道这五幅预测图其实它们有好有坏,所以我们就想要用元胞自动机来融合它们,得到一个更好的显著图。所以我们就提出了一种多层的元胞自动机。在多层的元胞自动机中,对于每一个像素,它的邻居不再是像在单层的元胞自动机中那样是它周围的像素我们把它作为邻居,而是在其他的显著图上和这个像素有着相同位置的点,我们把它当作邻居。所以当我们在意见交流更新的过程中,我们就是需要参考别的方法把这个像素是判为了前景还是判为了背景。如果说它们把它判为前景,那么对于我这个像素而言,我就希望我可以提高我的显著性;如果说其他的方法把它判为了背景,我也就相应地想要降低我的显著性,通过这样的方式来融合不同的方法,取长补短,以此想要得到一个更好的预测图。

 23:38 
S
你有想过要把元胞自动机的想法用到语义分割的问题中吗?
G
我有想过,因为其实语义分析和显著性检测最大的区别就是显著性检测我只有两种选择,我的意见,我就是要么投 A,要么投 B。所以我用概率衡量就可以直接解决这两种选择。但是在语义分割里,对应于不同的数据库,我们可能会有 10 种或者 20 种选择。也就是说,当我们在更新整个系统的时候,每一个元胞其实当它在参照着它的邻居的时候,可能要从 10 种 20 种中去选择一个最高的选择。或者另一层意义上,也就是说我可能是有 10 种或者 20 种概率图,它成为这种标签的可能性。

 24:35 
S
那么今天关于科研的内容就和大家聊到这里了。在结束之前再和大家分享一个我觉得很有趣的小故事吧!其实秦瑶找到微软在剑桥的研究院的契机是很特别的,秦瑶你可以跟大家分享一下这个经历吗?
G
是去年我参加 NIPS 这个学术会议,当时参加了 MSR 的一个招待会。那天晚上 MSR 正在展示他们最新的技术 Hololens,所以大家的气氛也都比较欢快,当时我也很积极的和在场的一些研究员去交流自己之前的一些工作,然后当时就发现 Christopher Bishop 也在场,就是《模式识别》那个教材的作者。是这样的,他也是 MSRC 的主管,然后当时就聊到我之前在我第一年在 NEC 实习的经历,因为实习的契机,所以我接触到了一个我原本非常不了解的领域:时间序列分析。我当时就可能和他说,觉得实习,然后接触不同领域的东西,其实可以开拓自己的视野。对于自己做语义分割这个方向也是会有一些帮助,就是你的想法不会仅仅只限于这个领域的一些比较成熟的方法上。然后当时他对我的这个想法也非常的肯定,再加上我们聊到语义分割,正好当时 MSR Cambridge 那边就是我在的那个组, InnerEye 他们主要也是做医疗图像的语义分割,所以可能 Bishop 觉得我们之间的研究是比较相符,所以当时他就问我有没有兴趣这个暑假去英国实习,那么他当时这样问我的时候我当然也非常开心,因为我觉得如果说一个暑假三个月的时间可以体验一下英国的风格,然后感受一下 MSRC 的研究环境,我觉得是一个很不错的机会。后来也经过面试,再加上 Bishop 的推荐,也就促成了这次实习的经历。
A
听起来 Bishop 确实是一个非常平易近人的人,我们也希望这期节目播出之后,大家下次见到B不要一拥而上,一个一个上去找实习机会。那么我们今天非常感谢秦瑶花费一下午的时间给我们录制这期节目,我们也是学到了很多有趣的知识。
G
感谢舒晏和小阿邀请我做这一期的嘉宾,有机会和大家分享一直以来做研究的经历和感受。
S
那么我们今天的节目就到这里了。在这里我们也想告诉在网易云音乐上面订阅我们节目的朋友们,我们的节目还有官方网站 detasai.com 和一个微信公众号平台,请大家在微信上搜索德塔赛三个字的中文全拼,那么在官方网站和微信公众号上我们每周还会推送我们聊天内容的文字版。
A
那我们下期节目见。
S
再见。