Pyradiomics: ํŠน์ง• ์ถ”์ถœ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ (๋งŽ์€ ์ด๋ฏธ์ง€ ๋˜๋Š” ํฐ ๋งˆ์Šคํฌ)

์— ๋งŒ๋“  2017๋…„ 09์›” 27์ผ  ยท  16์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AIM-Harvard/pyradiomics

PyRadiomics๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํ”„์˜ ๋งŽ์€ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์™€ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€์™€ ๋งˆ์Šคํฌ๋กœ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ ๋™์ผํ•œ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง• ์ถ”์ถœ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์— ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์š”์ ์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ (์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์ž์ฒด๋„ ํฌํ•จ)๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค์†Œ ํฐ ๋งˆ์Šคํฌ (-> numpy์˜ "MemoryError")์—์„œ ํŠน์„ฑ ์ถ”์ถœ ์‹œ๋„
  2. ๋ฃจํ”„์˜ ๋งŽ์€ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์ž‘์€ ๋งˆ์Šคํฌ์—์„œ ํŠน์ง• ์ถ”์ถœ ์‹œ๋„ (-> SimpleITK์˜ "์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํŒจ")

์‚ฌ์šฉํ•  ๋งˆ์Šคํฌ๋ฅผ ์ •์˜ํ•˜๋Š” ์ค„์— ์ฃผ์„์„ ์ถ”๊ฐ€ (ํ•ด์ œ)ํ•˜์—ฌ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์Šคํฌ๋ฆฝํŠธ์˜ ์ƒ๋‹จ ์„ค๋ช… ์ฃผ์„ ์ฐธ์กฐ).

์‚ฌ๋ก€ 1 ์˜ค๋ฅ˜ ์„ธ๋ถ€ ์ •๋ณด :

Traceback (most recent call last):
  File "d:/Test/PyRadiomicsMemoryExceptionTest.py", line 26, in <module>
    featureVector = extractor.execute(testImage, testMask, label = 1)
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\featureextractor.py", line 354, in execute
    shapeClass = self.featureClasses['shape'](croppedImage, croppedMask, **self.settings)
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\shape.py", line 62, in __init__
    physicalCoordinates -= numpy.mean(physicalCoordinates, axis=0)  # Centered at 0
  File "C:\Python36\lib\site-packages\numpy\core\fromnumeric.py", line 2909, in mean
    out=out, **kwargs)
  File "C:\Python36\lib\site-packages\numpy\core\_methods.py", line 54, in _mean
    arr = asanyarray(a)
  File "C:\Python36\lib\site-packages\numpy\core\numeric.py", line 583, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
MemoryError

์‚ฌ๋ก€ 2 ์˜ค๋ฅ˜ ์„ธ๋ถ€ ์ •๋ณด :

Traceback (most recent call last):
  File "d:/Test/PyRadiomicsMemoryExceptionTest.py", line 27, in <module>
    featureVector = extractor.execute(testImage, testMask, label = 1)
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\featureextractor.py", line 346, in execute
    featureVector.update(self.getProvenance(imageFilepath, maskFilepath, mask))
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\featureextractor.py", line 440, in getProvenance
    for k, v in six.iteritems(generalinfoClass.execute()):
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\generalinfo.py", line 56, in execute
    generalInfo[el] = getattr(self, 'get%sValue' % el)()
  File "C:\Python36\lib\site-packages\pyradiomics-1.2.0.post25.dev0+g13274ff-py3.6-win32.egg\radiomics\generalinfo.py", line 139, in getVolumeNumValue
    ccif.Execute(labelMap)
  File "C:\Python36\lib\site-packages\SimpleITK\SimpleITK.py", line 20584, in Execute
    return _SimpleITK.ConnectedComponentImageFilter_Execute(self, *args)
RuntimeError: Exception thrown in SimpleITK ConnectedComponentImageFilter_Execute: c:\d\vs14-win32-pkg\simpleitk-build\itk-prefix\include\itk-4.11\itkImportImageContainer.hxx:199:
Failed to allocate memory for image.
bug installation

