
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),僅供參考