본문 바로가기
CVLab/cs231n (2016)

cs231n - lecture08(Localization and Detection)

by print_soo 2024. 10. 3.

[Localization and Detection]

 

Classification vs Classification + Localization

 
Classification은 이 이미지가 고양인지 강아지인지 분류하는 것이고, Classification + Localization는 이 사진에서 고양이가 어디에 있는지 Boxing을 해주는 것이다.
 


Object Detection vs Instance Segmentation

 
Object Detection은 고양이, 강아지, 오리가 어디에 있는지 Boxing해 주는 것이고, Instance Segmentation는 고양이, 강아지, 오리의 형상대로 경계를 따주는 것을 의미한다.
 
따라서, 우선 Localization, Object Detection에 대해서 다뤄보자!
 


[Classification + Localization]

 

Classification

 

  • input: image
  • output: class label
  • Evaluation metric(평가 지표): 정확도  

Localization

 

  • input: image
  • output: box in the image (x, y, w, h) - 결과를  box로 받는다.
  • Evaluation metric(평가 지표): 겹치는 부분

 

Classification + Localization

 
따라서 Classification Localization을 합치면 입력으로 이미지가 들어오고 출력으로 Label과 box를 받게 된다.
 
 


IDEA #1: Localization as Regression - 이미지에서 물체의 좌표값을 연속적인 숫자로 예측해 위치를 찾는 방법

: 이미지 내에서 객체의 위치를 회귀 문제로 다루는 방식
 

❓ 회귀(Regression)란 뭔가?

 
연속적인 수치를 예측하는 문제를 다루는 기법이다. 즉, 입력된 데이터를 기반으로 숫자 값을 예측하는 것을 의미한다.
예를 들어 레몬 에이드 판매량이 날씨와 관계가 있다고 생각했을 때 날씨가 상승하면 레몬 에이드가 얼마나 판애될지 예측하는 것과 같다.
 
 


 
 

Localization as Regression 모델의 설계

 

간단한 분류 및 위치 추정 모델 설계 (Step-by-step)

 

Step 1: 이미지 입력

 
 

Step 2: CNN을 통한 이미지 처리

  • 여러 Layer를 거치면서 Activation map을 추출한다

 

Step 3: Activation을 이용한 Classification Head로 분류, Regression Head로 위치 예측

  • Classification Head: 추출된 Activation Map을 기반으로, Fully-connected 레이어를 통해 이미지의 클래스(예: 고양이, 강아지)를 예측한다.
  • Regression Head: 같은 Activation Map을 사용하여 바운딩 박스 좌표(x, y, w, h)를 예측하는 회귀 작업을 수행한다.

 

Step 4: Regression의 예측 값과 실제 값의 차이를 L2 Loss로 학습

  • 예측한 좌표와 실제 객체의 좌표 사이의 차이를 L2 Loss 함수로 계산하여 손실을 구한다.
  • 이 차이를 줄이기 위해 역전파(backpropagation)를 통해 네트워크의 가중치를 업데이트하면서 진행한다.

 

Step 5: 최종결과

  • 테스트 시, 학습된 네트워크는 Classification Head를 사용하여 이미지의 클래스를 예측하고, Regression Head를 통해 바운딩 박스 좌표를 예측합니다.
  • 최종적으로 객체가 무엇인지, 어디에 있는지를 동시에 결과로 제공한다.

 


Per-class vs class-agnostic

 

Per-class (클래스별 방식)

  • 각 클래스마다 별도로 예측을 수행.
  • 장점: 클래스마다 최적화된 예측 가능.
  • 단점: 클래스가 많아지면 복잡하고 계산량이 증가.

Class-agnostic (클래스 무관 방식)

  • 클래스와 상관없이 모든 객체에 대해 동일한 예측 수행.
  • 장점: 모델이 단순하고 계산이 효율적.
  • 단점: 클래스마다 다른 특징을 반영하는 데 한계가 있을 수 있음.

 
쉽게 말해, Per-class는 각 클래스에 맞춰 예측하고, Class-agnostic은 모든 클래스를 동일하게 처리하는 방식이다.
 


