RCNN 논문 리뷰
작성자 : 노신영
1.컴퓨터비전에서의 문제들은 크게 4가지로 분류할 수 있습니다.
싱글오브젝트에 대해 클래스를 분류하는 클래시피케이션,
클래시피케이션에서 해당 오브젝트의 바운딩박스를 찾는 로컬리제이션,
그리고 멀티플 오브젝트에 대해 앞선 클래시피케이션과 로컬리제이션을 수행하는 오브젝트 디텍션,
마지막으로 오브젝트 디텍션에서 바운딩박스가 아닌 픽셀단위로 오브젝트를 찾는 세그맨테이션이 있습니다.
오늘 리뷰할 RCNN 은 세번째인 오브젝트 디텍션 모델에 해당합니다.
2. 오브젝트 디텍션을 수행하는 디텍터는 원스테이지 디텍터와 투스테이지 디텍터 두종류 입니다.
투스테이지 디텍터는 리전 프로포절과 클래시피케이션이 각각 다른 모듈에서 순차적으로 진행되는 모델을 의미합니다.
반면 원스테이지 디텍터는 투스테이지에서 두단계에 걸쳐 진행했던 리전프로포절과 클래시피케이션이 동시에 이루어지는 모델을 원스테이지 디텍터라고 합니다.
RCNN은 투스테이지 디텍터입니다.
3. rcnn의 프로세스는 다음과 같습니다. 인풋 이미지로부터 region proposal 을 통해 2000개의 바운딩박스을 생성합니다. 그다음 이 바운딩박스를 cnn에 넣어 각 프로포절마다 feature vector를 추출합니다. 이후 각 region마다 SVM을 적용해 classification 을 수행하게됩니다.
4. 인풋이미지가 들어오면 첫번째 단계인 region proposal 의 작동방식에 대해 알아보겠습니다. region proposal 이란 물체가 있을법한 위치를 찾는 것입니다. rcnn 에서는 region proposal 을 위해 selective search 알고리즘을 사용합니다. 이는 기존의 sliding window 방식의 비효율성을 극복하기 위해서 사용되었습니다. 기존 슬라이딩 윈도우 방식이 왜 비효율적이냐 라고 한다면, 슬라이딩 윈도우 방식은 밑에 그림과 같이 물체를 찾기위해 윈도우의 크기와 비율을 임의로 바꾸면서 이미지의 모든 영역에 대해 탐색하는 방식입니다. 이렇게 임의의 크기와 비율로 모든 영역을 탐색하는 방식은 당연히 매우 느릴 수 밖에 없기에 rcnn에서는 이러한 점을 극복하기 위해 selective search 알고리즘을 도입합니다. 이렇게 selective search 알고리즘을 이용해 인풋이미지에 대해 2000개의 바운딩 박스를 아웃풋으로 뽑습니다.
5. 그럼 region proposal 에 사용되는 selective search 가 어떻게 동작하길래 결과적으로 2000개의 바운딩박스를 만들어내는지 알아보겠습니다. selective search 는 이미지가 인풋으로 들어오면 sub-segmentation 을 수행합니다. sub segmentation은 첫번째 줄의 그림에서 보듯이, 각각의 오브젝트가 1개의 영역에 할당되도록 될 수 있는한 많은 초기 바운딩박스 영역을 생성하도록 합니다. 그럼 이제 또 이걸 어떻게 하는건지 의문이 생길수있는데요, 그부분은 다음과 같이 작동합니다.(클릭) 그래프이론에 기반을 하여 픽셀들 간의 위체 가중치를 정하는 방식으로 작동합니다. 오른쪽의 그래프에서 파란 점들은 이미지의 픽셀을 의미하는 것이고, 상하좌우 연결된 픽셀간의 선을 에지라고 합니다. 에지는 픽셀과 픽셀의 관계를 나타내며, 왼쪽의 가중치 W(vi, vj)로 표현이 됩니다. 식에서 pi와 pj는 픽셀을 의미하며, I는 픽셀의 유사도를 계산하는 함수입니다. 그럼 유사도는 어떻게 계산하냐, 유사도는 feature space 방식이라고 픽셀의 rgb컬러값을 이용해서 유클리드 거리를 이용해 유사도를 계산합니다. 어쨋든 이렇게 계산한 유사도를 가지고 인접한 픽셀간의 유사도 차를 계산합니다. 가중치는 픽셀간의 유사도가 떨어질수록 큰값을 갖게되고, 따라서 W값이 커지면 유사도가 떨어지는 것이니까 픽셀간 영역의 분리가 일어나는 것입니다. 네 이렇게 해서 selective search 첫번째 단계로 가장 많은 바운딩박스를 그리게 sub segmentation 을 했습니다. 그다음에는 매우작게 나눠진 세그멘테이션들을 큰영역으로 통합하는 단계입니다. 이때는 그리디 알고리즘이라는걸 쓰는데, 가장 비슷한 영역부터 고르기 시작해서 점점 더 큰 영역으로 통합을해 1개의 영역이 남을 때까지 반복하는 것입니다. 그리디 알고리즘을 적용할때는 첫단계인 sub segmentation 유사성 계산과는 다르게 각 region 별로 색, 질감, region의 사이즈, cadidate bounding box크기와의 차이를 이용해 유사성 계산을 하고, 비슷한 region끼리 먼저 통합을 해나갑니다. 그렇게 통합을 하면서 통합된 영역들을 바탕으로 2000개의 region proposal이 나올때까지 반복해 아웃풋으로 2000개의 bounding box를 뽑습니다.
6. 이렇게 2000개를 바운딩박스를 뽑으면 cnn에 넣기 전에 cnn ouput으로 고정된 사이즈를 얻어야하기 때문에, 227 by 227 크기로 리사이즈를 한 후에 cnn에 넣어줍니다. cnn은 이 rcnn이 alexnet 구조를 사용합니다. 이미지넷으로 프리트레인드된 네트워크를 가져다가 썼고 이렇게 각 바운딩박스별로 cnn을 거치면 각각의 region으로부터 4096 차원의 feature vector를 뽑아냅니다.
7. 그다음에 이제 cnn으로 뽑아낸 feature vector로 svm 을 이용해 classification을 합니다. 보통 많이 사용되는 softmax가 아닌 svm을 사용한 이유는 단지 실험해봤을때 svm이 더 성능이 좋아서 사용하였다고 합니다. svm을 사용하여서 추출된 피쳐벡터에 점수를 클래스 별로 매깁니다..
8. svm을 통과해서 이제 각각의 바운딩박스들의 어떤 물체일 스코어를 가지게 되었습니다. 그런데 2000개의 바운딩박스에서 아래 그림과 같이 같은 물체에 대해 여러개의 박스가 쳐져있을 수 있습니다. 따라서 nms 를 사용해 동일한 물체에 대해 중복된 바운딩 박스들을 제거해줍니다. nms는 오브젝트 디텍션에서 대부분의 모델들이 사용하고 있는데요, nms 를 간단하게 설명하자면, 바운딩 박스들의 스코어를 내림차순으로 정렬합니다. 가장 높은 점수의 박스부터 시작해서 나머지박스들간의 IoU라고 Intersection over union 으로 두 박스간의 지역이 겹치는 정도라고 생각하시면 됩니다. 이 IoU를 계산해서 지정한 쓰레시홀드값보다 높은 박스들은 동일한 물체를 대상으로 한 박스라고 판단해서 지워줍니다. 이렇게 모든 박스들에 대해 반복하여 최적의 박스를 남기는 것이 nms입니다.
10. 이렇게 nms를 이용해 중복된 바운딩박스들을 제거해준뒤, 보다 정확한 바운딩 박스 위치를 찾기 위해서 바운딩박스 리그레션을 진행합니다. 간략하게 설명하자면, 실제 값 그라운드 truth 바운딩박스에 가까워지도록 예측한 바운딩박스의 중심 x,y 좌표와 넓이 높이를 조정해주어 좀 더 정확한 바운딩 박스 위치를 찾을 수 있도록 학습시킵니다.
11. 마지막으로 rcnn의 전체적인 training 방법에 대해 알아보겠습니다. rcnn은 총 3곳에서 각각 따로 학습이 됩니다. 첫번째, Imagenet으로 프리트레인드된 모델을 가져와 fine tuning 하는 부분입니다. fine tuning 은 classification 에 최적화된 cnn모델을 새로운 detection, 새로운 데이터셋에 적용하기위해 sgd 방식으로 cnn 파라미터를 업데이트하며 학습한 것입니다. 두번째 svm classifier를 학습할때, 세번째, 바운딩박스 리그레션을 진행 할때 이렇게 총 3번의 학습이 진행됩니다.
12. 이렇게 전체적인 rcnn의 구조를 살펴보았습니다. rcnn의 단점으로는 rcnn은 selective search 에서 뽑아낸 2000개의 영역에 대해 모두 cnn을 돌리기 때문에 오래걸린다점이 있습니다. 또한 multi stage training 을 사용하기 때문에 back propagation이 안된다는점이 있습니다. 하지만 이 rcnn 논문 인용횟수를 보면 알 수 있듯이 후에 , fase rcnn, faster rcnn, mask rcnn 등 오브젝트 디텍션분야의 rcnn 시리즈 시작을 연 아주 영향력있는 논문이기 때문에 저희가 세미나 논문으로 선택하였습니다.
질문 환영합니다>_<