728x90

  합성곱 신경망을 이용하여 제안 영역을 구하는 방법을 Faster R-CNN이라고 부릅니다. 왜냐면 Fast R-cnn보다 더 빠르거든요. 아이디어는 선택적 탐색이라는 휴리스틱 방법 대신 합성곱 신경망으로 제안 영역을 예측하거든요. 동작 과정은 아까 본 fast r-cnn이랑 비슷한데, 백본 신경망 뒤에 제안 영역 신경망 region proposal network RPN라는 작은 신경망이 추가되어 제안 영역들을 예측합니다.

 

 파이프라인이 있는데 입력 이미지가 있으면 백본 신경망을 통과해서 이미지 특징들을 구하고 이 이미지 레벨 특징을 왼쪽의 제안 영역 신경망에 넣어 제안 영역들을 구해내고 나머지는 fast r-cnn과 동일 합니다. 이미지 특징을 미분 가능하도록 잘라내기 위해서 제안 영역들을 구할 것이고, 각 제안 영역마다 분류를 하고, 바운딩 박스 변환을 수행하겠습니다.

 

 여기서 새로운 부분은 영역 제안 신경망 뿐인데, 그러면 우리는 어떻게 하면 합성곱 신경망으로 제안 영역을 뽑아낼 수 있을까요??

 

 

  이걸 이해하기 위해서 제안 영역 신경망 아키텍처에 대해서 조금 깊게 살펴봅시다. 이 신경망은 백본 신경망의 영향을 받는데요. 입력 이미지를 백본 신경망에다가 넣어 512 x 20 x 15차원의 이미지 특징을 구하겠습니다. 여기서 아이디어는 백본 신경망으로 얻은 이미지 특징은 입력 이미지의 특징과 일치하고 있습니다.

 

 여기서 우리가 해볼수 있는건 이 합성곱 특징 맵의 각 지점에서 앵커 박스라고 하는 고정된 크기와 고정된 종횡비를 가지는 바운딩 박스가 있다고 해봅시다. 이 앵커박스를 슬라이드 시키면서, 백본 신경망으로부터 얻은 이미지 특징 지도의 모든 위치에 존재한다고 할께요. 

 

 

 

 우리가 할 일은 작은 합성곱 신경망을  이 앵커박스가 객체를 가지고있는지 객체가 없는지 학습시키겠습니다. 이그러면 이 문제는 이진 분류 문제가 되어 각 제안 영역들/앵커 박스들이 양의 스코어를 가지는지, 음의 스코어를 가지는 지에 대한 출력을 받겠습니다. 

 

 이 이미지 레벨 특징에서 한 점에 대한 앵커 박스 하나가 있으면, 또 다른 합성곱 레이어로 양 혹은 음에 대한 스코어를 얻을수가 있는데, 1 x 1 합성곱 레이어로 해당 앵커에 객체가 있는지 없는지에 대한 스코어를 얻을수 있겠습니다. 그리고 이 두 카테고리를 소프트맥스 비용으로 학습할수가 있어요.

 

 이 앵커 박스로는 이미지에 있는 물체에 잘 맞추지 못할수도 있는데, 트릭 으로

 

  앵커 박스의 스코어 뿐만 아니라, 합성곱 특징맵에서 각 위치에대한 박스 변환도 출력으로 얻어내어 기존의 앵커박스를 변환시켜 실제 제안 영역으로 바꾸겠습니다. 위 슬라이드에서 앵커박스는 녹색인데 실제 제안 영역 박스는 노란색이 되겠습니다. 이 박스 변환은 이전에 본 방법대로 회귀 비용을 사용해서 학습할수가 있습니다.

 

 이건 그렇게 복잡하지는 않으며, 또다른 합성곱 레이어로 박스 변환에 대한 값들을 얻어내었습니다. 합성곱 특징 맵에서 한 지점에 대한 고정된 크기를 갖는 하나의 앵커박스를 사용하는것 만으로는 우리가 인식하고자하는 모든 객체들을 찾아내기는 부족합니다. 

 

 

 그래서 실제로 사용할때는 일반적으로 합성곱 특징맵의 모든 지점에다가 k가지의 다른 크기와 종횡비를 갖는 앵커 박스들을 사용합니다. 질문이 들어왔는데 앵커가 물체인지 여부는 k나 2k개가 될수 있는데 어떻게 구현하느냐에 달린것이며 원래 논문에서는 2k을 가지며,

 

 양과 음의 스코어를 출력하고 소프트맥스 비용을 사용했었는데 이와 동일하게  단일 스코어를 출력으로 받는데 큰 양의 값은 긍정, 큰 음의 값은 부정 그리고 로지스틱 비용을 사용해도 됩니다. 둘다 동일하며 뭘 사용해도 사용해도 중요하지는 않아요.

 

 대부분 구현의 경우 한 앵커당 양의 스코어와 음의 스코어를 받아 스프트맥스 비용을 사용하나 로지스틱 회귀를 사용해도 문제 없겠습니다.

 

 그래서 해결 방법은 모든 지점에서 서로 다른 크기와 종횡비를 가지는  k 앵커를 사용하면 되겠으며 이는 하이퍼 파라미터가 되겠습니다. 얼마나 많은 앵커를 사용할지 어떤 스케일과 크기를 지정할지 모두가 객체 탐지에서 하이퍼 파라미터입니다.

 

 이건 faster r-cnn에 대해서 전체를 정리한 것인데, 4개의 학습해야할 서로다른 비용들을 가지고 있습니다. 영역 제안 신경망은 2개의 비용을 가지는데, 분류 비용의 경우 앵커 박스가 객체인지 객체가 아닌지를 찾고, 회귀 비용은 영역 제안 신경망이 기존의 앵커 위치에서 실제 제안 영역 위치로의 변환 값을 출력합니다. 

 

 이제 fast r-cnn의 나머지 내용들을 가지고, 영역제안 신경망으로부터 얻은 각 제안 영역에다가 영역 단위 신경망을 돌려서 두 개의 비용을 또 얻습니다. 하나는 객체 분류 비용으로 객체가 무슨 카테고리에 속하는지 혹은 배경인지에 대한 것이며, 최종 물체 회귀 비용은 다시 영역 제안 신경망으로부터 얻은 제안 영역을 최종 출력 박스로 회귀하겠습니다. 

 

 이 내용들이 많고 지저분 하기는 하지만 더 자세히 얘기할 시간은 없구 물체 탐지는 실제로 동작하기 까지 꽤 복잡한 주제가 되겠습니다.

 이걸 다하면 faster r-cnn은 정말로 정말로 빠릅니다. 왜냐면 우리는 cpu를 이용한 영역 제안으로 인한 병목 현상을 제거하였고, 대신 제안 영역들을 이미지 특징과 아주 작은 합성곱 신경망으로 구하였거든요.  그래서 아주 빠르며, 실시간으로 돌릴수가 있습니다. 그래서 gpu로 돌리는 faster r-cnn는 fast r-cnn보다 10배나 빨라요. spp-net에 대해서 이야기할 시간은 없는데, 이건 빠르지만 다르게 동작하는 방법입다.  

 

 

 

 

