0 学习背景
有幸参与了DataWhale的AI视觉夏令营,沉浸式全流程体验AI比赛,比赛题目是:脑PET图像分析和疾病预测挑战赛,这里给出链接:https://challenge.xfyun.cn/topic/info?type=pet-2023&option=wdtd&ch=vWxQGFU
1 套件代码学习
代码太长,这里就不贴出来了,详情看:基于PaddleClas套件的脑PET图像分析和疾病预测挑战赛
这次的PaddlePaddle套件的思路是:先将3维的nii文件切片为2D图像,然后重新划分训练集和验证集,大佬给出的比例是8:2,这也是最常使用的比例。然后通过一系列的transform操作进行数据增强,比如:转换为rgb、随机裁剪、随机反转、图像自动增强、随机擦除、图像归一化以及批次预处理操作等等。训练使用的网络是PPHGNet_tiny_ssld
,然后通过yaml文件中的配置开始训练。训练完成后对测试集进行推理,这里采用的策略是对nii文件的每张图都进行推理,然后对单张推理的结果(NC或MCI)进行计数,最后取数量多的结果记为最终结果,推理完成保存为比赛官方要求的格式即可提交结果。
通过这次直播,学习了使用PaddlePaddle提供的套件调试代码,不得不说真的很方便,几乎可以避免大多数莫名其妙的Bug出现。
2 提升
分享嘉宾提到这次的效果也并不是特别好,但其实验证集的精度都能达到98%以上了,猜测可能的原因是官方提供的训练集和测试集的分布差距太大,这就导致训练好的模型对测试集的推理效果很差。
2.1 采用3维卷积
分享嘉宾提到最好还是用3D卷积神经网络来进行训练,同时提供了一个参考模型:[基于飞桨实现肺部 CT 扫描的 3D 图像分类](我发现了一篇高质量的实训项目,使用免费算力即可一键运行,还能额外获取8小时免费GPU运行时长,快来Fork一下体验吧。 基于飞桨实现肺部 CT 扫描的 3D 图像分类:https://aistudio.baidu.com/aistudio/projectdetail/2324600?sUid=2270692&shared=1&ts=1690533097733)
有空可以尝试一下。
2.2 对切片好的数据再进行额外的处理
此外,3维的nii数据切片成jpg文件后同一个数据差距太多,我觉得还需要进行额外的处理,比如删掉一些没意义的数据,以及对切片好的数据进行相应的裁剪,裁剪为只有中间有效脑部区域。
2.3 修改判定条件
这里我自己有一些想法,我认为在推理过程中,只要测试集中的nii样本有一个通道被判定为mci,那么这个样本就应该被判断为mci。
具体操作就是,将第九部分:对每个类别的预测结果进行投票中的代码
reslut_label = 'NC' if nc_count>= mci_count else 'MCI'
修改为reslut_label = 'NC' if nc_count !=0 else 'MCI'
但个人觉得稍微有些牵强,不过我尝试了一下确实分数有很大的进步,来到了0.74839。