논문 & 기술

R-CNN

rokart 2025. 4. 17. 23:36

object detection에 CNN을 처음 활용한 R-CNN에 대해서 다루어보려고 한다.  이해에 따라 작성하면서 논문의 구성과 달라지는 부분이 있으니 실제 논문을 참고하길 바란다.

 

논문 링크 : https://arxiv.org/pdf/1311.2524v5

 

1. 서론


기존에는 어떻게 ? 

기존에는 전체 이미지에 이동하는 박스(sliding window 방식)로 이미지를 읽어들여  SIFT / HOG 등으로 feature를 추출한 뒤 SVM을 활용하여 해당 박스가 특정 객체인지 분류하는 방식을 사용하였다. 해당 논문에서 이런 기존의 방식들에서 발전이 더 이상 이루어지지 않고 있다고 말하고 있다.

▲ 슬라이딩 윈도우로 feature를 추출해 SVM으로 탐지하는 예시 (출처: An SVM-Based Nested Sliding Window Approach for Spectral–Spatial Classification of Hyperspectral Images)

그럼 어떻게 ?

해당 논문에서는 SIFT / HOG는 생물학적으로 시각 피질(V1)의 세포 반응과 비슷한 구조를 가진다고 말한다. V1의 경우 경계 등을 감지하는 낮은 수준의 패턴을 인식하는데, V2~V4 등 깊은 피질 단계를 거치면서 더 고차원적으로 인식을 한다. 따라서 CNN 같이 깊은 네트워크를 사용하면 더 좋은 결과가 있지 않을까? 에서 해당 연구가 시작되었다고 한다. (믿거나 말거나..)

 

ImageNet 데이터 셋에 CNN을 활용하여 이미지 분류에는 확실히 좋은 성과가 있었다 (2012, Alexnet). 그런데 그것이 PASCAL VOC 같은 객체 탐지 데이터셋에도 유효할까? CNN자체는 깊이가 깊어질 수록 하나의 노드가 보고 고려하게 되는 영역(receptive field)가 점 점 넓어지게 되어서 기본적으로 객체들(특히, 작은 객체)의 위치 정보를 정확하게 반영하기가 어렵다. 연구는 두가지 핵심적인 아이디어를 이를 극복하였다. 

 

1. Region Proposal

CNN 자체가 위치를 특정하는데 불리하니, 물체가 있을만한 후보들의 위치(Region)를 미리 제공(proposal)해주자는 것이다. Fig1 그림의 설명에 과정이 설명되어 있는데 다음과 같다.

▲ Fig 1.

  1. Selective Search를 통하여 Object가 있을 법한 영역 2000개 추출
  2. 각 영역을 고정된 사이즈(227*227)의 박스로 묶는다 
  3. CNN로 특징 벡터 추출 (4096D)
  4. SVM로 클래스 분류

즉, CNN은 제공된 영역의 특징을 추출해주는 역할만 하면 되는 것이다.

 

2. Pretraining + Fine-tuning

detection은 분류에 비해 라벨링 비용이 크기 떄문에(bounding box 필요) 대규모로 CNN을 학습시키기에는 충분치 않다. 따라서 기존에는 unlabeled 데이터로 feature를 pre-train(비지도 학습)한 뒤에 labeled 데이터로 fine-tuning(지도학습)을 하는 것이 일반적이었다.

해당 연구에서는 대규모 보조 데이터셋(ILSVRC)를 통해 지도학습 기반으로 pre-train을 진행하고, 작은 데이터셋(PASCAL)을 통해 도메인에 특화된 fine-tuning을 진행하는 방식을 사용하였다. 연구의 실험 결과에 따르면 해당 방식을 통해서 mAP를 8%가량 향상시킬 수 있었다고 한다.

 

Fine tuning된 모델 기준 당시 최고 성능의 모델이었던 DPM에 비해 33% 넘는 성능을 보여주었다. 또한 기존 시스템에 비해 효율성 면에서도 뛰어남을 보인다. 기존의 방식(SIFT+BoVW)는 SIFT를 SPM(Spatial Pyramid Matching)으로 여러 Scale (1X1~ nXn)로 저장하고 각 SIFT에 대해서 가장 가까운 VW(Visual Word)를 할당한다. 논문에서는 360000D의 feature를 만들어낸다고 언급하는데, scale을 9X9(1*1 + ~ 9*9 = 91D) BoVW(bag of Visual Word)의 단어가 4000개로 설정되었다고 보면 되겠다 (91D*4000D = 360000D).

 