Regression Head의 위치

 

 

  • Overfeat, VGG: Convolution layers 이후에 Regression Head를 위치시킨다.
  • DeepPose, R-CNN: Fully-connected layers의 마지막 레이어 이후 Regression Head를 위치시킨다.

두 방식 모두 잘 작동한다.
 
 
 
 


 
 
 
 

IDEA #2: Sliding Window - 작은 창으로 나눠 모든 위치에서 객체를 찾는 방법

: 이미지를 작은 창(윈도우)으로 나누어 모든 위치에서 객체를 찾는 방식이다. 창을 이미지 전체에 걸쳐 이동시키면서 각 위치에서 객체가 있는지 없는지를 분류 모델을 통해 확인한다.
 
 

Sliding Window: Overfeat

Overfeat 모델 설계 (Step-by-step)

 

Step 1: 이미지를 찾은 Window으로 나눔

  • 큰 이미지를 여러 작은 window로 나눈다.
  • 처음에는 이미지의 왼쪽 상단부터 시작해서 살펴본다.

 

Step 2: 해당 Window에서 객체 탐지 및 스코어 측정

  • 각 Window에 객체가 있는지 탐지한다. 이때 CNN을 사용한다.
  • CNN은 해당 Window에 객체가 존재하는지 판단하고, 객체가 있을 확률(Score)를 계산 한다.

 

Step 3: 옆으로 Window을 이동해서 객체 탐지 및 스코어 측정 반복(모든 창)

  • 첫 번째 Window에서 객체 탐지 및 스코어를 측정하고 창을 오른쪽으로 이동시킨다. 
  • 같은 과정을 모든 Window에 반복한다.

 

Step 4: 모든 영역을 점수화하고 

  • 이미지의 모든 부분을 작은 Window로 나눠 탐지하고, 각 창마다 객체가 있을 확률을 Score로 기록한다.
  • Score가 가장 높은 영역이 객체가 존재할 가능성이 있다.

 

Step 5: 최종결과

  • 각 Window의 Score를 기반으로 객체가 있는 위치를 추정한다.

 
 
위 과정에서는 4개의 Window만 사용했지만 실제로는 여러 Window를 사용한다. 그렇기 때문에 연산비용이 많이 든다.
 
따라서 이런 연산 비용을 줄이기 위해서 Fully-connected(FC) LayerConvolutional(Conv) Layer로 변경했다.
즉, FC는 4096 또는 1000의 원소로 구성된 벡터로 생각하지말고, 또 하나의 Convolutional Feature map으로 생각하자는 것이다.
 
Fully-connected(FC) Layer는 모든 입력이 모든 뉴런에 연결되기 때문에 연산 비용이 높지만, Convolutional(Conv) Layer 필터 공유 부분적 처리로 연산을 훨씬 효율적으로 수행하여 연산 비용이 줄어든다.
 
 
 
 


 

Regression in Object Detection - 객체 탐지에서의 회귀 방식

 
이런 이미지에서 회귀를 통한 output을 가져오면 강아지, 고양이2 마리, 오리라는 객체를 인식해 총 16개의 Output을 가져온다. 
 
 
 
 
하지만, 만약 이미지에 객체가 굉장히 많으면 어떻게 될까?
 

 
탐지해야할 객체의 수가 많아질수록, 예측해야할 숫자의 양도 급격하게 늘어나 많은 수의 Output을 내야하는데 어려움이 생긴다. 
 


Shift Towards Classification - 분류 방식으로 전환

위와 같은 문제를 해결하기 위해서 회귀 방식 대신 분류 방식을 도입하는 아이디어가 나왔다. 
분류 방식에서는 각 객체의 존재 여부만을 확인하여, 해당 위치에 특정 객체가 있는지 없는지를 판단한다. 
 
 
아래의 사진은 분류 방식을 예시를 든 과정이다. 

 
이런식으로 특정 위치마다 고양이 또는 강아지가 있는지 확인하고 그 위치에 해당 객체가 있는지 판단하는 방식이다.


Limitations and Solutions of Classification - 분류 방식의 한계와 해결책

Problem #1: 다양한 위치의 크기를 탐지하려면 여러 위치와 스케일을 테스트 해야한다는 것이다.
즉, 이미지 안에서 객체가 어디에 있을지 모르게 때문에 다양한 위치와 크기에 대해 객체를 찾아야한다는 것이다.
 
