-
resample이란?전반적인 딥러닝 기법 2021. 11. 3. 20:41
mr, 혹은 ct image와 같은 3d data를 이용하여 딥러닝 알고리즘을 돌리다보면 매우 높은 확률로 memory error가 발생하게 된다. 충분히 작은 배치 사이즈를 사용하고, 모델 layer 개수도 줄이는 등 여러 작업을 해도 memory 에러가 발생한다면, 고려해볼 수 있는 또다른 방법은 바로 resize이다. resample은 crop과 약간 다른 개념을 가지고 있는데, crop은 직접적으로 image matrix를 잘라내기 때문에 FOV가 달라지지만 (일반적으로는 줄어들지만) resample을 하게 되면 pixel 혹은 voxel의 사이즈에 변화를 주는 것이기 때문에 FOV는 유지가 된다. 따라서 만약 나의 데이터가 모두 중요해 crop을 할 수 없는 상황이라면 resample해주는 것도 고려해보면 좋다.
이번 포스트에서는 image size, pixel size(resolution) 그리고 FOV를 중점으로 하여 resample 개념에 대해 설명하도록 하겠다.
1. Resample
resample이란 쉽게 말해 interpolation 기법을 사용하여 FOV는 유지하며 image size에 변화를 주는 기법이다. 예시 그림에 있는 a,b,c는 모두 공 두개를 포함하고 있는, 다시 말해 FOV가 모두 동일한 그림이다. 하지만 각각의 픽셀 사이즈, 혹은 픽셀 개수가 다르기 때문에 화질적인 측면에서 약간씩 다르게 보인다.
a의 경우 pixel 사이즈(=resolution)가 1mm, 1mm 라고 가정하고 image matrix 사이즈가 300 x 300이라 하자. 이때의 FOV는 resolution x image size라고 보면 되기 때문에 300 x 300이 될 것이다. b의 경우처럼 내가 만약 interpolation의 기법을 통해 pixel들의 묶음을 하나로 합친다고 할때, 다시 말해 pixel의 크기를 30, 30 mm로 바꾼다면 FOV는 변함이 없어야 하기 때문에 image size가 10으로 줄어들게 될 것이다. 따라서 matrix의 사이즈도 줄며 pixel 하나의 크기도 늘어나기 때문에 이미지 사이즈는 줄어들지만 화질이 약간 깨져보일 수 있다.
마찬가지로 c의 경우 pixel size를 10mm, 10mm로 변경한다면, image size(=matrix size)는 30 x 30이 될것이다.
따라서 resample을 하게 된다면, image size는 줄어들어 computation cost는 줄어들지만, 너무 과도하게 줄이다보면 화질이 깨져 오히려 학습에 방해가 될 수 있기 때문에 적절한 resolution값을 지정해주어야 한다.
2. pytorch에서 resample하는 법
만약 CT, MR image를 사용한다면, nilearn이라는 라이브러리를 사용할 것이다. nib.load로 image를 불러와주면 단순하게 nilearn에 내장되어 있는 함수인 resample_img를 이용하여 손쉽게 resample해줄 수 있다. 자세한 내용은 아래 사이트를 참고하면 된다.
https://nilearn.github.io/modules/generated/nilearn.image.resample_img.html
image = nib.load(path) image_t = resample_img(img = image, target_affine = np.dia([1.5, 1.5, 1.5]), interpolation= 'continuous' )) arr = image_t.get_fdata()
만약 내가 resample을 제대로 했는지 확인하고 싶다면 마찬가지로 nilearn에서 제공하는 plotting 함수를 이용할 수 있다.
https://nilearn.github.io/modules/generated/nilearn.plotting.plot_img.html
from nilearn import plotting plotting.plot_img(FILE_PATH)
'전반적인 딥러닝 기법' 카테고리의 다른 글
MR Image preprocessing (2) : N4 bias field correction (0) 2022.02.03 MR Image preprocessing (1) : histogram equalization (0) 2022.01.26 Style Transfer과 Cycle Gan에 대하여 : "화풍 따라하기" (0) 2021.10.20 [Pytorch] 다른 조합의 Train, Validation set 나누기 (0) 2021.09.15 Scheduler (0) 2021.08.13