Upgrade to Pro — share decks privately, control downloads, hide ads and more …

草コンペ振り返り

Avatar for Kinosuke Kinosuke
February 22, 2026
320

 草コンペ振り返り

Avatar for Kinosuke

Kinosuke

February 22, 2026
Tweet

Transcript

  1. 3 n 5ターゲット(乾物重量[g])を予測 l Dry_Green_g(クローバー以外の緑草) l Dry_Dead_g(枯死草) l Dry_Clover_g(クローバー) l

    GDM_g(Green Dry Matter) l Dry_Total_g(総乾物量) n ターゲット間には物理関係がある l GDM_g = Dry_Green_g + Dry_Clover_g l Dry_Total_g = GDM_g + Dry_Dead_g n 評価指標 : global weighted R² l 重み − Dry_Green/Dry_Dead/Dry_Clover=0.1 − GDM=0.2 − Dry_Total=0.5 ૲ίϯϖͱ͸ʁ ຕͷ্໘ը૾͔Β૲ͷס෺ॏྔ<H>Λ༧ଌ͢ΔճؼλεΫ λεΫৄࡉ ը૾Πϝʔδ ૲ίϯϖ֓ཁ
  2. 4 n データセット枚数 l train: 357枚 l test: 805枚 (※Host論⽂より)

    n メタデータ(Trainのみ) l Sampling Date: 収集⽇ l State: 場所(州単位) l Species: 草の種類 l Pre_GSHH_NDVI: 緑⽣指数 l Height_Ave_cm: 草の⾼さ n 特徴 l 70cm x 30cmのフレームに映るように撮影 − iphone5s, Sony:D5833など 8種類くらい l 画像サイズはすべて2000x1000 − Host側が射影補正でROIを正規化して揃えている l 4州・19地点・3年間(2014-2017)、複数季節・多様な 牧草種を含む σʔλͷಛੑ σʔληοτ͕ۃ୺ʹগͳ͍͕ɺMBCFM͸ൺֱత҆ఆ˞͍͔ͭ͘MBCFMϛε΋͕͋ͬͨൺֱతʜ σʔληοτಛ௃ -BCFMͷ࡞ΒΕํ ૲ίϯϖ֓ཁ https://www.csiro.au/en/news/All/News/2025/October/Kaggle-competition n 70cm x 30cmのフレームに映るように撮影 n 「専⾨家が画像を⾒て主観で付与」したものではなく、 刈り取り・成分分別・乾燥後重量測定に基づく実測 値
  3. 6 n 画像を半分にしてDINOv3の特徴抽出するE2E学習 n DINOv3 の左右特徴をconcatしたあとに、Mambaブロックで「ど の情報を強める/弱めるか」を学習 ެ։/PUFCPPLͰྲྀߦ͍ͬͯͨख๏ ʮ%*/0WܥTUSFBNճؼʯɺʮ4JH-*1ຒΊࠐΈ (#%5ʯ

    $POW/FYU΍&GGJDJFOU/FU͸͜ͷίϯϖͰ͸࢖ΘΕ͍ͯͳ͍ %*/0WܥTUSFBNճؼ 4JH-*1ຒΊࠐΈ (#%5 ૲ίϯϖ֓ཁ https://zenn.dev/prgckwb/articles/kaggle-csiro-image2biomass ݩը૾ Y ݸͷ Y ˞PWFSMBQ QBEEJOH 4JH-*1 1152 x 8 (#%5 mean 5BSHFU )FBE ! n 画像を8個に分割してSigILPで特徴抽出(1152次元x8) n 1つに平均で集約してGBDTで学習 1152 x 1
  4. 8 ղ๏αϚϦ %*/0WΛ࢖ͬͨີ౓Ϛοϓੵ෼ͬΆ͍Ξϓϩʔν ࣄલֶशͷॏΈΛͳΔ΂͘յͣ͞υϝΠϯదԠͤ͞Δֶश ,JOPTVLFղ๏ %*/0W 7J5) CLS Token 1

    Reg Token 4 Patch Token 1764 (Density future) (B,1769,1280) (B,3,672,672) 16 16 Patch num 42x42=1764 (B,1280,42,42) (B,5,42,42) 3FTIBQF $POWY 4VN (B,5) #BDLCPOF )FBE 5SBJO %BUB 2000 1000 Doubling data count by halving images and labels. Clover Dead Green Total GDM Target 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL %FOTJUZ)FBE 7JTJPO.PEFM #MPDL ! ! (SBE6OGSFF[FTUBSUMSF FOEMSF 7JTJPO.PEFM #MPDL ! ! )FBEMS F ʜ
  5. 9 )FBEʹ޻෉ΛՃ͑ͳ͔ͬͨͱ͖ %*/0WΛ࢖͍࢝Ίͨͱ͖͸$-45PLFOΛ࢖ͬͨγϯϓϧͳ)FBEΛ࠾༻ ͦͦ͜͜ͷਫ਼౓͸ग़Δ͕ۚݍʹ͸ಧ͔ͳ͍ UI૬౰ 1VCMJD1SJWBUF ,JOPTVLFղ๏ %*/0W 7J5) CLS

    Token 1 Reg Token 4 Patch Token 1764 (Density future) (B,1769,1280) (B,3,672,672) 16 16 Patch num 42x42=1764 (B,1,1280) -JOFBS (B,5) #BDLCPOF )FBE 5SBJO %BUB 2000 1000 Doubling data count by halving images and labels. Clover Dead Green Total GDM Target DINOv3の特徴を 線形層でTargetの 次元数に合わせる
  6. 10 %*/0Wͱ͸ʁ ֓ཁ n Metaが発表したDINOv2の正統進 化系 n モデルアーキテクチャはViTベース l モデルサイズ︓21M

    ~ 7Bまで l ConvNeXtに蒸留したverもある n ラベルを⼀切使わない「⾃⼰教師あ り学習(SSL)」 l 画像内のパッチ間の再構成(MIM) と画像全体の意味的⼀貫性 (Discriminative SSL)を⾼度に 融合 l テキストラベルという「⼈間のバイアス」を 介さず、ピクセルデータそのものの共起 性から、物体境界や幾何構造を⾃律 的に学習 n 物体検出・セグメンテーション: Mask2Former等のバックボーンとし てSOTAを記録 n 単眼深度推定 (Depth Estimation): 「Depth Anything」の 枠組みに組み込むことで、極めて⾼ 精度な距離情報を抽出 n 3D理解: 視覚的な幾何情報を捉え る能⼒(VGGT等)により、3D空 間の把握にも寄与 n Gram Anchoring l SSLにはモデルを⼤きくし、学習を⻑く 続けると、特徴マップがノイズ化(崩 壊)して精度が下がるという課題があっ た l 学習初期のクリーンな状態をアンカーと して利⽤し、現在のパッチ間類似度を Gram⾏列的に正規化・拘束する新 ⼿法を採⽤ l 7Bという巨⼤モデルでも、⾼解像度 (4096px)までノイズなしで耐えうる n Geometric Logic幾何学構造の⾃ 律的把握 l CLIPのようなテキスト対照学習は「何 が写っているかには強いが、どこにどう配 置されているかの把握は苦⼿ l DINOv3は画像全体の意味を捉える 学習(Discriminative SSL)に加え、 画像パッチを隠して復元するパッチレベ ルの再構成学習を実施しているためピ クセル間の物理的な距離感や境界を 正確に学習 Կ͕ڧ͍ʁ ͳͥڧ͍ͷʁ
  7. 12 ֶशํ๏ %*/0WͷࣄલֶशͷॏΈΛͳΔ΂͘յ͞ͳ͍Α͏ʹ)FBEͱ#BDLCPOFͷ ֶश཰Λ෼͚ɺ(SBE6OGSFF[Fͷಋೖ ,JOPTVLFղ๏ #BDLCPOF 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL

    7JTJPO.PEFM #MPDL %FOTJUZ)FBE 7JTJPO.PEFM #MPDL ! 'SFF[F 7JTJPO.PEFM #MPDL MS F ʜ )FBE 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL %FOTJUZ)FBE 7JTJPO.PEFM #MPDL ! 4UBSUMS F 7JTJPO.PEFM #MPDL MS F ʜ 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL 7JTJPO.PEFM #MPDL %FOTJUZ)FBE 7JTJPO.PEFM #MPDL ! 7JTJPO.PEFM #MPDL MS F ʜ FOEMS F &QPDId &QPDI ! &QPDI ! ! ! ঃʑʹֶश཰Λ্͛Δ ޙΖ͔Βঃʑʹֶश͢Δ૚ Λ૿΍͢ɻ·Ͱ ͳͥɺঃʑʹMSΛ্͛Δͷ͔ʁ ʲԾઆʳ • ௨ৗͷ4DIFEVMFSͩͱMS͸ঃʑʹԼ͍͛ͯ͘ͷ ͕Ұൠత • ޙ൒ͷFQPDIͰֶश͢Δ૚Λ૿΍͍ͯͨ͘͠Ίɺ MSΛԼ͛ͯ͠·͏ͱં֯ɺ૚Λ૿΍ͨ͠ͷʹͦ ͜ʹֶश͕΄ͱΜͲޮ͔ͳ͘ͳͬͯ͠·͏ ʲࣄ࣮ϕʔεʳ • ৭ʑࢼͨ݁͠Ռɺ$7-#ͱ΋ʹྑ͔͔ͬͨΒ • ͜ͷֶशํ๏͸ɺ 4JH-*1 &7"$-*1Ͱ΋ޮ ͍ͨ˞ޙड़ ύϥϝʔλνϡʔχϯά ҎԼͷύϥϝʔλ͕νϡʔχϯάͷର৅ͱͳΔ • )FBEMS • #BDLCPOFMS TUBSU FOE • 5PUBM&QPDI • )FBE0OMZ&QPDI • 6OGSFF[F#MPDL/VN ˞ࠓճͷίϯϖͰ͸4JH-*1 &7"$-*1ͷֶश ΋࣮ࢪ͕ͨ͠ɺਫ਼౓ͷ͍͍ύϥϝʔλ͸ڞ௨ͯ͠ ͍ͨ )FBE0OMZ #BDLCPOF 6OGSFF[F ޙΖͷ૚͔Β #BDLCPOF 6OGSFF[F ޙΖͷ૚͔Β ·Ͱ
  8. 13 n ラベルは画像主観ではなく、刈り取り・分別・乾燥重量 の実測値 n 70cm x 30cm枠に沿った撮影ガイドはあるが、撮影 は複数カメラ・⾃然光・撮影⾼さばらつきあり。 n

    撮影条件で出てくる差(光、距離、⾓度、機材、天 気、季節)を意識 n RandomResizedCrop(scale=0.85-1.0) は labelを歪める可能性があるが意図的に採⽤ l 理由︓撮影者ごとにカメラ~地⾯距離が揺れるため "VHNFOUBUJPO )PTUͷ࿦จΛ֬ೝͯ͠ʮMBCFMΛյ͞ͳ͍ʯʮσʔλͷऔಘํ๏ΛͳΔ΂͘ ࠶ݱͰ͖Δʯ͜ͱΛҙࣝͨ͠"VHNFOUBUJPOΛ࣮ࢪ )PTU࿦จ͔Βஔ͍ͨલఏ "VHNFOUBUJPO ,JOPTVLFղ๏ n 幾何(草量を⼤きく壊さない範囲) l HorizontalFlip(p=0.5) l VerticalFlip(p=0.5) l RandomRotate90(p=0.5) l Rotate(limit=10, p=0.3, border_mode=REFLECT) n スケール/フレーミング l RandomResizedCrop(size=(1000,1000), scale=(0.85,1.0), ratio=(0.95,1.05), p=0.5) n 光・⾊・カメラ条件 l ColorJitter, RandomGamma, RandomBrightnessContrast l GaussianBlur l RandomShadow,RandomToneCurve
  9. 14 $74USBUFHZ ࡱӨ݄Ͱ(SPVQԽ͠ɺ%FBE$MPWFSΛ4USBUJGJFEͯ͠GPME෼෍Λଗ͑Δ ͱ$7-#͕҆ఆ ͳͥࡱӨ݄Ͱ(SPVQԽ͢Δʁ $7-# QVCMJD ,JOPTVLFղ๏ 2015-6-26 2015-6-29

    2015-9-29 2015-9-30 Tas, 2015-6 Vic , 2015-9 n 同⼀撮影⽇は⽇照条件や撮影場所がほぼ共通なの でリーク n 未知の季節レベルへの汎化を意識し、Groupは⽇単 位ではなく⽉単位で構成 DINOv3 Density Head DINOv3 CLS Head EVA02-CLIP or SigLIP Private BEST
  10. 15 n 同じアーキテクチャでseed42とseed93を作り、CVと Public LBの揺れを⽐較。 l CVは最⼤0.01155, LBは0.01のブレ n seed間のブレがCV/LBともに⼩さかったため、学習はあ

    る程度ロバストだと判断 (※Privateも安定しており、どれを選んでも⾦圏でした) 4IBLFରࡦ গ਺σʔλ͔ͭ1VCMJD1SJWBUF͕ظؒ෼཭ͱઆ໌͞Ε͍ͯͨͨΊTIBLFΛ ૝ఆɻTFFEײ౓͕௿͍֬ೝޙɺ1VCMJDੑೳͱϞσϧଟ༷ੑͷόϥϯεͰબఆ n 以下の2つ l 攻め : Public Best l 守り︓モデル積みまくる 2seed x 6 n Public Bestを選んだ理由 l Train 357枚、 Test805枚(public:private 53:47) l Host論⽂にデータ収集期間が2014~2017と記載あり l Trainはすべて2015だったので、public2016でprivate2017 とメタ読み (Private Best = CV Bestだったのでこの読みは間違いでした) -#ͷ༳Εͷ֬ೝ ࠷ऴ4VCબͼ ,JOPTVLFղ๏
  11. 18 ࢀՃظؒதͷ5JNFMJOF ϲ݄ؒ΄΅ϑϧͰࢀՃɻং൫ʹ্Ґʹߦ͘΋ϲ݄൒είΞ্͕͕Βͣζϧ ζϧॱҐΛԼ͛Δਏ͍ઓ͍Ͱͨ͠ɻ ,JOPTVLFղ๏ EVA02-CLIPに変えてPublic 18th loss、Augmentation、LoRAとか ⾊々試すもCVは上がるがLB上がらな いという⻑い停滞期

    学習のPipelineはここで完成 - 2000x1000を半分に割る - Grad Unfreeze - loss - Augmentaion CVを⽉単位でGroup化 するとスコア爆上がり Dense Feature でPublic銀上位 画像のサイズを上げ A100(80G)を3並列 公開Noteではやっていた DINOv3を取り込んで久々に更新
  12. 20 n backbone l 全員がDINOv3系を主軸(Large/Huge/7B) l 「事前学習重みを壊さない」⽅針が共通 − backbone凍結から開始 −

    head/backboneの学習率を分ける • backbone 1e-3 • head 1e-4 など10倍くらいの差 − Head only学習 -> Full Param学習の2段階 − 段階的unfreeze(Gradual Unfreeze) − LoRA n 画像⼊⼒ l 主流は dual-stream(左1000x1000 + 右1000x1000) l single-stream(1024x2048)や 3stream(左+右+全 体)も上位に存在 l 解像度は 640/768/896/1024 を使い分け、最終的には多解 像度アンサンブルが強い。 l 公開Noteは512なのでImageSizeを⼤きくするのが重要 n head設計 l 3head(Green/Dead/Clover)予測 + 2target導出。 l パターンB: 5target直接予測。 l ⾮負制約として Softplusを⼊れる実装が多数 l MoE l 密度推定head ্Ґղ๏αϚϦ ্Ґղ๏ͷڞ௨౔୆͸%*/0Wʢ-BSHF)VHF#ʣΛ࣠ʹͨ͠ߴղ૾౓ಛ௃நग़ɻ ࣄલֶशॏΈΛյ͞ͳֶ͍शઃܭͱɺλεΫಛԽϔουɺޙॲཧͰউഊΛ෼͚ͨ ্Ґղ๏ n loss l ⼟台は SmoothL1/Huber l 上位では次の追加loss − 物理整合(Total/GDMの関係) − ⽐率loss(Dead/Total) − Class分類(1stのみ) − 補助タスクlossはNDVI/Height/Speciesは不発 n CVと学習運⽤ l State × SamplingDate を意識したGroup系splitが中⼼ l Clover/Deadのゼロ⽐率が偏らないよう層別化を追加 l いい感じのseed選び。 5foldの平均・標準偏差が近くなるように seedを変更して繰り返し実⾏ n 推論/後処理 l flip系のTTA l WA x Clover --> 0.8倍などスケーリングしてるチームもちらほら − 博打要素強めだが草コンペではwork l 分布ずれ対策としてTest Time Training
  13. 22 n データ拡張: RandomResizedCropを採⽤(草地領域が画像上で常に厳密な70x30固定ではない想定に合わせ、 ⾒え⽅の揺らぎへ頑健化) n 2段階学習 l 1st :

    backbone凍結でheadのみ学習 l 2nd : 全体Fine Turning n モデル構成 l head: 回帰5head+ 補助の区間分類5head(UEPNet⾵) l +0.03 n テスト時オンライン学習 pseudo label反復 + SWA l +0.02 l ⼿順(1st公開内容 ) − LBで強く、かつ多様性のある単体モデル4つを選び、testに疑似ラベル付与 − 疑似ラベル付きデータで DINO-Large を2本、反復的に学習 この段階ではCVを回さず、train + test全体で学習 − 各モデルの最終予測は、複数epochの重みをSWAで平均化して採⽤ − 疑似ラベルへの過学習を抑えるため、最後に trainのみで数epoch追加学習 − 得られたLarge 2本で test疑似ラベルを再⽣成し、同様に DINO-Base 2本を学習 − 最終推論は Large: 0.4, Base: 0.6の加重融合。 TU1MBDF4PMVUJPO ެ։/PUFͰ΋࢖ΘΕͯͨࠨӈ෼ׂͷEVBMTUSFBNΛ౔୆ʹ6&1/FUൃ૝ͷ ʮ۠ؒ෼ྨʯิॿIFBEͱ൓෮5FTU5JNF5SBJOJOH ্Ґղ๏
  14. 23 n head: Conv+ReLU headとDPT headを試し、密度推定/弱教師ありセグメンテーション⾵に設計 n ⼊⼒: 2048x1024, 1024x1024

    など⾼解像度を複数 n モデル構造の詳細 l 1st attempt: Simple Conv + ReLU head − timmのfeatures_only=TrueでDINOv3の特徴マップを取得。 − 最終段のdense feature(features[-1], CLSではない)に 3x3 Conv -> ReLUを適⽤ − AdaptiveAvgPool2d(1) で空間集約し、Linear(3) でclover/dead/greenを回帰 l 2nd attempt: DPT head(SegDino由来のmulti-scale統合) − 中間特徴を [4, 11, 17, 23]で抽出 − DPT(Dense Prediction Transformer) headで4段特徴をout_channels=[96, 192, 384, 768] に投影し、3x3 conv(scratch)+ upsample + concatで統合 − 最終1x1 Convで3チャネルの空間マップを出⼒し、GAP -> flattenでターゲット値へ変換 OE1MBDF4PMVUJPO NPEFM %*/0WͷEFOTFGFBUVSFΛओ࣠ʹɺ$POW 3F-6 ͱ %15IFBEΛൺ ֱ͠ͳ͕ΒɺUJMFղ૾౓#BDLCPOFࠩ෼ͰϞσϧଟ༷ੑΛߏங ্Ґղ๏
  15. 24 n 合成画像の⽣成は Qwen Image Edit を使⽤ n どのように作ったか l

    季節・天候の変化をシミュレーションし、砂利・岩などのアーティファクトを追加した画像 l 画像内の植⽣を除去して⼟だけを残し、clover / dead / green = 0を与える画像 n どう使ったか(疑似ラベルでの⼯夫) l コンペ序盤は「合成データをそのまま混ぜる」とPublic LBが下がる失敗が多かった l 画像回帰では編集後の真値が不明になるため、擬似ラベルを付与 OE1MBDF4PMVUJPO ߹੒σʔλ 2XFO *NBHF&EJUͰ߹੒σʔλΛ࡞੒ʢقઅɾఱީมԽɺ২ੜθϩը૾ʣ ٙࣅϥϕϧͰਅ஋໰୊Λճආ͠ɺݩσʔλͱ݁߹ͯ͠࠷ऴֶशʹ׆༻ ্Ґղ๏
  16. 25 n ⼊⼒と全体構成 l left/right/full の3streamで局所+⼤域を同時に使う n MoEヘッド l ターゲット値について

    mean(予測値) と var(予測分散) を出す l num_experts=4, hidden=512 − Expert • 同じ⼊⼒特徴を受ける並列の⼩型回帰器(MLP)4本 • 各Expertは [pred_mean, pred_var_logit] を出⼒ − Gate • ⼊⼒特徴から「4本のExpertをどれだけ使うか」の重み w1..w4 を出⼒ • softmaxで w1+...+w4=1 に正規化して重みづけ − 最終予測 (Expert x Gate) • y = Σ_i wi * expert_i(x) (⼊⼒ごとに重み付き合成) n 損失設計 l GaussianNLLLoss で、誤差だけでなく「予測した分散」も学習 l 物理整合と最終運⽤ − Dead = Total - GDM, Clover = GDM - Green で導出し整合を維持 UI1MBDF4PMVUJPO શମ ࠨӈಛ௃Λ.P&Ͱ౷߹͠ɺ֤λʔήοτͷෆ͔֬͞΋ग़ྗɻෆ͔֬͞ࠐ Έͷଛࣦʢ(BVTTJBO/--ʣͱ෺ཧ੔߹੍໿Λ૊Έ߹ΘͤɺϊΠζʹڧ͍ճؼΛ࣮ݱ ্Ґղ๏