Solution: 만약 Classifier(분류기)가 "충분히 빠르다면, 그냥 진행"해도 된다.
 
 
 
Problem #2: 다양한 위치의 크기를 탐지하려면 여러 위치와 스케일을 테스트 해야 위해 많은 Classifier(CNN)이 필요하다는 것이다.
즉, 많은 계산 자원이 필요하다는 것이다. 특히 CNN과 같은 계산 비용이 큰 Classifier를 사용할 경우 굉장히 부담이 된다. 
이로 인해 속도가 느려지거나 성능이 떨어질 수 있다.
 
Solution: "가능한 위치의 작은 부분 집합"만 확인한다. ➡️ 이러한 방식이 바로 Region Proposals이다.
즉, 모든 위치와 크기를 테스트하는 대신에 중요한(의심되는) 위치와 크기만 골라서 탐지하는 방법을 의미한다. 객체가 있을 가능성이 높은 위치나 크기를 미리 추려서 그 부분만 집중적으로 탐지하면 연산량을 줄일 수 있다.
 
 
정리하자면, 회귀 방식은 많은 출력을 필요로하는 단점이 있고, "분류 방식을 통해 이런 문제를 해결할 수 있다." 라는 것이다.
 


 

Region Proposals: 영역 제안 기법

Region Proposals 개념

: object detection(객체 탐지)에서 이미지 내에서 객체가 있을 법한 영역을 미리 예측하여, 탐지 효율을 높이는 기법이다.

 

동작 방식 (step by step)

 

Step 1: 객체가 있을 가능성이 높은 영역 탐지

  • 특정한 모양이나 색상, 밝기 차이가 있는 부분을 높은 영역(bolbby)이라고 생각하고 탐지한다. 

 

Step 2: 클래스에 무관한 탐지

  • Region Proposals 방식은 특정 객체를 미리 알지 않고도 탐지할 수 있다.
  • 즉, 어떤 종류의 객체가 있을지 몰라도, 객체가 있을 법한 영역을 찾아낼 수 있다. 이 방법을 Class-agnostic 이라고 한다.
  • 고양이, 강아지 일지 모르는 상태에서도 ''여기 뭔가 있는데?라고 파악하는 것이다.

 

Step 3: 세부 분석

  • 미리 예측된 영역만 집중적으로 분석하여 그곳에 어떤 객체가 있는지 알아낸다. 이미지 전체를 탐색하는 것보다 연산 속도가 훨씬 빠르고 효율적이다.

 

정확도는 좀 떨어져도, 연산 속도는 굉장히 빠른 방법이다.

 
 
 
 


 

Region Proposals을 하는 방식 - Selective Search 알고리즘

 
 

동작 방식 (step by step)

 

Step 1: 이미지 분할(Segmentation)

  • 우선 이미지를 비슷한 색상, 텍스처, 밝기 등을 기준으로 나누게 된다. 이때 나누어진 Segment(이미지의 일부)들은 작고 세밀한 영역이다. 
  • 예를 들어 하늘, 나무, 건물 등이 서로 다른 세그먼트로 분리된다.

 

Step 2: 유사한 세그먼트 병합(Merging)

  • 비슷한 특성을 가진 Segment(이미지의 일부)들을 결합하여 더 큰 영역을 만든다. 
  • 색상, 텍스처, 모양 등이 유사한 세그먼트들을 계속 병합해서 점차적으로 객체가 있을 법한 더 큰 영역을 생성한다.
  • Segment(이미지의 일부)은 무작위로 섞는 것이 아니라, 비슷한 특성을 가진 세그먼트들끼리만 합쳐진다는 것이다!
  • 예를 들면 나뭇잎 세그먼트와 잔디 세그먼트는 비슷한 특성을 가질 수 있기 때문에 병합될 수 있다.

 

Step 3: 다양한 크기의 영역 생성

  • 여러 Segment(이미지의 일부)를 다양한 크기로 병합함으로써, 다양한 크기의 후보 영역(Region Proposals)을 생성한다.
  • 이는 이미지 내에서 작은 객체로 부터 큰 객체까지 탐지할 수 있게 해준다.

