본문 바로가기
AI Naver boost camp/[Week 07] - Object Detection

[02] R-CNN, SPPNet, Fast R-CNN

by AI-BT 2024. 10. 2.
728x90
반응형

 

1.  R-CNN

 

R-CNN 의 경우는 아래의 논문리뷰에서 자세히 설명했습니다.

아래 링크를 참고 부탁드립니다.

 

https://ai-bt.tistory.com/entry/R-CNN-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0

 

R-CNN 논문 리뷰

서론딥러닝의 발전과 함께 컴퓨터 비전 분야는 급격한 변화를 겪고 있습니다. 그중에서도 객체 탐지(Object Detection)는 이미지나 비디오에서 특정 객체를 찾아내고, 그 위치를 정확히 예측하는 중

ai-bt.tistory.com

 

간략하게 R-CNN의 특징과 단점에 대해서 설명하겠습니다.

1) 2000개의 Region을 각각 CNN 통과

R-CNN은 객체 탐지에서 사용되는 기법으로, 이미지에서 Selective Search 알고리즘을 사용해 약 2000개의 region proposals(후보 영역)을 추출합니다. 각 후보 영역을 대상으로 CNN(Convolutional Neural Network)을 통과시켜, 해당 영역이 어떤 객체인지 분류하는 과정을 거칩니다.

  • Selective Search: 이미지의 모든 픽셀을 스캔하여 객체일 가능성이 있는 2000개의 영역을 추출하는 기법입니다.
  • CNN 통과: 이 각 후보 영역을 CNN에 입력하여 특징을 추출하고, 이를 바탕으로 객체가 무엇인지 예측합니다.


2) 강제 Warping, 성능 하락 가능성

각 region proposal은 CNN에 입력되기 전에 고정된 크기(예: 227x227)로 강제로 Warping(왜곡)됩니다. 모든 region proposal이 동일한 크기로 변환되어야 CNN에 입력할 수 있기 때문에 이 과정이 필수적이지만, Warping 과정에서 이미지의 중요한 정보가 손실되거나 왜곡될 수 있습니다. 이로 인해 성능 저하가 발생할 가능성이 있습니다.

  • 강제 Warping: 서로 다른 크기와 비율을 가진 region proposal을 CNN에 입력할 수 있도록 일정한 크기로 변환하는 과정.
  • 성능 하락 가능성: Warping이 강제되면서 이미지의 중요한 부분이 왜곡되어, 예측 정확도가 낮아질 수 있습니다.


3) CNN, SVM classifier, bounding box regressor 각각 별도로 학습

R-CNN에서는 세 가지 주요 단계가 각각 독립적으로 수행됩니다.

  1. CNN: 각 region proposal을 CNN에 통과시켜 특징을 추출합니다.
  2. SVM classifier: CNN으로 추출한 특징을 기반으로 SVM(Support Vector Machine) 분류기를 사용해 해당 영역이 어떤 객체인지 분류합니다.
  3. Bounding Box Regressor: 객체 탐지에서 정확한 바운딩 박스를 예측하기 위해, Bounding Box Regression을 사용해 객체의 경계 상자를 미세 조정합니다.

이 과정들은 서로 연계되지 않고, 각 모듈이 각각 별도로 학습됩니다. 즉, CNN으로 특징을 추출한 후 SVM을 따로 학습하고, 그 이후 Bounding Box Regressor를 따로 학습하는 방식입니다. 이러한 분리된 학습 방식은 전체적인 학습 과정을 복잡하게 만들고, 시간 소모가 큽니다.

 

4) End-to-End X

R-CNN의 가장 큰 단점 중 하나는 End-to-End 학습이 불가능하다는 점입니다. 현대의 많은 신경망 모델은 입력 데이터에서 최종 출력까지 모든 단계를 한 번에 학습하는 End-to-End 방식을 사용하지만, R-CNN에서는 각 모듈이 독립적으로 학습되기 때문에 전체적인 학습 과정이 효율적이지 않습니다.

  • End-to-End 학습: 입력 이미지가 모델을 통과하여 직접적으로 출력이 나오는 학습 방식.
  • R-CNN의 문제점: CNN, SVM, Bounding Box Regressor가 각각 따로 학습되기 때문에 End-to-End로 학습할 수 없고, 이로 인해 학습 속도와 성능이 제한됩니다.


R-CNN의 한계 및 개선 방향

  • R-CNN은 성능이 나쁘지는 않지만, 처리 속도가 매우 느리고 여러 단계의 독립적인 학습 과정으로 인해 시간 효율성이 떨어집니다.
  • Fast R-CNN, Faster R-CNN 등의 후속 모델들은 이러한 문제점을 개선하여, End-to-End 학습이 가능하고, 처리 속도와 성능이 크게 향상되었습니다.

결론적으로, R-CNN은 객체 탐지 모델의 초기 발전을 이끈 모델이지만, 그 구조적 복잡성과 효율성의 한계로 인해 이후 모델들에서 많은 개선이 이루어졌습니다.

 

 



2. SPPNet (Spatial Pyramid Pooling Network)

SPPNet은 R-CNN의 단점을 보완하고, 이미지 크기에 상관없이 더 효율적으로 특징을 추출하는 방법을 제시한 네트워크입니다. 이 글에서는 SPPNet이 무엇이고, 기존의 R-CNN과 어떤 차이점이 있는지, 그리고 어떻게 성능 향상을 이뤄냈는지 살펴보겠습니다.

 

1) R-CNN의 문제점

먼저, R-CNN의 주요 문제는 객체 후보 영역(region proposal)을 CNN에 입력하기 위해 각각의 후보 영역을 고정된 크기로 변환(warping) 해야 했다는 점입니다. 이미지 내 다양한 크기와 비율을 가진 객체들이 있기 때문에, R-CNN은 각 객체 후보 영역을 crop하여 고정된 크기로 변환한 뒤 CNN에 입력했습니다. 하지만 이 과정에서 정보 손실이나 왜곡이 발생할 수 있어, 성능 저하로 이어질 수 있습니다.

또한 R-CNN은 각 객체 후보 영역을 독립적으로 CNN에 입력해야 했기 때문에, 연산 속도가 매우 느렸습니다. 수천 개의 후보 영역이 있으면, 각각을 CNN에 통과시키는 데 엄청난 시간이 소요되었습니다.


2) SPPNet 이란?

 

SPPNet은 이러한 R-CNN의 단점을 해결하기 위해 제안된 방법입니다. SPPNet의 핵심은 Spatial Pyramid Pooling (SPP)이라는 새로운 방식의 pooling layer를 사용하여, 다양한 크기의 입력을 고정된 크기로 변환하지 않고도 CNN에 통과시킬 수 있다는 것입니다. 이제 SPPNet의 주요 특징을 하나씩 살펴보겠습니다.

 

 

1. 이미지를 한 번만 CNN에 통과 ( R-CNN, SPPNet 연산차이)

기존 R-CNN과 달리, SPPNet은 입력 이미지를 한 번만 CNN에 통과시킵니다. 한 번의 CNN 통과로부터 얻은 feature map을 이용해, 다양한 객체 후보 영역을 분석합니다. 즉, 객체 후보 영역을 CNN에 각각 통과시키지 않고, CNN 연산을 한 번만 수행하는 것이죠. 

 

이미지를 "한 번 CNN에 통과시킨다"는 표현은
이미지가 1000장이라면, 각 이미지를 개별적으로 CNN에 통과시킵니다. 즉, 이미지 한 장당 CNN을 통과시켜서 해당 이미지의 feature map(특징 맵)을 추출합니다. SPPNet에서는 이미지를 전체적으로 CNN에 한 번 통과시켜 특징 맵을 얻고, 이 특징 맵을 기반으로 여러 객체 후보 영역에 대한 처리를 수행합니다.

 

연산의 차이에 대해서 자세히 설명하면,

 

  • R-CNN은 이미지에서 Selective Search를 통해 2000개의 후보 영역(Region Proposals)을 추출한 뒤, 각각의 후보 영역을 개별적으로 CNN에 통과시킵니다. 이미지에 2000개의 후보 영역이 있을 경우, 모든 후보 영역을 각각 CNN에 입력해서 연산을 진행합니다. 즉, 이미지 1장당 2000번의 CNN 연산을 수행해야 하기 때문에 매우 많은 연산량이 필요로 합니다.

  • SPPNet에서는 이미지에서 후보 영역을 추출한 후, R-CNN처럼 각 영역을 CNN에 개별적으로 통과시키는 것이 아니라, 이미지를 한 번 CNN에 통과시켜 전체 이미지의 feature map을 생성합니다.
    추출한 feature map에서 후보 영역 RoI을 찾아 그 영역에 맞는 특징을 추출합니다. 이때 Spatial Pyramid Pooling(SPP)을 사용해 다양한 크기의 후보 영역을 고정된 크기의 벡터로 변환하여 처리합니다.

이를 통해 중복된 CNN 연산을 줄이고 연산 속도를 높일 수 있습니다.

 

 

 

 

2. Spatial Pyramid Pooling (SPP)

SPP (Spatial Pyramid Pooling)는 CNN의 입력 크기 제한 문제를 해결하기 위해 도입된 방법입니다. 기존 CNN은 고정된 크기의 입력 이미지를 필요로 하기 때문에, 다양한 크기의 이미지를 처리할 때 강제적으로 고정된 크기로 변환(Warping)해야 했습니다. 이 과정에서 이미지의 중요한 정보가 손실되거나 왜곡될 수 있었습니다.

SPP는 이러한 제한을 극복하고자, 다양한 크기의 입력을 고정된 크기의 출력으로 변환할 수 있는 Pooling Layer를 제안했습니다. 이를 통해, 입력 이미지의 크기에 상관없이 CNN에 입력할 수 있으며, 정보 손실을 최소화하면서 다양한 크기의 객체를 효율적으로 처리할 수 있습니다.

SPP의 핵심 아이디어:

  • 입력 이미지나 feature map의 크기가 달라도, 고정된 크기의 벡터로 변환할 수 있습니다.
  • 여러 크기의 **빈(bin)**을 사용하여 다양한 공간적 정보(spatial information)를 반영한 특징을 추출할 수 있습니다.

 

쉽게 이해를 해보면 아래의 이미지 처럼 사이즈가 달라도 2x2 pytamid 로 같은 출력을 얻을 수 있다는 것이다.

 

 

다양한 크기의 입력

  • 첫 번째 이미지는 크기가 32x32x256입니다.
  • 두 번째 이미지는 크기가 64x64x256입니다.

두 이미지의 해상도는 다르지만, 둘 다 256개의 채널(feature map)을 가지고 있습니다. 이 두 이미지는 서로 다른 크기임에도 불구하고 SPP를 사용하여 고정된 크기의 벡터로 변환됩니다.

 

SPP 적용 (2x2 Pyramid)

  • 이미지 크기가 다름에도, 각각의 이미지는 2x2 피라미드(bin)로 나누어집니다. 즉, SPP는 이미지를 2x2의 작은 영역(bin)으로 분할하여 처리합니다.
  • 각 이미지에서 16x16 또는 32x32의 bin이 생성되고, 이 bin에 대한 pooling 연산을 통해 해당 부분의 정보를 요약합니다.

고정된 출력

  • 이미지의 크기와 상관없이, 각 이미지에서 4개의 bin(각각의 bin이 하나의 feature 벡터)에서 나온 정보를 결합하여 4x256 크기의 벡터를 생성합니다.
  • 두 입력 이미지의 크기는 다르지만, SPP를 통해 동일한 크기의 출력 벡터(4x256)가 생성되는 것을 확인할 수 있습니다.

 


 

3) R-CNN 과 SPPNet 구조 차이

 

SPPNet 으로 1,2 번의 문제는 해결 되었지만,

여전히 2가지 문제점은 남아 있다. 

 

1) 2000개의 RoI 각각 CNN 통과

