B-spine: Learning B-spline Curve Representation for Robust and Interpretable Spinal Curvature Estimation
B-spine: Learning B-spline Curve Representation for Robust and Interpretable Spinal Curvature Estimation
B-spine(AAAI'24):基于B样条曲线预测,使用深度学习进行曲线参数预测CT图像中的脊柱曲线。
代码仓库
动机
基于B样条的脊柱曲线拟合,通过网络预测曲线参数以及Cobb角计算,使得整个过程不依赖于关键点标注。
方法
基本流程:脊柱区域分割\(\rightarrow\)脊柱曲线拟合\(\rightarrow\)Cobb角计算

分割
使用轻量化的SSformer进行分割。得到的初步掩码较为粗糙,因此提出SegRefine模块进行优化,即训练一个CycleGAN实现粗糙掩码和精细掩码的转换。
B样条中心线预测
通过ResNet预测B样条曲线参数,设置:degree=3, 控制点数量=10,节点数量=14,节点向量=\(\{0, 0, 0, 0, u_4, u_5, \cdots, u_9, 1, 1, 1, 1\}\)。故而网络需要预测的曲线参数包括10个控制点坐标\(P\)与6个节点\(U\)。
直接预测曲线参数可能会导致结果不稳定,因此先预测34个点,通过MSE监督:
其中,\(C_i\)表示对应曲线上的第\(i\)个点。
随后,再通过MLP以34个点坐标为输入预测B样条曲线的参数,通过MSE监督:
得到曲线表示后,再从曲线上采样34个点,并通过MSE监督:
总损失为上述三者加权求和。
Cobb角估计
参照已有方法,通过曲线曲率分析(Curve Slop Analysis)计算Cobb角。
-
均匀采样17个点,记作\(\{ S_i \}\),对应12胸椎和5腰椎
-
假定脊柱沿\(y\)轴延伸(span along the y direction),根据相邻点\(S'_i\)计算曲率:(此处曲率是有符号的,所以取相邻点时应该在同个方向上取)
注:此处的坐标轴方向描述有些歧义,个人复现的时候觉得比较可能的配置为:站立姿态图像的高方向(竖直方向)为x轴,宽方向(水平方向)为y轴。
- 根据最大曲率与最小曲率计算\({Cobb}_{MT}\):
- 根据最大曲率点和最小曲率点所处位置,在这段区间外再以类似的方式计算PT或TL角,记作:
- 通过一个4层MLP,以34个采样点为输入,对\({Cobb}^s\)进行细化,得到\({Cobb}^r = \{ {Cobb}^r_{MT}, {Cobb}^r_{PT}, {Cobb}^r_{TL} \}\)
实验
数据集
- AASCE2019
- JLU-CJUH(自行收集,未见公开)
结果
仅记录本文方法的MAE,其余指标见原文。
- AASCE2019:平均 4.22,MT 3.73,PT 4.13,TL 4.81
- JLU-CJUH:平均 4.32,MT 4.17,PT 4.59,TL 4.20
总结
本文方法通过预测B样条曲线参数的方式估计Cobb角,较有新意。模型采用了多个细化(refine)模块对结果进行优化,虽然形式上不是非常优雅,但应该能一定程度上保证结果的稳定性。目前来看,主要有以下可改进的点:
- 模型引入了一些超参,如B样条曲线的参数设置、采样点个数,因此面向不同数据集或场景可能需要手动调整。
- 由于代码未公开,所以不太确定B样条曲线的基函数是如何计算的。如果采用递归式的方式计算,可能会有额外的耗时。当然这个时间消耗在B样条曲线参数较少时应该不大,但也是一个效率上的潜在不稳定因素。
- 文章只用了B样条曲线进行实验,如果采用不同的曲线表示方法,也许能够获得其他一些性质。

浙公网安备 33010602011771号