๋ชจ๋“  16 ๋Œ“๊ธ€

@JoostJM ์€ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์กฐ์‚ฌ๊ฐ€

@michaelschwier , ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํŠนํžˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” RAM์˜ ์–‘์€ ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ?
๋‚ด ์ปดํ“จํ„ฐ (Intel Xeon E3-1241, 16GB RAM)์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ํฐ ๋งˆ์Šคํฌ์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค (11 ๋ฒˆ ๋ฐ˜๋ณต, ๋ฉ”๋ชจ๋ฆฌ ๋ณ€๋™, ์ตœ๋Œ€ ์•ฝ 2GB ํ•„์š”). ๋˜ํ•œ ์ž‘์€ ๋งˆ์Šคํฌ ์Šคํฌ๋ฆฝํŠธ (ํ˜„์žฌ ์ตœ๋Œ€ 600 ํšŒ ๋ฐ˜๋ณต, ์—ฌ์ „ํžˆ ์•ฝ 200MB์˜ RAM ๋งŒ ํ•„์š”)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ๋„ ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฐœ์—ด์ฒด ํ•™์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” RAM์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์ถ”์ถœ ์ „์— ์„ธ๋ถ„ํ™”์˜ ๊ฒฝ๊ณ„ ์ƒ์ž์—์„œ ์ž๋ฅด๊ธฐ์™€ ๊ฐ™์ด ๊ธฐ๋Šฅ์„ ์ถ”์ถœ ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ์œ„ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ด๋ฏธ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠนํžˆ ํฐ ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ…์Šค์ฒ˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ํ™•์ธ์„ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ ๋ง์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์ž‘์€ ๊ฐ€๋ฉด์€ ํฅ๋ฏธ๋กœ์šด ๊ฒฝ์šฐ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— RAM์ด ์ฒ˜์Œ ๋ช‡ ๋ฒˆ์˜ ๋ฐ˜๋ณต์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ ๋ฒกํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ์†Œ๋ชจ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ด ๋ฒกํ„ฐ๋Š” ๋ฐœ์—ด์ฒด ํ•™์˜ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์ง€๋งŒ).

์†”๋ฃจ์…˜์— ๊ด€ํ•ด์„œ. ์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฏธ์ง€ ํ•„ํ„ฐ์—์„œ ์ด๋ฏธ ์‹คํŒจํ•œ ๊ฒฝ์šฐ (๋Œ€ํ˜• ๋งˆ์Šคํฌ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ) ์–ด๋–ป๊ฒŒํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋งค๊ฐœ ๋ณ€์ˆ˜ additionalInfo ๋กœ ์„ค์ • False ),ํ•˜์ง€๋งŒ ๋‚œ ๊ทธ๊ฒƒ์„ ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„ (์ง‘์•ฝ์  ๊ฐ€์žฅ ๋งŽ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์‹คํŒจ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ ํ•จ์ˆ˜๋Š” ํ…์Šค์ฒ˜ ๋งคํŠธ๋ฆญ์Šค์˜ ์ƒ์„ฑ์ž…๋‹ˆ๋‹ค).
์ž‘์€ ๋งˆ์Šคํฌ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ์˜ˆ์ œ์— ํฌํ•จ ๋œ ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ ์‚ฌ๋ก€์˜ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋กํ•˜๋ฏ€๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐฐ์น˜๋ฅผ ์ถ”์ถœ ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•˜๋‚˜์˜ ์ผ€์ด์Šค๊ฐ€ ์ถ”์ถœํ•˜๊ธฐ์— ๋„ˆ๋ฌด ํฐ ๊ฒฝ์šฐ์—๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ์‹คํŒจํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ด์ „์— ์ถ”์ถœ ๋œ ์ผ€์ด์Šค ์ˆ˜์— ๊ด€๊ณ„์—†์ด).

๋‹ค์Œ์€ ๋Œ€๊ทœ๋ชจ (~ 20 ํšŒ ๋ฐ˜๋ณต) ๋ฐ ์†Œ๊ทœ๋ชจ (~ 200 ํšŒ ๋ฐ˜๋ณต)์˜ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

