newhaneul

[Seoul National Univ: Computer Vision] Lecture 14. Object Detection 본문

2. Artificial Intelligence/Seoul National Univ. Computer Vision

[Seoul National Univ: Computer Vision] Lecture 14. Object Detection

뉴하늘 2025. 6. 8. 20:23
728x90

본 포스팅은 서울대학교 이준석 교수님의 M3224.000100 Machine Learning for Visual Understanding을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

https://youtu.be/CcZs5YT-Ar0?si=6fcR_verULfk5ng6

 

1. Object Detection

 Object Detection은 이미지나 영상에서 객체가 어느 위치에 있는지를 식별하는 유서 깊은 컴퓨터 비전 기술이다. 단순한 Classification과는 달리, 객체의 위치(Bounding Box)와 클래스(Label0을 함께 예측하는 것이 목표이다.

 

 가장 단순한 Object detection은 입력 이미지를 CNN에 통과시키고 Class Loss와 Bounding Box Loss를 합산하는 Multi task Loss 방식이다. 하지만 이러한 단순한 방식은 하나의 클래스만 예측하는 Softmax의 문제점과 어떤 예측이 어떤 GT Bounding Box에 대응하는지의 문제점이 있다.

Object Detection: Approaches

 

(1) Proposal-based models

  • 입력 이미지에 Region proposal를 제안한 다음 object detection하는 모델
  • ex) R-CNN, Fast R-CNN, Faster R-CNN

(2) Proposal-free models

  • Region proposal을 사용하지 않고 직접 객체의 위치와 클래스를 예측하는 모델
  • 전체 이미지를 grid로 나누거나 anchor box를 사전에 설정
  • ex) YOLO, SSD, DETR

2. R-CNN(Regions with CNN features, 2014)

 R-CNN은 기존에 있던 컴퓨터 비전 방법(Region proposal, VGG, SVM)들에 CNN을 결합한 Object detection 모델이다. 물체가 있을 만한 영역을 먼저 추출한 뒤,(Region proposal) 각 영역마다 CNN을 적용하여(VGG) 객체를 분류한다.(SVM)

 

Stage 1: Region proposal

  • 입력 이미지에 약 2000개의 Region proposal 생성

Stage 2: Object recognition

  • 각 Region proposal을 고정된 크기로 resize
  • resize된 Region proposal을 CNN(VGG, AlexNet)에 통과시켜 feature vector 추출

Stage 3: SVM Classification & Bounding Box Regression

  • CNN으로 얻은 feature vector에 대해 클래스별 SVM으로 객체 분류
  • Region proposal을 보정하기 위해 Bounding Box Regression 수행

R-CNN(Regions with CNN features): Bounding Box Regression

 R-CNN의 Bounding Box Regression은 학습 시와 예측 시에 출력하는 값이 다르다.

 

학습 시(Training)

  • Input

  • Target truth 계산

  • Regressor에 proposal box 좌표 입력

  • Loss 계산 및 역전파

 Training 단계에서는 GT Bounding Box의 좌표를 직접 예측하는 게 아니라, GT와 proposal 간 target truth를 예측하고, 이를 통해 parameter를 학습한다.

 

예측 시(Prediction)

  • Input으로 proposal box만 주어짐

  • Regressor에 proposal box 좌표 입력

  • 최종 GT Boudning Box 좌표 복원

 이 단계에서는 GT Bounding Box의 좌표를 사용하지 않고, proposal과 regressor 출력만으로 예측을 진행한다.

R-CNN(Regions with CNN features): Discussion

  • 딥러닝을 사용한 첫 번째 Image detection 모델이다.
  • 기존의 brute force method를 개선하였지만, 모든 region proposals을 CNN에 통과시키므로 여전히 계산량이 많다.
  • region proposals를 사용하기 때문에 계산 비용이 크고 End-to-End 학습이 아니다.

3. Fast R-CNN(Fast Regions with CNN features, 2015)

 Fast R-CNN은 제안된 Region Proposal 전부에 CNN을 통과시키지 않고, 먼저 이미지 전체에 대해 한 번만 CNN을 통과시킨 뒤 그로부터 얻은 CNN features에 Region proposal을 진행한다.

Fast R-CNN(Fast Regions with CNN features): Architecture

1. Input

  • 전체 이미지에 Region Proposals 진행

2. CNN Backbone

  • 이미지 전체에 대해 사전 학습된 CNN을 단 1번만 수행

