Slide 1

Slide 1 text

2023年のコンペを思い出しながら改めてまとめてみた 初めて取った金メダル、いまでも考え方は使えそうですね。 kaggle HuBMAP - Hacking the Human Vasculature 発表者:すぐーーーー

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

3 コンペ概要:目的、背景 ◆ コンペの開催の背景: ➢ 人体の生物学的構造を特定するフレームワークとして「Vasculature Common Coordinate Framework(VCCF)」が存在 ➢ VCCFでは、人体の血管を主要なナビゲーションシステムとして利用 ➢ しかし、微小血管についての研究者の知識にはまだ不明な点が多いため、コンペによりVCCFの改善を行いたい 健康なヒトの腎臓組織スライドの2次元PAS染色組織画像の、 毛細血管、細動脈、細静脈などの微小血管構造のインスタンスをセグメンテーションするコンペ インスタンス セグメンテーション処理 検出結果 各細胞を個々に検出 入力画像

Slide 4

Slide 4 text

4 コンペ概要:配布データについて(このコンペの最大のポイント、そして最大のややこしいポイント) “14の病理サンプル”と”2種類のアノテータ+ラベル無し”により作られたデータセット 各病理サンプルは大きい画像で、512x512のサイズで分割されて配布 病理サンプル1のデータ 全体画像 各ブロックは512x512 アノテーションされたラベル 病理サンプル番号 アノテーターの種類 専門家 一般人 ラベル 無し 学習データ:合計7033枚 テストデータ:???枚 5 専門家 kaggleシステムで隠れているので 何枚あるかは不明 422枚 1011枚 5400枚 病理サンプル番号 アノテーターの種類

Slide 5

Slide 5 text

コンペ概要:評価指標 • 指標:Average Precision – 概要: • 予測された正のインスタンスのうち、 実際に正であるものの割合 – 検出とする条件: • IoU 0.6以上 検出判定のイメージ(物体検出の例) 今回は、マスクの重なりが0.6より大きくなれば検出 シンプルに言うと・・・ 各マスクにおいて、正解と6割以上マスクが重なっていて、どれだけ検出できている割合が高いか?

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

ベースライン&アプローチ紹介

Slide 8

Slide 8 text

8 ベースライン紹介:YoloV7を利用したインスタンスセグメンテーション ◆ YOLOv7とは? ➢ 物体検出でお馴染みのYOLOシリーズ一つ(最新はv12) ➢ 速度と精度が日々進化・・・ ➢ YOLOv7を拡張したYOLOV7-segというのも公開 性能比較 YOLOv7基本アーキテクチャ 3段階に分かれるピラミッド構造を持つ

Slide 9

Slide 9 text

9 ベースライン紹介:学習のさせ方 ◆ 専門家&一般人ラベラーが付与した、1433枚をまるっと学習 ◆ 画像サイズは512x512のまま 病理サンプル番号 アノテーターの種類 専門家 一般人 ラベル 無し 学習データ:合計7033枚 422枚 1011枚 5400枚

Slide 10

Slide 10 text

10 ベースライン紹介:ベースラインが抱える課題と推定原因 課題①: 被写体の検出精度が低い 推定原因①: 1: 一般人ラベラーの品質が低く悪影響 2: YOLOの入力画像サイズが小さい 課題②: そもそも検出できてない・・・ 推定原因②: 利用データの学習ドメインが狭い 使ってない データ 使ってない データ ★専門家ラベル ★一般人ラベル YOLOv7 基本アーキテクチャ

Slide 11

Slide 11 text

11 推定原因①:“検出精度が低い“の原因 ◆ 一般人ラベラーの品質が低く悪影響 ➢ アノテーションルールが異なるように見える ⚫ 専門家は判断しづらい血管はunsureラベルを付与し ているが、一般人ラベラーはunsureが少ない ➢ 一般人は、異なるモノを血管でアノテーション可能性 ◆ YOLOの入力画像サイズが小さい ➢ Yolo-segは入力画像に対して1/4サイズでマスク生成 ➢ アーキテクチャ上、小さい血管が消失するリスクがある! ➢ データに合わせた修正が必要 YOLOv7基本アーキテクチャ ★専門家ラベル(青のunsureマスクが多い) ★一般人ラベル(青のunsureマスクはほぼない)

Slide 12

Slide 12 text

DATE 12/xx 推定原因②:そもそも検出できてないことの原因 病理サンプル2 専門家 病理サンプル1 専門家 病理サンプル4 一般人ラベラー 病理サンプル3 一般人ラベラー 病理サンプル 番号 病理サンプル1~4のみだと、ドメインが狭いので未知のテストデータで性能が出ない可能性 ⇒仮説:全部の範囲で学習できていれば、未検出は起きないはず! 未ラベルデータ 未ラベルデータ どんな見た目の画像が含まれているか、T-SNEでマッピング 使ってない データ 使ってない データ 配布データ

Slide 13

Slide 13 text

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 差異化ポイント①:疑似ラベルを使った、多段階の学習フロー 目的:データ品質バラつきへの対応、ドメイン拡大への対応 差異化ポイント②:パラメータ調整 目的:小さいサイズへの対応

Slide 14

Slide 14 text

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段階目:提出モデル作成

Slide 15

Slide 15 text

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基本アーキテクチャ

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

入賞するには何が必要だった?(他の上位陣との差) 複数のモデルを用いたアンサンブルが必要だった。。。 #我々はYOLOv7のみ 3位手法 ViT、CBNetV2、ResNext101D などのアンサンブル 4位手法 MaskRCNN、CascadeRCNN、HTC、Yolov6

Slide 19

Slide 19 text

その他 • うまくいかなかったこと – 疑似ラベル付与を2週行う – Yolov8(学習と推論) – NMS⇒WSF(WBFのインスタンスセグメンテーション)への変更 • Sartorius: TTA with Weighted Segments Fusion | Kaggle • うまく実装できなかったこと – tileを結合して再生成したデータで学習 • やれなかったこと – stain toolで水増し – 外部データを使った学習 • 提出できなかった最高性能のモデル – 入力解像度を800まで上げたモデル • 小さい認識結果の影響度が高かったのかも。

Slide 20

Slide 20 text

参考にした関連コンペ • Wheat detection(物体検出):Global Wheat Detection | Kaggle – 疑似ラベル付与などを参考にした • Global Wheat Detection | Kaggle • 細胞検出コンペ(インスタンスセグ):Sartorius - Cell Instance Segmentation – 疑似ラベルと最後のファインチューニングの思想を参考にした • https://acro-engineer.hatenablog.com/entry/2022/02/02/120000

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

DATE 22/xx EOF

Slide 23

Slide 23 text

DATE 23/xx Dataset1 wsi1

Slide 24

Slide 24 text

DATE 24/xx Dataset1 wsi2

Slide 25

Slide 25 text

DATE 25/xx Dataset2 wsi1

Slide 26

Slide 26 text

DATE 26/xx Dataset2 wsi2

Slide 27

Slide 27 text

DATE 27/xx Dataset2 wsi3

Slide 28

Slide 28 text

DATE 28/xx Dataset2 wsi4