ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (model) Mask_RCNN GPU 메모리 최적화
    IT 지식 창고 2020. 8. 16. 22:35

    Image Detection 모델 중에 Mask RCNN의 모델은 생각보다 꽤 무거운 모델입니다. 그러다보니, 고가의 GPU환경이 아닌 곳에서 모델을 사용하려면 GPU 메모리가 부족한 현상을 가지게 됩니다. 

     

    본 깃허브에는 GPU를 최적화 하는 방법을 적어놨으며, google colab에서도 힘겹게 사용하면서 경험했기에 간단히 번역해서 정리 해두려고 합니다. 아무리 최소화해봐도 GPU 메모리가 4기가인 곳에선 out of memory error가 뜨더군요,,,

    원문 : https://github.com/matterport/Mask_RCNN/wiki

     

    matterport/Mask_RCNN

    Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow - matterport/Mask_RCNN

    github.com

    서론

    Mask RCNN은 메모리 효율성보다 정확성을 위해 디자인이 되어 있어, light-weight 모델이 아닙니다. 만약에 작은 GPU를 사용한다면, 메모리초과 에러가 뜰 것입니다. 이상적으로 GPU 메모리는 12기가이상이 되어야 하지만, 적절한 방법과 절충안을 선택한다면 작은 GPU메모리에서도 훈련이 가능할 것입니다.

     

    본론

    다음의 메모리를 최소화하는 리스트들은 config.py안의 내용들을 수정해야합니다.

     

    1. 작은 backbone network를 사용합니다. 현재 default는 resnet101로 되어 있으며, 메모리 load를 크게 줄일 수 있으며, 대부분 어플리케이션에서 충분합니다. 그리고 학습을 더 빠르게 합니다.

    BACKBONE = "resnet50"

     

    2. 학습 레이어를 줄입니다. 

    model.train(..., layers='heads', ...)  # Train heads branches (least memory)
    model.train(..., layers='3+', ...)     # Train resnet stage 3 and up
    model.train(..., layers='4+', ...)     # Train resnet stage 4 and up
    model.train(..., layers='all', ...)    # Train all layers (most memory)

     

    3. Image size를 줄입니다. default는 1024x1024이므로, 이미지 사이즈를 줄이면 요구하는 메모리도 줄어들 것이고 학습시간도 줄어들 것입니다.

    IMAGE_MIN_DIM = 800
    IMAGE_MAX_DIM = 1024

    위 예보다 더줄여서 테스트 해보는 것도 하나의 방법일 것입니다.

     

    4. 배치사이즈를 줄입니다. 논문저자가 사용하는 기본 값은 이미 작습니다.( GPU 1개당 2개의 이미지를 처리하며, 8개의 GPU를 사용했습니다.) 

    GPU_COUNT = 1
    IMAGES_PER_GPU = 2

     

    5. 두번째 단계에서 학습하는 ROI를 더 줄입니다.

    TRAIN_ROIS_PER_IMAGE = 200

     

    6. 만약에 본인의 이미지에 많은 object가 없는 경우에는 이미지당 최대 instances의 수를 줄입니다. 

    MAX_GT_INSTANCES = 100

     

    7. 전체이미지가 아닌 자른 이미지를 학습합니다. 이 방법은 nucleus sample에서 더 큰 이미지에서 512x512로 자르는데 사용됩니다.

    # Random crops of size 512x512
    IMAGE_RESIZE_MODE = "crop"
    IMAGE_MIN_DIM = 512
    IMAGE_MAX_DIM = 512

    중요한 것은 config.py에서 7가지 부분의 설명을 읽거나 Mask RCNN논문을 읽으면서 변하는 학습시간과 정확도에 영향을 봐야한다고 합니다. 

     

    사실 본인도 output 도출하기위해 급급하여 깊이 있는 논문리뷰와 이해도를 가지진 못하여, 주관적인 내용이 없이 순전히 짧게 번역한 것밖에 되지 않는 것 같습니다...

     

    추가로, RGB-D 또는 Grayscale images를 학습하려면 코드의 일부분을 수정해야 합니다. 이부분은 위 원문에 마지막에 있으니 직접 확인하는 게 좋을 것 같습니다.

    댓글

Designed by Tistory.