논문 : https://arxiv.org/pdf/1703.06870
이번 포스팅에서는 Mask R-CNN 논문리뷰를 진행하겠습니다.
해당 글을 참조했습니다.
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
Instance segmentation
segmentation기법에는 semetic segmentation과 Instance segmentation가 있습니다.
sementic segmentation은 객체의 카테고리 자체를 구분하지만 객체의 Instance 자체는 구분하지 않습니다.
Instance segmentation은 객체의 종류뿐만 아니라 Instance까지 구분합니다.
예를들어 sementic segmentation은 cube 3개를 하나로 묶어 segmentation하지만
instance segmentation은 같은 종류의 cube라도 각각의 객체로 분류해 segmentation합니다.
Mask R-CNN
Mask R-CNN은 Object instance segmentation task에 일반적으로 사용한다고 합니다.
메인 아이디어는 Faster R-CNN에 segmentation mask를 예측하는 mask branch를 추가한 것입니다.
이로서 Faster R-CNN의 바운딩 박스 단위의 디텍팅을 좀 더 정교하게 fixel 단위로 잘라 객체를 탐지합니다.
1. Mask branch
아래 그림은 Faster R-CNN의 구조입니다.
다시 간단히 Faster R-CNN 구조에 대해 되짚어보자면
원본 이미지를 받아 pre-trained 모델을 거쳐 feature map을 생성합니다.
해당 feature map은 3x3 conv 층을 거친 후
1x1 conv층을 거쳐 각 classifiaction에 훈련될 feature map과
bounding box regressor에 훈련될 feature map으로 나누고
Region proposal를 진행합니다.
이 region proposal은 ROI pooling되어 Fast R-CNN 모델에 들어갑니다.
Mask R-CNN은 아래 그림에 보여지는 것처럼 Faster R-CNN 구조 중
ROI Pooling이 ROI Align으로 대체되고 Mask branch가 추가됩니다.
다만 아래의 그림은 이해를 위해 Mask branch가 추가된 부분을 설명하는 그림이며 정확한 Mask R-CNN 구조가 아닙니다.
2. RoIAlign
기존 Faster R-CNN에서의 RoIPooling에서의 동작을 보면
CNN을 통과한 feature map에서 sub-samping ratio 된 region을 projection해주고
얻어낸 RoI를 Pooling해줘 원하는 크기의 feature map을 얻어냅니다.
아래의 그림에서 보면 16x16 feature map에
200x145의 region을 뽑아내고 sub -sampling ratio을 32로 줘서 4.53, 6.25로 만들어 주었습니다.
다만 1픽셀 단위에서 소수점은 픽셀 이하 값이므로 분할이 불가해 4.53, 6.25는 4,6으로 변경됩니다.
해당 RoI값을 3x3으로 만들어 주기 위해서 1x2의 stride를 줘서 Max Pooling을 진행합니다.
논문에서는 해당 과정이 quantization(양자화) 즉, 실수-> 정수로 바꾸는 과정에서
misalignment(의도하거나 원하는 위치 또는 방향에서 벗어난 것)가 발생하게 된다고 합니다.
아래 좌측 그림을 보면 초록색과 파란색이 쳐진 부분은 아에 데이터가 소실되었다고 볼 수 있습니다.
아래 우측 그림을 보면 stride를 진행할때조차 하늘색 부분의 데이터 소실이 되었습니다.
해당 소실은 pixel 단위로 진행하는 segmentation에서는 매우 안좋은 영향을 미칩니다.
때문에 논문에서는 해당 소실을 막고자 RoIPooling 대신 RoIAlign을 진행합니다.
RoI projection 된 값을 quantization 하지 않고 그대로 사용합니다.
출력하고자 하는 feature map의 크기대로 그대로 분할해줍니다.
아래의 그림에서 보면
6.25 x 4.53의 projection된 부분을 그대로 사용하며
출력 feature map이 3x3이므로
해당 부분을 3x3으로 나누어 9개의 cell을 만들어줍니다.
이후 각 분할된 cell에서 4개의 sample point를 찾아줍니다.
이후 bilinear interpolation을 진행합니다.
나눠진 중간 값을 추정하는 방법입니다.
Q11, Q12, Q21, Q22 사이의 P 값을 추정합니다.
해당 P 값을 구하는 수식은 아래와 같습니다.
좌표를 이용해서 값을 구합니다.
x,x1,x2,y,y1,y2 는 위에서 구한 sampling point 점들이며, Q11, Q12, Q21, Q22는 sampling plint에 인접한 cell의 값입니다.
해당 연산을 반복해서 얻은 4개의 sample point에 대한 값을 Cell 마다 MaxPooling을 수행합니다.
해당 RoIAlign방식을 사용하면
misalignment을 해결하면서 정확한 spatial location의 보존이 가능합니다.
결과적으로는 mask accuracy가 크게 향상된다고 합니다.
3. Loss Function
Faster R-CNN과 동일하게 Multi-task loss형태입니다.
다만 Lmask 로스가 추가되었습니다.
Lmask는 binary cross entropy loss입니다.
feature map의 각 cell에 sigmoid function을 적용한 후 loss를 구합니다.
여기서 softmax 가 아닌 sigmoid를 적용한 이유는 Lcls에서 객체의 종류에 대해
loss를 진행하고 분류하기 때문에 mask에서는 객체의 유무에 대한 이진분류만 처리하면
되기 때문입니다.
4. Backbone network
Mask R-CNN은 Backbone으로 ResNet-FPN 모델를 사용했습니다.
5. Training Mask R-CNN
전체적인 구조는 Faster R-CNN을 기반으로 합니다.
하지만 FPN이 추가되었고 이미지, feature map에 대한 전처리, 후처리를 진행한다고 합니다.
1) input image preprocessing
이미지에 대한 전처리입니다.
target size의 디폴트값은 800, maximum size 는 1333 입니다.
원본이미지의 width, height 중 짧은 쪽이 target size로 resize되고 큰 사이즈는 ratio rate로 조절됩니다.
만약 긴쪽이 maximun size보다 큰 경우 maximun size로 resize되고 짧은 쪽은 ratio rate로 조절됩니다.
2) Feature pyramid by backbone network
전처리된 이미지를 ResNet-FPN backbone 네트워크에 입력데이터로 넣어줍니다.
FPN 구조로 인해 각각 다른 사이즈의 feature map인 P2, P3, P4, P5가 출력됩니다.
3) Region proposal by RPN
입력된 데이터를 RPN에 넣고 객체가 있는지 없는지에 대한 objectness score와
객체의 위치를 나타내는 bbox regressor를 가진 region proposal을 추출합니다.
4) Select best ROI by Proposal Layer
최적의 RoI를 선정합니다.
1) ROI중 objectness score가 높은 top-k개의 anchor를 선정합니다.
학습시 k는 12000개입니다.
2)bounding box regressor에 따라 anchor box 크기를 조절해줍니다.
3) 이미지 경계를 벗어나는 anchor box를 제거합니다.
4) NMS 를 실행합니다. threshold는 0.7입니다.
5) 위의 과정들은 2) 과정에서 거친 각각 다른 사이즈의 feature pyramid level로서 진행되었고
feature pyramid level로 진행된 여러 anchor box들을 결합(concatenate) 합니다.
6) 결합된 anchor box들의 objectness socre에 따라서 top-N개의 anchor box를 선별합니다.
학습시 N은 2000개입니다.
최종적으로 해당 과정에서 2000개의 상위 objectness socre의 anchor box가 학습에 사용됩니다.
5) feature map by RoI Align layer
4)에서 전달된 anchor box는 여러 scale을 가진 feature pyramid level 데이터입니다.
이 데이터를 각각의 여러 feature pyramid level에 projection해야하므로
위와 같은 공식으로 같은 feature pyramid level에 매칭시킵니다.
w: RoI의 너비
h: RoI의 높이
k : feature pyramid level의 index
이후 RoIAlign 과정을 거처 7x7 feature map으로 출력됩니다.
6) Fast R-CNN 의 Classification와 Bounding box regressor
7x7 feature map을 각 Classification과 Bounding box regressor branch로 들어가고
최종적인 class score와 bounding box위치 정보를 얻게 됩니다.
7) Mask Segment by Mask branch
또한, 7x7 feature maps는 Mask branch로 들어가 Segmentation이 진행됩니다.
mask branch는 mask branch는 3x3 conv - ReLU - deconv(by 2) - 1x1(xClass 수) conv layer로 구성되어 있습니다.
결과적으로 14x14(x Class개수)의 feature map을 얻게됩니다.
6)과정에서 얻은 가장 높은 classificaion score에 해당되는 class에 해당하는 feature map 하나가 선정되어
Prediction에 사용됩니다.
해당 feature map은 각 cell 별로 sigmoid함수를 적용해서 0~ 1사이 값으로 만듭니다.
8) Post-processing of masks
이미지 후처리 작업입니다.
최종적으로 선택된 feature map을 원본 데이터와 비교하기 위해 resizing해줍니다.
mask threshold값(0.5)로 sigmoid를 거쳐 0~1 사이 값을 0과 1로 분류합니다.
0.5 이상이면 1, 미만이면 0의 mask 이미지가 생성됩니다.
9) Train Mask R-CNN by multi-task loss
multi-task loss function을 사용하여 실제 ground truth와 Predict한 이미지를 비교하며
학습을 진행합니다.
6. Inference
추론(Inference) 시에는 학습과는 다르게 feature pyramid level에 걸쳐 상위 1000개의 RoI만을 선정합니다.
이 RoI 값들은 classification branch와 bbox regression branch에 입력되며,
예측 결과에 Non maximum suppression을 적용해서 상위 100개의 box만을 선정하여 이번에는 mask branch에 입력합니다.
학습과정과는 다르게 classification과 bbox regression의 branch의 결과를 mask banch에 넣어주는 방식이며, 해당 과정으로 inference 시간을 줄여주고 정확도가 더 높게 나온다는 장점이 있다고 합니다.
7. 결과
RseNeXt-101-FPN을 backbone network로 사용하고, COCO 데이터셋을 학습에 사용하면서
AP값이 37.1까지 보였다고 합니다.
이는 당시 성능이 가장 좋았던 ResNet-101-C5-dilated backbone을 사용한 FCIS+++ +OHEM 모델보다 2.5%가 더 높은 결과입니다.
'인공지능 개발하기 > 기술 & 논문 리뷰' 카테고리의 다른 글
[논문 리뷰] YOLOv3(YOLOv3: An Incremental Improvement) (0) | 2024.05.20 |
---|---|
[논문 리뷰] YOLOv2(YOLO9000:Better, Faster, Stronger) (0) | 2024.05.19 |
[논문 리뷰] Faster R-CNN (0) | 2024.05.13 |
[논문 리뷰] Fast R-CNN (3) | 2024.05.11 |
[논문 리뷰] R-CNN(Rich feature hierarchies for accurate object detection and semanti (0) | 2024.05.09 |