深層学習モデルでバーチャルスライドのSemantic segmentation
「Semantic segmentaion」と調べれば、街中の写真から人、車、道、木などにラベル(マスク)を付けて分類している画像が出てくるだろう。このようにSemantic segmentationでは同じ意味を持つピクセルを同じ値に分類する。 Semantic segmentationの深層学習モデルでは入力画像と同じサイズのラベル画像を返す。U-Netはその代表例である。医学画像ではレントゲンやMRI画像から腫瘍部の検出に使われる例が多い。 本書では病理画像全体から複数の構造をSemantic segmentationで分類する方法を紹介する。次に示すのが一連のワークフローである。 「QuPathでラベル付け ➔ TensorFlowでSemantic segmentationモデルの訓練 ➔ バーチャルスライドでSemantic segmentation ➔ (必要であれば)再ラベリングと再学習」 ※ 病理画像はバーチャルスライドシステムで取得したものを想定しているが、巨大なtiffファイル等でも同様のアプローチができる。 巨大な画像はそのままでは入力には扱えない。そこで画像を小さくタイル状に分割してモデルの学習、予測に使用する。「タイル画像の切り貼り」、「タイル端に存在する構造の扱い」など、モデルを通す前後の処理も必須になる。 バーチャルスライドデータの操作、学習用画像の用意、予測結果の可視化にはフリーソフトのQuPathを使用する。本書でも必要なQuPathスクリプトは紹介するが不足であれば以下の本を参照してほしい。 https://zenn.dev/rchiji/books/51fbb88213582d ⚫: QuPath ⚪: Python 🔴: Python + Tensorflow 🧱: タイル画像処理 -------------------- 機械学習用のローカル環境としては以下を使用した。 ・Windows 11(16コア/32スレッド、128GBメモリ、CドライブにM2.SSD) ・Tensorflow 2.10 ・NVIDIA GeForce RTX3090 --------------------
はじめに
環境構築 - Python, QuPath -
----- 【第1部】 正解データの用意 -----
⚫ デモデータの用意
⚫ 学習用画像の用意1 - 正解ラベルを付ける領域を書き出す -
⚫ 学習用画像の用意2 - QuPathでラベル付け -
⚫ 🧱 学習用画像の用意3 - 正解ラベルタイル画像の書き出し -
-----【第2部】 TensorflowでSemantic segmentationモデルの作成 -----
⚪ 配布pythonファイルについて
🔴 モデルに画像を渡す1 - tf.data.Dataset -
🔴 モデルに画像を渡す2 - 画像の読み込み機能 -
🔴 モデルに画像を渡す3 - データ拡張 -
🔴 モデルに画像を渡す4 - 値の範囲/データ型の変更/チャンネル軸操作(One-hot encoding, squeeze) -
🔴 モデルに画像を渡す5 - Datasetに機能を適応 -
🔴 学習データと検証データに分ける
🔴 モデルの用意 - Segmentation-modelsライブラリ -
🔴 モデルのコンパイル - 損失関数/評価関数/最適化関数 -
🔴 学習の実行
🔴 ネットワーク構造の検証 - Segmentation-modelsライブラリ -
🔴 損失の検証
🔴 訓練途中でのcallback - 早期終了/ReduceLROnPlateau/Checkpoint/TensorBoard -
🔴 混合精度の利用
🔴 訓練済みモデルの保存と読み込み
-----【第3部】 訓練済みモデルでバーチャルスライドを予測 -----
⚫ 予測画像の用意1 - 予測対象領域の作成 -
⚫ 🧱 予測画像の用意2 - 予測対象領域からタイル画像を書き出し -
🔴 タイル画像から予測ラベル作成
⚪🧱 タイルの貼り合わせ - Center crop -
⚪🧱 タイルの貼り合わせ - 予測確率の平均 -
🔴🧱 予測後ラベルを書き出さない方法 - LabelHolder -
⚪ Whole Slide Labelの書き出し
⚫ 予測結果をQuPathで可視化する
⚪ Object座標をjsonファイルとして書き出す
⚫ 学習用画像の追加作成
⚫ 再学習用画像に正解ラベル付け
🔴⚫ モデルの訓練 ~ 予測(2回目以降の流れ)
-----【第4部】 Semantic segmentationモデルを自作する -----
🔴 モデルの構造を視覚的に確認
🔴 モデルを自作してみよう1 - Functional APIのモデル構築例 -
🔴 モデルを自作してみよう2 - U-Net構築 -
🔴 モデルを自作してみよう3 - U-Net構築 2 -
🔴 損失関数を自作する
🔴 評価関数を自作する
🔴 損失にclass weightをつける
🔴 デコーダー各層から損失を求める
-----【第5部】 OpenSlide -----
⚪ PythonでOpenSlideを扱う
⚪ 予測用タイル画像の座標算出
🔴 予測から1枚絵まで
-----【第6部】 QuPath内でPythonスクリプトを実行 -----
⚫ ProcessBuilderの使い方
⚫ QuPathからPython仮想環境のGPUを認識させる
⚪ Pythonスクリプトの用意
⚫ QuPath内で予測 ➔ Object反映まで
最後に
- 公開
- 本文更新
- 文章量
- 約347,050字
- 価格
- 500円