今天将分享NODE21肺结节检测和生成挑战赛中肺结节检测的完整实现过程,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、结节检测技术路线
由于数据中存在结节阳性和阴性数据,所以第一步需要进行结节阳性和阴性分类,第二步针对阳性结节数据再检测结节边界框。
二、肺结节二分类
1、数据处理,读取csv文件,将标签是1和0的图像分别存储到1和0的分类指定目录下;
2、对图像进行线性插值缩放:将图像大小统一到512x512,并采用均值为0,方差为1的方式对图像进行归一化;
3、将数据分成训练集,验证集和测试集,分配比例是8:1:1,分析发现训练集数据中正负样本比例大概是1:3,这里需要对正样本训练数据进行2倍扩充处理。
4、网络采用的是VGG16网络结构,损失函数是交叉熵,学习率是0.001,droupout是0.5,epoch是30,batchsize是16。
5、训练结果
训练损失函数
训练精度函数
验证损失函数
验证精度函数
6、测试集结果
测试数据混淆矩阵
ROC曲线及ROC数值
分类指标
precision recall f1-score support
0.0 0.97 0.99 0.98 381
1.0 0.95 0.90 0.92 109
avg/total 0.97 0.97 0.97 490
三、肺结节二类分割
1、数据处理,读取csv文件,只将标签是1的数据读取,通过肺结节框绘制对应mask,同时如果一张图像上有多个肺结节,将多个肺结节框绘制在一个mask上。
2、对图像和mask进行插值缩放:将图像和mask大小统一到512x512,采用均值为0,方差为1的方式对图像进行归一化;
3、将分类数据中对应训练集,验证集和测试集是标签为1的数据,做为二类分割所对应的训练集,验证集和测试集数据。
4、网络采用的是VNet2d网络结构,损失是二值dice,学习率是0.001,droupout是0.5,epoch是20,batchsize是6。
5、训练结果
训练损失函数
训练精度函数
四、测试集结果
原始图像,金标准结果(红色框)和预测结果(绿色框)