2) 강제 Warping, 성능 손실 가능성

3) CNN, SVM classifier, bounding box regression, 따로 학습

4) End-to-End X

 

3,4번의 문제는 Fast R-CNN, Faster R-CNN 에서 어떻게 해결하는지 살펴보겠다.

 


 

3. Fast R-CNN

Fast R-CNN은 객체 탐지(Object Detection) 분야에서 R-CNN과 SPPNet의 단점을 극복하고 성능과 효율성을 크게 향상시킨 모델입니다. 기존의 R-CNN 및 SPPNet에서 발생한 속도 문제와 학습 과정의 비효율성을 개선하면서, 객체 탐지 분야에서 높은 성능과 더 빠른 연산 속도를 제공하게 되었습니다.

Fast R-CNN이 어떻게 발전되었는지, 기존의 R-CNN 및 SPPNet과 어떤 차이점이 있는지 자세히 설명해보겠습니다.

Fast R-CNN 구조


1.  R-CNN과 SPPNet의 한계

R-CNN의 문제점

R-CNN은 객체 탐지 모델 중 초기 모델로, Selective Search를 통해 이미지에서 *000개의 후보 영역(Region Proposals)을 추출한 뒤, 각각의 후보 영역을 개별적으로 CNN에 통과시켰습니다. 이러한 구조는 다음과 같은 문제점을 가지고 있었습니다:

  • 연산량이 매우 많음: 이미지 한 장당 2000개의 후보 영역을 모두 개별적으로 CNN에 통과시키다 보니, 연산 시간이 매우 오래 걸렸습니다.
  • 고정된 크기로 변환(Warping): 후보 영역마다 크기를 고정된 크기로 강제 변환해야 했기 때문에 이미지의 왜곡과 정보 손실이 발생할 수 있었습니다.
  • End-to-End 학습 불가: R-CNN은 여러 단계를 거치면서 각각 따로 학습해야 했기 때문에, 모델의 학습 과정이 비효율적이었습니다.

SPPNet 를 통한 개선 및 문제점

SPPNet 은 R-CNN의 속도 문제를 해결하기 위해 제안되었습니다. SPPNet은 이미지를 한 번만 CNN에 통과시켜 feature map을 얻은 후, 이 feature map을 기반으로 후보 영역(Region Proposals)을 처리했습니다. 이를 통해 연산 중복을 줄였으며, SPP를 사용해 입력 크기에 상관없이 고정된 크기의 출력 벡터를 생성할 수 있었습니다. 그러나, SPPNet 역시 End-to-End 학습이 불가능했고, 여러 단계를 거쳐 학습하는 비효율성이 여전히 남아 있었습니다.

 


 

2. Fast R-CNN 의 핵심

Fast R-CNNR-CNN과 SPPNet의 단점을 개선하기 위해 제안된 모델입니다. Fast R-CNN은 이미지에서 객체 후보 영역을 추출하고, CNN을 통한 피처 맵 추출 및 객체 분류, 바운딩 박스 회귀(Bounding Box Regression)까지 하나의 통합된 네트워크에서 처리합니다. 이를 통해 R-CNN과 SPPNet보다 훨씬 빠른 속도를 제공합니다.

 

1) 이미지를 한 번 CNN에 통과
SPPNet처럼, 이미지를 한 번만 CNN에 통과시켜 전체적인 feature map을 얻습니다. 이 feature map을 기반으로 객체 후보 영역(Region of Interest, RoI)을 처리합니다.

 

2) RoI Projection과 RoI Pooling Layer

 

RoI Projection

1) 원본 이미지에서 RoI 추출 (Selective Search)

  • Selective Search와 같은 기법을 사용하여 원본 이미지에서 2000개의 객체 후보 영역(RoI)을 추출합니다. 이 과정은 CNN을 통과하기 전에 이루어지며, 다양한 크기의 후보 영역을 선택하게 됩니다.

