Vesuvius-Grandprize-Winner如何用五五开混合损失攻克CT墨迹检测Dice加BCE与学习率预热调参全解析【免费下载链接】Vesuvius-Grandprize-Winner项目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-WinnerVesuvius-Grandprize-Winner 是 Vesuvius Challenge 2023 大奖赛冠军团队开源的CT 墨迹检测方案任务目标是从木炭化古卷的 CT 扫描切片中自动定位卷轴上残留的墨迹文字。它的核心训练配方简单却高效Dice Loss 加 BCE Loss 五五开混合损失再配上学习率预热 余弦退火的调度策略。本文面向初学者带你完整看懂这套「损失函数 学习率」调参逻辑 一、先看懂任务为什么墨迹检测这么难项目里的标注图位于 all_labels/ 目录每张图都是某个卷轴片段上检测出的墨迹白色即墨迹黑色为背景比如下面这张来自 2023 年 6 月的片段只留下零星几个古希腊字母难就难在三点类别极度不平衡——一张切片上真正的墨迹像素往往不到 1%。只用普通交叉熵模型会「偷懒」全预测为背景也能拿到 99% 的准确率。输入是三维体积——每个片段有 26 个 CT 层in_chans 26模型输入是64×64×26的小体积块而不是单张图。片段质量参差——有的卷段扭曲、粘连需要翻转、旋转、时间帧重排等大量数据增强见train_timesformer_og.py中的train_aug_list和fourth_augment。这三点直接决定了损失函数和学习率策略的设计。二、五五开混合损失Dice BCE 的组合逻辑冠军方案在全部三个训练脚本train_timesformer_og.py、train_resnet3d.py、64x64_256stride_i3d.py中都使用同一个损失组合定义在 train_timesformer_og.py 第 313–315 行self.loss_func1 smp.losses.DiceLoss(modebinary) self.loss_func2 smp.losses.SoftBCEWithLogitsLoss(smooth_factor0.25) self.loss_func lambda x, y: 0.5 * self.loss_func1(x, y) 0.5 * self.loss_func2(x, y)只有三行代码却是整套方案的心脏 逐项拆解H3 1️⃣ Dice Loss专治「墨迹只占 1% 像素」Dice 损失衡量的是预测区域与真实区域的重叠度而不是逐像素的误差。背景再多也不会淹没墨迹信号因此天然适合类别极度不平衡的分割任务。H3 2️⃣ SoftBCEWithLogitsLoss 与 smooth_factor0.25BCE二分类交叉熵提供稳定的逐像素梯度但它对不平衡敏感——所以冠军方案没有裸用 BCE而是用带平滑的 SoftBCEsmooth_factor0.25相当于把标签从纯粹的 0/1 轻微「软化」防止模型对背景像素过度自信、训练后期震荡。有趣的是推理侧脚本infer.py、inference_resnet3d.py把smooth_factor调到了0.15说明团队对平滑强度做过对比实验0.15/0.25 都在最优邻域。H3 3️⃣ 为什么是 0.5 0.5「五五开」意味着两种损失平起平坐Dice 负责「找对位置」BCE 负责「把每个像素的置信度校准好」。二者权重相等说明冠军方案不需要精细调节损失配比——这正是它能稳定复用的原因也是新手最可以放心照搬的一点。三、学习率预热 余弦退火调参全解析H3 基础配置AdamW 极小学习率优化器为 AdamWweight_decay1e-6初始学习率因脚本而异脚本骨干网络初始 lrtrain_timesformer_og.pyTimeSformer主力模型3e-5train_timesformer_deduped.pyTimeSformer 去重版6e-5train_resnet3d.pyResNet3D-1012e-5学习率普遍在 1e-5~1e-4 量级非常保守——因为模型是从预训练权重做微调激进的大学习率会直接冲坏预训练特征。H3 预热第一轮线性爬坡调度器定义在 train_timesformer_og.py 第 401–407 行scheduler_cosine torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, 10, eta_min1e-6) scheduler GradualWarmupSchedulerV2(optimizer, multiplier1.0, total_epoch1, after_schedulerscheduler_cosine)GradualWarmupSchedulerV2第 379–399 行实现在第 1 轮内把学习率从接近 0 线性拉到基础值multiplier1.0随后自动切换到after_scheduler。预热的作用训练最初几步梯度噪声最大直接上全量学习率容易把模型「带偏」爬坡式预热相当于给模型系上安全带 H3 退火余弦衰减到 1e-6预热结束后CosineAnnealingLR(T_max10, eta_min1e-6)用余弦曲线把学习率在约 10 个周期内平滑衰减到min_lr1e-6见CFG.min_lr末期小步长精调配合gradient_clip_val1.0按范数裁剪防止偶发梯度尖峰。整套节奏是小步起跑 → 线性加速 → 余弦减速 → 低位精修是微调 3D 视觉 Transformer 的典型安全曲线。四、训练细节与推理拼接速览配置项取值作用输入块64×64×26控制显存与注意力开销滑窗tile 256、stride 32大图切块训练batch size196大批次稳定梯度精度16-mixedAMP提速时间增强fourth_augment随机打乱/截断 CT 层序推理阶段inference_timesformer.py 的predict_fn有两个关键技巧每个 64×64 预测块先乘一个高斯核边缘低权重、中心高权重再按mask_pred / mask_count对重叠区域做加权平均使拼接边界平滑无接缝最终输出经sigmoid、裁剪并归一化为 0~1 概率图。五、快速上手三步跑起来git clone https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-Winner cd Vesuvius-Grandprize-Winner docker build -t youssef_gp . docker run --gpus all --shm-size150g -it -v /你的训练数据路径:/workspace/train_scrolls youssef_gp容器内先./download.sh下载片段、python prepare.py传播墨迹标注然后训练python train_timesformer_og.py或直接推理python inference_timesformer.py --model_path timesformer_weights.ckpt --segment_id 20231210121321 --segment_path train_scrolls最终多片段拼接脚本为 compose.py可把各片段检测结果拼回整卷视图例如六、总结这套方案教会我们什么不平衡分割优先 Dice 平滑 BCE五五开是省心且有效的起点 微调场景学习率从 1e-5 量级起步先预热 1 轮再余弦退火安全且可复现工程细节滑窗切块 高斯核加权拼接是处理超大输入体积的标准套路冠军方案的代码全部开源在train_timesformer_og.py、train_resnet3d.py、inference_timesformer.py等文件中配合models/目录下的 TimeSformer、I3D 与 ResNet3D 定义新手完全可以顺着「损失函数 → 调度器 → 数据增强 → 推理拼接」这条线逐行读懂整个项目。【免费下载链接】Vesuvius-Grandprize-Winner项目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-Winner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考