Step 4: 계층적 구조(Hierarchy)

  • 이 과정은 계층적으로 이루어지며, 작은 Segment(이미지의 일부)를 점점 더 큰 Segment(이미지의 일부)로 병합해 나가는 방식으로 수행된다.
  • 이렇게 하면 다양한 크기와 위치에서 객체가 있을 법한 후보 영역들을 효율적으로 찾을 수 있다.

 

 
 
 

R-CNN: Region Proposals + Convolutional Neural Networks

 

R-CNN 개요

 

 
R-CNN은 이미지에서 객체를 정확하게 탐지하기 위해 Region Proposals + Convolutional Neural Networks를 한 방식이다.
즉, 이미지 내에서 객체가 있을만한 영역을 찾고 그 영역을 CNN을 통해서 분석하여 객체가 무엇인지 확인하는 방식이다.
 
대략적인 동작 과정은 이미지에서 객체가 있을 만한 위치를 미리 추청하고, 각각의 위치에 대해서 CNN을 적용해서 해당 영역에 어떤 객체인지 분류한다. 그리고 탐지된 객체의 정확한 위치를 조정한다.
 

R-CNN 훈련 과정

 

Step 1: Train Classification Model - 분류 모델 훈련(CNN을 활용하기 위한 학습 단계)

✨ 목표: CNN을 통해 객체의 특징을 인식하는데 필요한 기본적인 분류 능력을 습득
  • ImageNet과 같은 대규모 데이터 셋을 사용해서 CNN을 학습시킨다.
  • 이 과정에서 객체의 특징을 추출하고, 각 객체를 분류하는 기본적인 분류 모델을 학습한다. 

 
 
 

Step 2: Fine-tune for Object Detection - 탐지 모델을 이용해 세밀한 조정(Detection  모델을 활용하기 위한 학습 단계)

✨ 목표: 단순 이미지를 분류하는 것 뿐만 아니라, 이미지 내의 객체 위치와 크기를 탐지할 수 있도록 모델 조정
  • Step 1에서 훈련된 모델을 객체 탐지 데이터셋(PASCAL VOC와 같은)에 맞춰서 다시 학습시킨다.
  • 이때, 기존 분류 모델이 탐지 문제에 맞게 Fine-tuning(세밀 조정)된다.
  • 이 과정은 이미지 내의 객체 위치를 탐지할 수 있도록 모델을 최적화한다.

 
 
 

Step 3: Feature Extraction - 특징 추출
 

 

✨ 목표: 이미지에서 객체가 있을만한 영역을 찾아내 그 영역의 특징을 추출하고, 추출된 특징은 이후 단계에서 객체 탐지에 사용
  • 이미지에서 Region Proposal을 생성하고, 그 각각의 후보 영역을 CNN에 통과시켜 특징을 추출한다.

 
 
 

Step 4: Train Binary SVMs - 이진 SVM 훈련
 

강아지 클래스에 대한 이진 탐색

 

✨ 목표: 각 Region Proposal에서 해당 객체가 무엇인지 판별하는 이진 분류기 훈련(주어진 데이터를 분류할 수 있도록 분류 모델을 훈련시키는 과정) 여기서는 객체가 있는지 없는지 판단하는 과정이다.
  • CNN을 통해서 각 Region Proposal에서 추출된 특징을 가지고 SVM을 훈련한다. 
  • 예를 들어, 강아지 클래스라면 이 부분이 강아지 인지 아닌지, 고양이 클래스라면 이 부분이 고양이 인지 아닌지를 탐색
  • SVM은 특정 객체인지 안니지를 이진 부류로 결정하는 역할을 한다.

 
 
 

Step 5: Bounding Box Regression - 바운딩 박스 회귀(세밀한 바운딩 박스 조절)
 

✨ 목표: 객체를 감싸는 상자의 위치와 크기를 최적화하여, 타지 결과가 더 정확해지도록 한다.
  • Region Proposal의 Bounding Box가 완벽하지 않기 떄문에 최종적으로 Bounding Box Regression을 사용하여 경계 상자의 위치와 크기를 더 정확하게 조정한다.

 