좋아요 faster r-cnn은 종종 two-stage object detector 두 단계로 이루어진 객체 검출기라고도 합니다. 이 방법은 두 단계로 이루어져있는데, 첫 번째 단계는 파란색 부분으로 전체 이미지를  신경망으로 돌려서 합성곱 특징을 구하고, 이걸 영역 제안 신경망에 돌려서 제안 영역들을 얻어냅니다. 두번째 단계는 영역 별 연산을 수행하고, 각 영역별로 최종 분류 스코어랑 회귀 파라미터를 얻어냅니다.

 

 

그런데 질문이 있습니다. 우리가 정말로 두번째 단계가 필요한건가요? 즉 첫번쨰 단계만으로 모든걸 할수없느냐인데, 즉 시스템을 더 간소화해서 더 빠르게 만들자말입니다. 왜냐면 우리는 이렇게 영역별로 나눠서 계산을 할 필요가 없거든요.

 

 

 이 개념이 실제로 가능합니다. 단일 단계 객체 탐지라는 방법이 있는데, faster r-cnn의 rpn 처럼 보는것이나  앵커박스로 객체인지 아닌지 분간하는게 아니라 물체 카테고리 중 어떤거인지 바로 분류 결정을 내립니다. 우리가 c 개체 카테고리를 분류하고자 한다면, 이제 앵커의 출력은 20 x 15 공간 크기에다가 각 위치마다 k개의 앵커 박스와 바로 c개의 카테고리와 배경을 포함해서 c + 1개의 스코어를 얻습니다.

 

 이 과정을 합성곱 레이어로 한번에 할 수 있어요. 그렇게 되면 기존의 rpn에서 이진/두 클래스 비용을 사용했던것 대신에 완전한 분류 비용을 사용하고, 앵커당 박스 변환 값들을 얻을 수가 있겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts