今天将分享骨盆的二值分割的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、图像分析与预处理
(1)、1184例CT原始数据和标注数据及训练标签文件可以在原文链接中获取得到。
(2)、采用简单粗暴的方式来处理数据,由于训练的显卡是1080ti的11G显存的,所以首先将训练原始图像和标注图像进行图像大小缩放到固定大小,具体是128x128x96,如果你的显卡显存足够大的话,可以将该大小改的大一点,如果显存小的话,可以将该大小改小一点。
(3)、对缩放后的原始图像进行窗宽窗位设置,将0到800之间的Hu值进行保留,其他的范围进行截断处理。
(4)、然后在采用均值为0,方差为1的方式对原始图像进行归一化处理。
(5)、为了防止模型过拟合,还增加了数据增强的处理过程,采用旋转,平移,翻转等方法对图像和标注数据同时进行扩充处理,这里扩充了10倍。
二、分割网络
(1)、搭建VNet3d模型,网络输入大小是(128,128,96)。具体实现可以参考Tensorflow入门教程(十九)——基于VNet的前列腺分割案例。
(2)、loss采用的是多分类的focalloss函数。具体实现可以参考Tensorflow入门教程(三十五)——常用多类图像分割损失函数
(3)、训练损失函数和精度结果如下所示。
三、测试数据结果
输入图像统一缩放到(128,128,96),设置窗宽窗位(0,800),输入到网络中预测,最后将结果缩放到原始图像大小。下面是10例测试数据分割结果,左边是金标准结果,右边是预测结果。可以看到基本上分割的都是正确的,除了第五例数据左右大盆骨分错了,还有就是分割结果与金标准相比,颗粒感很强,这是由于降采样过多导致的,下一篇会采用级联网络来解决该问题。