instance segmentation과 mask R-CNN알아보기
1. instance segmentation의 기본
그 동안 배운 object detection, semantic segmentation은 2018년 이후 연구를 잘 안하는 추세
instance segmentation과 panoptic segmentation으로 고도화되었기 때문에
semantic segmentation의 한계점으로 서로 다른 물체더라도 같은 class에 속하면 같은 색으로 구분한다는 것이었다.
이것을 극복하고 서로 다른 물체라면 같은 class더라도 다른 색으로 구분하는 기술이 instance segmentation이다.
서로 다른 물체라면 구분한다는 점에서 응용가능성이 더 높다
파이썬의 instance개념처럼 서로 다른 instance를 구분하겠다는 것이다.
instance segmentation은 semantic segmentation에서 한발 더 나아가 같은 class더라도 서로 다른 물체라면 다른 색으로 구분해준다
서로 다른 object는 어떻게 구분할까? object detection을 활용하여 구분한다.
2. Mask R-CNN
2-1. motivation
object detection에서 큰 성공을 거둔 Faster R-CNN의 아이디어를 대부분 사용
그런데 instance segmentation을 위해서는 더욱 정교한 image 내 물체 탐지가 필요했음
2-2. ROI align
Faster R-CNN이 ROI pooling으로 bounding box를 찾았다면 Mask R-CNN은 ROI align으로 더욱 정교한 물체 탐지를 수행함
ROI pooling은 이미지에서 정수좌표 feature map만 뽑아왔음
feature map의 ROI가 처음에 feature map에서 틈이 보이게 잡으면(소수점까지 잡으면) 반올림하든지 해서 없애가지고
바로 아래 그림처럼 feature map 각각 정수좌표에 딱 맞게 잡아줌
참고로 feature map grid들이 정수값들인건 상식임??
ROI pooling같이 소수점 부분을 왜곡하면 당연히 가져온 feature map을 어느정도 왜곡할테지만 classification같은 object detection에서는 큰 문제는 아님
그러나 정교한 segmentation을 위해서는 소수점 부분도 제대로 가지고 오는 방식이 필요한데 그것이 ROI align
검정색 box는 ROI이고 회색 점은 ROI 내의 sampling pixel point들
이 pixel point를 가져오고자 하는데 feature map에서 value는 알고 있으므로
회색 화살표를 향해 앞에서 배운 bilinear interpolation을 사용하여 추정함
feature map에서 ROI가 위와 같이 애매하게 잡혔다면 영역별 비율을 곱하는 방식으로 ROI 내 grid의 pixel을 추정하고
max pooling으로 최종 feature map을 뽑는다
정교한 feature map을 추출하는 ROI align으로 mask 추출의 성능을 개선하였다
2-3. Feature Pyramid Network
이전에 Faster R-CNN은 backbone CNN 최종 결과로 나온 1개의 feature map 만을 사용하여 classification이나 box regression을 했음
근데 feature map을 만들면서 중간에 일부 정보들이 손실될 가능성이 높음
그래서 최종 layer에서 여러가지 형태의 물체를 탐지하는데 사실 비효율적임
이것을 극복하고자 최종 feature map 결과에 중간 중간 feature map을 더하여 이전 정보까지 더하는 feature pyramid network가 제안되었다
위에서 아래로 더해나갈때는 2배 upsampling(nearest neighbor interpolation 사용)하고
아래 feature map에서 1*1 conv하여 채널 맞춘 feature map이랑 단순히 element wise sum을 함
2-4. 구조
ResNet으로 feature map을 뽑고 Feature pyramid network 구조와 ROI align을 사용하는 Region proposal network를 사용했다
마지막에는 pyramid 각 단에서 뽑은 feature map 모두에 대해서 ROI에 대한 classification, box regression, mask prediction을 모두 수행했다
다양한 feature map에서 object detection을 수행하여 다양한 scale의 object를 더욱 정확히 탐지하도록 했다
보면 pyramid 각 단계에서 뽑은 P2,P3,P4,P5 모두 RPN에서 ROI align을 이용한 ROI를 만들고
P2,P3,P4,P5 모든 map에서 classification, box regression, mask prediction을 수행함
2-5. mask branch
Faster R-CNN 마지막 단에서 classification과 box regression 2가지 branch가 있었는데 Mask R-CNN은 Faster R-CNN에 mask branch를 추가한거나 다름 없다
하나의 bounding box가 가질 수 있는 80개의 모든 class에 대한 binary mask를 일단 전부 생성함
mask branch로 들어가기 전에 2배 upsampling하고 채널은 압축 시켰다
하나의 bounding box에서 일단 생성한 mask에 대하여 classification을 통해 나온 결과를 바탕으로 어떤 mask를 고를지 선택함
3. summary of R-CNN family
Faster R-CNN에서 region proposal 기반 detection architecture로부터 마지막 branch를 적절히 변경하여(세부적으로도 일부 변경은했지만)
여러가지 다른 task를 수행할 수 있는 확장가능성이 높은 network family
실제로 같은 논문에서 key point estimation branch를 추가하여 사람의 스켈레톤 포즈를 추정하는 것도 가능하다는 것을 보임
R-CNN이 SVM classification을 수행했다고만 했는데 실제로는 box regression도 수행했다고 한다
Mask R-CNN은 Faster R-CNN에 mask branch를 추가한 형태다(ROI align을 사용하는 등 세부적인 변경도 있지만)
'딥러닝 > Computer Vision' 카테고리의 다른 글
panoptic segmentation을 위한 UPSNet의 아이디어 (0) | 2022.10.31 |
---|---|
실시간으로 instance segmentation을 수행하기 위한 YOLACT의 아이디어 알아보기 (0) | 2022.10.31 |
불균형 데이터에 효과적인 Focal loss (0) | 2022.05.16 |
YOLO(You only look once)의 원리 알아보기 (0) | 2022.05.10 |
R-CNN 계열의 network 원리 요약 (0) | 2022.05.10 |