[paper review] Mask R-CNN
#VISION #SEGMENTATION #Mask R-CNN
Abstract
Mask R-CNN : bounding box 인식을 위한 branch를 더 추가해서 Faster R-CNN을 확장함,
훈련이 간단하고 Faster R-CNN에 약간의 오버헤드만 추가함,
다른 작업에 일반화하기 쉬움
코드: https://github.com/facebookresearch/Detectron
1 Introduction
각각 객체 감지 및 의미 분할을 위한 FCN은 개념적으로 직관적이며 유연성과 견고성과 빠른 훈련 및 추론 시간을 제공함
인스턴스 분할을 위해 비교할 수 있는 프레임워크를 개발하는 것
인스턴스 분할은 이미지의 모든 개체를 올바르게 감지하는 동시에 각 인스턴스를 정확하게 분할해야 하기 때문에 어려우므로 객체의 고전적인 컴퓨터 비전 작업에서 나온 요소들을 결합함
여기서 목표는 경계 상자를 사용하여 개별 객체를 분류하고 각 픽셀을 지역화하는 것이며, 객체 인스턴스를 차별화하지 않고 고정 범주 집합으로 분류하는 것
그래서 나온 게 Mask R-CNN
: classification 및 bounding box regression을 위한 기존 branch와 병렬로 각 관심 영역(RoI)에서 분할 마스크를 예측하는 branch를 추가하여 Faster R-CNN을 확장,
구현 및 훈련이 간단함,
그림 1) Mask R-CNN framework
* mask branch : 각 RoI에 적용되는 작은 FCN,
Pixel-to-pixel 방식으로 segmentation mask를 예측함,
작은 계산 오버헤드만 추가해서 빠른 시스템, 빠른 실험이 가능하게 함
Faster R-CNN와 비교했을 때, Faster R-CNN은 네트워크 입력과 출력 사이의 pixel-to-pixel 정렬을 위해 설계되지 않았음 (RolPool에서 확인 가능),
형상 추출을 위해 coarse spatial quantization을 수행함
So Mask R-CNN에서는 misalignment를 수정하기 위해 RolAlign을 제안
* RolAlign : 단순한 양자화 없는 층,
정확한 공간 위치를 보존함,
mask 정확도를 10%~50% 향상시킴,
mask와 class 예측을 분리하는 것이 필수적이라는 것을 알게 됨 -> maks와 class 예측을 분리하면 각 클래스에 대한 이진 마스크를 독립적으로 예측하고 네트워크의 RoI classification branch에 의존하여 범주를 예측함
COCO 인스턴스 분할 작업에서 뛰어남,
COCO 객체 감지 작업에서도 뛰어남
Mask R-CNN은 GPU에서 프레임당 약 200ms로 실행될 수 있으며, COCO에 대한 교육은 단일 8GPU 머신에서 하루에서 이틀이 걸림
COCO 키포인트 데이터 세트에서 인간 포즈 추정 작업에도 Mask R-CNN 적용 가능 ->
각 키포인트를 원핫 이진 마스크로 봄으로써 인스턴스별 포즈를 감지 가능
2 Related Work
R-CNN : bounding box 객체 탐지에 대한 지역 기반 접근 방식,
각 Rol에서 독립적으로 컨볼루션 네트워크를 평가함,
RolPool 사용
Faster R-CNN : RPN을 통해 주의 메커니즘을 학습함으로써 발전시킴,
유연하고 후속 개선에 강력함
인스턴스 분할 : 이전 방법들은 상향식 세그먼트에 의존했지만 DeepMask 및 그 뒤 방법들은 세그먼트 후보를 제안하는 방법을 학습함, 그 다음 Fast R-CNN에 의해 분류됨,
이런 방법은 분할이 느리고 정확도가 떨어짐
So, bounding-box proposal에서 세그먼트 proposal을 예측하고 분류를 수행하는 방법을 제안함
: mask와 class labels을 병렬 예측으로 하여 간단하고 유연함
가장 최근에 Fully convolutional instance-aware semantic segmentation은 Instance-sensitive fully convolutional networks의 세그먼트 제안 시스템과 R-FCN의 객체 감지 시스템을 결합하여 FCIS(fully convolutional instance segmentation)를 수행함
일반적인 CNN 아키텍쳐의 마지막 FC층을 conv층으로 변경함으로써 이미지의 위치 정보를 보존함
FCIS는 겹치는 인스턴스에서 체계적인 오류를 보이고 가짜 에지를 만들어 인스턴스 분할의 근본적인 어려움이 있음
3 Mask R-CNN
Faster R-CNN :
각 후보 객체에 대한 클래스 레이블 + bounding-box offset
1. RPN에서 후보 객체 경계 상자 제안
2. 각 후보 상자에서 RolPool을 사용하여 특징 추출하고 분류 및 경계 상자 회귀 분석 수행
Mask R-CNN :
Mask R-CNN은 클래스 레이블 + bounding-box offset 에 객체 마스크를 출력하는 branch 추가
추가 마스크 출력은 class와 bounding-box 출력과 구분되어야 하므로 객체의 훨씬 미세한 공간 레이아웃을 추출해야 함
Fast R-CNN과 마찬가지로 경계 상자 분류와 회귀를 병렬로 사용함
각 샘플링 된 Rol에 대한 다중 작업 손실은 다음과 같음
Mask branch는 2차원 출력을 가지며, 각 k 클래스마다 하나씩 해상도 m X m의 k 이진 마스크를 인코딩 함
이를 위해, 픽셀당 시그모이드를 적용함
Lmask는 평균 이진 교차 엔트로피 손실로 정의함,
k와 연결된 Rol의 경우 k번째 마스크에만 정의됨,
FCN과 달리 클래스 간 경쟁 없이 모든 클래스에 대한 마스크 생성 가능
Mask Representation :
Mask는 입력 개체의 공간 레이아웃을 인코딩함, 마스크의 공간 구조를 추출하는 것은 컨볼루션에서 제공하는 pixel-to-pixel에 의해 해결함
FCN을 사용하여 각 Rol에서 m x m 마스크를 예측함, 이를 통해 mask branch의 각 레이어는 공간 차원이 부족한 벡터 표현으로 축소하지 않고 m x m 레이아웃을 유지할 수 있음
Fc 레이어에 의존하는 예전 방법과 달리, 현재 방법은 더 적은 매개 변수를 사용하고 더 정확함
Pixel-to-pixel은 픽셀 자체가 작은 특징 맵인 Rol 기능을 잘 정렬해야 함
RolAlign :
RolPool : 각 Rol에서 작은 특징 맵을 추출하기 위한 표준 연산
RolPool은 먼저 형상 맵의 이산 세분성으로 부동 숫자 RoI를 정량화하고, 이 정량화된 RoI는 자체 정량화된 공간 빈으로 세분되며, 마지막으로 각 빈에서 다루는 형상 값이 집계됨, 보통 최대 풀링 사용
정량화 -> [x/16] 계산하여 연속 좌표 x에서 수행 (16은 형상 지도 보폭), bin으로 나눌 때 양자화 수행
이런 정량화는 잘못된 정렬을 야기함
RolPool의 문제점을 해결하기 위해 RolAlign 레이어 제안함
: Rol 경계 또는 bin의 양자화를 피하는 방법,
[x/16] 대신 x/16 사용,
이진 보간법을 사용하여 Rol bin의 정규 샘플링 된 네 위치에서 입력 형상의 정확한 값을 계산하고 결과를 집계함
그림 3) RoIAlign: 파선 그리드는 다음을 나타냅니다.
형상 지도, 실선으로 RoI(이 예에서는 bin이 2×2개)를 표시하고 각 빈에 있는 4개의 샘플링 포인트를 점으로 표시합니다. RoIAlign은 형상 지도의 인근 격자점에서 이선형 보간법으로 각 샘플링 포인트의 값을 계산한다. RoI, bin 또는 샘플링 포인트와 관련된 좌표에 대해서는 양자화가 수행되지 않습니다.
Network Architecture :
C4 : ResNets을 사용한 Faster R-CNN의 구현
그림 4) 헤드 아키텍처: 우리는 기존의 두 개의 고속 RCNN 헤드를 확장한다 [19, 27]. 왼쪽/오른쪽 패널에는 마스크 분기가 추가되는 ResNet C4 및 FPN 백본의 헤드가 각각 [19] 및 [27]로 표시됩니다. 숫자는 공간 해상도와 채널을 나타냅니다. 화살표는 컨텍스트에서 추론할 수 있는 conv, deconv 또는 fc 레이어를 나타낸다(conv는 공간 차원을 유지하면서). 모든 컨벡스는 3×3이며, 출력 컨벡은 1×1이고, 디콘은 2×2이며, 우리는 숨겨진 레이어에서 ReLU[31]를 사용한다. 왼쪽: 'res5'는 ResNet의 다섯 번째 단계를 의미하며, 단순성을 위해 첫 번째 컨벤션이 7×7 RoI에서 ([19]와 같이 14×14 / strade2 대신) strade1로 작동하도록 변경했다. 오른쪽: 'x4'는 연속된 네 개의 컨벤션 스택을 나타냅니다.
FPN : 측면 연결의 하향식 아키텍처를 사용하여 단일 스케일 입력에서 네트워크 내 기능 피라미드를 구축
Mask R-CNN을 사용하여 기능 추출을 위해 ResNet-FPN 백본을 사용하면 높은 정확도, 빠른 속도를 얻을 수 있음
ResNet-C4 백본의 헤드는 컴퓨팅 집약적인 ResNet의 5단계를 포함함
FPN의 경우 백본에 res5가 이미 포함되어 있으므로 더 적은 수의 필터를 사용하는 보다 효율적인 헤드가 가능함
3.1 Implementation Details
Training : Rol는 최소 0.5의 ground-truth box를 가진 IoT를 가진 경우 positive로, 그렇지 않으면 negative로 간주됨
Lmask는 positive Rols에만 정의됨
이미지 중심 훈련 : 이미지 크기는 800픽셀이 되도록 조정됨, 각 미니 배치에는 GPU당 2개의 이미지가 있고 각 이미지에는 N개의 샘플링 된 Rol이 있으며, pos : neg 비율은 1:3임
N은 C4백본의 경우 64이고 FPN의 경우 512임
160k 반복을 위해 8개의 GPU를 훈련하고 120k 반복에서 학습 속도가 0.02로 감소함
ResNeXt를 사용하여 GPU당 1개의 이미지와 동일한 수의 반복으로 교육하며 시작 학습 속도는 0.01임
Inference : C4 백본의 경우 300이고 FPN의 경우 1000임
Box prediction branch를 실행한 후 최대값이 아닌 억제를 실행함 -> 그 다음 mask branch가 가장 높은 점수를 받은 100개의 detection box에 적용됨
추론 속도를 높이고 정확성을 향상시키고 더 적은 수의 정확한 Rol을 사용함
Mask branch는 rol 당 k 마스크를 예측할 수 있지만 k는 예측 클래스인 k 번째 mask만 사용함
그 다음 m x m 부동 숫자 마스크 출력 크기가 Rol 크기로 조정되고 0.5 임계값에서 이진화됨
상위 100개에서만 마스크 계산하기 때문에 작은 오버헤드를 추가함
4 Experiments: Instance Segmentation
AP(IoU 임계값 평균 초과), AP50, AP75 및 APS, APM, APL(다른 규모로 AP)을 포함한 표준 COCO 메트릭을 보고함 / 언급하지 않는 한 AP는 마스크 IOU를 사용하여 평가함
4.1 Main Results
표 1) COCO 테스트 개발의 인스턴스 분할 마스크 AP. MNC[10]와 FCIS[26]는 각각 COCO 2015 및 2016 세분화 도전의 우승자이다. Mask R-CNN은 종소리와 휘파람이 없이 다중 스케일 트레인/테스트, 수평 플립 테스트 및 OHEM을 포함하는 보다 복잡한 FCIS+++를 능가한다[38]. 모든 항목은 단일 모델 결과입니다.
그림 2) COCO 테스트 세트에서 Mask R-CNN 결과입니다. 이러한 결과는 ResNet-101[19]을 기반으로 하며 마스크 AP 35.7을 달성하고 5fps로 실행된다. 마스크는 컬러로 표시되며 경계 상자, 범주 및 신뢰도도 표시됩니다.
그림 5) ResNet-101-FPN을 사용하고 35.7 마스크 AP를 사용하여 5fps로 실행되는 COCO 테스트 영상에 대한 Mask R-CNN의 추가 결과(표 1)
4.2 Ablation Experiments
Architecture :
표 2a) 백본 아키텍처: 백본이 더 좋으면 기대 이익이 발생한다. 심층 네트워크가 더 낫고, FPN이 C4 기능을 능가하며, ResNet에서 ResNeXt를 개선한다.
표 2a에서 보듯 모든 프레임워크가 더 심층적이거나 고급 네트워크로부터 자동으로 이익을 얻는 것이 아님을 알 수 있음
Multinomial vs Independent Masks :
표 2b) 다항식 대 다항식 독립 마스크(ResNet-50-C4): 클래스당 이진 마스크(시그모이드)를 통한 디커플링은 다항 마스크(소프트맥스)에 비해 큰 이득을 제공한다.
Mask R-CNN은 마스크와 클래스 예측을 분리함
표 2b에서 보듯, 픽셀당 소프트맥스 및 다항식 손실을 사용하는 것과 비교함
마스크 작업과 클래스 예측을 같이하면 Mask AP(5.5점)의 심각한 손실을 초래함을 알 수 있음
Class-Specific vs Class-Agnostic Masks :
Class-Agnostic Mask를 사용하는 Mask R-CNN은 효과적임
RolAlign :
(c) RoIAlign (ResNet-50-C4) : 다양한 RoI 레이어로 결과를 마스크합니다. NAT의 RoIAlign 레이어는 AP를 3점, AP75를 5점까지 개선합니다. 적절한 정렬을 사용하는 것이 RoI 레이어 간의 큰 간격에 기여하는 유일한 요인입니다.
보폭 16을 가진 ResNet-50-C4 백본을 사용함,
높은 IOU(AP75)에서 좋은 결과를 얻음으로써 RolPool보다 AP를 3포인트 향상시킴
RolAlign은 max/평균 풀에 둔감함
이중 선형 샘플링 사용하는 Rolwarp 과 비교해봤을 때, Rolwarp은 여전히 Rol을 정량화하고 있고 표2c에서 볼 수 있듯, RolPool과 동등하게 수행되며 RolAlign보다 성능이 더 나쁨
표 2d) RoIAlign(ResNet-50-C5, 보폭 32): 대형 스트립 기능을 사용하는 마스크 레벨 및 박스 레벨 AP. 보폭-16 기능(표 2c)보다 오정렬이 더 심각하여 정확도 차이가 크다.
RolAlign을 32픽셀의 더 큰 stride를 가진 ResNet-50-C5 백본으로 정렬함
표2d에서 볼 수 있듯, RolAlign이 mask AP를 7.3 포인트, maks AP75를 10.5포인트 향상시킴
RolAlign에서는 stread-32 C5 기능을 사용하는 것이 stred-16 C4 기능을 사용하는 것보다 더 정확함
표 6) RoIlign 대 RoIlign 미니발에서 키포인트 탐지를 위한 RoIPool. 백본은 ResNet-50-FPN입니다.
표6에서 볼 수 있듯, 보다 세밀한 정렬이 필요한 키포인트 검출을 위해 RolAlign은 FPN을 사용하더라도 큰 이득을 보여줌을 알 수 있음
Mask Branch :
Pixel-to-pixel 작업이고 FCN을 사용하여 마스크의 공간 레이아웃을 활용함
표 2e) 마스크 분기(ResNet-50-FPN): 마스크 예측을 위한 완전한 컨볼루션 네트워크(FCN) 대 다중 계층 퍼셉트론(MLP, 완전 연결)이다. FCN은 공간 레이아웃을 명시적으로 인코딩하여 결과를 개선한다.
표2e에서는 FCN을 사용하면 MLP에 비해 2.1 mask AP가 증가함
여기서 MLP와의 공정한 비교를 위해 FCN 헤드의 컨볼루션 레이어가 사전 훈련되지 않도록 이 백본을 선택했음
4.3 Bounding Box Detection Results
표 3. 객체 감지 단일 모델 결과(바운딩 박스 AP)와 테스트 개발의 최첨단 결과 비교. ResNet-101-FPN을 사용하는 마스크 R-CNN은 이전의 모든 최첨단 모델의 기본 변형을 능가한다(이 실험에서 마스크 출력은 무시된다). [27]에 비해 Mask R-CNN의 이점은 RoIAlign(+1.1 APB), 멀티태스킹 훈련(+0.9 APB) 및 ResNeXt-101(+1.6 APB)을 사용하여 얻을 수 있다.
GRMI는 COCO 2016 Detection Challenge 우승작
Faster R-CNN, RolAlign은 mask branch 사용하지 않고 mask R-CNN 훈련한 것
4.4 Timing
Inference :
ResNet-101-FPN 모델 훈련 : 엔비디아 테슬라 M40 GPU에서 이미지당 195ms로 실행
ResNet-101-C4는 박스 헤드가 무거워 400ms가 소요됨
따라서 실제로 C4 변형을 사용하지 않는게 좋음
Mask R-CNN은 빠르지만, 설계가 스피드에 최적화되지 않았음
Training :
Mas R-CNN은 훈련 속도 빠름
ResNet-50-FPN은 8-GPU 구현에서 32시간(16-mage 미니 배치당 0.72초)
ResNet-101-FPN은 44초 소요
5 Conclusion
Mask R-CNN은 Faster R-CNN에 FCN을 추가한 모델로 좋은 성능을 보임