CNN으로 추출한 feature vector는 4096D이니 차원은 100배 정도 차이가 난다. 또한 각 클래스마다 feature가 따로 만들어지지 않고 모든 클래스가 CNN의 feature를 공유하기 때문에 기존의 방식에 비해 가볍고 빠른 연산 속도를 보장할 수 있다. 또한 추가적으로 Bounding Box Regression을 통해 mislocalization을 개선하고 성능을 향상시켰다고 하는데 이는 3장에서 더 자세하게 다뤄진다.

 

2장으로 넘어가기 전 논문에서는 R-CNN이 region 단위로 동작하는 특성 때문에 이를 segmentaion에서도 충분히 활용될 수 있다고 언급하였다. 실제 약간의 수정만으로, PASCAL VOC 데이터셋의 segmentation 실험에서 평균 47.9% 정확성을 보였다고 한다.


2. Obeject Detection with R-CNN


R-CNN의 구조를 크게 보면, 먼저 이미지로부터 카테고리에 독립적인 region proposal(후보 영역)을 추출한 다음, 각 영역을 고정된 크기로 warp해서 CNN에 통과시키고, 추출된 feature를 분류기(SVM)에 넣어 각 영역의 클래스를 예측한다. 실제 동작시에는 region proposal이 추출된 이후에 각 영역에 대한 처리가 이루어진다. 분류를 위해 각 영역에서 고정 길이의 feature vector(4096D)를 추출하고, 해당 벡터를 클래스별로(예: 사람, 고양이, 개 ..) 학습된 linear SVM에 입력해 어떤 클래스인지 판단한다.

 

또한 간단한 선형 회귀 모델을 포함하고 있는데, 이는 예측된 class의 박스를 더 정확한 위치로 조정하는 bounding box regression을 수행한다. CNN의 feature를 기반으로, 박스의 위치(x, y, z, h)를 보정한다고 이해하면 되겠다.

 

학습 시에는 "이미지", "정답 bounding box", "클래스 label"이 필요하다. 학습 과정은 다음과 같이 이루어진다. 

  1. CNN fine-tuning
    ImageNet으로 pre-train된 CNN모델을 추출된 영역들을 기반으로 fine-tuning한다. 이때 classification loss를 이용해 학습을 진행한다.
  2. SVM 학습
    fine-tuning된 CNN에서 추출한 feature를 통하여 클래스별로 SVM 학습을 진행한다.
  3. bounding-box regressor 학습
    각 클래스마다 bounding box의 위치를 보정하는 regression 모델의 학습을 진행한다. CNN 모델의 feature를 입력으로 받아, 예측된 box를 정답 box에 더 가깝게 이동시키는 오차 값 (tx, ty, tw, th)을 예측한다.

▲ Fig 2.

Fig 2. VOC 2007 데이터 셋에서 추출된 region proposal의 샘플들이다. 학습을 위해 selective search된 영역을 227*227로 resize한 뒤 CNN 모델에 입력된다. 각 과정에 대해서 자세하게 살펴보자

 

Region Proposals

category에 독립적으로 객체처럼 보이는 다양한 방법들이 있다. R-CNN은 특정 방법에 국한돼서 사용될 필요는 없으나 그 중 Selective  Search 방법을 사용해 실험 통일성을 유지하고 비교하였다.

Feature Extraction

각 region proposal 에서 4096D의 feature vector 추출한다. 사용된 CNN은 Krizhevsky et al.의 모델 (AlexNet 기반)이며 입력은 227X227 RGB 이미지를 사용하였다. CNN의 입력 사이즈가 227X227로 고정되어 있기 떄문에 추출 전에 region proposal의 사이즈를 해당 크기로 줄인다(warp). 줄이는 과정에서 주변의 context도 고려하기 위해서 원래 proposal 영역을 조금 확장 시킨다고 논문에서 언급되어 있다 (p=16으로 dialte).

Domain-specific Fine-Tuning

먼저 ImageNet classification 데이터(ILSVRC2012)에서 지도학습 기반 CNN 사전학습을 수행을 한다. 다음으로 detection을 위해 fine tuning을 진행한다. 이때 ImageNet의 마지막 layer(1000 class)를 제거하고, 객체 탐지용 데이터셋 (VOC, ILSVRC2013)에 맞게

