这篇文章和《Widening the Focus: Biomedical Image Segmentation Challenges and the Underestimated Role of Patch Sampling and Inference Strategies》是MICCAI 2020中我目前觉得比较有趣的两篇,和我的工作也有一些相似的地方。《Widening the Focus》我之后会再单独介绍。
《Learning 3D Features with 2D CNNs via Surface Projection for CT Volume Segmentation》这篇文章首先也是强调了医学图像分割里一个很长时间难以被解决的问题,也就是如何用有限的计算能力获取医学图像里的三维特征表达。由于医学图像里无论是CT还是MRI,本身都是非常大的三维矩阵数据,很难用现在主流的显卡一次处理,因此目前很多的分割方法还是在用2D卷积提取特征。这些方法可以被简单分为2D slice,2.5D和2D multiple views。其中2D slice方法就是对每个slice单独分割,然后借用CRF或者RNN去学习一些slice间的关系;2.5D则是一种委曲求全的做法,将多个相邻切片作为不同的通道输入到2D CNN中来学习特征;2D multiple views不仅考虑了slice-select方向的切片,还将三维数据从y轴方向和x轴方向做切割,以此学习不同角度的特征。但是,这些方法由于本质上还是用的2D卷积,因此是无法考虑到完整的三维体数据的,进而就会限制分割的性能。
在这篇文章里,作者们针对这一问题提出了Surface Projection这一方法,通过将原先笛卡尔坐标系的三维数据转换到球坐标系上来保证使用2D CNN也能获取到一些结构信息。具体的步骤是:
1. 用2D网络粗分割,以便后来确定球坐标系的原点。
2. 使用不同半径构造出不同大小的球面,然后用球坐标系中的theta和phi两个参数构建一个360*180的矩阵,使用其对应笛卡尔坐标系中的体素值填充该矩阵。
3. 使用另一个2D CNN对这个360*180的矩阵每一个元素预测其到segmentation mask边缘的距离
4. 根据距离确定mask边缘的位置
5. 使用EM算法将一个样本的所有球面的预测结果融合
实际上idea看上去简单,理解起来还是需要花些时间的,无论是我一开始看还是之后组会给其他人介绍都引起了误解。这里我们引用一下笛卡尔坐标系和球坐标系之间转换的公式:
这部分需要这样理解:对于我们取得的球面来说,其中theta定义域为[0,360),phi定义域为[0,180),那么对于S_n这个矩阵来收,首先我们要填充[0,0]这个位置的元素,就需要令theta=0,phi=0,代入等式右边,得到其在笛卡尔坐标系中的(x,y,z)三维坐标,然后赋值为(x,y,z)对应的体素强度值。而预测的时候,我们需要对每一个元素预测其与segmentation mask边界的距离。因此这实际上已经把分割从一个像素级分类问题变成了回归问题了。请一定注意不要认为上述方程是在将笛卡尔坐标系中的每一个像素映射到球坐标系中,相反上述公式是在为球坐标系中某些点寻找其在笛卡尔坐标系中的对应。
该方法在最后的实验中取得了非常不错的结果,甚至能在相同显存消耗下超越3D CNN。我邮件联系了作者,对方说在他们的期刊论文发表后会公开代码。