R-CNN의 결과

 

 
* mAP: Object Detection 모델의 성능 평가에 많이 사용되는 지표
 

  • 2014년 R-CNN이 등장하면서 이전 모델보다 객체 탐지 성능이 크게 향상되었다.
  • 또한, Bounding Box Regression을 추가한 후, 객체 위치를 더 정확하게 잡아줘서 성능이 더 좋아졌다.
  • VGG-16을 사용한 R-CNN은 더 깊은 신경망을 적용하여, 이전 모델보다 훨씬 높은 성능을 보여주었다.

R-CNN의 Probloms

 

문제점 #1 - 테스트 시간이 느리다.

각각의 Region Proposal(객체가 있을만한 영역)에 대해서 CNN을 한번씩 모두 실행해야기 때문에 처리 시간이 매우 많이 걸린다.
이로 인해서 R-CMM은 테스트(예측)에서 속도가 굉장히 느리다.
 

문제점 #2 - SVM과 BoundingBox Regression이 따로 작동한다.

CNN이 추출한 특징을 사용하여 SVM과 BoundingBox Regression을 학습시키지만, SVM과 BoundingBox Regression의 성능에 따라 다시 학습시키거나 수정하지 않는다. 즉, CNN과 SVM과 BoundingBox Regression는 서로 상호작용이 부족하다.
 

문제점 #3 - 복잡한 pipeline

R-CNN은 매우 복잡한 여러 단계를 거친다. 따라서 학습 속도가 느리다.
 
 


 

Fast R-CNN: 속도 개선 및 성능 향상

기존에는 Region Proposal을 통해 객체가 있을 만한 영역을 찾고 그 영역에 CNN을 통해서 특징을 추출하였다.
하지만 Fast R-CNN은 그 방식을 반대로 CNN을 특정을 추출하고, 그 Feature map에서 객체가 있을 만한 영역을 찾아내는 방식이다.
 

Fast R-CNN의 문제 해결

 

문제점 #1 - 테스트 시간 단축

 

  • R-CNN: 각 Region Proposal마다 CNN을 따로 실행해서 시간이 오래 걸림.
  • Fast R-CNN이미지 전체에 CNN을 한 번만 적용하고, 그 특징 맵에서 Region Proposal을 처리함. 그래서 테스트 시간이 훨씬 빠름.

 
 

문제점 #2 - 단일 학습 파이프라인

 

  • R-CNN: CNN으로 특징을 추출하고, SVM으로 분류하고, 따로 Bounding Box를 조정하는 복잡한 여러 단계로 구성됨.
  • Fast R-CNN하나의 신경망에서 CNN, 분류, 그리고 Bounding Box 조정을 한 번에 처리함. 그래서 학습 과정이 더 단순하고 빠름.

 
 

Fast R-CNN 훈련 과정

 

Step 1: Train Classification Model - 분류 모델 훈련(CNN을 활용하기 위한 학습 단계)

✨ 목표: CNN을 통해 객체의 특징을 인식하는데 필요한 기본적인 분류 능력을 습득
  • ImageNet과 같은 대규모 데이터 셋을 사용해서 CNN을 학습시킨다.
  • 이 과정에서 객체의 특징을 추출하고, 각 객체를 분류하는 기본적인 분류 모델을 학습한다. 

 
 
 

Step 2: Fine-tune for Object Detection - 탐지 모델을 이용해 세밀한 조정(Detection  모델을 활용하기 위한 학습 단계)

✨ 목표: 단순 이미지를 분류하는 것 뿐만 아니라, 이미지 내의 객체 위치와 크기를 탐지할 수 있도록 모델 조정
  • Step 1에서 훈련된 모델을 객체 탐지 데이터셋(PASCAL VOC와 같은)에 맞춰서 다시 학습시킨다.
  • 이때, 기존 분류 모델이 탐지 문제에 맞게 Fine-tuning(세밀 조정)된다.
  • 이 과정은 이미지 내의 객체 위치를 탐지할 수 있도록 모델을 최적화한다.

 
 
 

Step 3: Feature Extraction - 특징 추출
 
 

