575. RSNA 2023 Abdominal Trauma Detection | rsna-2023-abdominal-trauma-detection
感谢主办方举办如此精彩的比赛。遗憾的是,去年由于硬件设备不足,我未能参加类似比赛。但今年情况不同,我对最终取得的成果感到非常满意。
本次竞赛要求预测不同腹部器官的损伤严重程度。可用数据包括大型CT图像(DICOM格式)和部分补充的器官分割标注(NIFTI格式)。
在机器学习领域,这本质上是一个3D分割/分类问题,面临数据/标注不足以及严苛的评估指标挑战。
器官识别的语义分割部分相对直接(与后续的分类任务相比),可通过U-Net Bi-Conv-LSTM模型实现,该模型采用Effnet_v2_b0作为骨干网络,并使用CE-Dice-Focal复合损失函数。
为了提高效率,我们在96x256x256尺寸的图像块上训练语义分割模型,并使用同样尺寸但带48x256x256重叠区域的图像块预测完整图像(后续为节省时间和存储空间,移除了重叠区域)。
为了缓解过拟合(这个问题不太严重,尤其与分类任务相比),我们加入了几何增强技术,包括:ShiftScaleRotate、RandomBrightnessContrast、翻转、GridDistortion和ElasticTransform。
总体而言,约10%的体积用于肾脏、肝脏和脾脏,约20%用于肠道。
每张图像的平均Dice分数约为0.96。
训练时间约12小时。
基于分割掩码提取的图像块,我们训练两个模型:一个用于肾脏、肝脏和脾脏,另一个用于肠道。
来自mmaction的CSN模型被证明非常快速且准确。为了处理时间维度,我们尝试了多种方法,最终采用基础的插值方法(3D resize)将图像块转换为96x256x256分辨率。
为了对抗严重的过拟合(即使使用CSN模型,过拟合仍然严重),我们采用了强化的几何增强,包括ShiftScaleRotate、RandomBrightnessContrast以及4种不同类型的模糊处理。
所有fold的平均竞赛损失值为:肾脏、肝脏和脾脏为0.401,肠道为0.156。
训练时间:肾脏、肝脏和脾脏每个fold约4小时,肠道每个fold约8-10小时。
为了预测外渗情况,我们采用了分割模型。其核心思想很简单:如果语义分割模型预测出任何区域,则表明存在外渗,应在概率中体现。
为实现从语义分割到分类的转换,我们采用以下技巧:
伪代码实现:
cls_pred = np.mean(np.sort(np.ravel(sigmoid(mask)))[::-1][:top_n])
所有fold的平均对数损失值为:外渗为0.543,任意损伤为0.501。
训练时间:每个fold约4小时。
采用StratifiedGroupKFold(基于分类标签分层,按患者分组)进行4折交叉验证。
所有fold和所有组(肾脏、肝脏、脾脏、肠道、外渗、任意损伤)的平均对数损失值(即竞赛评估指标)为0.400。
在竞赛的最后两天,我们将肾脏、肝脏和脾脏模型的损失值从0.4优化到约0.38,整体损失从0.4降至0.39,但由于提交过程中的错误导致这些模型未能生效。优化方法很简单——增加批次大小。通常我们使用14的批次大小,但借助A100显卡可提升至24。
使用单张RTX A6000 Ada显卡,总训练时间(包括所有阶段的4个fold)约为80小时。
使用单张Tesla P100显卡,总提交时间约为8-9小时。
我们认为该方案仍有很大提升空间。然而,我们在竞赛结束前两天才提交第一个非示例或非静态预测的有效方案,这也影响了最终结果。
P.S. 未能实现0.39的模型确实令人遗憾 :)