MONAI 0.7 : モジュール概要 (3) ネットワーク, 評価, ワークフロー 等 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/01/2021 (0.7.0)
* 本ページは、MONAI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- テレワーク & オンライン授業を支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
MONAI 0.7 : モジュール概要 (3) ネットワーク, 評価, ワークフロー 等
損失
医用画像の研究では、一般的なコンピュータビジョン・タスクでは通常は使用されない、ドメイン固有の損失関数があります。MONAI の重要なモジュールとして、DiceLoss, GeneralizedDiceLoss, MaskedDiceLoss, TverskyLoss, FocalLoss, DiceCELoss と DiceFocalLoss 等のような、これらの損失関数は PyTorch で実装されています。
Optimizers
MONAI は訓練は再調整の進捗を高速化する手助けをするために optimizer で幾つかの高度な機能を提供しています。例えば、Novograd optimizer は従来の optimizer よりも高速に収束させるために使用できます。そしてユーザは generate_param_groups ユティリティ API に基づいて、モデル層のために異なる学習率を簡単に定義することができます。
もう一つの重要な機能は LearningRateFinder です。学習率の範囲テストは 2 つの境界の間で事前訓練実行の学習率を線形または指数関数的な方法で増加させます。それはネットワークが学習率の範囲でどのくらい上手く訓練できるか、そして最適な学習率が何かについての有益な情報を提供します。LearningRateFinder チュートリアル は API 使用方法のサンプルを示します。
ネットワーク・アーキテクチャ
幾つかの深層ニューラルネットワーク・アーキテクチャが医用画像解析タスクに特に効果的であることを示しています。MONAI は柔軟性とコード可読性の両方を目的とするリファレンス・ネットワークを実装しています。
1. 事前定義された層とブロック
一般的なネットワーク層とブロックを活用するため、MONAI は幾つかの事前定義された層とブロックを提供しています、これらは 1D, 2D と 3D ネットワークと互換です。ユーザは層ファクトリをカスタマイズされたネットワークに簡単に統合できます。
例えば :
# import MONAI’s layer factory
from monai.networks.layers import Conv
# adds a transposed convolution layer to the network
# which is compatible with different spatial dimensions.
name, dimension = Conv.CONVTRANS, 3
conv_type = Conv[name, dimension]
add_module('conv1', conv_type(in_channels, out_channels, kernel_size=1, bias=False))
2. 一般的な 2D/3D ネットワークの実装
そして、UNet, DynUNet, DenseNet, GAN, AHNet, VNet, SENet(と SEResNet, SEResNeXt), SegResNet, EfficientNet, Attention ベースのトランスフォーマー・ネットワークのような、中間的なブロックと一般的なネットワークの幾つかの 1D/2D/3D 互換な実装もあります、総てのネットワークは torch.jit.script に基づいた PyTorch シリアライゼーション・パイプラインをサポートできます。
3. 最終層を再調整するためのネットワーク・アダプター
スクラッチから訓練する代わりに、新しい学習タスクのために既存のモデルを活用して、ネットワークの最終層を再調整する場合が良くあります。MONAI はモデルの最終層を畳込み層や完全結合層で簡単に置き換えられる NetAdapter を提供しています。典型的な使用例は ImageNet で訓練された Torchvision モデル を他の学習タスクに適応させることです。
評価
モデル推論を実行してモデル品質を評価するために、MONAI は広く使用されている関連アプローチのためのリファレンス実装を提供しています。現在、幾つかのポピュラーな評価メトリクスと推論パターンが含まれています :
1. スライディング・ウィンドウ推論
大きなボリューム上のモデル推論のためには、スライディングウィンドウ・アプローチは、柔軟なメモリ要件を持ちながら、高い性能を獲得するためのポピュラーな選択です (代わりに、MONAI を使用する モデル並列訓練 についての最新の研究もチェックしてください)。それはまたより良い性能のためにオーバーラップされたウィンドウを処理するために overlap と blending_mode configuration もサポートします。
典型的なプロセスは :
- 元の画像上で連続するウィンドウを選択する。
- 総てのウィンドウが解析されるまでバッチ処理されたウィンドウ推論を反復的に実行する。
- 推論出力を単一のセグメンテーション・マップに集約する。
- 結果をファイルに保存するか評価メトリクスを計算する。
脾臓 3D セグメンテーション・チュートリアル は検証のために SlidingWindow 推論を利用しています。
2. 医療タスクのためのメトリクス
医用画像固有のモデルの品質を測定するために様々な有用な評価メトリクスが使用されています。MONAI は既に多くの医療ドメイン固有のメトリクスを実装しています、次のようなものです : 平均 Dice, ROCAUC, 混同行列, ハウスドルフ距離, サーフェス距離, オクルージョン感度。
例えば、セグメンテーション・タスクのために平均 Dice スコアが、分類タスクのために ROC 曲線の下の面積 (ROCAUC) が使用できます。より多くのオプションを統合し続けます。
- MONAI はメトリクスのための柔軟な基底 API を提供しています。MONAI メトリクスの基底クラスは反復とエポックベースのメトリクスの両方のための基本計算ロジックを実装しています。それらはカスタマイズされたメトリクスのための良い開始点です。
- 総てのメトリクスはデータ並列計算をサポートします。Cumulative 基底クラスでは、中間的なメトリックの結果を自動的にバッファリングし、累積し、分散プロセスに渡り同期し、そして最終結果のために集約できます。マルチプロセス計算サンプル は、マルチプロセス環境で保存された予測とラベルに基づいてメトリクスを計算する方法を示します。
- 総てのメトリクスモジュールはバッチ first テンソルとチャネル first テンソルのリストを扱うことができます。
3. メトリクス・レポート生成
評価の間、ユーザは通常は総ての入力画像のメトリクスを保存してから、深層学習パイプラインを改良するために悪いケースを分析します。
メトリクスの詳細情報をセーブするため、MONAI はハンドラ MetricsSaver を提供しました、これは最終的なメトリック値、総ての入力画像の総てのモデル出力チャネルの raw メトリック、(平均, 中央値, max, min <int>パーセンタイル, std 等の) 演算のメトリクス要約レポートをセーブすることができます。前立腺データセットによる検証の MeanDice レポートは以下のようなものです :
視覚化
単純な点と曲線プロットとは別に、MONAI は多次元データを TensorBoard でGIF アニメとして可視化するために直感的なインターフェイスを提供します。これは、例えば、ボリュメトリック入力、セグメンテーションマップと中間的な特徴マップを可視化することによりモデルの素早い定性的な評価を提供できるでしょう。可視化の実行可能なサンプルは UNet 訓練サンプル で利用可能です。
そして訓練済みの分類モデルのためのクラス活性マッピングを可視化するため、MONAI は 2D と 3D モデルの両方のための CAM, GradCAM, GradCAM++ API を提供します :
上のサンプルは、肺 CT 病変分類モデルから GradCAM/GradCAM++ を計算することにより生成されます。
結果の書き出し
現在、MONAI はモデル出力をセグメンテーション・タスクのためには NIfTI ファイルや PNG ファイル、そして分類タスクのためには CSV ファイルとして書き出すことをサポートしています。そして writer は入力画像の original_shape or original_affine 情報に従ってデータ spacing, 向きや shape を復元することができます。
形式の豊富なセットもまた、出力から自動的に計算される関連する統計情報と評価メトリクスと一緒に間もなくサポートされます。
ワークフロー
訓練と評価実験を素早くセットアップするため、MONAI はモジュールを大幅に単純化して高速なプロトタイピングを可能にするワークフローのセットを提供します。
これらの機能はドメイン固有のコンポーネントと一般的な機械学習プロセスを切り離します。それらはまた (AutoML, 連合学習のような) 高位アプリケーションのための unify API のセットも提供します。ワークフローの trainer と evaluator は pytorch-ignite エンジンとイベントハンドラ・メカニズムと互換です。MONAI には独立に trainer や evaluator に装着する豊富なイベントハンドラがあり、ユーザはワークフローに追加のカスタムイベントを登録できます。
1. 一般的なワークフロー・パイプライン
ワークフローと MONAI イベントハンドラの幾つかは以下で示されます :
end-to-end な訓練と評価サンプルは Workflow サンプル で利用可能です。
2. EnsembleEvaluator
モデル・アンサンブルはより正確でより安定した出力を獲得するために機械学習と深層学習領域でポピュラーなストラテジーです。典型的な実践は :
- 総ての訓練データセットを K folds に分割します。
- 総ての K-1 folds データで K 個のモデルを訓練します。
- 総ての K 個のモデルでテストデータ上の推論を実行します。
- 最終結果として重み付けて平均値を計算するか、最も一般的な値を投票で決定します。
実践の詳細は モデルアンサンブル・チュートリアル にあります。
異なる入力/出力クラスのための転移学習
転移学習は一般的で効率的な訓練アプローチで、特に訓練のための大規模なデータセットを得ることが困難である可能性がある医療固有ドメインで。従って事前訓練済みのチェックポイントからの転移学習はモデルメトリクスを大幅に改善して訓練時間を短縮できます。
MONAI は訓練の前のワークフローのためにチェックポイントをロードする CheckpointLoader を提供しました、そしてそれは現在のネットワークの幾つかの層名がチェックポイントと一致しなかったり、幾つかの層 shape がチェックポイントに一致しないことを許容します、それは現在のタスクが異なる画像クラスや出力クラスを持つ場合に有用である可能性があります。
4. NVIDIA Clara MMAR に基づく転移学習
MMAR (医療モデル ARchive) はモデル開発ライフサイクルの間に生成される総てのアーティファクトを体系化するためのデータ構造を定義します。NVIDIA Clara は医療ドメイン固有のモデルの豊富な既存の MMAR を提供しています。そしてこれらの MMAR は、総ての開発タスクを実行するワークスペースを提供する configuration とスクリプトを含む、モデルについての総ての情報を含みます。Nvidia GPU クラウド上でリリースされた事前訓練済みの MMAR をより良く利用するために、MONAI は MMAR にアクセスするために pythonic API を提供しています。
以下の図は損失曲線と検証スコアを訓練エポック数に従って、次のために比較しています : (1) スクラッチからの訓練 (緑色のライン), (2) 事前訓練済みのモデルの適用 (マゼンタ色のライン), (3) 事前訓練済みモデルからの訓練 (青色のライン) (チュートリアルは transfer_mmar で利用可能です) :
5. 柔軟な後処理のためにバッチデータを分離する (= Decollate)
decollate batch が MONAI v0.6 で導入されました、これは後処理変換を単純化して、様々なデータ shape のデータのバッチ上で柔軟な後に続く演算を提供します。それはバッチ化データをテンソルのリストに分離できます、以下のようなメリットのためにです :
- 各項目に対して独立に後処理変換を可能にします – ランダム化された変換がバッチの各予測された項目のために異なって適用できます。
- 変換 API を単純化して入力検証の負荷を軽減します、何故なら今では前処理と後処理変換は「チャネル first」入力形式をサポートする必要があるだけだからです。
- 予測のための Invertd と異なる shape を持つ反転したデータを可能にします、データ項目がリストにあり単一のテンソルにスタックされていないからです。
- 柔軟なメトリック計算でバッチ first テンソルとチャネル first テンソルのリストの両方を可能にします。
decollate batch の典型的なプロセスは以下のように図示されます (例として batch_size=N モデル予測とラベルによる) :decollate batch チュートリアル は PyTorch ネイティブ・ワークフローに基づく詳細な使用例を示します。
6. ポピュラーなワークフローへの統合が簡単
pytorch-ignite ベースの monai.engines を除いて、MONAI モジュールの殆どは独立に使用できて他のソフトウェア・パッケージと組み合わせることもできます。例えば、MONAI は PyTorch-Lightning と Catalyst のようなポピュラーなフレームワークに容易に統合できます : Lightning セグメンテーション と Lightning + TorchIO チュートリアルは MONAI モジュールを使用する PyTorch Lightning を示し、そして Catalyst セグメンテーション は MONAI モジュールを使用する Catalyst プログラムを示します。
以上
- 各項目に対して独立に後処理変換を可能にします – ランダム化された変換がバッチの各予測された項目のために異なって適用できます。