✨ 목표: 이미지에서 객체가 있을만한 영역을 찾아내 그 영역의 특징을 추출하고, 추출된 특징은 이후 단계에서 객체 탐지에 사용
  • Fast R-CNN은 R-CNN과 달리, 이미지 전체에 한 번만 CNN을 적용해 특징 맵을 만든다. 
  • 이후, Rol Pooling 기법으로 Region Proposal에서 객체가 있을 법한 영역의 특징을 추출한다.
  • 이는 각 Region Proposal에 대해 별도로 CNN을 적용하는 R-CNN보다 훨씬 효율적입니다.

* Rol Pooling 기법(자세한 방식은 아래에 있다.)
 

  1. CNN으로 이미지 처리 후 Feature map을 얻음
    • 전체 이미지에서 CNN을 적용해 Feature map을 만들면, 이 Feature map은 이미지의 중요한 정보를 포함하고 있다.
  2. Region Proposal
    • 객체가 있을 만한 영역(Region Proposal)을 찾아낸다,
  3. RoI Pooling
    • RoI Pooling은 이렇게 크기가 다른 Region Proposal들을 고정된 크기로 변환하는 과정이다. 예를 들어, 크기가 다른 강아지, 고양이, 사람 등의 Region Proposal을 모두 동일한 크기(예: 7x7)로 맞춘다.

 
 
 
 
 

Step 4: Train Fully Connected Layer - Fully Connected Layer 훈련
 
 

✨ 목표: 전체 이미지에 대해 한 번 CNN을 적용해 Feature map을 추출하고, 각 Region Proposal에서 객체가 있을 법한 영역의 특징을 추출한다.
  • CNN을 통해서 각 Region Proposal에서 추출된 특징을 가지고 Fully Connected Layer을 훈련한다. 
  • Fully Connected Layer는 CNN에서 추출한 특징을 전달 받고, 그 특징을 요약해서 최종적으로 어떤 객체가 있는지 분류하는 역할을 한다.

 
 
 

Step 5: Bounding Box Regression - 바운딩 박스 회귀(세밀한 바운딩 박스 조절)
 

✨ 목표: 객체를 감싸는 상자의 위치와 크기를 최적화하여, 타지 결과가 더 정확해지도록 한다.
  • Region Proposal의 Bounding Box가 완벽하지 않기 떄문에 최종적으로 Bounding Box Regression을 사용하여 경계 상자의 위치와 크기를 더 정확하게 조정한다.

 
 
 

Region of Interest (ROI) Pooling

 

1. 입력 이미지 처리

  • 원본 고해상도 입력 이미지를 CNN에 적용해서 Feature map을 생성한다.

 

2. Region Proposal 생성 및 적용

  • 이미지에서 Region Proposal(객체가 있을만한 영역)을 생성한 후,  이 Region Proposal을 Feature map에 project(투영)한다.
  • 이 투영된 Region Proposal은 이미지 속에서 객체가 있을만한 특정 영역이다.

 

3. RoI Pooling 단계

  • Feature map에서 투영된 Region Proposal을 h x w 그리드로 나눈다. ➡️ 영역을 작은 구역으로 쪼개는 작업
  • 각 그리드 셀 안에 Max Pooling(최댓값)을 계산하여 고정된 크기의 RoI Feature map을 생성한다.

 

4. Fully Connected Layer와 연결

  • RoI Pooling으로 생성된 고정된 크기의 RoI Feature map은, Fully Connected Layer에서 처리할 수 있도록 준비한다.
  • 이를 통해 RoI conv 특징 맵(C x h x w) 가 Fully Connected Layer로 전달되고, 객체의 분류나 위치 조정 작업이 이루어진다.

 

❓RoI Pooling으로 고정된 크기로 변환하면 좋은 점은?

 
일관된 입력 크기
CNN의 Fully Connected Layer는 각각의 입력을 고정된 가중치를 가진 노드에 연결한다. 따라서 입력의 크기가 다르다면 매번 가중치 행렬을 만들어야하기 때문에 고정된 크기의 입력을 필요로 한다. 다양한 크기의 Region Proposal들이 고정된 크기로 변환되지 않으면, Fully Connected Layer는 입력 크기마다 제대로 작동할 수 없다
 
