[논문리뷰]_Faster-RCNN

코넬·2023년 5월 2일
0

PapersReview

목록 보기
5/35
post-thumbnail

Faster-RCNN이란?

기존 RCNN 모델들을 속도와 성능 측면에서 최대치로 개선시킨 모델로, Fast RCNN는 Region Proposal Network 를 활용하여 기존 Fast-RCNN의 구조를 그대로 사용하면서 selective search를 제거하고 RPN을 활용하여 RoI를 계산한다. 이를 통하여 GPU를 통한 RoI 계산이 가능하며, 정확도를 높일 수 있는 모델이다.

자 여기서 , 기존 RCNN 모델 시리즈들의 흐름도를 살펴보면,

RCNN에서는 3가지 모듈 (region proposal, classification, bounding box regression)을 각각 따로 수행한다.

  • region proposal 추출 → 각 region proposal 별로 CNN 연산 → classification & bounding box regression

Fast R-CNN에서는 region proposal을 CNN level로 통과시켜 classification, bounding box regression을 하나로 묶어 진행하였다.

  • region proposal 추출 → 전체 image CNN 연산 → RoI projection, RoI Pooling → classification & bounding box regression

저번 리뷰에서 한계점으로 언급했던 것 처럼, 여전히 region proposal인 Selective search알고리즘을 CNN 외부에서 연산하므로 RoI 생성단계가 bottleneck이다.

따라서 Faster R-CNN에서는 detection에서 쓰인 conv feature을 RPN에서도 공유해서 RoI생성 역시 CNN에서 수행하여 속도를 향상시킨다.

Region Proposal도 Selective search를 쓰지말고 CNN에서 같이 진행해보자는 아이디어가 핵심이다. (그럼 CPU가 아니라 GPU에서 돌겠지?)

Region Proposal Network란?

원리를 그림으로 직접 설명해보았다.

  1. CNN을 통해 뽑아낸 feature map을 입력으로 받는다. feature map의 크기는 가로,세로,채널 수(HxWxC)이다.

  2. feature map에 3x3 convolution 을 256 or 512 채널만큼 수행한다. 이것이 Intermediate layer 가 된다. 이때 주의해야할 점은 padding을 1로 설정해줘서 HxW가 보존될 수 있도록 해준다. Intermediate layer 수행 결과가 HxWX256 or HxWx512 크기의 두 번째 feature map을 얻는다.

  3. 두 번째 feature map을 입력받아 classification 과 bounding box regression 예측 값을 계산한다. (여기서 1x1 conv를 사용하여 계산하는 Fully Convolution Network의 특징을 갖는데, 이는 입력 이미지의 크기에 상관없이 동작할 수 있도록 하기 위함이다.)

  4. 먼저 Classification을 수행하기 위해 1x1 conv를 2x9(2는 object인지 아닌지를 나타내는 지표수, 9는 anchor 개수)채널 수 만큼 수행하여, 그 결과 HxWx18 크기의 feature map을 얻는다. HxW 상의 하나의 인덱스는 featuremap의 좌표를 의미하며, 18개의 채널은 각각 해당 좌표를 anchor로 삼아서 k개의 anchor box들이 object인지 아닌지에 대한 예측 값을 담고있다. 이는 1x1 conv를 한번 하면 HxW개의 anchor 좌표들에 대한 예측을 모두 수행한 것이라고 볼 수 있다.

  5. 위의 값들을 적절하게 reshape 해준 후 softmax를 적용하여 해당 anchor 가 object일 확률 값을 얻는다.

  6. 두 번째로 bounding box regression 예측 값을 얻기 위한 1x1 conv를 4x9 채널 수만큼 진행한다. regression이기 때문에 결과로 얻은 값을 그대로 활용한다.

  7. 앞서 얻은 값들로 RoI를 계산한다. 먼저 classification을 통해 얻은 물체일 확률 값들을 정렬 후, 높은 순으로 K개의 anchor만 추려낸다. 다음 K개의 anchor들에 대하여 bounding box regression을 적용한다. 마지막으로 Non-Maximum-Suppression 을 적용하여 RoI를 구해준다.

이와 같은 과정을 통하여 RPN이 RoI를 추론해주는 구조가 진행된다.

RPN - Loss Function

RPN을 학습시키기 위한 loss를 살펴보자. RPN은 앞서 Classification과 Bounding Box Regression을 수행하였는데, loss function은 위의 두가지 task에서 얻은 loss를 합한 결과이다.

i : 하나의 anchor
pi : classification 을 통해 얻은 해당 anchor 가 object일 확률
ti : bounding box regression을 통해서 얻은 박스 조정 값 벡터를 의미
pi , ti : ground truth label

classification 은 log loss 를 통해서 계산하고, regression loss는 fast-RCNN에서 사용한 smoothL1 을 사용한다.

Faster-RCNN + RPN = Training

이 두개를 한번에 학습시키기에는 좀 어렵다. 따라서 논문에서는 Alternating Training 기법 을 사용한다.

  1. ImageNet pretrained model을 불러온 후, RPN을 학습시킨다.

  2. 학습시긴 RPN 에서 기본 CNN을 제외한 Region Proposal layer만 가져온다. 이를 활용하여 Fast-RCNN을 학습시킨다. 이 때, 처음 feature map을 추출하는 CNN 까지 fine tuning을 진행한다.

  3. 학습한 Fast-RCNN 과 RPN을 불러오고, 다른 가중치값들은 고정하고 RPN에 해당되는 layer만 fine tuning 시킨다. 이때 RPN과 Fast-RCNN이 conv 가중치를 공유하기 시작한다.

  4. 같이 공유된 CNN과 RPN은 고정하고, Fast-RCNN에 해당되는 layer만 fine-tuning 한다.

Faster-RCNN의 한계

  • 과정이 복잡하다( nips 마감일에 맞추기 위하여 서두르면서 학습 과정이 복잡해졌다고 한다,,,)
  • 2 steps 접근 방식을 계속 사용하고 있다.

이렇게 RCNN 시리즈가 끝났다,, 다음부터는 1step 으로 끝내버리는 yolo를 보도록 하자 !

profile
어서오세요.

0개의 댓글