Pyradiomics: Membuat Profil PyRadiomik untuk segmentasi yang sangat besar

Dibuat pada 17 Mei 2017  ·  14Komentar  ·  Sumber: AIM-Harvard/pyradiomics

Membuat profil PyRadiomics menggunakan testcase brain1 (256x256x25 voxels) dengan full-mask

  • semua fitur
  • Asli, LoG (sigma 1, 3 dan 5), Wavelet (1 level, 8 dekomposisi)

Kemacetan utama:

  • GLSZM 12x dihitung matriks: 76,9% dari waktu yang dibutuhkan (+/- 22 menit total, 1,86 menit per perhitungan)
  • Filter gambar ShapStatistics (diimplementasikan di SimpleITK): 16,7% dari waktu yang dibutuhkan (+/- 5 menit), hanya diterapkan sekali

profiling_full_mask

cc @Radiomics/developers

enhancement

Komentar yang paling membantu

Terima kasih telah memeriksa @JoostJM -- sepertinya kita harus memutuskan apakah kita ingin mempertahankan implementasi independen di PyRadiomics atau bekerja sama dengan komunitas ITK untuk meningkatkan fitur tekstur itk. Reaksi spontan saya adalah lebih memilih upaya komunitas bila memungkinkan dengan harapan pemeliharaan kode akan lebih efisien.

Semua 14 komentar

@blezek Saya menyebutkan kepada @Radiomics/developers bahwa Anda akan mengalami masalah kinerja saat mencoba menjalankan radiomik di seluruh otak sehingga @JoostJM melakukan beberapa pembuatan profil.

Dari sekilas melihat kode glszm , sepertinya ada banyak ruang untuk mengoptimalkan implementasi.

Dalam kode c? Apakah Anda memiliki gambaran umum bagaimana mengatasinya?

Dalam kode c? Apakah Anda memiliki gambaran umum bagaimana mengatasinya?

Mungkin Anda bisa melihat menggunakan utas

Yang mengatakan, menggunakan perpustakaan threading dengan vanilla c-code mungkin sulit untuk dilakukan dengan benar.

Saya pikir penerapan filter ITK dapat membantu (misalnya sebagai modul jarak jauh ITK), Anda kemudian dapat memanfaatkan pemrosesan gambar lintas platform dan API threading terkait. Filter ini kemudian dapat diekspos melalui SimpleITK

@thewtex @jbvimort Saya ingin tahu apakah Anda memiliki wawasan ...

Akan lebih baik untuk melakukan profil baris demi baris, tetapi tebakan saya adalah bahwa rangkaian loop bersarang ini cukup lambat. Menggunakan numpy.where bisa lambat dan akan mengembalikan daftar koordinat yang panjang.

Saya setuju dengan Jc bahwa operasi ini dapat di-thread karena setiap piksel harus independen. Juga implementasi SimpleITK dari operasi yang sama bisa menjadi jauh lebih cepat. Tapi saya akan mulai dengan membuat profil dan melihat apakah ada cara untuk mengoptimalkan kode python yang ada.

@pieper tampaknya dari profil bahwa Joost sudah melakukannya _calculateCMatrix menyumbang 77% dari waktu (jika saya menafsirkan ringkasan profil dengan benar):

image

Begitu, Anda mengatakan mungkin ini adalah panggilan ke kode ini . Ya, itu terlihat cukup intensif komputasi.

Jika fitur ini benar-benar informatif, dan topeng gambar besar adalah kasus penggunaan yang penting, maka bisa jadi pendekatan "pustaka C sederhana" tidak cukup, setidaknya seperti yang ditulis saat ini. Mungkin saja kode C bisa dibuat lebih efisien atau kita bisa mengeksplorasi opsi lain seperti threading atau implementasi SimpleITK.

@pieper @fedorov , memang panggilan ini . Saya akan melihat apakah itu dapat dibuat lebih efisien.

Jika saya bisa, saya ingin menghindari penerapan multithreading di sini karena 2 alasan

  1. Ini akan membuat kode C jauh lebih kompleks
  2. Ketika saya mengekstrak fitur untuk beberapa pasien, saya meningkatkan kinerja dengan multithreading pada tingkat pasien (setiap pasien 1 utas). Dalam hal ini saya juga mengatur SimpleITK ke utas tunggal untuk menjaga utas tunggal ekstraksi pasien.

Di samping catatan, alasan utama c GLSZM membutuhkan banyak waktu adalah karena komputasinya intensif dan disebut 12 kali (karena gambar turunan yang berbeda). Panggilan ke filter gambar labelshapestatistics SimpleITK adalah panggilan yang membutuhkan waktu paling lama untuk satu panggilan, tetapi hanya dipanggil sekali per ekstraksi (karena merupakan bagian dari bentuk dan oleh karena itu hanya dihitung pada jenis gambar asli).

Mengenai panggilan SimpleITK yang memakan banyak waktu. Ini karena menghitung diameter Feret (diameter 3D maks).
Jika Anda menjalankan filter gambar labelshapestatistics dengan dan tanpa diameter ini ada perbedaan waktu 271053 ms vs 21 ms untuk full brain1 mask.

Sekarang ada paket Python yang tersedia, itk-texturefeatures , yang bisa membantu di sini.

@JoostJM apakah anda sudah melihat itk-texturefeatures? Akan menarik untuk mengetahui bagaimana perbandingan kecepatan dan apakah set fitur sebanding dengan apa yang kita miliki sekarang dalam kode pyradiomik c.

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

@pieper , Baru saja kembali dari liburan saya, tapi ini tentu menarik.
Saya melakukan beberapa pembuatan profil menggunakan PyRadiomics dan topeng serupa seperti yang digunakan oleh fitur tekstur ITK (menerapkan perhitungan bijaksana voxel). Performa Piradiomik mirip dengan performa ITK.
Kelemahan dari PyRadiomics adalah hanya menerima input 3D, sedangkan ITK adalah N-dimensi. Di sisi lain, PyRadiomics mencapai kinerja ini dalam mode utas tunggal dan menghitung lebih banyak fitur di GLCM.

Dalam hal fitur, sejauh yang saya lihat definisi rumusnya serupa, dengan PyRadiomics memiliki lebih banyak fitur di GLCM dan GLRLM. Fitur tekstur ITK hanya memiliki 1 fitur (dalam GLCM) yang tidak dimiliki PyRadiomics, tetapi ini adalah implementasi serupa dari correlation PyRadiomics, yang ada di ITK sebagai Haralick's correlation . Meskipun demikian, saya masih percaya akan ada beberapa perbedaan, karena fakta bahwa ITK menggunakan jumlah bin tetap, berbeda dengan lebar bin tetap di PyRadiomics.

Terima kasih telah memeriksa @JoostJM -- sepertinya kita harus memutuskan apakah kita ingin mempertahankan implementasi independen di PyRadiomics atau bekerja sama dengan komunitas ITK untuk meningkatkan fitur tekstur itk. Reaksi spontan saya adalah lebih memilih upaya komunitas bila memungkinkan dengan harapan pemeliharaan kode akan lebih efisien.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat