今天将分享动脉瘤检测和分割的第二步二值化分类的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、数据分析与预处理
首先将训练中有效的颅内动脉瘤的数据提取出来,有一些数据是没有动脉瘤,不作为训练数据,此外标签值1是未破裂的动脉瘤,标签值2是治疗过或破裂的动脉瘤,挑战的目的是自动检测或分割未治疗,未破裂的动脉瘤(标签0与标签1)。因此,不需要检测已治疗的动脉瘤的方法。
统计所有可用数据的spacing大小和图像大小,平均值分别是(0.352,0.352,0.547),(556,556,132),血管肿瘤的boundingbox平均值是(11,11,7.3)像素大小,将原始图像和Mask图像统一缩放到到spacing是(0.3,0.3,0.3)分辨率大小。
针对非血管瘤区域,在整个图像上随机裁切(64,64,64)大小的区域出来,针对血管瘤区域,根据连通域分析Mask得到每个血管瘤的boundingbox,并在该区域内随机获取三维点坐标,并以此为中心裁切(64,64,64)大小的区域出来。再对裁切出来的图像进行(5,95)像素范围截断并以均值为0,方差为1的归一化处理。
最后将数据分成训练集,验证集和测试集,比例是80%,10%,10%大小。
二、二分类网络
网络主体采用的是VGG16的残差连接网络,损失函数采用的是二值交叉熵,学习率是0.001,dropout是0.5,迭代次数是20epochs,batchsize是12,优化器是AdamOptimizer。
三、网络训练和测试
训练损失结果和精度结果
验证集损失结果和精度结果
在测试数据上进行测试
混淆矩阵如下所示,只有8例非颅内血管瘤被分成是颅内血管瘤。具体指标参数如下所示。
850 | 8 |
0 | 441 |
ROC曲线是0.999176,曲线如下
其他评价指标
precision | recall | f1-score | support | |
0.0 | 1.00 | 0.99 | 1.00 | 858 |
1.0 | 0.98 | 1.00 | 0.99 | 441 |
avg / total | 0.99 | 0.99 | 0.99 | 1299 |