티스토리 뷰
작성자 1 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB)
작성자 2 : 한양대학교 로봇공학과 정석훈 학부생
오늘은 Pixel 단위로 물체를 localize하는 Segmentation 모델인 Mask R-CNN 논문 리뷰를 하겠습니다~! 논문 스터디 스타트~!!
링크 0 (승환 논문 리뷰 링크 모음) : github.com/RobotMobile/cv-deep-learning-paper-review/blob/master/README.md
링크 1 (원문) : arxiv.org/pdf/1703.06870.pdf
링크 2 (참고 블로그) : ganghee-lee.tistory.com/40
0. Abstract
<Mask R-CNN 소개>
- 이미지 내에서 각 instance(object)에 대한 segmentation mask 생성 (Classification + Localizing(pixel))
* mask : object detection의 box가 pixel 수준으로 정교해졌다고 생각하면 됩니다!
- Mask R-CNN = Faster R-CNN + mask branch
* mask branch : object의 mask를 예측하는 branch
- Mask R-CNN은 5 fps 정도의 속도가 나오며, human pose estimate에서도 사용됨
* 오늘 포스팅의 주 목적은 segmentation으로 human pose estimate에 대해서는 생략하겠습니다!
- Mask R-CNN은 COCO 2016 challenge에서 1등을 차지 --> 성능 확실!!
1. Introduction
<연구 목표>
- instance segmentation task에서 사용 가능한 딥러닝 프레임워크를 개발하는 것
* instance segmentation은 같은 class여도 다른 객체로 인식 (사람 1, 사람 2 ...)
<Mask R-CNN 구조>
- Mask R-CNN의 구조는 Faster R-CNN의 각 RoI(Region of Intereset)에 대해 pixel 단위 segmentation mask를 예측하는 branch 추가
- mask branch는 classification, bounding box regression branch와 독립적이며 small FCN(Fully Convolution Network)
- Mask R-CNN은 구현하기 쉬우며, mask branch는 small FCN이기 때문에 연산 속도도 뛰어남
<Mask R-CNN과 Faster R-CNN의 차이 : RoIAlign>
- Faster R-CNN은 pixel 단위의 segmentation을 위해 설계되지 않았음
- 이를 해결하기 위해 RoIAlign이라는 간단하면서 정확한 공간 정보를 보존하는 레이어를 제안
- RoIAlign은 mask 정확도를 Faster R-CNN보다 10~50% 높게 만듦
- 또한 class에 대한 binary mask를 독립적으로 예측하고 네트워크의 RoI classification branch에 의존하여 class 예측함으로써 FCN보다 정확한 instance segmentation을 할 수 있음
2. Related Work
<R-CNN>
- R-CNN : ropiens.tistory.com/73
- Fast R-CNN : ganghee-lee.tistory.com/36
- Faster R-CNN : Fast R-CNN + RPN(Region Proposal Network) ganghee-lee.tistory.com/37
<Instance Segmentation>
- segment proposals를 기본으로 다양한 연구 등장
- (과거) DeepMask (특징 : buttom-up segments) : towardsdatascience.com/review-deepmask-instance-segmentation-30327a072339
- (최신) FCIS (fully convolutional instance segmentation) :
- 아래와 같이 일반적인 CNN 아키텍쳐의 마지막 FC층을 conv층으로 변경함으로써 이미지의 위치 정보를 보존
3. Mask R-CNN
<Mask R-CNN>
(1) Mask R-CNN 구조
- stage 1 : RPN (Region Proposal Network)
- stage 2 : Predict the class, box offset and a binary mask for each ROI
(2) Loss Function
- multi-task loss 적용
- total loss = Loss_class + Loss_box + Loss_mask
- 위 수식을 보면 class, box, mask loss는 독립적인 것을 알 수 있음
* ex) Loss_mask가 Loss_class에 영향 주지 않음
- Loss_mask : Km^2 차원 (K : class 갯수, m : 이미지 해상도), average binary cross-entropy loss 사용
* binary cross entropy loss란? : curt-park.github.io/2018-09-19/loss-cross-entropy/
- Semantic Segmentation의 경우, 픽셀마다 class와 mask를 예측함 --> 과한 계산량
- 본 연구에서는 class 예측과 mask 예측이 독립적으로 이루어지기 때문에 연산 절약 가능
<Mask Representation>
(1) Mask와 class, box의 layer 차이
- mask : input object의 spatial(공간) layout의 encode 결과
- class, box 정보들은 FC(Fully Connected) layers에 의해 고정된 vector로 변환되기 때문에 공간적 정보 손실 발생
- 그러나 mask는 convolutions 연산에 의해 공간적 정보 손실을 최소화 할 수 있음 (Fully Convolution Networks)
- Fully Convolution Networks를 사용하여 각 RoI에서 m x m 크기의 mask를 예측 가능
- 즉 mask는 FC layer에 의해 1차원 벡터로 축소되지 않고, m x m 형태로 공간 정보 유지 가능
- 또한 FC lyaer 보다 더 적은 파라미터 수가 사용되어, 연산 속도가 빠르고 정확함
(2) RoIAlign layer를 만들게 된 계기
- mask 정보를 m x m 형태로 보존하기 위해선, RoI feature가 요구됨
- 이를 위해 RoIAlign layer를 만듦
<RoIAlign>
(1) RoIPooling
- RoIPool은 각 RoI에서 small feature map를 extract하기 위한 표준 연산
* RoIPool : 다른 사이즈의 Region Proposal이 들어와도, max pooling을 이용하여 output size를 동일하게 만듦 (Faster R-CNN에서 나오는 개념)
- RoIPool은 RoI를 feature map으로 quantization하게 되는 데, 이 과정에서 RoI와 추출된 feature 사이에 오정렬을 초래함
- 이는 pixel 단위로 예측하는 mask에 큰 악영향을 끼침
- 이러한 단점을 해결하기 위해 extract한 feature를 input에 적절하게 정렬하는 RoIAlign layer를 제안
(2) RoIAlign
- RoIAlign layer를 simple함
- bilinear interpolation 연산을 사용하여 각 RoI bin의 샘플링된 4개의 위치에서 input feature의 정확한 value를 계산
* bilinear interpolation이란?
- 그 후 결과를 max 혹은 average하여 집계함
* 아래의 그림은 RoIAlign의 도식도로, 파란색 점선들은 feature map을 표시
* 검은색 실선은 RoI를 의미, RoI 안의 4개의 점들은 각 bin의 샘플링 된 4개의 point를 의미
* RoIAlign은 feature map에서 근접한 grid point(파란색 화살표의 시작점)을 bilinear interpolation 연산을 통해 각 샘플링 point를 계산함
* Faster R-CNN의 quantization은 사용되지 않음
- 4.2절에서 RoIPool, RoIWarp(RoIAlign과 비교할 수 있는 좋은 방법) 그리고 RoIAlign의 실험 결과를 비교
<Network Architecture>
(1) BackBone
- 이미지의 feature를 추출하기 위해 사용
- ResNet과 ResNeXt의 50, 101 layer과 FPN(Feature Pyramid Network)을 backbone으로 사용
* ResNet-50-C4 : ResNet 50 layer에서 4번째 stage의 final conv layer에서 feature를 추출한다는 의미
* ResNet : ropiens.tistory.com/32
* ResNeXt : takenotesforvision.tistory.com/12
* FPN : yeomko.tistory.com/44
(2) Head
- Bounding Box Recognition (Classification and Regression)과 Mask Prediction을 위해 사용됨
- Faster R-CNN의 Head(Classification and Regression)에 Mask branch를 추가
- backbone(ResNet, FPN)에 따라 Head의 구조가 달라짐
3.1. Implementation Details
<Training>
- Loss_mask는 오직 Positive RoI에 의해 정의됨
* Positive RoI : GT와의 IoU가 0.5 이상
- 이미지들은 800 pixel로 resize
- 미니 배치에 2장의 이미지가 사용됨
- 각 이미지에는 N개의 샘플링 된 RoI가 있음
* ResNet : N = 64
* FPN : N = 256
- GPU : 8개, 미니배치 사이즈 : 16, 학습 횟수 : 160,000, 학습률 : 0.02 (학습 횟수 10 ~ 120K 동안 학습률 감소됨)
- weight decay 0.0001, momentum 0.9 사용
- ResNeXt만 미니 배치 당 1장의 이미지, 학습률은 0.01로 셋팅. 나머지는 동일 (ResNeXt는 깊은 모델이기 때문에 이러한 조정들이 들어간 것으로 생각됩니당)
<Inference>
- ResNet은 proposal 갯수가 300, FPN은 100개
- box prediction 후 NMS(Non-Maximum Suppression) 적용
- Mask Branch는 score 점수가 높은 상위 100개 box에서 적용됨
- 이는 속도와 정확도 향상에 도움 됨
- mask Branch는 각 RoI마다 K개의 Mask를 예측함 (K : classification branch에서 예측된 class들)
4. Experiments : Instance Segmentation
- Mask R-CNN 과 SOTA 모델(MNC, FCIS +OHEM, FCIS+++ +OHEM)의 성능을 비교해 보았다
- AP, AP50, AP75, APS, APM, APL 6가지를 포함하는 COCO metrics를 통해 성능을 측정하였으며 AP는 mask IoU를 의미한다
* COCO metrics
towardsdatascience.com/breaking-down-mean-average-precision-map-ae462f623a52
- AP: AP at IoU= 0.50: 0.05: 0.95 (primary challenge metric)
- AP@IoU=0.5 (traditional way of calculating as described above)
- AP@IoU=0.75 (IoU of BBs need to be > 0.75)
- AP^small: AP for small objects: area < 32² px
- AP^medium: AP for medium objects: 32² < area < 96² px
- AP^large: AP for large objects: area > 96² px
4.1. Main Results
- Mask R-CNN이 모든 기존의 SOTA 네트워크보다 뛰어난 성능을 보였다.
- ResNet-101-FPN을 BackBone으로 갖는 Mask R-CNN이 FCIS+++보다 우수한 성능을 보였다.
* FCIS : Fully Convolutional Instance-Aware Semantic Segmentation (COCO 2016 segmentation challenges 우승)
- FCIS와 Mask R-CNN 결과 비교
4.2. Ablation Experiments
- 네트워크의 깊이가 깊을수록 성능이 좋았다 (a) : ResNeXt-101-FPN
- Mask Branch를 분리한(decoupled) sigmoid가 성능이 더 좋았다. (b)
- RoI Align을 통해 더 좋은 성능을 보였다 (c), (d)
- Mask Branch에 MLP를 사용하는 것 보다 FCN을 사용하는 것이 성능이 더 좋았다 (e)
4.3. Bounding Box Detection Results
- Mask output은 무시하고 Mask R-CNN을 기존의 Object Detection SOTA모델들과 결과를 비교해 보았다.
- ResNet-101-FPN을 사용한 Mask R-CNN이 기존의 SOTA모델들보다 성능이 좋았다.
- Box Detection에서 좋은 성능을 보이는 이유도 Multi-task Training 덕분이다.
4.4. Timing
Inference - Nvidia Tesla M40 GPU에서 이미지 1개당 195ms
- Mask R-CNN이 빠르더라도 아직 스피드에 최적화되진 않았다.
Training
- ResNet-50-FPN을 backbone으로 하고 COCO trainval135k 데이터로 학습시켰을 때 32시간이 소요됐다.
- ResNet-101-FPN은 44시간 소요.
'sinanju06 > 딥러닝 논문 리뷰' 카테고리의 다른 글
ADAM : A METHOD FOR STOCHASTIC OPTIMIZATION 리뷰 (5) | 2021.02.21 |
---|---|
Focal Loss for Dense Object Detection 리뷰 (4) | 2021.02.05 |
강화학습 논문 정리 1편 : DQN 논문 리뷰 (Playing Atari with Deep Reinforcement Learning) (8) | 2021.01.25 |
R-CNN : Region-based Convolutional Networks forAccurate Object Detection and Segmentation 리뷰 (3) | 2021.01.19 |
YOLOv3 : An Incremental Improvement 리뷰 (2) | 2020.08.05 |