Object Detection

Classification + Box localization





Object detection architectures


Two-stage detector : R-CNN

Region-based Convolutional Neural Network

  1. Region Proposal (후보 영역 추출)
    • 입력 이미지를 받으면, 먼저 Selective Search와 같은 기법을 사용해 이미지에서 객체가 있을 가능성이 있는 후보 영역(Region Proposal)을 수천 개 생성
      • 이미지 내에 객체가 존재할 가능성이 높은 영역을 미리 추정하는 과정
  2. Feature Extraction and Classification (특징 추출 및 분류)
    • 각 후보 영역을 CNN(Convolutional Neural Network)에 통과시켜, 각 영역의 특징을 추출
    • 추출된 특징을 이용해 각 후보 영역이 어떤 클래스(예: 사람, 자동차, 개 등)에 속하는지 분류
    • 각 후보 영역의 위치를 조금 더 정확하게 조정하기 위해 경계 박스 회귀를 수행
  3. Output (출력)
    • 최종적으로 객체의 클래스와 위치(경계 박스)를 출력

장점

R-CNN은 각 후보 영역에 대해 정밀한 분류를 수행하기 때문에 정확도가 높음


단점

많은 후보 영역을 각각 CNN에 통과시켜야 하기 때문에 계산량이 매우 많고, 속도가 느리다



One-stage detector : YOLO

  1. Single Forward Pass (단일 단계 처리)
    • 이미지를 그리드로 나누고, 각 그리드 셀이 해당 영역에서 객체가 있는지를 예측
    • 각 그리드 셀은 객체가 있을 확률과 그 객체의 클래스, 그리고 객체의 경계 박스를 동시에 예측
  2. Output (출력)
    • 전체 이미지에 대해 한 번의 네트워크 통과만으로, 모든 객체의 위치와 클래스를 예측

장점

매우 빠름 → 전체 이미지를 한 번에 처리하기 때문에 실시간 객체 탐지에 적합


단점

속도가 빠른 대신, 작은 객체나 복잡한 이미지에서는 정확도가 떨어질 수 있음. 특히, 객체가 그리드 셀 경계를 넘어 있을 때 탐지가 어려울 수 있다



One-stage detector vs Two-stage detector

One-stage detector

단일 단계: 전체 이미지 처리 및 탐지 (Single Step Detection)

  • 이미지를 여러 개의 그리드 셀로 나누고, 각 셀이 담당하는 영역에서 객체가 있는지를 예측
  • 각 셀은 해당 영역 내에서 객체의 클래스와 위치(경계 박스)를 동시에 예측
  • YOLO는 전체 이미지를 한 번에 보고, 동시에 객체의 위치와 클래스 정보를 예측하는 원 스테이지 디텍터
  • 한 번에 처리: 이미지 전체를 보고 객체 탐지 및 위치 예측
  • 매우 빠른 처리 속도
  • 상대적으로 정확도는 낮을 수 있음 (특히 작은 객체에 대해)

Two-stage detector

  • 첫 번째 단계: 후보 영역 추출 (Region Proposal)

    • Selective Search 등의 알고리즘을 사용해 입력 이미지에서 잠재적인 객체가 있을 만한 후보 영역(Region Proposals)을 여러 개 생성
      • 이 후보 영역들은 객체가 있을 가능성이 높은 이미지의 작은 부분
  • 두 번째 단계: 후보 영역 분류 및 경계 박스 회귀 (Classification and Bounding Box Regression)

    • 각 후보 영역을 CNN(합성곱 신경망)에 입력하여 특징을 추출하고, 이를 사용해 객체가 어떤 클래스에 속하는지 분류

    • 각 후보 영역의 경계 박스 위치를 정밀하게 조정(회귀)하여 객체의 정확한 위치를 예측

      먼저 후보 영역을 생성한 후, 이를 각각 CNN에 통과시켜 객체를 탐지하는 두 단계를 거치기 때문에 투 스테이지 디텍터

  • 두 단계로 나뉘어 처리: 후보 영역 생성 → 후보 영역 분류 및 위치 조정

  • 일반적으로 더 높은 정확도

  • 계산량이 많아 속도가 느림



