:Dice加BCE與學(xué)習(xí)率預(yù)熱調(diào)參全解析)
Vesuvius-Grandprize-Winner如何用五五開混合損失攻克CT墨跡檢測(cè)Dice加BCE與學(xué)習(xí)率預(yù)熱調(diào)參全解析【免費(fèi)下載鏈接】Vesuvius-Grandprize-Winner項(xiàng)目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-WinnerVesuvius-Grandprize-Winner 是 Vesuvius Challenge 2023 大獎(jiǎng)賽冠軍團(tuán)隊(duì)開源的CT 墨跡檢測(cè)方案任務(wù)目標(biāo)是從木炭化古卷的 CT 掃描切片中自動(dòng)定位卷軸上殘留的墨跡文字。它的核心訓(xùn)練配方簡(jiǎn)單卻高效Dice Loss 加 BCE Loss 五五開混合損失再配上學(xué)習(xí)率預(yù)熱 余弦退火的調(diào)度策略。本文面向初學(xué)者帶你完整看懂這套「損失函數(shù) 學(xué)習(xí)率」調(diào)參邏輯 一、先看懂任務(wù)為什么墨跡檢測(cè)這么難項(xiàng)目里的標(biāo)注圖位于 all_labels/ 目錄每張圖都是某個(gè)卷軸片段上檢測(cè)出的墨跡白色即墨跡黑色為背景比如下面這張來(lái)自 2023 年 6 月的片段只留下零星幾個(gè)古希臘字母難就難在三點(diǎn)類別極度不平衡——一張切片上真正的墨跡像素往往不到 1%。只用普通交叉熵模型會(huì)「偷懶」全預(yù)測(cè)為背景也能拿到 99% 的準(zhǔn)確率。輸入是三維體積——每個(gè)片段有 26 個(gè) CT 層in_chans 26模型輸入是64×64×26的小體積塊而不是單張圖。片段質(zhì)量參差——有的卷段扭曲、粘連需要翻轉(zhuǎn)、旋轉(zhuǎn)、時(shí)間幀重排等大量數(shù)據(jù)增強(qiáng)見train_timesformer_og.py中的train_aug_list和fourth_augment。這三點(diǎn)直接決定了損失函數(shù)和學(xué)習(xí)率策略的設(shè)計(jì)。二、五五開混合損失Dice BCE 的組合邏輯冠軍方案在全部三個(gè)訓(xùn)練腳本train_timesformer_og.py、train_resnet3d.py、64x64_256stride_i3d.py中都使用同一個(gè)損失組合定義在 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)只有三行代碼卻是整套方案的心臟 逐項(xiàng)拆解H3 1?? Dice Loss專治「墨跡只占 1% 像素」Dice 損失衡量的是預(yù)測(cè)區(qū)域與真實(shí)區(qū)域的重疊度而不是逐像素的誤差。背景再多也不會(huì)淹沒墨跡信號(hào)因此天然適合類別極度不平衡的分割任務(wù)。H3 2?? SoftBCEWithLogitsLoss 與 smooth_factor0.25BCE二分類交叉熵提供穩(wěn)定的逐像素梯度但它對(duì)不平衡敏感——所以冠軍方案沒有裸用 BCE而是用帶平滑的 SoftBCEsmooth_factor0.25相當(dāng)于把標(biāo)簽從純粹的 0/1 輕微「軟化」防止模型對(duì)背景像素過度自信、訓(xùn)練后期震蕩。有趣的是推理側(cè)腳本infer.py、inference_resnet3d.py把smooth_factor調(diào)到了0.15說明團(tuán)隊(duì)對(duì)平滑強(qiáng)度做過對(duì)比實(shí)驗(yàn)0.15/0.25 都在最優(yōu)鄰域。H3 3?? 為什么是 0.5 0.5「五五開」意味著兩種損失平起平坐Dice 負(fù)責(zé)「找對(duì)位置」BCE 負(fù)責(zé)「把每個(gè)像素的置信度校準(zhǔn)好」。二者權(quán)重相等說明冠軍方案不需要精細(xì)調(diào)節(jié)損失配比——這正是它能穩(wěn)定復(fù)用的原因也是新手最可以放心照搬的一點(diǎn)。三、學(xué)習(xí)率預(yù)熱 余弦退火調(diào)參全解析H3 基礎(chǔ)配置AdamW 極小學(xué)習(xí)率優(yōu)化器為 AdamWweight_decay1e-6初始學(xué)習(xí)率因腳本而異腳本骨干網(wǎng)絡(luò)初始 lrtrain_timesformer_og.pyTimeSformer主力模型3e-5train_timesformer_deduped.pyTimeSformer 去重版6e-5train_resnet3d.pyResNet3D-1012e-5學(xué)習(xí)率普遍在 1e-5~1e-4 量級(jí)非常保守——因?yàn)槟P褪菑念A(yù)訓(xùn)練權(quán)重做微調(diào)激進(jìn)的大學(xué)習(xí)率會(huì)直接沖壞預(yù)訓(xùn)練特征。H3 預(yù)熱第一輪線性爬坡調(diào)度器定義在 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 行實(shí)現(xiàn)在第 1 輪內(nèi)把學(xué)習(xí)率從接近 0 線性拉到基礎(chǔ)值multiplier1.0隨后自動(dòng)切換到after_scheduler。預(yù)熱的作用訓(xùn)練最初幾步梯度噪聲最大直接上全量學(xué)習(xí)率容易把模型「帶偏」爬坡式預(yù)熱相當(dāng)于給模型系上安全帶 H3 退火余弦衰減到 1e-6預(yù)熱結(jié)束后CosineAnnealingLR(T_max10, eta_min1e-6)用余弦曲線把學(xué)習(xí)率在約 10 個(gè)周期內(nèi)平滑衰減到min_lr1e-6見CFG.min_lr末期小步長(zhǎng)精調(diào)配合gradient_clip_val1.0按范數(shù)裁剪防止偶發(fā)梯度尖峰。整套節(jié)奏是小步起跑 → 線性加速 → 余弦減速 → 低位精修是微調(diào) 3D 視覺 Transformer 的典型安全曲線。四、訓(xùn)練細(xì)節(jié)與推理拼接速覽配置項(xiàng)取值作用輸入塊64×64×26控制顯存與注意力開銷滑窗tile 256、stride 32大圖切塊訓(xùn)練batch size196大批次穩(wěn)定梯度精度16-mixedAMP提速時(shí)間增強(qiáng)fourth_augment隨機(jī)打亂/截?cái)?CT 層序推理階段inference_timesformer.py 的predict_fn有兩個(gè)關(guān)鍵技巧每個(gè) 64×64 預(yù)測(cè)塊先乘一個(gè)高斯核邊緣低權(quán)重、中心高權(quán)重再按mask_pred / mask_count對(duì)重疊區(qū)域做加權(quán)平均使拼接邊界平滑無(wú)接縫最終輸出經(jīng)sigmoid、裁剪并歸一化為 0~1 概率圖。五、快速上手三步跑起來(lái)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 /你的訓(xùn)練數(shù)據(jù)路徑:/workspace/train_scrolls youssef_gp容器內(nèi)先./download.sh下載片段、python prepare.py傳播墨跡標(biāo)注然后訓(xùn)練python train_timesformer_og.py或直接推理python inference_timesformer.py --model_path timesformer_weights.ckpt --segment_id 20231210121321 --segment_path train_scrolls最終多片段拼接腳本為 compose.py可把各片段檢測(cè)結(jié)果拼回整卷視圖例如六、總結(jié)這套方案教會(huì)我們什么不平衡分割優(yōu)先 Dice 平滑 BCE五五開是省心且有效的起點(diǎn) 微調(diào)場(chǎng)景學(xué)習(xí)率從 1e-5 量級(jí)起步先預(yù)熱 1 輪再余弦退火安全且可復(fù)現(xiàn)工程細(xì)節(jié)滑窗切塊 高斯核加權(quán)拼接是處理超大輸入體積的標(biāo)準(zhǔn)套路冠軍方案的代碼全部開源在train_timesformer_og.py、train_resnet3d.py、inference_timesformer.py等文件中配合models/目錄下的 TimeSformer、I3D 與 ResNet3D 定義新手完全可以順著「損失函數(shù) → 調(diào)度器 → 數(shù)據(jù)增強(qiáng) → 推理拼接」這條線逐行讀懂整個(gè)項(xiàng)目。【免費(fèi)下載鏈接】Vesuvius-Grandprize-Winner項(xiàng)目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-Winner創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考