3. RoI Pooling(Region of Interest Pooling)

  • proposal box를 CNN feature map 위에 project
  • Pooling을 사용하여 고정된 크기의 feature로 변환

4. Fully Connected Layers

  • 각 RoI feature → FC layer → feature vector

5. Multi Task Loss

  • Softmax Classifier: 클래스 확률 예측
  • Bounding Box Regressor: Bounding Box의 위치 보정

Fast R-CNN(Fast Regions with CNN features): Discussion

  • R-CNN보다 정확도와 속도가 모두 높다
  • 여전히 Region proposals를 사용하기 때문에 계산 비용이 크고 End-to-End 학습이 아니다.

4. Mask R-CNN(Mask Regions with CNN features, 2017)

 Mask R-CNN은 RoIAlign 연산을 사용하여 기존 RoI Pooling의 한계를 극복한 모델이다.

 

(1) RoI Pooling

  • Region proposal을 고정된 크기의 cell로 분할한 뒤 max pooling을 수행(정수 좌표 기준)
  • 이 과정에서 좌표 정수화가 발생하여 위치 정밀도 손실이 생긴다.

(2) RoIAlign

  • RoIAlign은 정수 좌표로 강제하지 않고, 정확한 부동소수점 위치에서 feature 값을 얻는다.
  • 각 cell의 sampling 위치를 부동소수점으로 유지하고, 그 위치의 값을 bilinear interpolation으로 계산한다.

 Bilinear Interpolation 동작 방식은 아래와 같다. 

5. Faster R-CNN(Faster Regions with CNN features)

 Faster R-CNN은 Region Proposal 단계를 CNN으로 통합한 end-to-end object detection model이다. 이 과정에서 도입된 것이 바로 RPN(Region Proposal Network)이다.

Faster R-CNN(Faster Regions with CNN features): Region Proposal Network

  • CNN feature map의 각 위치에 anchor box를 설정한다.
  • anchor box(1:1, 1:2, 2:1) x 3인 총 9개로 이루어져 있다.
  • 각 anchor box에 대해 objectness score, bounding box regression을 진행한다.
  • GT bounding box와 비교한 뒤 겹치는 영역이 많다면 positive, 적다면 negative를 출력한다.

1. Classification Loss

  • anchor에 객체가 있는지 없는지에 대한 값

2. Bounding Box Reression Loss

  • 오직 positive anchor일 때만 적용된다.
  • GT bounding box와 예측한 Bounding box 간의 Smooth L1을 계산

 따라서 RPN Loss function의 전체 수식은 아래와 같다.

 

Faster R-CNN(Faster Regions with CNN features): Training

Step 1: Train the RPN

  • Input Image를 사전 학습된 CNN(ImageNet, VGG)에 통과시키면서 RPN을 학습시킨다.
  • 이때 RPN은 물체가 있을 법한 Region Proposal을 생성하도록 학습된다.

Step 2: Train a separate detection network by Fast R-CNN using the RPN

  • 사전 학습된 CNN으로 초기화된 Fast R-CNN detection head 학습
  • RPN이 제안한 proposal을 사용하여 classification과 bounding box regression을 학습한다.

Step 3: Fine-tune the unique layers in RPN

  • Detection network의 CNN을 RPN 쪽으로 복사하여 Conv layers를 동일하게 만듦
  • RPN의 고유한 layer만 다시 학습하고, Conv layer는 freeze
  • 최종적으로 RPN과 Detection head는 공통 feature map을 공유하게 된다.

Step 4: Fine-tune the unique layers of detection network

  • RPN과 Detection network가 공유하는 Conv layer는 freeze하고, detection head만 fine-tuning

Faster R-CNN(Faster Regions with CNN features): Speed

 Fast R-CNN의 속도는 0.5 fps(1초에 0.5개 이미지)이지만, Faster R-CNN의 속도는 5~17 fps이다. 따라서 Faster R-CNN이 훨씬 더 속도가 빠른 모델이다.(Region Proposal Network를 도입해 연산 속도를 획기적으로 줄였기 때문)

6. YOLO(You Only Look Once, 2016)

 YOLO는 이미지 전체를 단 한 번의 forward pass로 처리하여 object detection을 진행하는 모델이다. Single Neural Network 구조라 입력 이미지를 한 번에 처리하여 모든 bounding box + class를 예측 가능하며, detection pipline을 CNN 하나로 통합해 속도도 빠르다.  

