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

20250515_今更ながら2023年に参加したHuBMAP金ソリューションを綺麗にまとめ

Avatar for suguuuuuすぐー suguuuuuすぐー
May 15, 2025
32

 20250515_今更ながら2023年に参加したHuBMAP金ソリューションを綺麗にまとめ

~privateで50位駆け上がって騒いだのは良い思い出~

kaggle
https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature

Avatar for suguuuuuすぐー

suguuuuuすぐー

May 15, 2025
Tweet

Transcript

  1. 概要 (軽く全体説明) • 参加コンペ: – HuBMAP - Hacking the Human

    Vasculature – 概要は右参照 • 順位: – 10位/1064チーム(ゴールド) • アプローチ概要: – YoloV7-seg 、疑似ラベルによるデータ水増し、YOLOパラメータ調整 • 所感: – 全体: • 専門ラベル、素人ラベル、未ラベル全てをどう使うかがポイントなコンペに感じた。 • LBとPBが相関していたので提出に迷いはなかった。(privateはそんな良くな かったけど。。) • 疑似ラベルを付与して良いものを選定するという、過去のコンペのソリューション を参考にしたおかげで性能が出たと思う。 • 20230803時点で公開されてる上位のソリューションは基本的に疑似ラベル あるので、思想は同じと思う。 – マインド面: • モチベーションコントロールが難しかった・・・ • 途中から性能が上がらずモチベーション低下・・・ • まだまだモチベーションコントロールと実験量が3流だな、、、と反省。 概要 細胞のインスタンスセグメンテーションを実施(血管、糸球体、分からない) 血管の検出結果だけがスコアリングされる。 ①専門家ラベラーデータ、②素人ラベラーのデータ、③ラベル無しが配布 結果
  2. 3 コンペ概要:目的、背景 ◆ コンペの開催の背景: ➢ 人体の生物学的構造を特定するフレームワークとして「Vasculature Common Coordinate Framework(VCCF)」が存在 ➢

    VCCFでは、人体の血管を主要なナビゲーションシステムとして利用 ➢ しかし、微小血管についての研究者の知識にはまだ不明な点が多いため、コンペによりVCCFの改善を行いたい 健康なヒトの腎臓組織スライドの2次元PAS染色組織画像の、 毛細血管、細動脈、細静脈などの微小血管構造のインスタンスをセグメンテーションするコンペ インスタンス セグメンテーション処理 検出結果 各細胞を個々に検出 入力画像
  3. コンペ概要:評価指標 • 指標:Average Precision – 概要: • 予測された正のインスタンスのうち、 実際に正であるものの割合 –

    検出とする条件: • IoU 0.6以上 検出判定のイメージ(物体検出の例) 今回は、マスクの重なりが0.6より大きくなれば検出 シンプルに言うと・・・ 各マスクにおいて、正解と6割以上マスクが重なっていて、どれだけ検出できている割合が高いか?
  4. 6 最終的なソリューション 基本:YoloV7を利用したインスタンスセグメンテーション 差異化ポイント: ①疑似ラベルを利用したラベル無しデータの活用、②Yoloパラメータ調整 ◆ 公開されていたベースラインの紹介と共に、独自アプローチを説明していきます。 Pretrain Yolov7seg Dataset

    : ds2 only1fold 、100epoch Yolov7seg Predictions ds2&ds3 Pseudo Label ds2&ds3 Train Yolov7seg Dataset : ds1 5fold、100epoch Pretrain Yolov7seg Dataset: pseudo ds2&ds3 only1fold 、100epoch weight Train Yolov7seg Dataset : ds1 5fold 、100epoch Inference flow weight YoloV7 Fold0,1,4 Post Processing Get Largest mask with connected component From @fnands notebook A quick YOLOv7 Baseline | Kaggle Several parameters are changed. Mainly resolution(512=>640) From @fnands notebook A Quick YOLOv7 Baseline [Inference] | Kaggle Revise the NMS code. Make it utilize the mask of the fold selected by NMS. And, add post processing. Only the largest masks were retained. Resolution 640 Conf_th = 0.001 Iou_th = 0.55 weight Pickup data w/ predicted conf Conf at instance >0.5 Average conf per tile > 0.6 Remove dilate Training flow inference Train data
  5. 10 ベースライン紹介:ベースラインが抱える課題と推定原因 課題①: 被写体の検出精度が低い 推定原因①: 1: 一般人ラベラーの品質が低く悪影響 2: YOLOの入力画像サイズが小さい 課題②:

    そもそも検出できてない・・・ 推定原因②: 利用データの学習ドメインが狭い 使ってない データ 使ってない データ ★専門家ラベル ★一般人ラベル YOLOv7 基本アーキテクチャ
  6. 11 推定原因①:“検出精度が低い“の原因 ◆ 一般人ラベラーの品質が低く悪影響 ➢ アノテーションルールが異なるように見える ⚫ 専門家は判断しづらい血管はunsureラベルを付与し ているが、一般人ラベラーはunsureが少ない ➢

    一般人は、異なるモノを血管でアノテーション可能性 ◆ YOLOの入力画像サイズが小さい ➢ Yolo-segは入力画像に対して1/4サイズでマスク生成 ➢ アーキテクチャ上、小さい血管が消失するリスクがある! ➢ データに合わせた修正が必要 YOLOv7基本アーキテクチャ ★専門家ラベル(青のunsureマスクが多い) ★一般人ラベル(青のunsureマスクはほぼない)
  7. DATE 12/xx 推定原因②:そもそも検出できてないことの原因 病理サンプル2 専門家 病理サンプル1 専門家 病理サンプル4 一般人ラベラー 病理サンプル3

    一般人ラベラー 病理サンプル 番号 病理サンプル1~4のみだと、ドメインが狭いので未知のテストデータで性能が出ない可能性 ⇒仮説:全部の範囲で学習できていれば、未検出は起きないはず! 未ラベルデータ 未ラベルデータ どんな見た目の画像が含まれているか、T-SNEでマッピング 使ってない データ 使ってない データ 配布データ
  8. DATE 13/xx 13 最終的なソリューション(再掲) 基本:YoloV7を利用したインスタンスセグメンテーション 差異化ポイント: ①疑似ラベルを利用したラベル無しデータの活用、②Yoloパラメータ調整 Pretrain Yolov7seg Dataset

    : ds2 only1fold 、100epoch Yolov7seg Predictions ds2&ds3 Pseudo Label ds2&ds3 Train Yolov7seg Dataset : ds1 5fold、100epoch Pretrain Yolov7seg Dataset: pseudo ds2&ds3 only1fold 、100epoch weight Train Yolov7seg Dataset : ds1 5fold 、100epoch Inference flow weight YoloV7 Fold0,1,4 Post Processing Get Largest mask with connected component From @fnands notebook A quick YOLOv7 Baseline | Kaggle Several parameters are changed. Mainly resolution(512=>640) From @fnands notebook A Quick YOLOv7 Baseline [Inference] | Kaggle Revise the NMS code. Make it utilize the mask of the fold selected by NMS. And, add post processing. Only the largest masks were retained. Resolution 640 Conf_th = 0.001 Iou_th = 0.55 weight Pickup data w/ predicted conf Conf at instance >0.5 Average conf per tile > 0.6 Remove dilate Training flow inference Train data 差異化ポイント①:疑似ラベルを使った、多段階の学習フロー 目的:データ品質バラつきへの対応、ドメイン拡大への対応 差異化ポイント②:パラメータ調整 目的:小さいサイズへの対応
  9. 14 差異化ポイント①:疑似ラベルを使った、多段階の学習フロー ◆ 疑似ラベルとは? ➢ 半教師あり学習(Semi-supervised Learning)で用いられる技術の一つ ➢ ラベルのないデータを利用して、ラベル付きデータが少ない状況でもモデルの性能を向上させることが可能 ◆

    学習の流れは? ➢ 広いドメインで事前学習 ⇒ 専門ラベルで仕上げるように学習。これを多段実施。 ⚫ 1段階目:一般人ラベルで学習⇒専門ラベルでFinetuning ⚫ 2段階目:疑似ラベルで学習⇒専門ラベルでFinetuning Dataset : 一般人ラベル only1fold 、100epoch Predictions 未ラベルを予測 Pseudo Label 疑似ラベルデータセット Dataset : 専門ラベル 5fold、100epoch Dataset:疑似ラベルデータ only1fold 、100epoch weight Dataset:専門ラベル 5fold 、100epoch weight weight Pickup data w/ predicted conf Conf at instance >0.5 Average conf per tile > 0.6 1段階目:疑似ラベル付け準備 2段階目:提出モデル作成
  10. 15 差異化ポイント② :YOLOパラメータ調整 ◆ 学習・推論画像サイズの変更 ➢ 変更点:512 => 640 ⚫

    ※ 配布画像は512x512だが、640x640にリサイズして推論。一見意味無さそうだけどある。 ➢ 目的:ネットワークアーキテクチャ的に消失リスクのある小さい物体への対応 Inference flow YoloV7 Fold0,1,4 Post Processing Get Largest mask with connected component From @fnands notebook A Quick YOLOv7 Baseline [Inference] | Kaggle Revise the NMS code. Make it utilize the mask of the fold selected by NMS. And, add post processing. Only the largest masks were retained. Resolution 640 Conf_th = 0.001 Iou_th = 0.55 Remove dilate YOLOv7基本アーキテクチャ
  11. 16

  12. 他の上位陣との共通する重要ポイント (細かい話) (分かりやすいまとめを参考:Kaggle HuBMAP2023 上位解法まとめと復習 (zenn.dev)) • このコンペで重要だったことは以下の点 1. Dilation(膨張処理)

    の使用の有無(本質ではないため、この資料では未説明) 2. どの ラベラーが付けたデータセット を信じるか • 1. Dilationの有無 – コンペ最中、なぜかDilation処理を入れると性能が向上する、、、という情報が流通。 – これを入れてる人は、結果的にランキングダウンしまくり。 – 有効だったシーンでは Detection は画像の端での漏れがあったりで、タイルでの繋がりを保管するために効いていただけとの予測。 • 2. どの ラベラーが付けたデータセット を信じるか – 上位陣は、一般人ラベルデータ の不確かさを正しく見極める分析を行なっているように見える – そのため、Pseudo Labeling(擬似ラベル)で付け直すなどの処理が現れている • 全体的には、Clean Data(Dataset) を見つける/作成することで、安定して高いスコアを出すようなモ デリングができるかが勝敗の要因 – 結論:データの扱い > モデルの組み合わせ のコンペティション
  13. その他 • うまくいかなかったこと – 疑似ラベル付与を2週行う – Yolov8(学習と推論) – NMS⇒WSF(WBFのインスタンスセグメンテーション)への変更 •

    Sartorius: TTA with Weighted Segments Fusion | Kaggle • うまく実装できなかったこと – tileを結合して再生成したデータで学習 • やれなかったこと – stain toolで水増し – 外部データを使った学習 • 提出できなかった最高性能のモデル – 入力解像度を800まで上げたモデル • 小さい認識結果の影響度が高かったのかも。
  14. 参考にした関連コンペ • Wheat detection(物体検出):Global Wheat Detection | Kaggle – 疑似ラベル付与などを参考にした

    • Global Wheat Detection | Kaggle • 細胞検出コンペ(インスタンスセグ):Sartorius - Cell Instance Segmentation – 疑似ラベルと最後のファインチューニングの思想を参考にした • https://acro-engineer.hatenablog.com/entry/2022/02/02/120000
  15. DATE 21/xx まとめ • 参加コンペ: – HuBMAP - Hacking the

    Human Vasculature – 概要は右参照 • 順位: – 10位/1064チーム(ゴールド) • アプローチ概要: – YoloV7 、疑似ラベルによるデータ水増し、YOLOパラメータ調整 • 所感: – 全体: • 専門ラベル、素人ラベル、未ラベル全てをどう使うかがポイントなコンペに感じた。 • LBとPBが相関していたので提出に迷いはなかった。(privateはそんな良くな かったけど。。) • 疑似ラベルを付与して良いものを選定するという、過去のコンペのソリューション を参考にしたおかげで性能が出たと思う。 • 20230803時点で公開されてる上位のソリューションは基本的に疑似ラベル あるので、思想は同じと思う。 – マインド面: • モチベーションコントロールが難しかった・・・ • 途中から性能が上がらずモチベーション低下・・・ • まだまだモチベーションコントロールと実験量が3流だな、、、と反省。 コンペ 概要 細胞のインスタンスセグメンテーションを実施(血管、糸球体、分からない) 血管の検出結果だけがスコアリングされる。 ①専門家ラベラーデータ、②素人ラベラーのデータ、③ラベル無しが配布 結果