ํฐ ๋งˆ์Šคํฌ
large mask memory usage

์ž‘์€ ๋งˆ์Šคํฌ
small mask memory usage

์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์œ ์‚ฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
mprof ( pip install memory_profiler )๋ผ๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ python C:\Python27\scripts\mprof run PyRadiomicsMemoryExceptionTest.py ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ๋๋‚˜๋ฉด python C:\Python27\scripts\mprof plot ์‹คํ–‰ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@JoostJM ๊ท€ํ•˜์˜ ๋‹ต๋ณ€๊ณผ ์ปดํ“จํ„ฐ ํ™•์ธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‚ด ์‹œ์Šคํ…œ์€ 16GB RAM์˜ Win 10์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ค‘์— ํ•ญ์ƒ ์ตœ์†Œ 7GB RAM์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ mprof ๋„๊ตฌ๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (Windows) ์†Œ์Šค ์ฝ”๋“œ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!?

๊ทธ๋ž˜์„œ ์ž‘์—… ๊ด€๋ฆฌ์ž์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ•˜์—ฌ "์ˆ˜๋™"๋ฉ”๋ชจ๋ฆฌ ๊ด€์ฐฐ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํฐ ๋งˆ์Šคํฌ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์•ฝ 1.4GB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ๋งˆ์Šคํฌ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋Š” 350MB ์ด์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” 32 ๋น„ํŠธ Python์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€ํ˜• ๋งˆ์Šคํฌ์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (1.4์—์„œ ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„์˜ ํ—ค๋“œ ๋ฃธ์ด ์žˆ์–ด์•ผ ํ•จ). ์ž‘์€ ๋งˆ์Šคํฌ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ 64 ๋น„ํŠธ Python๋„ ๋ณ‘๋ ฌ๋กœ ์„ค์น˜ํ–ˆ์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (์ž‘์€ ๋งˆ์Šคํฌ์—์„œ> 1200 ํšŒ ๋ฐ˜๋ณต). ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  32 ๋น„ํŠธ์—์„œ ์ž‘์€ ๋งˆ์Šคํฌ์˜ ์ถฉ๋Œ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚˜๋ฅผ ๋‹นํ˜น์Šค๋Ÿฝ๊ฒŒํ•ฉ๋‹ˆ๋‹ค ...

32 ๋น„ํŠธ ํŒŒ์ด์ฌ์„ ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์Šฌ๋ผ์ด์„œ์—์„œ 32 ๋น„ํŠธ ํ”Œ๋žซํผ์„ ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ 32 ๋น„ํŠธ๋กœ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  64 ๋น„ํŠธ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฉ”๋ชจ๋ฅผ ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

32 ๋น„ํŠธ ํŒŒ์ด์ฌ์„ ๊ฐ์ง€ ํ•  ๋•Œ ๋ฐœ์—ด์ฒด ํ•™ ์„ค์น˜ ์ค‘์— ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!?

32 ๋น„ํŠธ ํŒŒ์ด์ฌ์„ ๊ฐ์ง€ ํ•  ๋•Œ ๋ฐœ์—ด์ฒด ํ•™ ์„ค์น˜ ์ค‘์— ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!?

ํ™•์‹คํžˆ, ๋˜๋Š” ์‹ฌ์ง€์–ด ์‹คํŒจ.

์•ˆ๋…•ํ•˜์„ธ์š”,

radiomics๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด test.py๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ radiomics์—์„œ featureextractor๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค๊ณ  ๊ณ„์† ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ 7 ๊ฐœ์˜ ์บก์…˜์ด ํฌํ•จ ๋œ 6500 ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ›ˆ๋ จ ์šฉ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
Ubuntu๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ Yukti-09, ์–ด๋–ค ํŠน์ • ๋ฒ„์ „์˜ PyRadiomics๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ๋งค๊ฐœ ๋ณ€์ˆ˜? ์‹œ์Šคํ…œ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ RAM์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐœ์—ด์ฒด ํ•™์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

