数据传输用了整整五十二个小时。
周六下午,最后一个压缩包落盘。林小禾发了条消息过来:全部到齐,两万一千六百零三例,无损。
周一早,陆远洲在七楼工作间打开电脑。
桌上摆着两份文件,一份是孙德志批的“ai影像联合超算中心”建设方案,另一份是信息科发来的超算节点配置清单:四块a100显卡,二百五十六g内存,本周刚调试完毕。
“用超算跑?”林小禾搬着椅子挤进来。
“两万例的数据量,你这台工作站跑到明年也跑不完。”
“也是。上次三百五十例跑了一整夜,两万例得跑到我退休。”
陆远洲把数据清洗的脚本发到超算节点上,开始第一轮预处理。
两个小时后,第一批报错出来了。
“什么情况?”林小禾凑过来看日志。
屏幕上密密麻麻的红色报错信息。陆远洲翻了几屏,找到了规律。
“中山医院1994到1997年那批老数据,ct设备型号太旧。重建矩阵只有256乘256,噪点水平比现在的机器高了三倍不止。”
林小禾拉出几例原始影像,打开一看,图像颗粒感重得像隔了层磨砂玻璃。
“常规降噪滤波器处理完之后,纹理特征全被抹平了。”她试了两种方案,“提不出有效的影像组学特征。”
“这批老数据有多少例?”
“四千二百例。占总量的百分之二十。”
不是小数目。扔掉太可惜,留着又跑不通。
“把马尔可夫随机场模块调出来。”陆远洲拉过键盘。
林小禾让开位置。
陆远洲打开那段在沪市论坛上展示过的补偿算法源码,开始改底层权重参数。
常规的马尔可夫随机场(mrf)模块是用来处理层厚衰减的。但本质上,它的数学框架可以推广到任何空间相关的噪声补偿问题包括老旧设备产生的高频噪点。
“你要把噪点当成一种空间相关的系统误差来建模?”林小禾在旁边看懂了思路。
“对。噪点不是随机的,不同像素之间有空间关联。mrf天然适合建模这种结构。”
他改了三组参数:邻域半径从3扩到5,能量函数里加了一项噪声方差的先验估计,迭代次数从50提到200。
修改完成。提交超算。
十五分钟后,第一批一百例老旧数据跑通了。
林小禾拉出处理后的影像和处理前对比。颗粒感消失了,但组织边界没有被模糊纹理细节完整保留。
“这也行?”她瞪大眼睛。
“试试提特征。”
影像组学特征提取模块跑了一遍。一百零七维特征全部正常输出,没有一个非数值(nan)。
“通了!”林小禾拍了一下桌子。
“全部四千二百例推上去跑。”
超算节点满负荷运转。四块a100同时开工,功耗拉满,机房里风扇的声音隔了两面墙都能听见。
数据清洗和特征提取花了整整一天半。
周三凌晨两点,陆远洲收到超算系统的自动推送邮件:预处理完成,有效样本两万零九百四十一例,特征维度一百零七维,缺失率0。03%。
他回了林小禾一条消息:开始训练。
周三早上七点,林小禾到工作间的时候,模型已经在跑了。
她看了眼进度条百分之十七。
“按这个速度,得跑到明天晚上。”
陆远洲从门诊回来的时候已经是下午四点。进工作间一看进度条百分之六十三。
周四上午十一点,训练完成。
林小禾的手悬在回车键上方,迟迟没按下去。
“老板,您来。”
陆远洲走过去,按下回车。
屏幕上弹出最终验证结果。
训练集auc值:0。92。
内部验证集auc值:0。89。
林小禾的椅子往后滑了半米。
“零点八九……”她的声音有点飘,“之前四中心才零点八五。”
“样本量从三百五十变成两万,本来就该有这个提升。”陆远洲盯着屏幕上那条roc(受试者工作特征)曲线。