Class imbalance problem 클래스 불균형 문제

  • 객체 탐지에서 발생하는 문제로, 원 스테이지 디텍터(YOLO, SSD 등)들이 이 문제에 취약한 편

  • 이미지 내에서 실제로 객체가 존재하는 앵커 박스(양성 앵커 박스)보다 객체가 없는 앵커 박스(음성 앵커 박스)가 훨씬 더 많음

    • ex) 한 이미지에 객체가 10개밖에 없더라도 앵커 박스는 수천 개가 될 수 있음. 대부분의 앵커 박스는 객체가 없는 음성 앵커 박스
  • 모델이 학습할 때, 음성 앵커 박스가 너무 많아 모델이 음성 앵커 박스를 잘 분류하는 데 집중하게 되고, 상대적으로 양성 앵커 박스의 분류에는 덜 민감해짐 → 모델의 성능이 저하될 수 있음

  • 앵커 박스 Anchor Box

    앵커 박스는 객체 탐지 모델이 이미지에서 다양한 크기와 모양의 객체를 찾아내기 위해 사용하는 사전 정의된 사각형들

    앵커 박스는 이미지를 나눈 그리드 셀 위에 겹쳐서 여러 크기와 비율의 사각형 모양으로 미리 설정됨

    1. 이미지에 사각형 격자(그리드)를 씌운다
      • 모델은 이미지 전체를 여러 개의 작은 사각형 셀로 나눈다
        • 이 사각형들이 격자 모양으로 배열되어 있다고 생각할 것
    2. 각 그리드 셀에 여러 개의 앵커 박스를 설정한다
      • 각 그리드 셀 위에 여러 개의 사각형 박스를 겹쳐놓음. 이 박스들은 크기와 모양이 다 다름
    3. 앵커 박스가 객체를 찾는 방법
      • 모델은 이 앵커 박스들이 이미지에서 실제 객체와 얼마나 잘 맞는지(겹치는 정도)를 평가
      • 만약 이미지에 있는 객체의 위치와 모양이 어떤 앵커 박스와 잘 맞는다면, 그 앵커 박스는 "양성(positive)"으로 분류
      • 반대로, 객체와 거의 맞지 않는 앵커 박스는 "음성(negative)"으로 분류

Focal Loss

클래스 불균형 문제를 해결하기 위해 개발된 손실 함수

  • Improved Cross Entropy Loss (개선된 교차 엔트로피 손실 함수):
    • Focal Loss는 기본적으로 교차 엔트로피 손실을 기반으로 함. 교차 엔트로피 손실은 분류 문제에서 많이 사용하는 손실 함수로, 예측과 실제 클래스 간의 차이를 측정
    • Focal Loss는 이 교차 엔트로피 손실을 개선하여, 모델이 학습할 때 특정 문제를 더 잘 다루도록 만든다
  • Deal with Class Imbalance (클래스 불균형 문제를 다룸):
    • 클래스 불균형은 음성(객체가 없는) 샘플이 양성(객체가 있는) 샘플보다 훨씬 많은 상황을 의미하는데, Focal Loss는 모델이 음성 샘플에만 치우쳐 학습하지 않도록 함
    • Over-weights Hard or Misclassified Examples (어려운 예제나 잘못 분류된 예제에 더 높은 가중치를 부여):
      • Focal Loss는 모델이 잘못 분류한 예제들이나, 분류하기 어려운 예제들에 대해 더 큰 가중치를 부여함
        • ex) 모델이 특정 객체를 제대로 인식하지 못하면, Focal Loss는 해당 예제에 대해 더 많은 학습이 이루어지도록 유도
    • Down-weights Easy Examples (쉬운 예제에는 낮은 가중치를 부여):
      • 반대로, 이미 잘 분류된(쉬운) 예제들에 대해서는 가중치를 줄여, 모델이 이미 잘 처리하는 데이터에 너무 많은 자원을 쓰지 않도록

