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

草コンペ振り返り

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Kinosuke Kinosuke
February 22, 2026
600

 草コンペ振り返り

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/--ʣͱ෺ཧ੔߹੍໿Λ૊Έ߹ΘͤɺϊΠζʹڧ͍ճؼΛ࣮ݱ ্Ґղ๏