(VOC = 21 class, ILSVRC2013 = 201 class) 초기화한다. 학습 기준은 다음과 같이 설정된다.

  • 학습 label
    IoU 가 0.5 이상일 경우 positive 그 외는 negative로 설정 
    * IoU (Intersection Over Union): 예측한 박스와 정답 박스 사이의 겹치는 정도를 나타내는 값으로. 객체 탐지 시 평가하는 척도로 사용한다. 1 에 가까울 수록 (두 박스가 완전히 겹침) 완벽히 예측했다고 생각하면 된다.   
  • weight update
    SGD 사용해서 weight를 update한다. 다만 Negative로 예측되는 것이 상대적으로 많기 때문에 (보통 이미지에 대분분이 background) 의도적으로 positive 비율을 높였다. mini-batch 세팅 -> batch size: 128  / positive 32 + Negative 96

 Object Category Classifier (SVM)

해당 region의 박스가 뭔지 알아맞추는 역할은 SVM이 담당한다. 일차적으로 IoU를 통해서 애매한 이미지들을 걸러낸다. 실험적으로 IoU 가 0.3 이하를 Negative가 되도록 설정했다. 이유는 Negative(주로 배경을 차지하는)가 훨씬 많은 편인데 IoU가 0.5 이하일때 Negative로 설정해버리면 데이터 셋 비율에 문제가 생기기 떄문이다. 위에서 positive 비율을 높히는 방식을 사용한 것처럼 여기서는 Negative쪽 기준을 좀 더 tight하게 잡는 방식을 사용했다고 보면 된다.

Hard Negative Mining

Hard Negative는 SVM이 학습한 이후에 지속적으로 Positive로 잘못 분류하는 데이터들을 말한다. 연구에서는 해당 데이터들을 이용해서 추가적인 학습을 시켜 정밀도를 향상시켰다. SVM 학습 과정을 요약하면 다음과 같다.

  1. SVM 학습
  2. SVM 예측 
    -> 어떤 Negative(배경부분)이 Positive("고양이" 클래스)라고 분류됨
  3. SVM 재학습
    -> 틀린 Negative들만 모아서 다시 재학습

 

3. Visualization, ablation, and modes of error


Visualization

각 featue들에 대해 어떻게 모델이 반응하는지를 시각화하는 새로운 방식을 제안하였다. 기존의 deconv 방식은 필터의 출력에 대응되는 입력 이미지를 역으로 추적하는 방식을 사용하는데, 연구에서는 더 직관적이고 단순한 방식을 제안하였다고 말한다. 아이디어는, "네트워크 안의 특정 노드 하나(feature map의 한 유닛)을 마치 하나의 Object Detector로 생각하는 것"이다. 과정은 다음과 같이 이루어진다.

  1. 노드의 출력을 n개의 region proposal에 대해 계산
  2. 가장 활발하게 반응한 입력을 정렬
  3. NMS(non-maximum supression)통해 중복을 제거
  4. 상위 region들을 선택하여 시각화한다

▲ Fig 4.

Fig. CNN의 pool5 layer의 256개 노드 중 일부 유닛들에 대하여 시각화한 이미지이다. 각 유닛에 대하여 가장 강하게 반응한 region을 16개 씩 시각화하였다. 첫번째 행을 살펴보면 해당 노드는 "사람"에 대해 높은 출력값(activation)을 나타낸 것을 볼 수 있다. 이를 통해 CNN 내부의 노드들이 어떻게 반응하는지, 의미 있는 객체나 패턴들이 학습되고 있는지를 실질적으로 확인할 수 있겠다 

 

Ablation

Ablation의 사전적 의미는 제거인데, 모델 학습에서는 성능의 가장 큰 영향을 미치는 요소를 찾기 위해 구성 요소나 feature들을 단게적으로 제거 / 변경해가며 성능의 변화를 확인하는 과정을 의미한다. 해당 연구에서는 finetuning의 유무에 따른 성능 차이를 확인했다.

 

먼저 fine-tuning을 하지 않은 CNN 모델의 마지막 3개 층(pool5, fc6, fc7) 각각의 feature 만을 써서 결과 확인하였다. 해당 실험에서는 layer 중 어디까지 사용을 하느냐에 따라 성능이 달라지는지를 분석했다. 각 3개 layer의 구성은 다음과 같다

  • pool5 : conv5 → max pooling 결과 (6×6×256 → 9216D)
  • fc6 : pool5 → 9216D → fully connected → 4096D
  • fc7 : fc6 → fully connected → 4096D

