Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mask R-CNN #8

Open
liv0vil opened this issue Mar 11, 2021 · 2 comments
Open

Mask R-CNN #8

liv0vil opened this issue Mar 11, 2021 · 2 comments
Labels
concept 공부한 내용

Comments

@liv0vil
Copy link
Contributor

liv0vil commented Mar 11, 2021

논문 리뷰영상 : PR-057: Mask R-CNN
논문 링크 : https://arxiv.org/abs/1703.06870

@liv0vil liv0vil added the concept 공부한 내용 label Mar 11, 2021
@mingxoxo
Copy link
Member

Faster R-CNN까지는 2-stage에 기초한 특히 2) Object detection 를 위해 고안된 모델들이였다.
이번에 설명할 Mask R-CNN은 3) Image segmentation을 수행하기 위해 고안된 모델이다.

Mask R-CNN

  1. Fast R-CNN의 classification, localization(bounding box regression) branch에 새롭게 mask branch가 추가됐다.
  2. RPN 전에 FPN(feature pyramid network)가 추가됐다.
  3. Image segmentation의 masking을 위해 RoI align이 RoI pooling을 대신하게 됐다.

Equivariance : input이 바뀌면 output도 바뀌어야 한다.
Convolutions와 Fully-ConvNet(FCN)은 translation-equivariant하다.
ConvNet은 fully-connected 또는 global pool layers 때문에 유지되지 않고 translation-invariant된다.

Fully-Connected layer를 Segmentation에 사용할 때의 문제점

  1. 입력 이미지 크기가 고정되어야 한다.
  2. 물체의 위치 정보가 사라진다.

따라서 Fully-Connected layer를 1*1 Convolution layer로 대체 --> Convolutionalization

@mingxoxo
Copy link
Member

출처 : https://ganghee-lee.tistory.com/40

  • FPN
    layer를 통과할수록 아주 중요한 feature만 남게되고 중간중간의 feature들은 모두 잃어버리고 만다.
    그리고 최종 layer에서 다양한 크기의 object를 검출해야하므로 여러 scale값으로 anchor를 생성하므로 비효율적이다.
    따라서 이를 극복하기 위한 방법이 FPN이다.

FPN에서는 위 그림과 같이 마지막 layer의 feature map에서 점점 이전의 중간 feature map들을 더하면서 이전 정보까지 유지할 수 있도록 한다. 이렇게 함으로써 더이상 여러 scale값으로 anchor를 생성할 필요가 없게됐고 모두 동일한 scale의 anchor를 생성한다. 따라서 작은 feature map에서는 큰 anchor를 생성하여 큰 object를, 큰 feature map에서는 다소 작은 anchor를 생성하여 작은 object를 detect할 수 있도록 설계되었다.

image

  • Non-max-suppression

수천개의 anchor box가 생성되면 NMS알고리즘을 통해 anchor의 개수를 줄인다.
각 object마다 대응되는 anchor가 수십개 존재하는데 이때 가장 classification score가 높은 anchor를 제외하고 주위에 다른 anchor들은 모두 지우는 것이다.
NMS알고리즘은 anchor bbox들을 score순으로 정렬시킨 후 score가 높은 bbox부터 다른 bbox와 IoU를 계산한다.
이때 IoU가 해당 bbox와 0.7이 넘어가면 두 bbox는 동일 object를 detect한 것이라 간주하여 score가 더 낮은 bbox는 지우는 식으로 동작한다.
최종적으로 각 객체마다 score가 가장 큰 box만 남게되고 나머지 box는 제거한다.

image

  • RoI-Align

RoI가 소수점 좌표를 가지면 좌표를 반올림하는 식으로 이동시킨후 pooling을 했는데
이러면 input image의 위치정보가 왜곡되기 때문에 segmentation에서는 문제가 된다.
따라서 bilinear interpolation을 이용해서 위치정보를 담는 RoI align을 이용한다.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
concept 공부한 내용
Projects
None yet
Development

No branches or pull requests

2 participants