RetinaNet

  • 원 스테이지 네트워크 → RetinaNet은 객체 탐지를 한 번의 과정으로 수행해 속도가 빠름!

Feature Pyramid Networks (FPN) + class/box prediction branches

  • Feature Pyramid Networks (FPN)
    • FPN은 이미지의 여러 스케일에서 객체를 탐지하기 위해 사용되는 네트워크 구조
    • FPN은 이미지에서 다중 스케일 피처를 추출하여, 작은 객체부터 큰 객체까지 다양한 크기의 객체를 효과적으로 탐지할 수 있도록 해줌
    • 이는 기본적으로 기존의 CNN에서 나온 특징 맵(feature map)을 여러 레벨로 쌓아 올려, 각 레벨에서 객체를 탐지할 수 있게 한다
  • Class/Box Prediction Branches (클래스/박스 예측 분기)
    • RetinaNet은 각 피라미드 레벨에서 두 가지 분기를 사용
      1. 클래스 예측 분기 (Classification Branch):이 분기는 이미지의 특정 위치에서 어떤 클래스가 있는지를 예측
        1. ex) 특정 위치에 사람이 있는지, 자동차가 있는지를 분류
      2. 박스 예측 분기 (Box Regression Branch):이 분기는 이미지 내에서 객체의 경계 박스를 예측함 → 객체의 정확한 위치를 나타내는 사각형의 좌표를 예측
    • 이 두 가지 분기는 FPN에서 생성된 특징 맵을 기반으로 하며, 모델이 객체의 위치와 클래스를 동시에 예측할 수 있게 함

RetinaNet의 특징

  • Focal Loss:

    RetinaNet은 Focal Loss를 사용하여 클래스 불균형 문제를 효과적으로 해결!

    이는 모델이 어려운 예제에 집중하고, 클래스 불균형으로 인해 발생할 수 있는 문제를 줄여줌. 이로 인해 원 스테이지 디텍터임에도 불구하고 높은 정확도를 달성 가능

  • Feature Pyramid Networks (FPN):

    FPN을 통해 이미지의 다양한 스케일에서 객체를 탐지할 수 있게 되어, 작은 객체나 큰 객체 모두에서 좋은 성능을 보여준다

RetinaNet은 원 스테이지 객체 탐지 모델로, Focal Loss와 Feature Pyramid Networks (FPN)을 결합하여 높은 정확도와 빠른 속도를 동시에 달성. FPN은 이미지의 여러 스케일에서 객체를 탐지할 수 있게 하며, 클래스와 박스를 동시에 예측하는 분기를 사용해 객체의 위치와 클래스를 정확하게 예측함






Instance segmentation

Instance segmentation = Semantic segmentation + distinguishing instances

Instance segmentation은 이미지에서 개별 객체를 식별하고 각 객체의 단위 경계를 정확하게 구분하는 작업

  • 세맨틱 세그멘테이션 (Semantic Segmentation):
    • 세맨틱 세그멘테이션은 이미지의 각 픽셀을 특정 클래스에 할당하는 작업
      • ex) 이미지에서 모든 "사람" 픽셀을 동일한 색상으로 칠해 사람이라는 것을 표시하는 것
    • 하지만 이 방법은 같은 클래스에 속하는 여러 객체(예: 여러 명의 사람)를 구분하지는 않음. 모든 사람이 같은 색상으로 칠해지기 때문에, 개별 객체를 구분할 수 없다
  • 인스턴스 세그멘테이션 (Instance Segmentation):
    • 인스턴스 세그멘테이션은 세맨틱 세그멘테이션을 확장하여, 같은 클래스에 속하는 객체들도 개별적으로 구분하는 작업
      • ex) 여러 명의 사람이 있는 이미지에서 각 사람을 각각 다른 색상으로 표시해, 서로 다른 객체임을 명확히 구분할 수 있음
    • 즉, 세맨틱 세그멘테이션을 수행한 후, 그 결과를 바탕으로 같은 클래스에 속하는 객체들 사이의 경계를 구분해주는 과정이 추가된 것



