返回列表

7th Place Solution - single/dual+TTT

687. CSIRO - Image2Biomass Prediction | csiro-biomass

开始: 2025-10-28 结束: 2026-01-28 作物智能识别 数据算法赛
第 7 名解决方案 - 单/双流+TTT

第 7 名解决方案 - 单/双流+TTT

单流与双流集成 + 测试时训练

作者: One piece (cudacoding)

团队成员: shanzhong8, HaoKwok, weigang huang111, One piece, lhwcv

发布日期: 2026-01-29

竞赛: CSIRO Biomass

感谢 Kaggle 和赞助商举办如此精彩且引人入胜的比赛。这是一场激烈的竞赛,我很激动我们能够在激烈的竞争中守住位置。这对我来说是一次宝贵的学习经历。现在,让我带您了解我们的方法:


我在比赛 midway 阶段加入团队,并在队友建立的优秀 baseline(LB 0.67)基础上构建我的工作。我的队友稍后将提供 baseline 操作的更详细分解。


我的解决方案遵循两阶段流程:阶段 1 涉及初始训练,随后是阶段 2,由在线伪标签和测试时训练(TTT)组成。

阶段 1

模型:

单流版本:
@shanzhong8 DINOv3-Large + 单流:在训练和推理期间预测所有五个组件,使用带有 Softplus 激活的回归头。在训练过程中,前 80% 的参数被冻结。整体框架遵循共享特征提取器 + 特定任务头的范式,实现了参数效率并在相关回归任务间共享归纳偏置。输入分辨率 1024×2048, accommodating 超高分辨率图像。单模型 5 折, without TTA 和 TTT 可达到 0.76 公共 LB 和 0.65 私有 LB。

双流版本:
DINOv3-Large + 双流:在训练期间,模型在所有五个组件上进行监督。然而,在推理时,它仅预测 Dry_Green_g、Dry_Dead_g 和 Dry_Clover_g,而 GDM_g 和 Dry_Total_g 通过后计算得出(使用 Softplus 激活头)。在训练过程中,前 80% 的参数被冻结。

损失函数:

r^2 loss

CV 策略:

使用 StratifiedGroupKFold,以 'sampling date' 为组,'stat' 为标签。由于原始三个日期不足以进行 5 折分割,我将 WA 数据细分为七个虚拟日期。 across 1000 万个种子进行了多线程暴力搜索,以识别在所有五个折中分布最平衡的分割。

增强 (Albumentations):

Resize(单流:1024*2048; 双流:1024^2), HorizontalFlip, VerticalFlip, RandomBrightnessContrast, 和 ColorJitter。

训练配置:

  1. 优化器:AdamW,lr: 2e-4,wd: 1e-2。
  2. 对于每个折,我保留了 top 3 最佳损失检查点和 top 3 最佳分数 (CV) 检查点。然后将这 6 个模型使用 SWA(简单权重平均)组合以增强泛化能力。
  3. 对于双流模型,在将集成图像分割为其各自的流之前,应用 HFlip 或 VFlip。

推理配置:

  1. 单流和双流模型结果的简单平均。
  2. 仅利用水平翻转 TTA。

阶段 2 (TTT)

由于缺乏 DINOv3 以外的模型异质性来进行集成,并且剩余的推理时间余地很大,我决定实施测试时训练(TTT)。

首先,我执行了单流和双流模型的集成推理(带或不带 TTA)。为了优化效率,我实施了双 GPU 并行推理,其中一个 GPU 处理 5 折单流模型,而另一个处理 5 折双流模型。这显著加速了推理过程。

初始预测随后经过后处理——例如,将 clover 乘以 0.8,并将任何低于 0.2 的组件值归零。这些处理后的结果被用作伪标签,使用 combined full training 和 test sets 训练最佳单流折(基于 LB/CV)。此 TTT 阶段持续 12 个 epochs,在最后 4 个 epochs 期间应用 SWA(简单权重平均)以防止过拟合并提高泛化能力。所有其他训练配置与阶段 1 保持一致。

此外,我尝试在单独的 GPU 上并行对单流和双流模型进行 TTT,但这没有产生任何明显的性能增益。最终结果是阶段 1 和 TTT 预测的加权混合:0.2 * 阶段 1 + 0.8 * 阶段 2。

无效的方法:

  1. 除 DINOv3 以外的模型架构,例如 SigLIP-2。
  2. Mixup, Cutmix 及其各种修改变体。
  3. 辅助任务和辅助损失。
  4. 结合 ML 模型的 DINO 嵌入。
  5. 外部数据集。
  6. 以及许多其他没有提供任何 meaningful gain 的想法。

推理代码:

在这场比赛中,找到能提供稳定提升的想法 incredibly difficult。最后,感谢大家——很荣幸能与你们一起竞争!

同比赛其他方案