Skip to content

Mask R CNN

Ildoo Kim edited this page Apr 17, 2018 · 6 revisions

Mask R-CNN

  • 문제 정의 상으로 이미지 상에서 각각의 셀은 찾아서 segmentation하는 문제로써, 2가지 방법으로 떠올랐던 것들이 Semantic Segmentation(관련 링크), Instance Segmentation이었다. Mask R-CNN은 ICCV 2017에서 best awards로 선정된 facebook ai research에서 낸 논문이다.

Implementation

  • Mask R-CNN, Faster R-CNN 등의 모델은 구현 시 속도 이슈로 인하여 CUDA로 구현된 컴포넌트 들이 있다(NMS, ROI Align & Pooling). 따라서 해당 소스 코드들을 빌드하여 framework에서 이용할 수 있도록 하였음.

  • Kaggle에서 Heng CherKeng은 자신이 수행하였던 다양한 기법들을 공개하는 걸로 유명한데(Kaggle에서 글을 남기는 것도 순위가 메겨지는 데 현재 2위) 베이스 코드로 공유한 코드를 기반으로 리팩토링하였음.

  • 코드 관련 discussion : https://www.kaggle.com/c/data-science-bowl-2018/discussion/49692

  • Refactoring 된 repository : https://github.com/ildoonet/data-science-bowl-2018-maskrcnn

Experiments

  • 베이스 코드는 Resnet50 + FPN(Feature Pyramid Network) 을 feature network로 이루어져 있었음. 코드를 리팩토링하여 구현된 결과는 LB(MIOU) 0.456이었음.

  • Best LB : 0.468

  • 실험 사항

    • 데이터 관련

      1. 이미지 분포 관련
        • 기존의 stage1 의 학습 데이터셋에서는 드물게 있었던 purple 색 계열의 이미지가 매우 안 잡혔었음.
        • 관련된 dataset 30여장을 추가하여 학습한 결과 해당 이미지들에 대해 robust하게 prediction할 수 있었음
      2. 이미지 개수 부족
        • 총 학습 데이터셋의 수가 670장으로 mask rcnn을 학습시키기에 매우 부족한 양이었음.
        • external을 수백장 정도 추가하여 학습하였는데, 데이터 distribution이 달라 stage 1의 데이터셋에 대해서 validation 성능이 나오지 않았었음.
      3. augmentation
        • 기본적으로 flip, rotation, sheer 등이 적용되어 있었고 그 외 추가적으로 random color, occlusion method 등을 적용하였었음.
        • 성능에서 큰 차이를 보이지 못하였으나, 몇몇 취약했던 (흰 색으로 가려진 셀 등) 부분에서 좋은 결과를 보임.
    • 모델 관련

      1. feature network
        • base code의 feature network는 위에서 언급하였다시피 ResNet50 + FPN 조합이었는데, Henker의 언급으로 SE-ResNext50의 성능이 좋다 하였음.
        • ResNext, SE-Resnet, SE-ResNext를 구현해보았음. 3가지 모두 성능에서 큰 차이는 없었으나, 가장 좋은 모델로 0.012의 LB 향상이 있었음.
      2. hyper parameter
        • base code에서 더 좋은 hyper parameter를 찾을 수 있지 않을까 하여 hyperopt를 이용하였음.
        • 하지만 mask nms 관련한 한 가지 파라미터를 제외하고는 거의 변동이 없었음.
          • base code가 거의 최적의 파라미터였을 것으로 추정
        • RPN, RCNN 등에서 hyper parameter를 조절해가며 Mask R-CNN이 동작하는 방식에 대해 이해하는 좋은 기회가 되었음.
  • Future Works

    • 데이터 관련 : 한정된 데이터셋에서 detection 계열 모델을 학습시키는 것이 매우 어려움. 더욱 많은 데이터셋에서 pre-train한 모델을 feature net으로 하는 것이 성능 차이가 많이 난다는 조언을 얻음.
    • fully framework base 코드 구현을 통해 모바일 등에서도 동작시켜 보고 싶음.
    • 스파게티 코드에서 제대로 구조화 시켜 코드 정리를 해보고 싶음.