YOLO(You Only Look Once): Algorithm

1. 이미지를 S x S grid로 분할

2. 각 grid cell은 자신이 중심에 포함하는 객체를 최대 B개(B = 2)까지 예측

3. 각 Bounding Box는 x, y(center), w, h(box size), confidence(objectness score)를 출력한다. 

4. 또한 각 grid cell은 C개의 class probabilities를 계산한다.

YOLO(You Only Look Once): Non-Max Suppression

동일 객체에 대해 여러 개의 겹치는 박스가 예측되는 것을 하나의 박스로 정제

 

Step 1: 가장 높은 objectness score를 가진 박스를 선택

Step 2: 이 박스와 모든 다른 박스의 IoU를 계산

  • 겹치는 정도를 측정

Step 3: IoU가 threshold 이상인 박스를 제거

  • 즉, 같은 객체에 대해 중복된 박스 제거

Step 4: 남은 박스 중에서 다시 가장 높은 score의 박스를 선택

Step 5: 모든 박스를 처리할 때까지 반복

YOLO(You Only Look Once): Loss Function

 YOLO의 Loss function은 총 5개 요소의 합으로 구성되어 있고, 하나의 네트워크가 Bounding Box location + Bounding Box size + Objectness + Classification을 동시에 예측하도록 설계되었다.

 

1. Bounding Box Location Loss

  • 1_ij: cell i의 box j가 GT와 매칭될 때만 계산
  • 중심 위치의 좌표 차이(L2 loss)

2. Bounding Box Size Loss

  • sqrt를 취함으로써 작은 객체의 크기 오차에 더 민감하게 학습 가능
  • 매칭된 box에만 계산 적용

3. Confidence Loss(Object가 존재하는 경우)

  • Confidence = "box가 객체를 포함할 확률"  x  IoU

4. Confidence Loss(Object가 존재하지 않는 경우)

  • 배경 cell(GT가 없는 곳)에서 잘못된 confidence가 높은 경우를 억제

5. Class Probability Loss(Softmax Classification)

  • 해당 cell에 객체가 있는 경우에만 class loss 계산
  • softmax 또는 MSE 방식으로 클래스 분류 예측

YOLO(You Only Look Once): Results

 아래 슬라이드는 Faster R-CNN과 YOLOv1의 성능 비교, 오류 분석 등을 종합적으로 보여준다. 결과적으로는 Faster R-CNN이 YOLOv1 모델보다 더 높은 정확도를 갖고 있다. 하지만 두 모델이 어떤 경우에 틀리는지를 비교하면 YOLO의 개선 할 여지를 알아낼 수 있다.

 

 Fast R-CNN은 Background(배경을 객체로 판단)에 관한 오답이 많다. 반면에 YOLO는 Background 오류는 적지만 Localization(박스 위치 오차) 오류가 크다. 이 결과로부터 Fast R-CNN은 많은 영역을 탐지하려다 배경을 잘못 예측하고, YOLO는 전체 이미지를 한 번에 보기 때문에 배경은 잘 구분하지만, 정확한 박스 위치 찾는 것을 어려워 한다고 해석 가능하다.

 

 이처럼 무작정 정확도가 낮다고 필요 없는 모델이 되는 것이 아니라 오류 분석을 통해 문제의 다른 영역에서 강점이 보인다는 것을 나타내는 것도 논문 작성의 중요한 점이다.

7. SSD(Signle Shot MultiBox Detector, 2016)

 SSD는 VGG16의 Conv5 3layer 이후 conv layer를 더 추가하여 다양한 크기의 feature map에서 각각 다른 크기의 객체를 감지함으로써 단일 네트워크로 멀티 스케일 탐지가 가능한 모델이다.

 

1. Backbone으로 VGG-16 사용

  • VGG-16의 Conv5 3 layer까지 사용하고 FC layer 제거
  • 이후 추가적인 Conv layer를 붙임

2. Extra Feature Layers

  • 각 layer는 점점 크기가 줄어드는 feature map을 생성

3. Classification & Regression

  • 각 feature map의 3x3 patch마다 k개의 default boxes에 대해 C + 4개(class score + Bounding box 좌표) 값 예측

4. Conv Classifier

5. Anchor box에 대한 Dense 예측

 