▲ Table2(fine-tuning 없을 때)

 

MaP로 성능을 확인 했을때 결과 상 fc레이어가 추가적으로 거친 뒤에도 큰 성능 형상이 없는 것을 볼 수 있다. fc7에서는 오히려 성능이 떨어졌다.

▲ Table2(fine-tuning 있을 때)

fine-tuning을 적용한 뒤에는 성능이 대폭 향상된 것을 확인할 수 있다. 이를 통해 fine-tuning이 전체적인 성능 향상에 영향을 끼치며 특히 fully-connected layer가 fine-tuning에 긍정적인 영향을 받는다는 것을 확인할 수 있다.

 

Network Architecture

당시에 최신이었던 VGG16 기반 O-Net(OxfordNet)과 AlexnetNet 기반 T-Net(TorontoNet)과 비교하였는데, VGG16기반으로 학습된 모델이 maP가 7.5%가량 높게 측정되었다. 다만 레이어가 8계층 차이가 나는 만큼 트레이드 오프는 존재한다. 속도가 VGG16기반이 Alexnet기반에 비해 약 7배 정도 느리다고 한다.

 

Detection Error 분석

본 연구에서는 Hoiem의 오류 분석 도구를 사용해서 모델의 다양한 실패 유형들을 분석했다. Hoiem의 방법에 따르면 대표적으로 다음과 같은 에러 유형들이 나온다

Localization error 객체는 맞췄지만 박스가 어긋남 (IoU < 0.5)
Confusion with similar class 고양이를 개로 탐지함 등 유사 클래스 간 혼동
Background false positive 객체도 아닌데 객체라고 탐지함
Missed detection (false negative) 아예 못 찾음

연구에서는 이를 바탕으로 R-CNN모델이 False Postive가 탐지되는 상위 유형들을 확인하였다.

▲ Fig 5.

  1. Loc : 위치 오류 (poor Localization), IoU가 낮거나 / 중복 탐지 
  2. Sim : 유사한 클래스와 혼동 (similar class confusion), '개'를 '고양이'로 탐지
  3. Oth : 전혀 다른 클래스와 혼동 (other class confusion), '버스'를 '사람'으로 탐지
  4. BG : 배경에 잘못 반응함 (background confusion), 배경을 특정 객체로 탐지

R-CNN은 background나 클래스에 대한 혼동은 적은편으로 이는 CNN의 feature가 기존의 HOG에 비해 구분하는 능력이 뛰어나다고 할 수 있다. 다만 기존의 객체 탐지 방식에 비해 Localization 오류가 훨씬 많은 편이다. Localization 오류가 많다는 것은 박스 위치가 부정확하다는 것인데 논문에서는 그 이유를 Selective Search와 CNN의 특성으로 보았다. 

  • Selective Search
    - botton-up 방식으로 region proposal을 생성
    - 색상, 텍스처, 경계 등 저수준의 시각 정보 기반해 "객체"처럼 보이는 조각 제안할 뿐, 정확성 보장 X
  • CNN
    - 분류용으로 pre-train된 모델을 사용
    - 이미지 전체에서 global한 정보를 학습 -> 위치의 특성은 무시될 확률 높음

연구에서는 앞서 잠깐 언급했던 bounding-box regression을 통해 이를 보완한다. 위 그림에 3열에 위치한 그래프가 bounding-box regression을 했을때의 결과인데 확실히 Localization error 부분(파란색)이 줄어든 것을 볼 수 있다.

 

Bounding-box Regression

CNN모델의 특성 때문에 박스 위치가 잘 맞지 않는 문제를 위치를 보정하는 선형 회귀 모델을 적용해서 오류를 감소시킨다는게 이 bbox regression의 핵심이다.  

  • 입력 : CNN을 통해 나온 각 region의 feature vector 
  • 출력 : region과 정답 박스 사이의 위치 차이값

해당 입출력을 통해 각 클래스마다 따로 회귀 모델을 학습시킨다. 이 간단한 방식로 상당부분의 Localization 오류를 해결하였고, mAP를 3~4% 정도 향상시킬 수 있었다고 한다.

'논문 & 기술' 카테고리의 다른 글

DeepSORT  (5) 2025.05.01
YOLO  (0) 2025.05.01
Faster R-CNN  (3) 2025.04.23
NERF : Representing Scenes as Neural Radiance Fields for View Synthesis  (0) 2025.03.26
Volume rendering  (0) 2025.02.14