今天将分享脊柱疾病智能诊断完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、Spinal Disease2020介绍
脊柱退化性疾病,如腰椎间盘突出等症状正呈现出年轻化的趋势,困扰着老年人群体和办公族,正确的预防和干预能够有效防止疾病的恶化。核磁(MRI)作为非侵入式检查手段,对软组织成像好,无辐射,对肌肉骨骼疾病的特异性和敏感度较高,适合对普通人群的常规检查,是预防脊柱退化性疾病的可靠检查手段。同时临床上,对脊柱退化性疾病的诊断的一致性有待提高,人工智能算法在临床流程中可以帮助提高诊断的一致性和可量化性,对量化评估针对脊柱退化性疾病的干预效果有着很高的价值。本次大赛将召集全球开发者利用人工智能技术探索高效准确的脊柱退化性疾病自动诊断,并积极推动相关技术的临床应用。
Spinal Disease2020的目标是通过人工智能算法自动分析核磁共振影像来检测和分类脊柱的退行性改变,包括正常椎体、退变椎体、正常椎间盘、椎间盘突出、膨出等特征。
二、Spinal Disease2020任务
基于MRI图像定位椎体和椎间盘的位置和相应分类。
三、Spinal Disease2020数据集
MRI数据比赛中将提供脊柱的核磁影像包括T1和T2 矢状面影像,以及T2 轴状位影像(FSE/TSE),如下图所示。初赛阶段将提供150份可下载的标注训练数据,以及50份可供下载的测试数据。复赛阶段将提供250份标注的训练数据,和100份测试数据,复赛阶段的数据不可下载。

数据标注:椎体和椎间盘的代表点会在T2矢状位的中间帧中标注出来,标注将从胸12(T12)腰1(L1)间的椎间盘开始到腰5(L5)骶1(S1)间的椎间盘结束,其中椎体的段位和椎间盘的段位将分别给出,如L1,L2,等。椎体将分成2类:正常和退行性病变,椎间盘分成5类:正常,膨出,突出,脱出,椎体内疝出。标注样例如下图。

病变编码对应表如下所示:

标注数据的JSON格式样例

评估指标:预测结果包含——中间帧上的关键点的坐标,以及相应的分类及概率值。预测的坐标和标注坐标距离小于6mm的点如果分类正确将被计数为正确TP,如果分类错误将被计算为误报FP。如果预测的点不落在任何标注点的6mm半径内也将被计数为FP。标注点没有被任何预测点正确命中的被计数为漏报FN。如果有多个预测点命中的最近的一个计数为TP,其他的即不算作TP也不算作FP。按照通常的精度precision(P/(TP+FP)和召回recall(TP/(TP+FN))的定义计算每个类别点的平均精度AP。最后所用类别点的平均AP(MAP)将被作为最终的排名指标。
四、技术路线
一、数据预处理
1.1、由于标注数据里有studyUid,seriesUid,instanceUid这三个tag信息,所以解析标注数据并根据这三个tag信息从图像数据中找到相匹配的序列图像,此外标注的关键点坐标是再序列图像中的中间位置进行标注的,而中间帧相邻图像的关键点的位置和特性是非常相似的,选取中间帧相邻的图像,通过通道叠加的方式来增加多样性。效果如下所示。

1.2、生成关键点高斯热力图
关键点坐标按照图像比例缩放到512x512的尺度,然后将11个关键点坐标生成11个通道的高斯热力图,高斯sigma参数是5。

1.3、生成yolo目标检测标注数据
标注数据只有每个位置的中心点坐标,缺少boundingbox的宽和高,所以这里通过不同关键点坐标来生成边界框的宽和高,其中椎体根据与其相邻的两个椎间盘的坐标的距离作为边界框的宽和高,椎间盘根据与其相邻最近的椎体的坐标的距离作为边界框的宽和高,然后将中心点坐标,宽和高按照图像大小比例缩放到0-1范围。如下所示。

1.4、生成分类ROI图像
为了截图椎体和椎间盘ROI区域图像,其中椎体根据与其相邻的两个椎间盘的坐标的距离作为边界框的宽和高和此椎体的中心点从图像上截取ROI图像,椎间盘根据与其相邻最近的椎体的坐标的距离作为边界框的宽和高和此椎间盘中心点从图像上截取ROI图像。
椎体ROI图像如下所示。

椎间盘ROI图像如下所示。

二、椎体和椎间盘关键点检测
2.1、基于热力图回归检测关键点
1、搭建VNet2d,使用AdamW优化器,学习率是0.001,batchsize是4,epoch是1000,损失函数采用focal loss。
2、训练结果和验证结果


3、验证集关键点检测结果
红点是金标准结果,蓝点是检测结果,MAE误差平均值:18.6。





2.2、基于yolov5检测关键点
1、搭建YoloV5检测网络,使用SGD优化器,学习率是0.001,batchsize是64,epoch是1000,损失函数采用交叉熵和iou损失。
2、训练结果和验证结果






3、验证集关键点检测结果
红点是金标准结果,蓝点是检测结果,MAE误差平均值:4.3 。




三、椎体和椎间盘疾病分类
3.1、椎体疾病分类
1、将图像缩放到固定大小48x48,然后采用均值为0,方差为1的方式进行归一化处理,再将数据分成训练集和验证集。
2、搭建ResNet2d网络,使用AdamW优化器,学习率是0.001,batchsize是64,epoch是500,损失函数采用交叉熵。
3、训练结果和验证结果


4、验证集分类结果



precision recall f1-score support
0.0 0.59 0.30 0.40 43
1.0 0.83 0.94 0.88 157
accuracy 0.81 200
macro avg 0.71 0.62 0.64 200
weighted avg 0.78 0.81 0.78 200
3.2、椎间盘疾病分类
1、将图像缩放到固定大小48x48,然后采用均值为0,方差为1的方式进行归一化处理,再将数据分成训练集和验证集。
2、搭建ResNet2d网络,使用AdamW优化器,学习率是0.001,batchsize是64,epoch是500,损失函数采用交叉熵。
3、训练结果和验证结果


4、验证集分类结果



precision recall f1-score support
0.0 0.69 0.78 0.73 85
1.0 0.33 0.68 0.44 50
2.0 0.00 0.00 0.00 49
3.0 0.00 0.00 0.00 5
4.0 0.00 0.00 0.00 11
accuracy 0.50 200
macro avg 0.20 0.29 0.23 200
weighted avg 0.37 0.50 0.42 200
四、测试集椎体和椎间盘关键点检测和病变分类









点击阅读原文可以访问参考项目,如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。