석사 과정 동안 진행한 프로젝트의 딥러닝 기술 중 하나였던 Mask R-CNN에 대하여 복습을 위해 논문 review를 진행하게 되었습니다. 제 생각을 작성한 글은 밑줄 표시하겠습니다.
요약
Faster R-CNN에서 instance mask를 prediction하는 branch를 병렬로 추가하여 Mask R-CNN 설계
이는 Faster R-CNN에서 약간의 overhead(5fps)를 추가하여 instance mask 결과를 시각화할 수 있게 개선되었다.
1. 개요
본 논문의 목표는 Faster R-CNN을 확장하여 새로운 instance segmentation framework를 제안하는 것이다.
위 Figure 1.과 같이 Mask R-CNN은 기존 Faster R-CNN에서 RoI Align 기법을 통해 얻어진 segmentation mask를 prediction하기 위한 branch를 추가하여 만들어진다.
Mask branch는 작은 FCN(Fully Convolutional layer)로 이루어져있다.
Mask branch는 각 RoI(Region of Interst)에 적용되며, pixel-to-pixel 방식으로 segmentation mask를 예측한다.
본 논문에서는 Mask R-CNN이 빠르다고 기술이 되어있지만.. 2 stage detector 특성상 region proposal network와 backbone network 두개의 모델망을 거치기 때문에 동일한 실험 환경에서 1 stage detector에 비하여 추론속도는 비교적 빠르지 못하다. 그렇기 때문에 실시간성을 보장 받기위해서는 Mask R-CNN보다 1 stage detector(YOLO, SSD, 등)을 사용하는 것이 낫다고 볼 수 있다.
기존의 Faster R-CNN은 입력과 출력사이에 pixel-to-pixel alignment 되도록 design되지 않았다. Fast R-CNN은 RoI pooling을 통해 feature들을 동일한 크기로 변환한다. 이때, pixel은 실수(floating)로 계산할 수 없기 때문에 소수점을 제거하여 pixel 수를 계산한다. 이로 인해 약간의 오차가 발생하게 되며 이를 개선하기 위해 RoI align을 Mask R-CNN에서는 적용하였다.
Mask와 class, bounding box를 분리하여 예측한다.
2. 관련 연구
R-CNN
R-CNN은 컴퓨터 비전 또는 딥러닝(RPN)을 통해 ROI(객체) 영역을 추출하고 해당 영역(ROI)을 분류하는 방식이다.
RoI pooling
feature map으로부터 고정된 길이의 저차원 벡터로 축소하는 단계를 의미
1. Fast R-CNN을 통해 feature map 추출
2. Selective search 또는 RPN을 통해 얻은 RoI 영역을 feature map에 projection
3. 미리 설정한 H*W 크기로 만들기 위해 RoI를 grid 크기로 split 시킨뒤 max pooling을 적용
위의 작업을 통해 h*w 크기의 RoI는 H*W크기의 고정된 feature vector로 변환
https://welcome-to-dewy-world.tistory.com/110
2. faster R-CNN
2번째로 설명할 faster R-CNN은 Object Detection에 사용되는 모델로, Object Detection의 시초인 R-CNN을 개선한 모델이다. 따라서 faster R-CNN을 설명하기 앞서 R-CNN을 포함한 Object Detection의 주요한 논문..
welcome-to-dewy-world.tistory.com
3. Mask R-CNN
Fast R-CNN은 class label과 bounding box offset을 출력한다. Mask R-CNN은 추가적으로 object mask를 출력한다.
우선 간단하게 Fast R-CNN을 요약하고 진행한다.
Faster R-CNN
Faster R-CNN은 두단계로 나뉜다.
1. RPN(Region Proposal Network)을 통해 RoI 추출 (R-CNN에서는 Selective Research를 통해 RoI영역을 추출하였음)
2. 각 RoI에서 RoIPool을 사용하여 특징을 추출하고 분류 및 bounding box의 offset을 얻는다.
Mask R-CNN
Mask R-CNN은 앞서 설명한 Faster R-CNN과 동일하게 두 단계를 진행한다. 두번째 단계에서 추가되는 것이 있는데, class 및 bbox offset을 예측하는 것과 동시에 Mask R-CNN도 각 RoI에 대해 binary mask를 출력한다.
Mask R-CNN에서 Loss 값은 class Loss, bbox Loss, mask Loss를 각각 구하여 최종 Loss 값을 구하는 방식으로 진행된다.
mask branch는 각각의 RoI에 대하여 class 별 binary mask를 출력한다. 즉 Mask R-CNN은 class 별로 mask를 생성한 후, 픽셀이 해당 class에 해당하는지 여부를 표시한다.
Mask Presentation : mask는 input의 공간 레이아웃을 encoding한다. FCN(Fully convolution network)을 통해 instance의 크기에 해당하는 마스크를 예측한다. 이러한 pixel 대 pixel 동작을 수행하기 위해서는 feature map에서 RoI의 위치를 정밀하게 보존할 필요가 있다. 이를 위해 RoIpooling이 아닌 RoIAlign layer를 개발한다.
RoI Align
RoI pooling은 pooling과정 중 위와 같이 손실되는 정보가 있어 문제가 있다. 이를 해결하기 위해 RoI Align을 제안한다.
아래의 예시를 따라가며 이해해보자
왼쪽 상단 모서리 좌표 : (9.25, 6)
너비 : 6.25
높이 : 4.53
pooling layer size : 3x3
위의 RoI영역을 동일한 크기의 9개의 상자로 나눈다. 현재 3x3 pooling layer를 사용하고 있으므로 mapping된 RoI를 3으로 나누어야 한다. 그러면 아래의 그림과 같이 높이가 1.51이고 너비가 2.08인 box가 된다.
첫번째 box를 보면 6개의 다른 cell을 포함하고 있다. 값을 추출하기위해서는 데이터를 sampling해야한다. 데이터를 sampling 하기위해 아래의 쌍선형 보간 수식을 통해 sampling을 진행한다.
위의 그림과 같이 각 4개의 지점중 가장 큰 수를 가진 것을 pooling하여 3x3 RoIAlign 결과로 채운다.
Understanding Region of Interest — (RoI Align and RoI Warp)
Visual explanation of how RoI Align works and why is it better than standard RoI Pooling?
towardsdatascience.com
Network Architecture
1. backbone network
backbone network에서 feature map을 얻는다. 이때, feature pyramid를 이용하여 feature map을 얻기 때문에 P2, P3, P4, P5크기의 feature map을 얻는다. RPN에서 고정된 크기의 bbox를 이용하여 object를 추출(탐색)하기 때문에 크기별로 물체를 추출하기 위해 여러 해상도의 feature map을 RPN의 input으로 넣는다.
2. Region propsal by RPN
1번과정에서 얻은 feature map 별로 RPN에 입력하여 object의 bbox와 class를 출력한다.
3. Select RoI by Proposal layer
1. Region proposal로 얻은 결과 bbox들 중 binary class score가 높은 k개의 anchor를 선정
2. bbox regressor에 따라 anchor box의 크기 조정
3. 이미지 경계를 벗어나는 anchor box 삭제
4. threshold를 0.7로 지정하여 NMS(Non Maximum suppression)을 수행
5. 위의 과정이 각 feature pyramid 별로 진행이 되었기 때문에 각 feature pyramid 별 결과를 concatenate 한다.
6. 마지막으로 결합된 anchor box에 대하여 binary class score에 따라 top-N개의 anchor box를 선정
4. RoI Align layer
RoI와 feature map을 사용하여 RoIAlign 과정을 통해 7x7 크기의 feature 출력
5. Classification and Bounding box regression by Fast R-CNN
RoI Align 과정을 통해 얻은 7x7 크기의 feature map을 fc layer를 거쳐 classfication branch, bbox regression branch에 전달한다. 이를 통해 최종적인 class score와 bbox regressor 획득
6. Mask segment by Mask branch
RoI Align을 통해 얻은 7x7 크기의 feature map을 mask branch로 전달한다. mask branch에 전달된 feature map은 14x14 크기의 feature map으로 변경되면 1x1 conv layer를 통해 class 별로 binary mask를 생성한다.
생성된 mask 중에서 classification branch에서 가장 높은 score의 class feature map을 선정하여 최종 prediction에 사용한다.
이후 feature map의 각 cell 별로 sigmoid 함수를 적용하여 0~1 사이의 값을 가지도록 조정한다.
7. Post-processing of masks
결과 feature map을 원본과 비교하기 위해 rescale을 수행한다. 그리고 mask threshold에 따라 mask segmet의 각 픽셀값이 0.5이상인 경우 객체가 있어 1을 할당하고 threshold 미만 인경우 0을 할당한다. 이를 통해 mask와 비교할 수 있는 mask segment가 생성된다.
https://herbwood.tistory.com/20
Mask R-CNN 논문(Mask R-CNN) 리뷰
이번 포스팅에서는 Mask R-CNN 논문(Mask R-CNN)을 읽고 리뷰해보도록 하겠습니다. Mask R-CNN은 일반적으로detection task보다는 instance segmentation task에서 주로 사용됩니다. Segmentation 논문을 읽어본..
herbwood.tistory.com
'deeplearning study' 카테고리의 다른 글
Machine Learning with Python -2주차- (0) | 2022.06.07 |
---|---|
Machine Learning with Python -1주차- (0) | 2022.06.07 |
DETR:End-to-End Object Detection with Transformers 논문 리뷰 (0) | 2022.04.18 |