Pyradiomics: 非常に大きなセグメンテーションのためのPyRadiomicsのプロファイリング

作成日 2017年05月17日  ·  14コメント  ·  ソース: AIM-Harvard/pyradiomics

フルマスクを使用したbrain1テストケース(256x256x25ボクセル)を使用したPyRadiomicsのプロファイリング

  • すべての機能
  • オリジナル、LoG(シグマ1、3、5)、ウェーブレット(1レベル、8分解)

主なボトルネック:

  • GLSZM 12x計算マトリックス:必要な時間の76.9%(合計+/- 22分、計算あたり1.86分)
  • ShapStatistics画像フィルター(SimpleITKで実装):必要な時間の16.7%(+/- 5分)、1回のみ適用

profiling_full_mask

cc @ Radiomics / Developers

enhancement

最も参考になるコメント

@JoostJMをチェックしていただきありがとうございます

全てのコメント14件

@blezek @ Radiomics / Developersに、脳全体でラジオミクスを実行しようとするとパフォーマンスの問題が発生することを伝えたので、 @ JoostJMがプロファイリングを行いました。

glszmコードを

Cコードでは? あなたはそれに取り組む方法の一般的な考えを持っていますか?

Cコードでは? あなたはそれに取り組む方法の一般的な考えを持っていますか?

スレッドの使用を検討できるかもしれません

はいえ、バニラCコードでスレッドライブラリを使用することは、正しく

ITKフィルターの実装が役立つと思います(たとえば、ITKリモートモジュールとして)。そうすれば、関連するクロスプラットフォームの画像処理とスレッド化APIを活用できるようになります。 これらのフィルターは、SimpleITKを介して公開できます。

@ thewtex @ jbvimort何か洞察がありますか...

行ごとのプロファイリングを行うのが最善ですが、このネストされたループのセットはかなり遅いと思い

各ピクセルは独立している必要があるため、この操作はスレッド化できるというJcに同意します。 また、同じ操作のSimpleITK実装は、はるかに高速になる可能性があります。 しかし、私はプロファイリングを行うことから始めて、既存のPythonコードを最適化する方法があるかどうかを確認します。

@pieperプロファイリングから、Joostはすでに_calculateCMatrixが77%の時間を占めているように

image

なるほど、あなたはおそらくこのコードへの呼び出しだと言っています。 はい、それはかなり計算集約的に見えます。

この機能が本当に有益であり、大きな画像マスクが重要なユースケースである場合、少なくとも現在書かれているように、「単純なCライブラリ」アプローチでは不十分である可能性があります。 Cコードをより効率的にすることも、スレッド化やSimpleITK実装などの他のオプションを検討することもできます。

@pieper @fedorov 、それは確かにこの呼び出しです。 それをもっと効率的にすることができるかどうか見てみましょう。

可能であれば、2つの理由から、ここでマルチスレッドを実装することは避けたいと思います。

  1. これにより、Cコードがさらに複雑になります
  2. 複数の患者の特徴を抽出する場合、患者レベルでマルチスレッド化することでパフォーマンスを向上させます(各患者に1つのスレッド)。 この場合、SimpleITKをシングルスレッドに設定して、患者の抽出をシングルスレッドに保ちます。

ちなみに、c GLSZMに非常に時間がかかる主な理由は、計算量が多く、12回呼び出されるためです(派生画像が異なるため)。 SimpleITKのlabelshapestatistics画像フィルターの呼び出しは、1回の呼び出しに最も時間がかかる呼び出しですが、抽出ごとに1回だけ呼び出されます(形状の一部であるため、元の画像タイプでのみ計算されるため)。

SimpleITKの呼び出しには時間がかかります。 これは、計算されたフェレット直径(最大3D直径)によるものです。
この直径がある場合とない場合でlabelshapestatistics画像フィルターを実行すると、完全なbrain1マスクの21ミリ秒に対して271053ミリ秒の時間差があります。

ここで役立つPythonパッケージitk-texturefeaturesが利用可能になりました。

@JoostJM itk-texturefeaturesを見ましたか? 速度がどのように比較され、機能セットがピラディオミクスcコードに現在あるものと同等であるかどうかを知ることは興味深いでしょう。

https://github.com/InsightSoftwareConsortium/ITKTextureFeatures/tree/2b4544fe39e0ece9007a0d87c396c8586c6f4df5/example

@pieper 、休暇から戻った
PyRadiomicsと、ITKテクスチャ機能で使用されているのと同様のマスクを使用してプロファイリングを行いました(ボクセル単位の計算を実装しています)。 ピラディオミクスのパフォーマンスはITKのパフォーマンスと同様でした。
PyRadiomicsの欠点は、ITKがN次元であるのに対し、3D入力のみを受け入れることです。 一方、PyRadiomicsは、シングルスレッドモードでこのパフォーマンスを実現し、GLCMでより多くの機能を計算します。

機能セットに関しては、私が見る限り、式の定義は類似しており、PyRadiomicsはGLCMとGLRLMの両方でより多くの機能を備えています。 ITKのテクスチャ機能には、PyRadiomicsにはない機能が(GLCMで)1つしかありませんが、これはPyRadiomicsのcorrelation同様の実装であり、ITKにはHaralick's correlationとして存在します。 そうは言っても、ITKがPyRadiomicsの固定ビン幅ではなく、固定ビンカウントを使用したため、まだいくつかの違いがあると思います。

@JoostJMをチェックしていただきありがとうございます

このページは役に立ちましたか?
0 / 5 - 0 評価