工作总结
发表时间:2026-04-162026年图像分割技术一线工作盘点。
直接说事。去年一年,我主要就干了六件事:统一标注规矩、修一个离线推理崩溃的坑、改模型验收流程、给服务器清灰锁环境、带三个人学会自己找问题、以及踩了一个公开数据集的大坑。下面一条条交代清楚,好的坏的都摆出来。
一、标注规范:从三页到十七页,又砍回九页
年初最头疼的事:不同标注员对肿瘤边界的判断差三五个像素,模型推上去全是毛刺。原来的标注规范就三页纸,写了“尽可能精确”“分叉处注意归属”这种正确的废话。我花了三周时间重写,扩到十七页。每一条都配正反例截图。举个例子:肝脏血管分割里,分叉处的主干和分支怎么界定?我写成“夹角小于30度且管径比值大于1:2,分支并入主干;否则单独标记”。就这一条,让新来的三个标注员首月一致性从68%拉到82%。
但做过头了。规范太细,标注员翻文档的时间比画图还长,速度直接掉了一半。年中开复盘会,有个小姑娘直接说:“李工,你那第十七页的‘脾门区副脾识别规则’我入职半年一次没用过。”我一听,对。于是大刀砍掉那些一年用不上两次的边缘条款,改成两层结构:第一层“核心必守”六页纸,新人入职前三天必须背熟;第二层“扩展参考”三页纸,遇到特殊情况再翻。现在回头看,规范不是越厚越好,得让执行的人自己知道哪条能救命,哪条只是锦上添花。速度最后恢复了九成,一致性稳定在80%上下。
二、一次离线推理崩溃的完整排查过程
七月份的事。某医院PACS系统升级后,我们部署的肝脏肿瘤分割服务每天凌晨定时跑批处理,连续三天崩溃。日志只甩一句“CUDA out of memory”,但监控显示显存峰值才用到70%。我带着小张先怀疑驱动版本——从470升到525,没用。再怀疑PyTorch和cuDNN的兼容性——换了三个镜像,还是崩。折腾了一天半,日志里还是那句没头没尾的话。
第二天下午,我让小张把数据加载器的每一步尺寸打出来。结果发现:图像原始尺寸1024x1024,加载器里有个隐蔽的硬编码——半年前做压力测试时我随手写了个resize = 512,忘了删。但问题没这么简单:升级后的图像spacing变了,从0.6mm变成了0.8mm,我们的重采样逻辑按目标spacing算缩放因子,导致实际送进网络的尺寸变成了1536x1536。显存没爆是因为分批加载,爆在了中间特征图的拼接操作上——那个操作把所有batch的特征叠一起,瞬间翻倍。
怎么修的?两处改动。第一,删掉硬编码512,改成从配置文件读默认值1024。第二,动态重采样加了保护:任何单维缩放因子小于0.5或大于2.0就报警并跳过该序列。从接到报修到彻底修好用了两天,其中一天半在翻代码。教训不说了,说多了丢人——反正现在我要求所有临时测试参数必须标# TODO(expired_date),过期没删的自动发邮件通报。
三、质量验收:mIoU高不一定管用 (WwW.722331.COm 教师资源网)
以前验收模型就看mIoU。今年上半年有个模型在验证集上mIoU刷到0.89,上线后对介入手术室的数据崩到0.6。为什么?介入手术室用的是平扫CT,软组织对比度低,而我们训练集里90%是增强CT。模型学到的是“高对比度下的边缘”,不是真正的器官边界。
这之后我定了个新规矩:每次验收前,先用待测模型的特征提取层输出训练一个二分类器,区分训练集和验收集。如果分类器AUC超过0.7,说明模型很可能过拟合到了训练集的“风格”而非“内容”,这时候mIoU再高也不予通过。这个阈值怎么来的?我们试过0.65、0.7、0.75,最后发现0.7能拦住所有上线后崩掉的模型,同时不会误伤好的——实际测了八个版本,AUC<0.7的五个上线都没出问题,AUC>0.7的三个有两个崩了,另一个虽然没崩但边缘质量明显差。
验收流程现在强制三关。第一关静态指标:mIoU、Dice、HD95,每个指标都有硬下限。第二关对抗验证:AUC>0.7直接打回,不废话。第三关抽样盲评:每次抽50例,五个人打分——两名放射科医生、两名算法工程师、一名科室主任。第三关最费时,但最有价值。今年七月医生在盲评时指出胰腺尾部总是多出一块,我们回去查训练数据,发现十几例的胰腺尾部脂肪间隙被标注员误标为胰腺实质。修正后模型Dice从0.78涨到0.84。这50例盲评花了两天时间,值了。
四、设备维护:不止是清灰,是锁死环境
那台T4训练服务器用了两年多,风扇噪音越来越大,温度动不动上85度。我让团队里的小赵拆开看看,他拍了张照片发群里——散热鳍片被灰尘堵得像棉被。两个人花了一下午,拆了六颗螺丝、用压缩空气吹、换了导热垫、顺便把电源风扇也清了。装回去后温度降了15度。
趁这个机会,我把整个训练环境彻底锁死。以前“pip install”随缘,有人用opencv4.5,有人用4.8,同一个后处理脚本有的跑出多边形、有的跑出掩码。现在强制用Docker,基础镜像tag精确到cuda:11.7.1-cudnn8-devel-ubuntu20.04,所有依赖写死版本号。每周自动rebuild一次,跑回归测试——检测分割结果和上周的差异,像素级差异超过0.1%就报警。现在新来的同事拉代码、build镜像、跑通训练,半小时搞定,以前要折腾两天。
五、带团队:从“我调参”到“他自己定位问题”
年初团队里三个年轻工程师,遇到分割结果边缘毛刺多,第一反应就是换更大的模型、加更多的数据。我硬性规定:每次模型效果不达预期,必须先做错误模式分类。具体做法:随机抽100个失败样本,手动勾出错误区域,分成“漏检”、“过分割”、“边界模糊”、“连通域错误”四类,每类至少找到3个典型例子,然后才能讨论修改方案。
有个例子值得说。上半年小刘负责脑肿瘤分割,漏检率偏高。他按这个方法自己抽了100例,一个个勾,发现80%的漏检发生在肿瘤与水肿交界处。原因是什么?他翻训练代码发现,我当初设的损失函数里水肿区域的权重只有0.3,怕它干扰肿瘤主体。但实际数据里有些肿瘤边界本身就模糊,权重压低了模型就学会忽略。他没有换模型,只把水肿带权重从0.3调到0.6,重新训练两天,漏检率降了40%。这件事我印象很深,因为他来找我汇报时,已经把原因、证据、修改方案都摆好了,就问一句“李工你看这个权重调多少合适”。这种成长比教会他一个新模型有用得多——他自己会定位问题了。
当然也有没带好的。团队里另一个同事老陈,习惯自己闷头干,出了结果才找我。有次他花了两周调一个轻量化模型,最后精度掉得没法用,中间没有任何同步。我没批评他,但定了个规矩:任何超过三天的实验,必须每周两次15分钟短会,只说三件事——“做了什么、看到了什么、下一步打算”。不是监控,是避免白费力气。
六、踩坑:过度信任公开数据集
今年踩了一个大坑。用了一个公开的心脏分割数据集做预训练,拿到我们自己的数据上fine-tune,怎么调都达不到内部验收标准。折腾了两周,后来让标注组长老吴仔细对比标注细节,发现公开数据集里的规则是“左心室包含乳头肌”,而我们的临床标准是“左心室排除乳头肌”。就这一条差异,导致模型在乳头肌附近的边界全部跑偏。我之前太迷信公开数据集的“权威性”,没做标注规则的对齐。
现在强制要求:任何外部数据投入使用前,必须由我方标注员按我方标准重新标注至少50例,做一致性对比。像素级Dice低于0.95就弃用,或者花时间重新标。这个事之前没人提,现在写在标注规范的第一页,粗体字。
七、再说两个没干成的事
一个是半监督学习。年初想用伪标签减少标注量,搞了三个月,精度掉得没法看——在胰腺分割上Dice从0.86掉到0.79,怎么调都回不去。最后放弃了,老老实实继续标数据。另一个是尝试把模型从2D切片改成3D,显存翻了三倍,精度只涨了1个百分点,推理时间从0.2秒变成1.8秒,临床说太慢,也搁置了。这两个失败没写在年终PPT里,但自己心里有数。
明年的事只定一个硬指标:第一季度把分割结果的不确定性热力图上线。每个输出除了掩码,再给一张图告诉医生“这地方模型有30%的可能看走眼”。代码已经搭了一半,不展开说了,等做出来再聊。
- 推荐阅读: 2026年图像分割技术一线工作盘点 2026年一线教师年度工作思考 售楼部一线接待工作思考(2026借鉴版) 售楼部一线接待工作思考(2026借鉴版) 总务科考核一线工作总结(汇总5篇) 2026年医生专业技术工作总结
- 读书笔记吧小编为您推荐工作总结专题,欢迎访问:工作总结