Mask R-CNN

객체 탐지와 인스턴스 세그멘테이션을 동시에 수행하는 딥러닝 모델

  • Faster R-CNN을 기반으로 하고 Mask Branch를 더한 것

  • 객체의 경계 상자 뿐만 아니라 각 객체의 정확한 픽셀 단위 마스크도 예측할 수 있음

  • Faster R-CNN

    • Faster R-CNN투 스테이지 객체 탐지 모델로, 이미지에서 객체의 위치(경계 상자)를 예측하고, 그 경계 상자 안에 어떤 객체가 있는지를 분류
    1. Region Proposal Network (RPN)
      • 이미지에서 객체가 있을 만한 위치(후보 영역, Region Proposal)를 제안하는 네트워크로, RPN이 제안한 후보 영역들은 이후 단계에서 더 정확히 분류되고, 경계 상자가 조정
    2. ROI Pooling 및 클래스/박스 예측
      • 제안된 후보 영역에 대해, 어떤 클래스의 객체인지 분류하고, 경계 상자(박스)를 더 정확하게 조정
  1. Region Proposal

    • Faster R-CNN과 동일하게, Region Proposal Network (RPN)을 통해 이미지에서 객체가 있을 가능성이 있는 후보 영역을 제안
  2. ROI Align

    • Mask R-CNN은 ROI Pooling 대신 ROI Align이라는 방법을 사용. ROI Align은 후보 영역의 좌표를 보다 정확하게 처리하여, 픽셀 단위로 더 정밀한 결과를 얻을 수 있게 한3다

    • RoI Align이란?

      • RoI AlignMask R-CNN에서 사용되는 기술로, 픽셀 단위의 정밀한 정보를 유지하여 객체 탐지와 인스턴스 세그멘테이션의 정확성을 높이는 역할

      • RoI Align은 RoI Pooling의 개선된 버전으로, 픽셀 단위의 정밀한 위치 정보가 필요할 때 사용

        RoI Pooling vs. RoI Align

      1. RoI Pooling

        • RoI Pooling은 Faster R-CNN에서 사용되는 기법으로, Region of Interest (RoI), 즉 객체 후보 영역을 고정된 크기로 변환하는 방법
        • RoI Pooling은 후보 영역을 그리드로 나누고, 각 그리드 셀에서 최대값을 추출하여 고정된 크기의 출력 피처 맵을 생성 → 이 과정에서 위치 정보의 손실이 발생할 수 있음
          • RoI Pooling은 후보 영역을 비슷한 크기의 셀로 나누어, 각 셀에서 가장 큰 값을 선택함으로써 정보의 손실을 일으킬 수 있음
      2. RoI Align

        • RoI Align은 RoI Pooling의 문제를 해결하기 위해 제안된 기법으로, 픽셀 단위로 정확한 위치 정보를 유지할 수 있도록 설계
        • RoI Align은 후보 영역을 작은 격자(grid)로 나누지 않고, 직접적으로 픽셀 값을 보간하여 정밀한 피처를 추출함. 이때, bilinear interpolation을 사용하여 각 RoI의 피처 맵을 더 정밀하게 샘플링
        • RoI Align은 격자 나누기를 사용하지 않고, 입력 피처 맵에서 실제 픽셀 위치를 참조하여 더 정확한 결과를 제공

        RoI Align의 작동 과정

      3. 후보 영역의 정확한 위치 계산

        • RoI Align은 후보 영역의 좌표를 직접적으로 활용하여, 픽셀 단위로 정확한 위치를 보정함. 이는 격자 셀을 사용하는 대신, 더 정밀한 정보를 보장
      4. Bilinear Interpolation (양선형 보간법)

        • RoI Align은 격자 셀 내의 값을 보간하여, 각 RoI의 특징을 보다 세밀하게 추출. 이 과정은 픽셀 단위의 세밀한 위치 정보를 유지한다
      5. 피처 추출

        • 각 후보 영역에서 정확한 피처 맵을 추출하고, 이를 통해 더 정밀한 객체 인식과 분류를 수행

        왜 RoI Align이 중요한가?

      • 정밀한 객체 탐지: RoI Align은 픽셀 단위로 정확한 위치 정보를 유지할 수 있어, 객체의 모양과 경계를 더 정확히 추정할 수 있음
      • 인스턴스 세그멘테이션: 인스턴스 세그멘테이션에서는 객체의 형태를 정확히 추출하는 것이 중요. RoI Align은 이 과정에서 정보 손실을 줄여줌.
  3. 클래스/박스 예측

    • 제안된 영역에 대해 Faster R-CNN과 동일하게, 객체의 클래스와 경계 상자를 예측함
  4. 마스크 예측

    • Mask Branch가 각 객체에 대한 픽셀 단위의 바이너리 마스크(객체가 있는 부분은 1, 없는 부분은 0)를 예측 → 이 마스크는 객체의 형태를 정확히 추출하는 데 사용됨