์•ˆ๋…•ํ•˜์„ธ์š”! ํŠน์ง• ์ถ”์ถœ์„ ์œ„ํ•ด 2D ์ดˆ์ŒํŒŒ ์ด๋ฏธ์ง€์— pyradiomics๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ‘์ƒ์„  ์ดˆ์ŒํŒŒ ์ด๋ฏธ์ง€์˜ ๊ฐœ๋ฐฉํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ ๊ฐ€๋Šฅ : thyroid http://cimalab.intec.co/applications/thyroid/). ๋งˆ์Šคํฌ์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์—ด์ฒด ํ•™์„ ์‚ฌ์šฉํ•  ๋•Œ 16GB ์ด์ƒ์˜ RAM์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์—ด์ฒด ํ•™์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ „์ฒด ์ด๋ฏธ์ง€์— ๋น„ํ•ด ๋งˆ์Šคํฌ๊ฐ€ ์ž‘์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํฌ์—์„œ ํŠน์ง• ์ถ”์ถœ์ด ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค๋ฉด ์ „์ฒด ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์นœ์ ˆํ•˜๊ฒŒ ์•ˆ๋‚ดํ•˜์‹ญ์‹œ์˜ค.

@ReemaParekh ์ถ”์ถœ์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

360x560 ํฌ๊ธฐ์˜ USG ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๊ณ  ์ „์ฒด ์ด๋ฏธ์ง€์— ์ ์šฉ๋˜๋Š” ๋ณต์…€ ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ ์ถ”์ถœ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ชจ๋“  ๊ธฐ๋Šฅ ํด๋ž˜์Šค๊ฐ€ ์ผœ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ 20GB์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
featureVector = extractor.execute (image3D, mask, label = 1, voxelBased = True)
์„ค์ • = {}
์„ค์ • [ 'binWidth'] = 25

settings [ 'force2D'] = True

settings [ 'force2Ddimension'] = 0
settings [ 'maskedKernel'] = ์ฐธ
์„ค์ • [ 'initvalue'] = 5
settings [ 'kernelRadius'] = 10
settings [ 'resampledPixelSpacing'] = None # [3,3,3]์€ ๋ฆฌ์ƒ˜ํ”Œ๋ง์„ ์ •์˜ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค (ํฌ๊ธฐ๊ฐ€ 3x3x3mm ์ธ ๋ณต์…€).
settings [ 'interpolator'] = sitk.sitkBSpline
settings [ 'verbose'] = True

๋˜ํ•œ force2D = true๋ผ๊ณ  ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ์—„์ฒญ๋‚œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 2D ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์ง€๋งŒ, pyradiomics ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ง์ ‘ 2D ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ 2D ์ด๋ฏธ์ง€๋ฅผ 1x360x560์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. image3D = sitk.JoinSeries (์ด๋ฏธ์ง€)

๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์œ ํšจํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ณต์…€ ๊ธฐ๋ฐ˜ ๋ผ๋””์˜ค ๋งˆ์ดํฌ๋Š” ํŠนํžˆ ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ float64 ๋งต์ด๋ฉฐ, ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ ๋งต๋‹น 360x560x8 ๋ฐ”์ดํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ค‘๊ฐ„ ๊ธฐ๋Šฅ ๋งต, ๋งˆ์Šคํฌ ๋“ฑ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

force2D์™€ ๊ด€๋ จํ•˜์—ฌ "์ž‘๋™ํ•˜์ง€ ์•Š์Œ"์ด๋ž€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? PyRadiomics๋Š” force2D๋ฅผ ํ™œ์„ฑํ™” ํ•  ๋•Œ์ฒ˜๋Ÿผ ์ง„์ •ํ•œ 2D ์ž…๋ ฅ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ž˜๋ชป ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ์ด๋ฏธ์ง€์˜ sitk ํฌ๊ธฐ๊ฐ€ 1x360x560์ด๋ฉด x๊ฐ€ force2D ์ฐจ์›์ž„์„ ์˜๋ฏธํ•˜๋ฉฐ force2Ddimension์„ 2๋กœ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํ–‰๋ ฌ์˜ ์ด์œ ๋Š” z, y๋กœ ์ •๋ ฌ ๋จ). , x).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