연산 효율성
CNN에서 Feature map을 처리할 때 크기가 일정하지 않으면 연산이 불규칙해져 효율성이 떨어진다.
 
다양한 크기의 객체 처리
다양한 크기의 객체를 동일한 크기로 변환해 CNN에서 다양한 크기의 객체에 대해 균일하게 학습할 수 있다.
 
 
 


 
 

Fast R-CNN 결과

 
 

 
 
학습 시간, 각 이미지에 대한 테스트 시간이 확실하게 줄었다!
 
 
다만, 아래의 사진을 보면 Selective Search를 사용할 때 테스트 시간이 여전히 느리다는 것이다. 
2초라는 시간은 실시간 처리에 비해서 여전히 느린 편에 속한다.
 
 
따라서 Fast R-CNN의 주요 문제점은 Selective Search 단계가 개선되지 않았다는 것이다. 이 때문에 테스트 시간이 신시간 수준으로 개선되지 못했다는 것이다.

 


 

Faster R-CNN: Region Proposal Network (RPN) 도입

Faster R-CNN 개요

 
Faster R-CNN의 핵심은 Region Proposal Network (RPN)이라는 네트워크를 도입한 것이다.
 
기존에는 Selective Search 같은 알고리즘으로 Region Proposal을 찾았지만, Faster R-CNN에서는 RPN이 직접 객체가 있을 만한 영역을 찾는 작업을 수행한다. 이 과정을 통해 Region Proposal 생성 속도가 크게 개선되었고, 더 정확한 객체 탐지가 가능해졌다.
 


 

RPN의 주요 동작 원리

: 객체 탐지를 위한 Region Proposal을 생성하는 딥러닝 기반의 네트워크
 
1. Feature map에서 작은 window를 sliding

  • RPN은 CNN으로 추출된 Feature map 위에 작은 window를 sliding하며 특정 위치에 객체가 있을 확률을 예측한다.
  • 이 작은 window는 이미지의 특정 영역을 탐색하는데 사용되며, 그 위치 정보를 기반으로 객체가 있을지 없을지를 예측한다.

 
 
2. 두가지 작업
 

  • classify obj. / not-obj. (객체인지 아닌지 분류): RPN은 각 Sliding window가 객체를 포함하는지를 판단한다.
  • regress box locations (bounding box regression): 객체의 위치를 더욱 정확하게 조정하기 위해 bounding box regression를 사용해서, 초기 Region Proposal을 더 정밀하게 개선한다.

 
3. anchor box

  • RPN은 anchor box라는 개념을 사용한다. 각 위치에서 여러개의 anchor box를 생성하고, 이 anchor box들은 다양한 크기와 비율을 가지고 있다. 
  • anchor box는 위치에 관계없이 동일한 크기를 사용하여 이미지의 모든 부분은 탐색한다. 이를 통해 다양한 크기와 비율의 객체를 탐지할 수 있다.

 
4. output

  • RPN은 각 anchor box에 대해 객체일 확률과 bounding box의 위치를 예측한다. 그 결과 RPN은 CNN에서 추출한 Feature map을 기반으로 빠르게 Region Proposal을 생성한다. 

 
 
 
 

요약하자면, RPN은 작은 window를 sliding을 해서 객체가 있을 만한 영역을 예측하고, 그 영역에서 Anchor box를 이용해서 다양한 크기의 객체를 탐지하는 역할을 한다. 

 


 

Faster R-CNN 훈련 과정

Step 1: Train CNN for Feature Extraction - 특징 추출을 위한 CNN 훈련
 

목표: 체 이미지에서 특징을 추출하는 데 필요한 기본적인 CNN 모델을 학습.
  • Faster R-CNN은 먼저 CNN을 사용해 이미지에서 중요한 시각적 정보를 추출한다.
  • 이 CNN은 이미지의 모서리, 텍스처, 패턴과 같은 특징을 인식한다. 
  • ImageNet과 같은 데이터셋을 사용해 사전에 학습된 모델을 사용한다. 

 
 
 

Step 2: Train Region Proposal Network (RPN) - RPN 훈련
 