DensePose R-CNN

DensePose R-CNN = Faster R-CNN + 3D surface regression branch

  • DensePose R-CNNFaster R-CNN3D 표면 회귀(branch)를 추가하여, 2D 이미지에서 3D 표면의 정확한 매핑을 수행하는 모델
  • *2D 이미지를 기반으로 *인체의 3D 표면을 매핑하여, 인체의 3D 자세를 추정하는 모델

  1. Faster R-CNN:
    • Faster R-CNN은 객체 탐지를 위한 모델로, 이미지에서 객체의 위치(경계 상자)와 클래스(객체 종류)를 예측
  2. 3D 표면 회귀(3D surface regression)(branch):
    • DensePose R-CNN은 객체의 2D 이미지를 기반으로 객체의 3D 표면을 예측
    • 2D 이미지에서 인체의 3D 표면(예: 인체의 피부 표면)을 매핑하여, 인체의 각 부분이 3D 공간에서 어떻게 나타나는지를 추정
    • 이를 통해, 2D 이미지를 통해 인체의 3D 자세를 추정할 수 있음

작동 방식

  • DensePose R-CNN은 먼저 이미지에서 객체를 찾고(기본적인 Faster R-CNN 단계), 인체 표면의 3D 좌표를 추정하여, 2D 이미지에서 3D 표면의 세부적인 디테일을 제공



Mesh R-CNN

Mesh R-CNN = Faster R-CNN + 3D surface regression branch

  • Mesh R-CNNFaster R-CNN3D 표면 회귀(branch)를 추가하여, 3D 메쉬 형식으로 객체의 표면을 예측하는 모델
  • 2D 이미지에서 객체의 3D 메쉬를 예측하여, 객체의 정밀한 3D 표면을 생성하는 모델

  1. Faster R-CNN:
    • 기본적으로 Faster R-CNN을 사용하여 객체의 위치와 클래스 정보를 예측
  2. 3D 표면 회귀(branch):
    • Mesh R-CNN은 3D 메쉬를 예측
      • 메쉬는 3D 객체의 표면을 구성하는 다각형(삼각형 등)의 집합
    • 이 모델은 객체의 표면을 3D 메쉬 형태로 생성하여, 보다 상세하고 정밀한 3D 표면 모델을 제공

작동 방식

  • Mesh R-CNN은 먼저 이미지에서 객체를 탐지하고(기본적인 Faster R-CNN 단계), 각 객체에 대해 3D 메쉬를 예측하여, 객체의 정확한 3D 형태를 생성
  • 이 메쉬는 3D 공간에서 객체의 표면을 나타내는 삼각형의 집합



'Study - AI > Computer Vision' 카테고리의 다른 글

Computational Imaging  (0) 2025.01.16
Semantic Segmentation  (0) 2025.01.14
ViT & GAN  (0) 2025.01.14
CNN (Convolution Neural Network)  (0) 2025.01.13