논문 읽기/Segmentation

[논문 읽기] Mask R-CNN(2017) 리뷰

AI 꿈나무 2021. 4. 8. 18:39
반응형

 이번에 읽어볼 논문은 Mask R-CNN 입니다.

 

 Mask R-CNN은 instance segmentation을 수행할 목적으로 Faster R-CNN에 mask brancch를 추가한 것입니다. 그리고 기존에 object detection을 목적으로 사용하는 RoI pool을 RoI Align로 대체합니다. 또한 좀 더 다양한 scale의 proposals를 얻기 위해, FPN이 추가되었습니다. 아래 그림에서 전체 구조를 확인해보실 수 있습니다.

 

출처: https://ganghee-lee.tistory.com/40

Loss function

 Mask R-CNN은 2-stage 기법입니다. 첫 번째 stage는 RPN에서 RoI를 생성합니다. 두 번째 stage는 생성한 RoI를 이용하여 class, boxx offset, binary mask를 출력합니다. mask branch는 각 RoI에 대하여 Km^2 차원의 출력값을 생성합니다. K는 class의 수이고, m은 mask의 크기입니다. mask branch는 각 K class에 대해 출력값을 계산하고, class branch에서 출력한 class를 지닌 mask만 Loss를 계산합니다.

 

 학습 동안에 각 RoI에 대하여 multi-task loss를 계산합니다.

u: true class, p: 출력값 확률 분포 
v: ground truth box, t: predicted box

  $L_{mask}$는 Crosss-entropy loss 입니다. $L_{mask}$는 class branch에서 출력한 K class에 대해서만 loss를 계산합니다.

 

Mask Branch

 

 Class, box branch는 공간 정보가 필요없기 때문에 FC layer를 사용하여 (channels 1,1) vector로 변환됩니다. 하지만 Mask Branch는 공간 정보를 추출해야 합니다. 따라서 convolution를 사용하여 pixel-to-pixel 정보를 추출합니다.

 

 Mask branch는 FCN을 사용하여 각 RoI에 대해 m x m 크기의 K개 mask를 예측합니다. K는 class 수를 의미합니다. FC layer를 사용하지 않는 이유는 공간 정보를 활용하기 위함입니다.

 

RoIAlign

 RoIPool을 RoIAlign으로 대체했을 떄의 성능 비교입니다.

 

 기존 Obejct Detection 모델에서 사용하는 RoIPool은 인접 pixel 공간 정보를 훼손시킵니다. RoI bin을 생성하기 위해 pooling 연산을 거치면서 크기가 소수점이 있는 경우 반올림 연산에 의해 강제로 무시하기 때문입니다. 따라서 segmentation task에서 RoIPool은 적합하지 않습니다.

출처: https://ganghee-lee.tistory.com/40

 

 Mask R-CNN은 RoIPool 대신에 RoI Align을 사용합니다. RoI Align은 RoI를 RoI bin에 담기 위해, bilinear interpolation을 사용합니다. 논문만 읽어서는 구체적으로 어떻게 작동하는지 이해가 잘 안가네요. 구현 코드를 직접 확인해봐야 할 것 같습니다.

 

출처: https://ganghee-lee.tistory.com/40

 

Performance

 Instance Segmentation

 

 Object Detection

 object detection에서는 mask branch를 무시하고 학습을 합니다. RoI Align은 object detection에도 효과가 있습니다.


참고자료

[1] openaccess.thecvf.com/content_ICCV_2017/papers/He_Mask_R-CNN_ICCV_2017_paper.pdf

[2] ganghee-lee.tistory.com/40

반응형