배움 기록/Deep Learning

[Segmentation, MONAI] CUDA out of memory 와의 전쟁 -1. Spacingd를 통한 해상도 조정

Spezi 2023. 7. 7. 00:57
반응형

요즘 segmentaion을 하는 중 가장 열받는 오류.... cuda ,,,, out of memory....

batch size 도 줄였고, 네트워크에 사용되는 patch 개수도 줄인상황.. 물론 이미지의 사이즈도!

물론 모델 자체를 바꿔볼수도 있지만, 다른 방법들이 무엇이 있나 고민 중.

그래서 이미지의 해상도를 건드려보기로 결정.

transform를 monai 라이브러리를 이용해 사용하고 있다.

from monai.transforms import (
    CropForegroundd,
    Compose,
    EnsureTyped,
    EnsureChannelFirstd,
    LoadImaged,
    Orientationd,
    RandCropByPosNegLabeld,
    ScaleIntensityRanged,
    Spacingd,
    DivisiblePadd,
    SpatialCrop,
    SpatialPadd
)

train_transforms = Compose(
            [
                LoadImaged(keys=["image", "label"]),
                EnsureChannelFirstd(keys=("image", "label")),
                Spacingd(keys=["image", "label"], pixdim=(1.5, 1.5, 2.0), mode=("bilinear", "nearest")),
                # 등등등
                ])

MONAI(medical open netwrok for AI)의 라이브러리를 통해 사용할 수 있는 Spacingd 변환 이미지의 해상도를 조정하는 데 사용할 수 있다. 그래서 해상도를 낮춤으로써 cuda memeory 에러를 막아볼 수 있지 않을까 생각한다. 

  • keys : 이 변환을 image와 label에 적용할 거니까 저위에 image, label둘다 들어감
  • pixdim: 픽셀 크기를 조정함. 예를 들어 pixdim 이 0.5,0.5,0.5라면 x, y, z 각 축에 대해 픽셀 크기가 절반으로 줄어든다는 뜻. 참고로 해상도와 픽셀크기는 역상관계이다. 픽셀크기가 올라가면 해상도가 줄어들고, 픽셀크기가 작아지면 해상도가 높아진다. 픽셀크기를 절반으로 줄이면, 같은 공간에 더 많은 픽셀이 들어갈 수 있다. 그렇게 되면 같은 공간에 더 많은 디테일을 표현할 수 있겠죠? 그래서 해상도가 올라간다. 그래서 나 같은 경우 해상도를 줄이기 위해 1.5,1.5,2.0을 쓴 것이다.
    • X 축: 해상도는 1.0 / 1.5 = 0.67 (원래의 67%)
    • Y 축: 해상도는 1.0 / 1.5 = 0.67 (원래의 67%)
    • Z 축: 해상도는 1.0 / 2.0 = 0.5 (원래의 50%)
  • mode: interpolation 방법을 나타낸다. bilinear interpolation이나 nearest neighbor interpolation 등.

더 자세한 내용은 아래의 페이지에서 확인가능합니다.

https://docs.monai.io/en/stable/transforms.html

 

Transforms — MONAI 1.2.0 Documentation

weights – can be a list or tuple of numbers for input data with shape: [E, C, H, W[, D]]. or a Numpy ndarray or a PyTorch Tensor data. the weights will be added to input data from highest dimension, for example: 1. if the weights only has 1 dimension, it

docs.monai.io

 

 

 

 


배움을 기록하기 위한 공간입니다. 

수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D

반응형