Mask R-CNN은 2017 ICCV에서 발표된 논문으로 객체 검출 및 객체의 세분화(segmentation) 작업에 사용된다.
Faster R-CNN은 객체를 고정된 크기로 변환하고 RoI Pooling을 수행하는 과정에서 발생하는 손실로 인하여 공간적 어긋남을 초래한다. Mask R-CNN에서는 RoI Pooling 대신 RoI Align이라는 방법을 사용해 공간적 어긋남을 최소화한다.
또한 박스 분류와 박스 회귀와 병렬로 작동하는 mask branch를 추가한다. 이는 RoI에 대한 segmentation mask를 예측하기 위한 branch이다. mask branch는 각 RoI에 적용되는 작은 FCN으로, 픽셀 단위로 segmentation mask를 예측한다.
전체 구조는 다음과 같다.
Mask R-CNN 구조에서 중요한 Feature Pyramid Network, RoI Align, Mask Head에 대해서 알아본다.
1. Feature Pyramid Network
입력 이미지 내의 객체의 크기가 제각각일 수 있는데, Feature Pyramid Network(FPN)란 다양한 비율의 객체를 탐지하기 위해 특징 맵을 여러 레벨로 구성하는 방법이다.
분류 모델은 입력 이미지를 여러 계층에 걸쳐 점점 다운샘플링하면서 특징 맵을 생성한다. 이때, 상위 계층으로 갈수록 수용 영역이 커지고 특징 맵의 크기가 줄어든다. 따라서 최상위 계층에서 얻은 특징 맵은 고수준의 의미론적 정보를 가지지만, 공간적인 정보는 손실되고 해상도가 낮아진다. 이는 작은 객체나 세부적인 모양을 구분하기 어렵게 만든다.
이러한 문제를 해결하기 위해 FPN은 특징 맵의 하향식 경로(Top-down pathway)와 상향식 경로(Bottom-up pathway)를 결합해 각 스테이지의 특징 맵이 공간적인 정보와 의미론적인 정보를 가질 수 있게 한다.
위 그림은 Mask R-CNN 구조에서 FPN 부분만 확대한 그림이다. 이를 가지고 Bottom-up 경로의 과정을 설명한다.
- 최상위 계층에서 얻은 특징 맵을 1x1 conv 연산으로 채널 수를 256개로 감소시킨다. 이 특징 맵을 P5라 한다.
- P5를 2배 업샘플링 수행한 P5-1과 C4에 1x1 conv 연산으로 채널 수를 256개로 맞춘 것을 C4-1을 만든다. P5-1과 C4-1을 element wise addition으로 합쳐 P4를 만든다.
- 동일한 방법으로 P3, P2를 생성한다.
- 마지막으로 각 레벨의 특징 맵에 3x3 합성곱 연산을 적용해 최종 FPN을 생성한다.
FPN은 상위 계층으로 갈수록 의미론적 정보는 강해지지만 공간적인 정보는 약해지는 트레이드 오프를 극복하기 위해 상위 계층의 특징 맵을 업샘플링하고 하위 계층의 특징맵과 결합해 각 계층의 특징 맵이 공간적인 정보와 의미론적 정보를 모두 갖게한다.
이렇게 생성된 각 계층의 특징 맵에 Region Proposal Network(RPN)를 적용해 Region of Interest(RoI)을 제안한다. RPN은 Faster R-CNN의 RPN과 동일하다.
2. RoI Align
RoI Align(관심 영역 정렬)이란 특징 맵과 RoI 사이의 공간적 어긋남을 최소화하기 위한 방법이다. 우선 공간적 어긋남이 왜 생기는지 부터 알아보자.
RPN을 통해 생성된 RoI는 위 그림처럼 크기와 비율 그리고 좌표가 제각각이다. 실제로는 이보다 훨씬 많지만 이를 모두 표현하면 그림을 알아볼 수 없기 때문에 객체에 맞는 4개만 표시한다.
RoI를 특징 맵에 맵핑한다면 다음 그림과 같다.
오른쪽 그림을 보면 특징 맵에 맵핑된 RoI는 특징 맵의 셀과 정확히 당연하게도 정확히 일치하지 않는다.
설명을 위해 타겟을 위와 같이 하나로 설정하고 이해해보자. 입력 이미지에서 box에 대한 정보는 145x200 크기를 가지며, 좌상단의 좌표는 (192, 296)이다. 이를 특징 맵에 맵핑한 정보로 환산하면 다음과 같다.
width : 200/32 = 6.25
height : 145/32 = 약 4.53
x : 296/32 = 0.25
y : 192/32 = 6
32로 나누는 이유는 512x512 크기의 입력 이미지가 16x16 특징 맵으로 다운샘플링 되었기에 샘플링 비율이 512/16=32이기 때문이다.
원래 RoI를 특징 맵에 배치하면 다음과 같이 보일것이다.
우리는 좌표를 quatization(양자화)할 필요가 있다. quantization이란 실수와 같은 큰 값 집합에서 이를 정수와 같은 이산 값 집합으로 제한하는 과정을 뜻한다. 왜냐하면 픽셀 미만의 크기로 분할하는 것은 불가능하기 때문이다.
원래 width와 height 값인 6.25와 4.53은 각각 6와 4로 바뀐다. 실제로 우리가 사용하는 것은 주황색 영역이기 때문에 아래 그림처럼 파란색 부분에 대한 정보를 잃었고 녹색 부분을 얻었다.
이러한 이유로 공간적 어긋남이 발생되는 것이다.
자 그럼 이제 RoI Align에 대해서 알아보자. 이는 공간적 어긋남을 초래하는 quantization을 사용하지 않는다.
- 3x3 크기의 특징 맵을 추출할 것이기 때문에 특징 맵에 투영된 RoI의 width와 height을 3등분을 해준다.
- 분할된 하나의 셀(연두색)안에서 Bilinear Interpolation을 사용해 4개의 샘플링 포인트를 찾는다. 샘플링 포인트들은 각각 작은 연두색 셀을 3등분하는 점이다.
- 그런 다음 4개의 샘플링 포인트에 최대값 풀링이나 평균값 풀링을 수행해 특징 맵의 값을 생성한다. 아래 예시에서는 최대값 풀링을 사용.
RoI Align을 통해 생성된 3x3 특징 맵은 Box head나 Mask head를 통해 클래스 예측, 박스 회귀, 마스크 예측을 위해 사용된다.
3. Mask Head
Mask Head는 FCN 구조를 사용하며, 마스크 영역의 해상도를 높이기 위해 보간법을 통해 특징 맵의 크기를 확장하며, 1x1 conv 연사으로 특징 맵의 차원을 클래스 개수에 맞게 변환한다. 예를 들어 mxmxK 크기의 특징 맵을 출력한다. 여기서 K는 클래스 개수를 의미한다.
그런 다음 해당 mxm의 특징 맵은 sigmoid가 적용되어 클래스 별로 개별적인 binary mask가 되어 마스크 예측에 사용된다.
'책 > 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습' 카테고리의 다른 글
09 객체 탐지 (7) YOLO (0) | 2024.03.05 |
---|---|
09 객체 탐지 (6) Mask R-CNN pytorch 실습 (0) | 2024.03.02 |
09 객체 탐지 (4) FCN (0) | 2024.02.23 |
09 객체 탐지 (3) SSD (0) | 2024.02.22 |
09 객체 탐지 (2) Faster R-CNN pytorch 실습 (0) | 2024.02.20 |