✨ 목표: 객체가 있을 만한 영역(Region Proposal)을 찾는 네트워크를 학습.
  • RPN은 이미지에서 객체가 있을 가능성이 높은 위치를 제안하는 역할을 한다.
  • CNN에서 추출된 Feature map을 입력으로 받아, 각 위치에 객체가 있을 확률과 그 객체의 경계 상자(bounding box)를 예측한다.
  • RPN은 완전히 통합된 네트워크로, 빠르게 Region Proposal을 생성할 수 있다. 이로 인해 Selective Search에 비해 훨씬 효율적이다.

 
 
 

Step 3: RoI Pooling - Region of Interest Pooling
 
 

✨ 목표: 다양한 크기의 Region Proposal을 고정된 크기로 변환하여 CNN이 처리할 수 있게 함
  • RPN에서 생성된 다양한 크기의 Region Proposal은 RoI Pooling을 통해서 고정된 크기로 변형된다.
  • 이 과정을 통해서 크기가 다른 영역도 CNN에서 쉽게 처리할 수 있도록 준비가 된다.

 
 
 
 

Step 4: Train Fully Connected Layer - Fully Connected Layer 훈련
 
 

✨ 목표: 각 Region Proposal에서의 객체의 종류를 분류하고, bounding box를 더 정확하게 조정한다.
  • RoI Pooling으로 고정된 크기로 변환된 특징은 Fully Connected Layer를 통해 처리된다.
  • Fully Connected Layer는 각 객체가 무엇인지를 분류하고, 객체의 Bounding Box를 더 정확하게 조정하는 Bounding Box Regression을 수행한다.

 

Selective Search와 RPN의 차이점

 

  • Selective Search: 비학습 기반 알고리즘으로 속도가 느리고 정확도가 낮음.
  • RPN: 딥러닝 기반의 학습된 네트워크로, 빠르고 정확한 Region Proposal을 생성할 수 있음.

 
 


Faster R-CNN 결과

 

 
 
결과적으로는 각 이미지당 테스트 타임이 0.2초 밖에 걸리지 않게 되었다.
 
 
 
 

YOLO: You Only Look Once

YOLO 개요

YOLO란 실시간 객체 탐지를 위한 혁신적인 방식으로, 이미지에서 객체를 한번에 탐지하는 방식이다. 
이 방식은 이미지를 그리드로 나누고, 각 그리드 셀 마다 객체의 Bounding box와 클래스 확률을 예측하는 방식으로 작동한다.
 

YOLO의 주요 개념:

  1. 객체 탐지를 회귀 문제로 처리:
    • YOLO는 객체 탐지를 회귀 문제로 다룬다. 즉, 이미지를 SxS 크기의 그리드로 나누고, 각 그리드 셀에서 B개의 Bounding Box와 객체가 그 상자 안에 있을 확률(confidence score), 그리고 C개의 클래스 점수를 예측한다.
  2. 단일 CNN으로 예측:
    • YOLO는 단일 CNN을 사용하여 이미지 전체에 대해 한 번에 예측을 수행합니다. 이미지에서 객체를 탐지할 때, 각각의 그리드 셀은 객체가 있을 가능성에 대한 정보를 제공합니다.
    • 예를 들어, 7x7 그리드로 나눈 이미지라면, 7 x 7 x (5 * B + C) 크기의 텐서로 출력된다.​ 여기서 B는 예측할 Bounding Box의 개수이고, C는 클래스 Score의 개수이다.
  3. 빠른 속도:
    • YOLO는 한 번의 CNN 실행으로 전체 이미지를 처리하기 때문에 Faster R-CNN보다 빠르지만, 정확도는 약간 떨어질 수 있다. 그럼에도 불구하고 실시간 처리가 가능한 속도를 자랑하며, 이는 실시간 객체 탐지에서 중요한 장점이다.

'CVLab > cs231n (2016)' 카테고리의 다른 글

cs231n - lecture09(CNN의 시각화 및 이해)  (5) 2024.10.06
2024.10.04 Q&A  (0) 2024.10.04
cs231n - lecture07(CNN)  (0) 2024.10.01
cs231n - lecture06(Trainit NN Part 2)  (0) 2024.09.28
cs231n - lecture05(Trainit NN Part 1)  (7) 2024.09.28