2) 원본 이미지를 CNN에 통과 (Feature Map 생성)

  • 원본 이미지를 ConvNet(CNN)에 통과시켜, 이미지의 중요한 특징들을 추출한 feature map을 생성합니다. CNN을 통해 이미지는 축소된 형태로 변환됩니다. 예를 들어, 원본 이미지가 400x400이었다면, CNN을 통과한 후에는 40x40 크기의 feature map이 생성될 수 있습니다.

3) RoI Projection (Feature Map에 투영)

  • RoI Projection원본 이미지에서 추출된 2000개의 RoIfeature map에 투영하는 과정입니다.
  • CNN을 통과한 feature map은 원본 이미지보다 크기가 작기 때문에, 원본 이미지에서 추출한 RoI의 크기도 축소해야 합니다. 예를 들어, 원본 이미지에서 300x300 크기의 후보 영역은 feature map 상에서 30x30 크기로 변환됩니다.
  • 이때, 각 RoI의 크기와 위치가 feature map 상에 정확하게 대응될 수 있도록 투영됩니다.

4) RoI Pooling을 통한 고정된 크기 변환

  • RoI Projection을 통해 feature map 상에 투영된 RoI는 다양한 크기를 가지고 있습니다. 이를 RoI Pooling Layer에서 고정된 크기의 벡터로 변환합니다. 이 변환된 벡터는 CNN의 다음 단계에서 처리할 수 있는 고정된 크기를 가지게 됩니다.

RoI Projection

 



RoI Pooling Layer

RoI Projection을 통해 feature map에 투영된 각 후보 영역은 크기가 제각각일 수 있습니다. Fast R-CNN은 이러한 다양한 크기의 후보 영역을 고정된 크기로 변환해야만 다음 단계에서 효율적으로 처리할 수 있습니다.

1) RoI Pooling Layer는 각 후보 영역을 고정된 수의 구역(bin)으로 나누고, 각 구역에서 최댓값(Max Pooling)을 추출하여 고정된 크기의 벡터로 변환합니다.

2) 이 과정은 SPPNet에서 사용된 Spatial Pyramid Pooling(SPP) 개념을 확장한 것으로, 다양한 크기의 후보 영역을 CNN이 처리할 수 있는 고정된 크기로 변환하는 데 유용합니다. SPPNet 과 다른 점은 SPP 는 다양한 해상도(pyramid) 1x1, 3x3 을 사용하는 반면 RoI Pooling 은 고정된 크기(7x7)로 변환하여 연산을 단순화하고 빠르게 처리할 수 있도록 최적화를 했습니다.


3) RoI Pooling을 통해 후보 영역을 CNN에 다시 통과시키지 않고도 처리할 수 있어 연산 효율성이 크게 향상되었습니다.

RoI Pooling

 


 

3. Fast R-CNN의 구조

  1. CNN을 통한 feature map 생성
    이미지 전체를 한 번 CNN에 통과시켜 feature map을 얻습니다.

  2. RoI Pooling Layer
    이미지에서 추출된 후보 영역(Region Proposals)을 RoI Pooling Layer를 통해 고정된 크기의 특징 벡터로 변환합니다. 이 단계에서 각 후보 영역은 CNN을 다시 통과하지 않으며, feature map에서 바로 처리됩니다.

  3. Fully Connected Layer(FCs)
     RoI Pooling을 통해 추출된 특징 벡터는 FC를 거쳐 객체 분류와 바운딩 박스 위치 예측을 수행합니다.

  4. Softmax Classifier 및 Bounding Box Regressor
    Softmax Classifier 각 후보 영역에 대해객체의 클래스를 예측합니다.
    Bounding Box Regressor 후보 영역의바운딩 박스 위치를 미세하게 조정하여 정확한 객체 경계 상자를 예측합니다.

 

 

 

아직 완벽한 end-to-end 아니다.

학습 가능한 알고리즘이 아니라 cpu 에서 돌아가는 알고리즘이다.

 

이 부분을 Faster R-CNN 이 보완해준다.

다음 블로그는 Faste R-CNN 에 대해서 블로그 하겠습니다.

 

감사합니다.

 

728x90
반응형

댓글