연세대 인공지능학회 YAI

[논문 리뷰] Mask R-CNN 본문

컴퓨터비전 : CV/CV 논문 리뷰

[논문 리뷰] Mask R-CNN

_YAI_ 2023. 1. 14. 17:20

Mask R-CNN

* YAI 9기 박찬혁님이 비전 논문 심화팀에서 작성한 글입니다.

논문

Mask R-CNN

Instance Segmentation

이번 논문인 Mask RCNN은 Instance segmentation을 task로 한다. Deeplab이 목적으로 했던 semantic segmentation은 이미지 속의 객체들에 대한 segmentation과 classification은 진행하지만 서로 다른 객체가 같은 클래스에 속해있다면 구분하지 못했다. 하지만 Instance segmentation은 오른쪽의 사진과 같이 같은 클래스의 다른 객체들을 다 구분할 수 있다.

R-CNN

R-CNN은 CNN을 object detection에 최초로 적용시킨 모델이다. RCNN은 두가지 stage로 나누어져서 진행된다. 먼저 이미지에서 물체의 영역만을 찾아내는 Region proposal을 거친 후 각 region에 대해 classification을 거치게 된다. 이때 영역을 찾는 region proposal 과정에서 물체가 있는 곳으로 추정되는 영역이 2000개 정도로 모아지고 이 영역들을 이미지에서 잘라내어 classification을 시작한다. 2000개의 영역을 잘라내어 각각 classfication을 진행하다보니 학습하는 시간이 너무 오래걸리고 inference에 걸리는 시간도 당시 47초 정도로 너무 오래걸린다. 또한 영역을 찾아내는 방법 또한 딥러닝 모델이 아닌 알고리즘으로 학습이 이루어지지 않아서 이 부분에서의 성능 향상이 어려웠다. 이를 보완하기 위해 나온 후속 논문이 Fast R-CNN이다.

Fast R-CNN

Fast R-CNN은 R-CNN의 stage를 바꿨다. R-CNN은 이미지에서 RoI(Region of Interest)를 구하고 각각의 region들에 대해 cnn을 통과시켰다면 Fast R-CNN은 이미지를 바로 CNN에 통과시킨다. CNN의 결과로 8_8의 feature map이 나오게 되는데 이 feature map에서 region을 추출하여 softmax와 bounding box regression을 통과한다. 해당 region은 R-CNN과 같이 원본 이미지에서 나온 region들이다. 이 region의 크기는 다 다르지만 이를 같은 비율로 feature map에 투영시킨 후 2_2로 pooling을 실시하기 때문에 마지막 결과에 사용되는 크기는 모두 같아진다. R-CNN에 비해 CNN을 한 번만 통과하게 되기 때문에 학습과 inference 시간이 많이 줄어들었다. 하지만 resion proposal 과정은 변화가 없었기 때문에 성능 향상을 기대할 수 없다는 점과 알고리즘 자체가 시간이 오래 걸린다는 단점은 여전했다.

Faster R-CNN

Faster R-CNN은 RPN(Region Proposal Network)가 핵심이다. Faster R-CNN 이전에 사용되었던 region proposal 과정을 딥러닝을 대체한 방식이다. 기존의 region proposal은 알고리즘이다 보니 CPU에서 실행이 되었고 딥러닝 모델 부분은 GPU에서 실행이 되었기 때문에 데이터가 오가는 시간도 상대적으로 길고 CPU에서 병목 현상이 생겨 inference가 빠르게 실행되기 어려웠다.

이러한 단점들을 보완하기 위해 알고리즘 방식이 아닌 딥러닝 네트워크 형식인 RPN을 도입했다. 전체적인 흐름은 이미지를 CNN에 통과시켜 얻은 feature map을 RPN에 전달하여 적당한 region proposal을 뽑는다. 그 후에 해당 region들로 feature map에 RoI pooling을 사용하여 각 region마다 고정된 크기의 feature map을 뽑는다. 그 후는 fast rcnn과 같다. softmax를 통과시켜 classification을 수행한다.

Mask R-CNN

