本期分享的嘉宾是来自耶鲁大学图像处理分析实验室(IPAG)的博士生李霄霄,她师从 Dr. James Duncan 教授,目前研究深度学习算法用于医学影像的分析。5 篇论文录入医学影像学和神经科学领域顶级会议(均为一作),获得 Best Abstract AWard , Student Travel Award , IPMI Scholarship 等奖项。曾在日本索尼,日本国立信息学研究所,美国西门子医疗事业部, JPM AI Research 从事深度学习算法的研发。
就医学影像来说,GNN 的应用非常的广泛,有数十种,所以今天我们就通过举例的方式来为大家介绍。
为什么要用 GNN 来研究医学影像?因为很多医学影像可以用天然的图结构来建模。用于血管的分割、手术图像的分析、多模态融合、 疾病预测、大脑的分割、大脑连接的一些研究。今天分享的主要内容根据上面提到的应用的文章,和大家做一些讨论。
首先来看一篇图像分割的工作:
Interactive 3D Segmentation Editing and Refinement via Gated Graph Neural Networks
这篇文章提出的图卷积模型并没有从头去做图像分割,而是在粗分割结果的基础上进行改善。这个工作的输入是粗糙分割好的图片,边缘不是那么光滑,会有一些多边形的结构。该工作的目的是想通过图学习知道,当得到这些粗糙的多边形结构之后,如何做一些点的运动的预测,使得最后的分割图像更加光滑,或者是达到更好的分割效果。该文章表示,通过他们提出的这种方法,在 IOU 的测量上,效果有高达 10% 的提升。
他们对分割图像进行建模的方法是:首先会有一个比较粗糙的分割结果,粗糙分割结果的轮廓是一个多边形,多边形的测量是对于每一个 3D 图像的slice计算出来的。粗糙的分割结果是用一些现有的算法得到的,本文提出的 GNN 的侧重点还是在后期的改善。建模过程如下图所示:
绿色框将多边形的每一个顶点作为图上的节点。然后有三种连接关系,绿色箭头代表连接紧密的两个节点之间的连接;蓝色箭头表示相距较远的节点的连接;橙色箭头表示相邻的两个 slice 之间的比较近的两个节点的连接。
另外,在该研究中的图是有向图,然后从上图可以看到邻接矩阵分为了输入和输出两部分,输入表示指向该节点,输出表示从该节点指向其他节点。图中每个节点的特征,是用 ResNet-50 得到的。最后,将这样的图结构输入到 使用GRU的gated GNN 中。输出模型有两部分,一个是预测点是否到了边上,另外一个就是该点要移动到下一个点的方向。图中的movement prediction 部分是一个 M*M 的矩阵,意思是,以该点为中心的移动范围。
Linking Convolutional Neural Networks with Graph Convolutional Networks: Application in Pulmonary Artery-Vein Separation
这篇工作的任务是从肺部的血管 CT 图像中分出动脉和静脉。首先输入的图是使用了一些传统的血管分割以及枝干提取方式来得到所有的节点,边是只考虑了一阶邻居的连接。所以这是一个具有非常多节点又非常稀疏的图。那他们是如何定义图中节点的特征的呢?他们提取了每个顶点包裹着的 3D 小patch,通过提取 patch 的特征。
他们工作的一个特色是想将 CNN 和 GNN 端对端的连接起来,那这就涉及到输入图的时候要占用很大的内存。
如下图所示,右边的网络就是提取节点特征的网络。涉及到的 GCN 的运算也是比较传统的 GCN 的运算。
下图展示了两个结果,左边是比较好的,右边是比较差的。我想强调的一点是这篇文章比较了三个模型的表现,一个是 3D 的CNN ,一个是 CNN-GCN 模型,最后还有 CNN-GCNt 模型,这个 t 代表的是这个 CNN 模型是用预训练的模型 transform learning 过来的,而 CNN-GCNt 的效果最好。
手术介入
Graph Convolutional Nets for Tool Presence Detection in Surgical Videos
这篇工作是研究各种手术器材的检测。他们认为,对于这些外科视频来说,标签的帧是很少的,并且这样的视频也很短,很多传统的目标检测只考虑了单个帧的信息,所以他们想用 GCN 来把 spatial 和 temporal 的信息同时考虑进来。因为标记的帧的长度很短,使用 RNN 很难把时域上的依赖性连接起来,所以就使用了 GCN 。这篇文章是在两个大型公开数据集上进行研究的。
我们来看一下它大致的框架:
如上图所示,将几个连续帧的视频输入到 Inflated 3D DenseNet-121 中,文章对 DenseNet 就行了改良,详细内容可以查看原文。
具体的一些计算过程如下:
其中提到的 Temporal Pooling 其实和我们平常使用的 Pooling 核心是没有两样的,只不过是因为输入的graph 是通过时间上的一些帧构成的,所以文章将它叫做 temporal pooling。
Learning Deformable Point Set Registration with Regularized Dynamic Graph CNNs for Large Lung Motion in COPD Patients
传统的图像配准都是在图像域中去做的,这篇文章就提出这样做会有很大的计算消耗和很长的计算时间。图像表面会有一些特征点,可以看作是两个点集之间的 registration。所以可以使用 GNN 来做。
registration 一般来说是计算得到一个空间转换,将两张图或者两组特征点 align 起来。像我自己做得比较多的关于大脑图像的研究中,registration 通常是第一步。如果得到这些点集,我们可以通过点对点的 registration 来计算转换矩阵。
这篇文章的主要贡献在于上图中 DGCNN 的模块。对应该模块的输入是两组点集,蓝色框是固定点集,橙色的框是移动点集。
简单的看一下运算需要的输入:
多模态融合研究的是如何将不同模态的医学影像利用图卷积结合在一起分析。
Interpretable Multimodality Embedding of Cerebral Cortex Using Attention Graph Network for Identifying Bipolar Disorder
这是我们的一个工作。是将大脑的结构核磁共振成像(sMRI)和功能核磁共振成像(fMRI)信息结合起来,做双相情感障碍(bipolar disorder)和正常人的分类。在我们这个工作中,是根据功能性MRI在不同脑区之间的相关性来构图的。定义每个大脑分区为图上的一个顶点,它们之间的相关性系数作为边的权重。结合 sMRI 和 fMRI 的方法是把它们堆叠到每个节点的特征上。
在该工作中另一点比较有意思的是采用了带权重的EGAT(weighted graph attention neural network),如上图中的注意力层,因为我们想要了解哪个脑功能分区对双相情感障碍的影响更大。池化方法是采用的是 DIFFPOOL。
上图左边是关于注意力 map 和节点特征的可视化结果。右边是一些参数和对比实验设计的结果,总的来说将 fMRI 和 sMRI 结合起来的结果是最好的。
Disease prediction using graph convolutional networks: Application to Autism Spectrum Disorder and Alzheimer’s disease
这是早期将 GCN 应用到医学图像领域的工作之一,主要的工作是将人当作图中的节点,根据人的一些表型数据,比如像基因、性别、年龄等,利用它们的相似性来构造边。本文利用大脑图像提取出来的特征向量作为每个节点的特征表示。这是个半监督学习的问题,图中的一部分节点是有标签的(有无疾病),还有一部分节点没有标签,主要任务就是预测没有标签的这部分人有无疾病。
上面这篇工作在这里就不细讲了,来看一下另一篇相关工作:
InceptionGCN: Receptive Field Aware Graph Convolutional Network for Disease Prediction
这篇工作和上一篇一样,也是将人看作图中的节点,用半监督学习方式预测没有标签的那部分人有无疾病。这篇文章值得一提的是它在算法上的创新,提出了 InceptionGCN,通常我们在做图卷积的时候考虑的 K-hop 邻域都是固定的,比如 graphsage 只考虑 one-hop 邻域。而在这篇文章提出把不同感受野卷积核合在一起。比如下图中的第一个虚线框中,k1到 ks,代表着这些卷积核考虑了不同维度的感受野,然后将它们合在一起。然后通过一个聚合器,该文章的聚合器有两种尝试,第一个是 connection 将所有的卷积核得到的特征 Concat 起来,另外一种是最大池化。
比较有趣的是,他们在实验中发现了比较矛盾的结论。他们在 TAPOLE 和 ABIDE 两个数据集上进行了尝试,发现在 TAPOLE 数据集上 Inception GCN 的结果是优于基准模型的,但是在 ABIDE 数据集上,结果却不如基准模型。
于是他们通过 TSNE 将输入数据的特征可视化出来,发现 TADPOLE 数据集的数据可视化出来,不同节点的特征更加可分。但是 ABIDE 则不那么可分。
那么是不是 InceptionGCN 对于这种节点特征不是那么现行可分的图不适用呢?所以他们又做了一些仿真工作。如下图所示:
最左边这个图是比较好的情况,不同组之间的节点特征区分明显。中间这个图则是不太好区分的。
结果显示,InceptionGCN 确实在第二种情况下,效果不太好。所以这是一个很有趣的探究,当我们选择使用模型的时候,要首先对数据进行一定的考量,选择合适的模型。
大型医学图像主要还是组织学医学图像,通常一张组织学图像至少有几个 G 的大小。传统的基于 GNN 的算法不能把整张图作为输入,所以大家会用 patch-based 的方法来分析,但是这很容易忽略图像空间中的联系。这也是使用 GCN 来分析大型图像的初衷。
Cgc-net: Cell graph convolutional network for grading of colorectal cancer histology images.
要讲的第一份工作是来自 19年 CVPR,使用 GCN 来对组织学图像进行分类。
它的构图方式是用 detection 的方式来得到每个节点。
这是这篇工作整体的框架。大家对细节感兴趣的话,可以看看原文。
另一篇GNN 应用于大型医学图像分析的工作是:
Weakly-and Semi-supervised Graph CNN for Identifying Basal Cell Carcinoma on Pathological Images
任务是病理检测,检测病理影像中的基底细胞癌。我们一起看一下他们做的一些事情
最上面一行是 ground truth,就是想检测一些病理模式。主要思想是想通过 patch-based 的分析方法加 GNN得到相似的检测。网络框架如下图:
先将图像的小 patch 的特征输入到预训练好的 CNN 模型中,得到每个 patch 的向量表示。得到patch 的向量表征之后有两个设置,一个是弱监督设置,一个是半监督设置。
讲的都比较简单,大家可以看文章的具体内容。
Graph convolutions on spectral embeddings for cortical surface parcellation.
这篇工作跟我们直接应用已有的GNN不一样,他们提出了谱域的卷积。如下图所示:
输入的图经过几个谱域卷积层 之后,得到了大脑的分割结果。右边的小图是他们的方法和其他的方法结果的比较。可以看到,他们的分割方法可以保留很多的细节,并且是相对比较光滑的。
这个谱域卷积有什么特别之处呢?文中提到了传统的谱嵌入只能在左边这种正交的栅格空间中实现,如果想要实现在右边这种谱嵌入,就要把所有的基向量转换到同样的参考坐标中。最后的谱卷积公式就是 z。
看下图会更加直观的理解谱卷积是如何操作的。
这是最后一个应用,这是我自己的一个工作,研究如何用 GNN 做脑连接的一些分析。这个工作有两个目标,一个是如何对不同的脑连接进行分类,一般是病人和非病人。另外还想探究,是怎样的脑连接子网络和疾病有关系。
整体的框架分为两部分,第一部分就是构造脑网络,并且对脑网络进行分类。构图的方法是将大脑分为一些区间,每个区间作为一个节点,节点之间的边是每个大脑区间之间的 fMRI 时间信号的相关性构造的。通过手工提取的方式提取了一些节点的特征。在完成第一步图分类后,第二部,我们想解释哪些子图/节点是具有 predition power的。于是我们讲划分好的子图在已训练好的GNN中去测试,找到对分类重要的子图/节点。
另外一个脑连接的工作是:
Graph Embedding Using Infomax for ASD Classification and Brain Functional Difference Detection
这个工作结合了最近提出的 deep graph infomax 的方法去加强卷积层之后的embedding部分。
除了利用从数据中真实构造好的图进行图分类以外,我们有另一个分支去获得更好的节点特征嵌入效果。在这个分支中,我们构造了一些假的图,然后将真图和假图的一些表示同时放入 discriminator 中区分这些表示来自真图还是假图。
这里给出了 148 大脑区域中的 24个大脑区域 embedding的可视化结果,患者是红色,正常人是绿色,加上 graph infomax 的损失之后,正常人和患者的有些大脑区域更加线性可分。
在大脑的 148个区域中,我们发现了 31个比较线性可分的大脑区间,在上图中的标记为红色。
医学图像中存在着图结构,所以可以使用 GNN 完成上面提到的这些任务。通过阅读这些paper,我的启发是根据医学影像构造图结构是很重要的,不同的构造方法对实验的结果有很大的影响。另外一点是如何设计合适的 GNN 来做特定的任务。
回放链接:
https://m.qlchat.com/topic/details?topicId=2000007157083237&sourceNo=&fromOld=