Conv Earlier Layer

  • 해상도가 높고, 작은 물체를 detection 하는데 적합하다.

Conv Later Layer

  • 해상도가 낮고, 큰 물체를 detection 하는데 적합하다.

SSD(Signle Shot MultiBox Detector): Loss Function

 SSD는 Localization Loss와 Classification Confidence Loss의 합으로 계산된다.

 

1. Localization Loss

2. Classification Confidence Loss

 

  • 첫 항: positive box에 대해 정답 클래스 확률을 최대화
  • 두 번째 항: negative box에 대해 배경 클래스 확률을 최대화

 

SSD(Signle Shot MultiBox Detector): Results

8. DETR(Detection Transformer, 2020)

 DETR은 fully end-to-end Transformer 기반 Object detection 모델이다. Anchor box, proposal, NMS 등을 제외하고, Transformer와 CNN 만으로 Object detection을 수행한다.

DETR(Detection Transformer): Architecture

1. Backbone

  • CNN(ResNet-50)으로 feature map 생성

2. Positional Encoding

  • position 정보가 크게 중요하지 않기 때문에 고정된 positional encoding을 사용

3. Transformer Encoder

  • CNN feature를 sequence로 변환한 후, Transformer Encoder로 처리

4. Transformer Decoder

  • 이미지 전체의 정보가 담긴 Transformer Encoder output sequence를 Cross Attention에서 Key와 Value로 사용한다.
  • object query(learnable embeddings)을 입력으로 받고, 각 query는 하나의 객체를 예측하기 위한 벡터이다.
  • 즉, Object query가 Encoder의 Image representation을 보고, 자신이 어떤 object를 주의할지 결정한다.

5. prediction heads

  • Decoder의 마지막 출력 shape은 Q x D(Q = 100, D = 256)
  • 각각의 벡터는 객체 하나에 대한 정보를 담고 있다.
  • 이 벡터들은 FFN에 의해 Class score(C+1 classes, "no object" 포함), Bounding box(x, y, w, h)로 계산된다.

 

 

DETR에서 Positional Encoding은 오직 Query와 Key에만 적용되며, 각 Attention layer마다 positional encoding을 반복 정용한다. 또한 DETR의 Transformer Decoder는 객체에는 순서가 없다고 보고, object query들이 동시에 처리된다.(parallel) 각 query는 독립적으로 하나의 객체를 예측한다.

DETR(Detection Transformer): Training

 아래 슬라이드는 DETR이 기존 객체 탐지기와 달리 object predictions의 순서를 정할 수 없기 때문에, 학습 과정에서 optimal bipartite matching을 통해 ground truth와 예측 결과를 1:1로 매칭하는 방식을 다루고 있다.

 

 DETR은 항상 고정된 개수 N개의 object query를 사용하기 때문에 N개의 박스들을 어떤 Object와 매칭할지를 결정해야 한다. 이를 위한 해결 방법으로 Ground truth와 예측된 box를 최적의 비용으로 매칭한다.

 

 슬라이드의 예시대로 DETR의 4개 Object query 중 2개만 진짜 object를 예측하고, 나머지 2개는 "no object"로 분류됨을 볼 수 있다. 이는 실제 새 2마리에 대해 적절한 예측 두 개가 최적 매칭으로 정해짐을 의미한다.

*Bipartite: 이분

DETR(Detection Transformer): Results

 DETR의 Encoder Self-Attention의 attention map을 시각화하면 이미지 내에 있는 객체 전체에 고르게 attention이 확산되어 있음을 볼 수 있다. 즉, Encoder가 객체 단위로 정보 구조를 구분해내고 있다.

 DETR의 Decoder Cross-Attention의 attention map을 시각화하면 각 object query는 이미지 전체에서 자신이 집중할 영역을 선택하고 있다. query 별로 객체의 부분적 특징들에 집중함으로써 전체 객체를 재구성하고 있고, object boundary를 중심으로 집중하고 있다.

 

 이처럼 Query마다 각기 다른 부분을 주의하면서 객체 전체를 잘 조립해내고 있기 때문에 object-level feature 추출이 가능한 것이다.

DETR(Detection Transformer): Limitations

 DETR은 아주 작은 객체들에는 성능이 좋지 않다는 단점을 갖고 있다. 또한, 고정된 수의 Object query를 사용하기 때문에 이 수를 넘어가는 객체가 있는 이미지에는 성능이 떨어진다.

728x90