Mask R-CNN은 Faster R-CNN에 object mask를 위한 branch를 병렬로 추가시킨 모델이다. Mask R-CNN은 Instance Segmentation을 task로 하고있다. Instance segmentation은 object detection과 segmentation을 동시에 진행할 수 있어야 한다. 따라서 기존의 Faster R-CNN은 object detection을 수행하고 mask segmentation을 수행하기 위한 레이어를 추가한 구조이다.

Faster R-CNN은 이미지 내의 한 물체에 대해 class label과 bounding box offset이라는 두가지의 output을 출력한다. Mask R-CNN는 이에 각 물체에 대한 segmentation을 추가로 출력하는 구조이다. Faster R-CNN은 앞에 서술했듯이 RPN을 통해 region들을 구한 후 다음단계로 넘어간다. Mask R-CNN은 첫번째 단계인 RPN까지는 Faster R-CNN과 같다. 그 이후에는 기존 Faster R-CNN에 있던 class와 box offset을 구하는 과정과 병렬로 각 RoI에 대해 binbary mask를 구하게 된다. 보통 다른 모델들은 masking을 한 이후에 그 결과를 바탕으로 classification을 진행하지만 여기서는 병렬로 진행하게 된다.

여러가지 과정이 하나의 stage에서 진행되기 때문에 각 RoI에 대한 multi task loss를 아래와 같이 정의했다.

$$
L=L_{cls}+L_{box}+L_{mask}
$$

$L_{cls}$는 classification loss, $L_{box}$는 bounding box loss, $L_{mask}$는 masking 결과에 대한 loss이다. Mask loss의 경우는 각 RoI에 대해 $Km^2$의 차원을 가진다. 이때 K는 class의 개수, m은 이미지 해상도이다. K번째 class의 GT에 대한 RoI에 대해서 $L_{mask}$는 k에 대해서만 정의되게 된다. 이로 인해 다른 클래스에 대한 정보는 loss에 관여하지 않게 되기 때문에 네트워크가 각 class에 대해 독립적인 mask를 생성할 수 있게 된다.

masking 과정에서는 각 클래스별로 해당 픽셀에 클래스에 속하는 object가 들어있는지 아닌지를 binary, 즉 0과 1로 결과를 내게 된다. 최종 결과 출력때는 각 RoI마다 모든 클래스에 대한 마스크 binary 이미지가 출력되게 된다.

RoI Allign

기존의 RoI Pooling은 feature map에 대해 RoI로 출력된 부분을 찾아 잘라내고 안의 값들을 Pooling하여 작은 feature map을 만들어내는 과정이였다. 이 과정에서 RoI와 feature map의 픽셀이 정확히 맞지 않는다면 pooling을 할 때 단순히 크기를 반올림 함으로써 문제를 해결했다. 이 방법은 object detection에서는 잘 작동했다.

하지만 segmentation으로 넘어오고 나서는 한 픽셀 단위의 중요함이 커졌다. 따라서 단순한 반올림은 픽셀의 위치에 큰 영향을 주기 때문에 Mask R-CNN에서는 RoI Align이라는 방법을 사용했다.

 

RoI align은 bilinear interpolation을 사용하여 최대한 값을 잃지 않고 feature map에서 RoI만큼을 잘라내는 방법이다. RoI를 원하는 크기의 bin으로 나눈 후 각 bin에 4개의 점을 찍는다. 그 후 각 점에 bilinear interpolation을 통해 네 점의 값을 구한 뒤 그 점들의 평균, 혹은 최대값으로 각 bin의 값을 정하게 된다.

위 그림은 전체 네트워크의 도식이다.

  • 먼저 cnn 네트워크를 통해 feature map을 뽑는다
  • feature map을 RPN에 통과시켜 RoI들을 얻는다.
  • RoI align을 통해 region마다 같은 크기의 작은 feature map을 추출한다.
  • 만들어낸 feature map들을 각각 classification, bbox regression, mask branch에 통과시킨다.

Masking map의 경우 최종 feature map을 upsampling하여 원래의 이미지와 같은 크기로 만든 후 classification의 결과에 따라 mask image를 고르게 된다.

Comments