From R-CNN to Mask R-CNN

Athelas의 블로그에 이미지 분할image segmentation에 관한 최근의 연구 동향을 간단하게 짚어주는 포스트가 올라왔습니다. 바로 R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN입니다.

R-CNN

0*Sdj6sKDRQyZpO6oH.

이미지를 분류하는 것보다 이미지 안에 어떤 물체들이 들어 있는지를 구분해내는 것이 훨씬 어려운 작업입니다. R-CNN은 이를 위해 몇단계를 거쳐 임무를 처리합니다. 먼저 가능한 이미지 영역을 찾아내는 리전 프로포잘region proposal 혹은 바운딩 박스bounding box를 만드는 단계가 있습니다. 바운딩 박스를 찾기 위해 셀렉티브 서치selective search 알고리즘을 사용합니다. 가령 색상이나 강도 패턴 등이 비슷한 인접한 픽셀을 합치는 방식입니다. 그런 다음 추출한 바운딩 박스를(대략 2,000여개) CNN의 입력으로 주입하기 위해 강제로 사이즈를 일원화시킵니다. 여기서 사용한 CNN은 미리 훈련된 AlexNet의 변형된 버전입니다. CNN의 마지막 단계에서 서포트 벡터 머신support vector machine을 사용하여 이미지를 분류합니다. 그리고 최종적으로 분류된 오브젝트의 바운딩 박스 좌표를 더 정확히 맞추기 위해 선형 회귀linear regression 모델을 사용합니다.

Fast R-CNN

1*E_P1vAEbGT4HNYjqMtIz4g

R-CNN의 문제점은 모든 바운딩 박스마다 CNN을 돌려야 하고 분류를 위한 SVM, 바운딩 박스를 위한 선형 회귀까지 세가지 모델을 모두 훈련시키기 어렵다는 점입니다. Fast R-CNN은 이 문제들을 해결했습니다. 먼저 바운딩 박스들 사이에 겹치는 영역이 많은데 이들을 따로 따로 CNN을 통과시키는 것은 비용 낭비라고 생각했습니다. 여기에서 RoIPoolRegion of Interest Pooling의 개념을 도입하여 셀렉티브 서치에서 찾은 바운딩 박스 정보를 CNN을 통과하면서 유지시키고 최종 CNN 특성 맵으로 부터 해당 영역을 추출하여 풀링pooling합니다. 이렇게 하면 바운딩 박스마다 CNN을 돌리는 시간을 획기적으로 단축할 수 있습니다. 또한 SVM와 선형 회귀 모델을 모두 하나의 네트워크에 포함시켜 훈련을 시킵니다. SVM 대신 CNN 뒤에 소프트맥스softmax를 놓고, 선형 회귀 대신 소프트맥스 레이어와 동일하게 CNN에 뒤에 따로 추가했습니다.

Faster R-CNN

 

 

Fast R-CNN에서 남은 한가지 성능의 병목은 바운딩 박스를 만드는 리전 프로포잘 단계입니다. Faster R-CNN은 리전 프로포잘 단계를 CNN안에 넣어서 마지막 문제를 해결했습니다. CNN을 통과한 특성 맵에서 슬라이딩 윈도우를 이용해 각 지점anchor마다 가능한 바운딩 박스의 좌표와 이 바운딩 박스의 점수를 계산합니다. 대부분 너무 홀쭉하거나 넓은 물체는 많지 않으므로 2:1, 1:1, 1:2 등의 몇가지 타입으로도 좋다고 합니다. Faster R-CNN은 작년에 마이크로소프트에서 내놓은 대표적인 컴퓨터 비전 연구 결과 중 하나입니다.

Mask R-CNN

1*BiRpf-ogjxARQf5LxI17Jw

그리고 올해 초 페이스북 AI 팀이 분할된 이미지를 마스킹하는 Mask R-CNN을 내놓았습니다. Faster R-CNN에 각 픽셀이 오브젝트에 해당하는 것인지 아닌지를 마스킹하는 네트워크(CNN)를 추가한 것입니다. 이를 바이너리 마스크binary mask라고 합니다. 페이스북 팀은 정확한 픽셀 위치를 추출하기 위해 CNN을 통과하면서 RoIPool 영역의 위치에 생기는 소숫점 오차를 2D 선형보간법bilinear interpolation을 통해 감소시켰다고 합니다. 이를 RoIAlign이라고 합니다. 그래서 아래와 같은 멋진 마스킹 이미지가 만들어 집니다.

1*6CClgIKH8zhZjmcftfNoEQ

그런데 아직 감이 잘 안잡히시나요? 조금도 걱정하지 마세요. R-CNN에서 Faster R-CNN까지 자세히 설명해 주시는 아래 이진원님의 동영상을 보시면 해결됩니다! 🙂

 

From R-CNN to Mask R-CNN”에 대한 6개의 생각

  1. 석사과정준비생

    좋은 글 감사합니다!
    그런데 region proposal 한 후 2000개의 피쳐를 warped해서 cnn에 넣어서 연산후 나온것들에 대해 bbox regression을 수행할수가있는건가요?다 깨진 피쳐를 x,y,w,h를 알수가있나요?

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 제가 rpn 구현을 직접 해보지 않아 정확히 말씀드리기 어렵네요. r-cnn 구현 코드를 찾아 보시면 좋을 것 같습니다. 감사합니다.

      좋아요

      응답

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.