Mask R-CNN
- 논문 원본 https://arxiv.org/abs/1703.06870
- 발표 영상 https://www.youtube.com/watch?v=fZ5ZD68n9GI
- 발표 자료 (오타 ICLR 2017 -> CVPR 2017)
Abstract
- 본 연구진은 object instance segmentation을 위한 간단하고 유연한 Mask R-CNN 모델 제시
- Mask R-CNN은 이미지 속 object를 효율적으로 detect하면서 동시에 각 instance에 대해 high-quality segementation mask를 생성
- Mask R-CNN은 기존의 Faster R-CNN에서 bounding box recognition을 위한 branch와 평행하게 object mask를 예측할 수 있는 branch를 더한 형태
- 해당 모델은 학습하기 쉬우며 Faster R-CNN에서 약간의 overhead만 추가하고, 초당 5 fps으로 동작
- 또한, Mask R-CNN의 유연성으로 인해 다양한 CV tasks에 적용하기 용이하다 장점
- Mask R-CNN은 COCO의 세 가지 도전 분야(instance segmentation, bounding-box object detection, person keypoint detection) 모두에서 좋은 결과를 보여주었으며, 동시대에 공존하는 모든 single-model에 대해 가장 좋은 성능
- Object Detection : 이미지 내에서 여러 객체를 식별하고 각 객체의 위치를 사각형의 bounding box로 표시
- Semantic Segmentation : 이미지를 픽셀 수준에서 분석하여 각 픽셀이 어떤 카테고리에 속하는지 분류, 동일한 카테고리에 속하는 개별 객체들은 구분하지 않고 하나로 간주
- Instance Segmentation : Segmantic Segmentation을 더 발전시켜, 동일한 객체 유형에 속하는 개별 인스턴스까지 구분
1. Introduction
- Fast/Faster R-CNN, FCN과 같은 강력한 basline system 덕분에 vision community에서 Object Detection과 Semantic Segmentation이 짧은 시간 안에 매우 빠른 발전을 이룸
- 따라서 본 논문에서의 목표는 Instance Segmentation에서 이러한 역할을 하는 프레임워크를 만드는 것
- Instance Segmentation은 이미지 속 객체를 정확하게 detection하면서도 각 instance를 정밀하게 segment해야 하기 때문에 매우 어려운 task
- Instance Segmentation = Object Detection + Semantic Segmentation
- 이를 바탕으로 매우 복잡한 method가 필요할 것으로 예상되지만, 놀랍게도 본 논문에서는 단순하고 유연하고 빠른 시스템을 제안
- Mask R-CNN은 Faster R-CNN을 확장하여 각 RoI(Region of Interest)에 대해 segmentation masks를 예측하는 branch를 추가
- mask branch는 각 RoI에 적용되는 작은 FCN(Fully Convolutional Network)으로, 각 pixel의 segmentation mask를 예
- Mask R-CNN은 Faster R-CNN 기반으로 학습시키면 되기 때문에 적용하기에 간단하고 유연하게 많은 아키텍처 디자인에 적용하기 용이
- 또한, mask branch는 작은 computational overhead만 더하기 때문에 추가적인 계산 부담이 크게 증가하지 않고 이로 인해 시스템 속도가 크게 저하되지 않음
- Mask R-CNN이 좋은 성능을 내기 위해서는 mask branch를 올바르게 구축하는 것이 중요
- Faster R-CNN은 object detection을 위한 모델로 input과 output 사이의 pixel-to-pixel alignment을 위해서 제작되지 않음 (객체 경계를 세밀하게 추출할 수 X)
- 따라서 Mask R-CNN은 이를 해결하기 위해서 RoIPool 대신 RoIAlign 방식을 이용하여 spatial location 보존
- Faster R-CNN에서 RoI pooling을 사용하는 이유: 사이즈가 다른 RoI를 Faster R-CNN의 FC Layer의 input으로 넣기 위해 고정된 크기의 feature로 만듦
- RoIAlign을 이용한 결과 mask의 정확도가 10%에서 50% 증가
- 또한, mask prediction과 class prediction을 분리함으로써 mask prediction을 할 때 다른 class를 고려할 필요 없이 binary mask만 예측하면 됨 -> 성능 향상에 기여
2. Related Work
1) R-CNN
- Input 이미지를 가지고 selective search를 진행하여 물체가 존재할 것 같은 지역(RoI)를 2000개 정도 뽑음
- 이렇게 뽑아낸 RoI들은 각각 다른 크기와 위치를 가진다. 따라서 CNN에 입력으로 들어가기 위해 crop & wrap 하여 고정된 크기 형태로 만듦
- 각각의 RoI들을 ConvNet으로 돌려 feature vector 추출
- 추출된 feature vector들을 SVMs을 이용하여 어떤 클래스에 해당되는지, 그리고 Regressor를 이용하여 정확한 물체의 위치가 어딘지 bounding box를 조절
- 주된 단점은 각 후보 영역을 독립적으로 처리해야 하는 계산 비효율성이 존재해 처리 속도가 느림
2) Fast R-CNN
- 각 RoI마다 CNN을 수행하지 않고 Input 이미지에 대해 ConvNet을 돌림(전체 이미지에 대한 고해상도 feature map을 얻음->이미지의 미세한 특징 더 잘 보존)
- 생성된 feature map을 가지고 region proposal method를 통해 RoI 추출(CNN의 feature를 여러 RoI가 공유->필요한 계산량을 대 줄여, 더 빠른 처리 속도 가능)
- RoI pooling 기법을 이용하여 추출된 각 RoI에 대해 고정된 크기의 feature map을 생성
- FC layer로 넘어가 각 RoI에 대해 객채의 종류를 classification하고 객체의 정확한 위치를 조정하기 위해 bounding box regression을 수행
3) Faster R-CNN
- 기본적은 selective search가 CPU상에서 돌아가도록 라이브러리가 설계됨
- 따라서 R-CNN과 Fast R-CNN 모두 CPU에서 region proposal 진행하기 때문에 속도가 느림
- Faster R-CNN은 이러한 점을 보안하기 위해 region proposal을 위한 모든 연산을 GPU상에서 진행하는 RPN(Region Proposal Network) 제안
- RPN은 region proposal을 진행하는 network로, feature map을 보고 어느 곳에 객체가 있을지 예측
- 이후 과정은 Fast R-CNN과 동일
3. Architecture
Faster R-CNN
- two-stage로 구성
- 1 step) RPN(Region Proposal Network) - feature map에서 후보 bounding box들을 제안
- 2 step) 각 후보 box에 대해서 RoIPool을 이용하여 feature를 추출하고, classification과 bounding-box regression 수행
Mask R-CNN
- Mask R-CNN도 two-stage로 구성
- 1 step) Faster R-CNN과 동일
- 2 step) Predict class, box offset, 각각의 RoI에 대한 binary mask 동시 수행
Mask Representation
- Mask는 input object의 spatial layout를 encode 함(즉,객체가 이미지 내에서 어디에 위치하고 있는지, 그 형태와 경계가 어떻게 되는지를 나타냄)
- 각 RoI마다 FCN을 적용하여 공간 정보 손실을 최소화하면서 mask를 예측
- 실험 결과 FC Layer를 사용하는 것보다 파라미터 수도 휠씬 줄고 정확도가 높게 나옴
*AP(Average Precision) : 모델이 예측한 객체 경계 상자가 실체 객체와 얼마나 잘 일치하는지를 종합적으로 평가
*AP50 : 모델이 예측한 경계 상자가 실제 객체와 최소 50% 이상 겹칠 때의 정밀도(상대적으로 관대한 평가 기준)
*AP75 : 모델이 예측한 경계 상자가 실제 객체와 최소 75% 이상 겹쳐야 됨
RoIPool (Mask R-CNN 사용 X)
- Faster R-CNN은 object detection을 위한 모델이였기 때문에 RoIPool 과정에서 정확한 위치정보를 담는 것은 별로 중요하지 않았음
- RoIPool방식 Quantization 해주고 나서 Pooling 해주는 것 (RoI가 소수점 좌표를 가지고 있으면 각 좌표를 반올림하여 Pooling 하는 것)
- 이렇게 되면 input image의 위치정보가 왜곡되어 classification을 하는데 문제가 안되지만 instance segmentation task 수행 시 문제 발생
RoIAlign (Mask R-CNN 사용 O)
- Quantization 과정을 제거하고 부동 소수점 좌표를 그대로 사용
- bilinear interpolation을 수행함으로써, 위치 정보의 정확성 크게 개선
- RoIAlign을 사용하는 것이 더 좋은 성능을 보임
Loss Function
- Mask R-CNN은 아래와 같이 구성된 multi-task loss function을 통해 모델 학습
- classification loss(Lcls), bounding box loss(Lbox)는 Faster R-CNN과 동일한 loss 사용 + mask loss(Lmask)
Lmask
- Mask R-CNN은 class branch와 mask branch를 분리하였기 때문에
- -> mask branch에서 나온 각 픽셀의 출력값에 sigmoid 함수 적용(0~1 사이의 확률 값으로 변환)
- -> binary cross entropy loss 적용
- Multinomial mask보다 per-class binary mask를 이용하는 것이 더 좋은 성능을 보임
Network Architecture
- ResNet, ResNeXt, FPN(Feature Pyramid Network)을 backbone으로 사용한 Faster R-CNN (회색 부분)
- 해당 모델에 mask branch 얹어서 mask 예측 수행
- 네트워크 깊이가 깊을수록 좋은 성능을 보임
- ResNeXt-101을 사용한 FPN을 backbone으로 적용한 모델이 가장 좋은 성능
4. Experiments
- Instacne segmentation 모델 성능 비교
- COCO 2015, 2016 segmentation challenge에서 수상한 MNC와 FCIS의 성능을 뛰어넘은 것을 확인
- 그 중 ResNet-101-FPN을 backbone으로 하는 Mask R-CNN이 FCIS+++보다 훨씬 우수한 성능을 보임
- Object detection 성능 비교
- RoI Align을 사용했더니 1.1% 성능 향상
- mask branch를 더했을 때 0.9% 추가 상승
- ResNeXt-101-FPN을 backbone으로 사용한 Mask R-CNN 모델이 가장 좋은 성능을 보임
- 기존의 Faster R-CNN에서 mask branch를 추가해서 mask를 예측할 수 있게 됨
- 사람의 keypoint를 location하는 또 하나의 branch를 추가하면 학습이 잘 될거라고 가정
- 실험 결과 기존의 Keypoint detection 모델보다 더 좋은 성능을 보임
5. Conclusion
- Mask R-CNN은 Faster R-CNN에 작은 FCN만 추가하고, RoI Align 기법을 적용하여 Instance Segmentation을 가능하게 함
6. Reference
https://kubig-2023-2.tistory.com/60
https://devforest.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Mask-R-CNN
'논문 리뷰 > CV' 카테고리의 다른 글
[X:AI] Grad-CAM 논문 리뷰 (0) | 2024.07.06 |
---|---|
[X:AI] Taskonomy 논문 리뷰 (0) | 2024.05.21 |
[X:AI] SegNet 논문 리뷰 (0) | 2024.04.09 |
[X:AI] EfficientNet 논문 리뷰 (0) | 2024.04.03 |
[X:AI] U-Net 논문 리뷰 (0) | 2024.03.27 |