[CS231n] 강의9. Object Detection and Image Segmentation 리뷰
본 글은 스탠포드 대학 CS231n Lecture 11(Detection and Segmentation) 강의 내용을 바탕으로 정리한 내용이다. 개인 공부 목적으로 작성하였으며, 설명 오류나 오탈자에 대한 피드백을 환영한다.
원본 링크 : cs231n.stanford.edu 한글 번역 링크 : aikorea.org - cs231n 강의 링크 : youtube - 2017 Spring (English)
- 이 글에서 다루는 것
- 컴퓨터 비전 태스크 개요: Image Classification, Semantic Segmentation, Object Detection, Instance Segmentation
- 시맨틱 분할(Semantic Segmentation): 슬라이딩 윈도우의 한계, 합성곱 기반 접근, Fully Convolutional Network(FCN) 및 Downsampling/Upsampling 구조
- 객체 인식(Object Detection) 기초: Classification과 Localization, 2D Bounding Box 파라미터 및 멀티태스크 손실(Multitask Loss)
- 다중 객체 인식과 영역 제안: 슬라이딩 윈도우 문제점과 Selective Search를 통한 Region Proposals
- 2-Stage 검출기 발전사: R-CNN, Fast R-CNN과 RoI Pooling/Align, Faster R-CNN과 영역 제안 네트워크(RPN, Anchor Box)
- 1-Stage 검출기: 단일 단계 종단간 검출 모델인 YOLO(You Only Look Once)의 기본 동작 원리
Image Classification

- Computer vision의 핵심 태스크인 Image Classification은 주어진 후보 라벨 집합에서 입력 이미지가 어떤 범주에 속하는지 예측하는 작업이다.

- Computer vision의 태스크는 이미지 분류를 넘어 공간적 정보를 다루는 Semantic Segmentation, Object Detection, Instance Segmentation 등으로 확장된다1.
- 먼저 semantic segmentation 부터 살펴본다.
Semantic Segmentation

- Semantic Segmentation은 이미지 내에 있는 객체들을 의미 있는 단위(클래스)로 분할하는 작업을 말한다2.
- 개별 인스턴스를 구분하지 않고 동일한 범주에 속하는 모든 픽셀에 동일한 레이블을 할당한다.
- 각 학습 이미지에 대해 각 픽셀은 의미 범주(semantic category)로 레이블이 지정된다. (그림의 왼쪽)
- input : 이미지
- output : 픽셀별 범주를 나타내는 2D 클래스 맵이다.
- 테스트 시에는 새로운 입력 이미지의 모든 픽셀을 범주별로 분류한다. (그림의 오른쪽)
sliding window

- 이미지 한 장을 분류하기 위해 작은 패치 단위의 sliding window 기법을 적용하면, 주변 문맥(context) 정보가 부족하여 분류 정확도가 떨어진다.
- 즉, 모든 영역을 잘라 패치마다 독립적인 CNN 순전파를 거쳐 중심 픽셀을 추론한다면 중복 연산이 반복되어 매우 비효율적이다.
convolution

- 슬라이딩 윈도우의 중복 연산을 줄이고 특징(feature)을 재사용하기 위해 전체 이미지를 한 번에 처리하는 합성곱(convolution) 신경망이 제안되었다.
- 전체 이미지를 전달해 특징 맵을 추출하고, 그 위에서 분할을 수행하여 전체 해상도의 segmentation 맵을 출력한다.
- 하지만 분류 모델처럼 완전 연결 계층(FC layer)을 적용할 경우 입력 이미지 해상도에 종속되며, 공간 차원이 붕괴되어 픽셀 위치 정보가 소실되는 한계가 있다.
Fully Convolutional Layer

- 다운샘플링 없이 합성곱 계층만으로 네트워크를 구성하여 모든 픽셀을 한 번에 예측하는 FCN(Fully Convolutional Network) 방식이다.
- 이 방법은 특징 맵을 공유하므로 각 윈도우 패치마다 독립적인 순전파를 수행할 필요가 없다3.
- 완전 합성곱 아키텍처를 통해 특징을 재사용하고 전역 픽셀에 대한 예측을 한 번에 도출할 수 있다.
- 그러나 원본 이미지의 고해상도를 유지한 채 다층 합성곱을 수행하면 메모리 사용량과 연산 비용이 급증하는 문제가 발생한다.

- 이러한 고해상도 연산 부담을 해소하기 위해 네트워크 내부에 다운샘플링(Downsampling)과 업샘플링(Upsampling)을 결합한 인코더-디코더 구조를 도입한다.
- 다운샘플링(인코더) 단계는 스트라이드 합성곱이나 풀링을 통해 공간 차원을 축소하여 연산 비용을 절감하고 수용 영역(receptive field)을 넓혀 고수준 의미를 추출한다.
- 업샘플링(디코더) 단계는 전치 합성곱(Transposed Convolution)이나 언풀링(Unpooling)을 통해 축소된 특징 맵을 원래 입력 이미지 해상도로 복원한다.
- 이 구조를 통해 원본 해상도에서 모든 합성곱을 수행하지 않고도 계산 효율을 유지하면서 깊은 계층의 의미 특징을 학습할 수 있다.
시맨틱 분할이 이미지의 모든 픽셀에 대해 클래스를 예측하는 작업이라면, 이제 이미지 내 개별 객체들의 위치(바운딩 박스)를 특정하고 클래스를 식별하는 객체 인식(Object Detection) 태스크를 살펴본다.
Object Detection

- Object Detection은 이미지 내 모든 물체를 탐색하여 각각의 클래스를 분류하고 위치 좌표를 출력하는 태스크이다4.
- 객체의 클래스를 식별하는 분류(Classification)와 위치를 특정하는 국소화(Localization)를 동시에 수행한다.
- Localization : 이미지 내 단일 객체의 바운딩 박스 위치를 특정하는 작업
- Detection : 이미지 내 다수 객체의 위치를 특정하고 각 범주를 분류하는 작업5

- 단일 객체 국소화의 경우 2D 바운딩 박스를 회귀(Regression) 문제로 예측한다.
- 바운딩 박스(Bounding Box)는 $(X,Y,W,H)$ 또는 $(X_1,Y_1,X_2,Y_2)$ 4개의 파라미터로 정의된다.
- $(X,Y,W,H)$에서 $(X,Y)$는 중심 좌표(또는 좌상단 좌표)를 나타내며, $(W,H)$는 상자의 너비와 높이를 의미한다.
- 바운딩 박스(Bounding Box)는 $(X,Y,W,H)$ 또는 $(X_1,Y_1,X_2,Y_2)$ 4개의 파라미터로 정의된다.
- 멀티태스크 손실(Multitask Loss): 분류 손실과 위치 회귀 손실의 규모(magnitude)를 균형 있게 결합하기 위해 가중치 합(weighted sum)으로 최적화한다.
- 손실 함수: $\mathcal{L}{\text{total}} = \mathcal{L}{\text{cls}}(\text{Softmax}) + \lambda \mathcal{L}_{\text{loc}}(L_2)$
Multiple Object Detection

- 이미지에 포함된 객체의 수가 고정되어 있지 않고 가변적이므로, 단순 고정 차원의 출력 회귀만으로는 다중 객체 검출을 해결하기 어렵다.

- 다중 객체를 찾기 위해 슬라이딩 윈도우 방식을 적용할 경우, 이미지 전체에 걸쳐 다양한 위치, 크기(스케일), 종횡비(aspect ratio)를 갖는 모든 윈도우마다 분류기를 적용해야 하므로 계산 비용이 비현실적으로 높아진다.
Region Proposals: Selective Search

- 모든 가능한 위치를 전수 조사하는 대신, 객체가 존재할 확률이 높은 후보 영역(RoI)을 추출하는 기법을 영역 제안(Region Proposal)이라고 한다.
- 전통적인 영역 제안 방법으로는 색상, 질감, 명암 등의 유사성을 기반으로 계층적 영역 병합을 수행하는 Selective Search 알고리즘이 널리 활용되었다.
R-CNN

- R-CNN은 입력 이미지에서 Selective Search를 사용해 약 2,000개의 관심 영역(RoI)을 추출한다.
- 각 제안 영역을 동일한 크기(예: $224 \times 224$)로 변형(warp/crop)하여 CNN 모델에 입력한다.
- CNN을 통해 추출된 특징 벡터를 바탕으로 선형 서포트 벡터 머신(SVM)을 학습시켜 클래스를 분류하고, 바운딩 박스 회귀를 통해 위치를 보정한다.
- 그러나 이미지 1장당 약 2,000번의 CNN 순전파를 독립적으로 수행해야 하므로 추론 및 학습 시간이 매우 길다는 한계가 있다.
Slow R-CNN

- 이미지를 영역별로 자르기 전에 전체 이미지를 단 1회 CNN에 통과시키고, 도출된 합성곱 특징 맵에서 영역을 잘라내는 아이디어가 발전하였다.
- 특징 맵을 공유하는 이 방식은 현대 딥러닝 기반 2D 객체 검출 모델들의 기본 설계 철학으로 자리 잡았다6.
Fast R-CNN

- Fast R-CNN은 이미지 자르기 후 매번 CNN을 통과시키는 기존 R-CNN 방식 대신, 전체 이미지를 CNN에 먼저 통과시켜 특징 맵을 생성한 후 후보 영역에 해당하는 합성곱 특징을 잘라내어(crop & pool) 크기를 조정한다.
- 이를 통해 단일 이미지를 처리할 때 무거운 합성곱 연산을 수천 번 반복하는 중복을 피할 수 있다.
- Fast R-CNN은 역전파가 특징 추출 계층까지 전달되는 종단간(End-to-End) 학습 구조를 채택하였다. 자르기 및 크기 조정은 입력 이미지가 아닌 특징 맵 위에서 직접 수행된다.
Cropping Features: RoI Pool

- RoI Pool : 임의 크기의 제안 영역을 고정된 차원의 특징 벡터로 변환하는 연산이다.
- 목표 : 특징 맵에서 후보 영역을 추출하고, 후속 완전 연결 계층(FC layer)이 처리할 수 있도록 고정 크기 텐서(예: $7 \times 7$ 또는 $2 \times 2$)로 축소한다.
- 특징 맵 상의 후보 영역 좌표를 부동소수점에서 정수 격자로 반올림(quantization)하여 배치한다.
- 해당 영역을 목표 차원의 격자로 균등 분할한 뒤, 각 빈(bin)마다 최대 풀링(Max Pooling)을 적용하여 고정 크기 출력을 생성한다.
- 입력 영역의 크기가 서로 달라도 결과 벡터는 항상 동일한 크기를 유지한다.
- 그러나 좌표 반올림 과정에서 양자화 오차가 발생하여 공간적 정렬(spatial alignment)이 어긋날 수 있다.
Cropping Features: RoI Align

- RoI Pool의 좌표 반올림으로 인한 공간 정보 왜곡을 해결하기 위해 Mask R-CNN에서 RoI Align이 제안되었다.
- RoI Align은 영역의 경계와 샘플링 빈을 정수로 양자화하지 않고 부동소수점 좌표 그대로 유지한다.
- 각 빈 내부의 4개 샘플링 지점에서 쌍선형 보간법(Bilinear Interpolation)을 적용해 연속적인 특징 값을 정확히 계산한 뒤 풀링을 수행한다.
- 이를 통해 특징 맵과 실제 객체 위치 간의 정렬 오차를 제거하여, 작은 물체 검출 및 정밀한 픽셀 단위 분할 성능을 개선한다.
R-CNN vs Fast R-CNN

- Fast R-CNN은 공유 합성곱 백본(backbone)을 활용해 전체 이미지에 대한 특징 맵을 1회만 계산함으로써 처리 효율을 높였다.
- 학습 단계에서 Fast R-CNN은 R-CNN 대비 약 10배 빠르며, 테스트 단계에서는 약 20배 빠른 처리 속도를 보인다.
- 그러나 Fast R-CNN 역시 영역 제안 단계에서는 여전히 CPU 기반의 Selective Search를 사용한다.
- 이미지 1장당 전체 2.3초 중 Selective Search 영역 제안에만 약 2초가 소요되고, 제안 영역 분류에는 0.32초만 소요되므로 전체 추론 파이프라인의 병목이 영역 제안 단계에 머물러 있다.
Faster R-CNN (1)

- Faster R-CNN은 영역 제안 단계의 속도 병목을 해결하기 위해 개발되었다.
- 외부 CPU 알고리즘인 Selective Search 대신, 합성곱 특징 맵을 직접 활용하여 네트워크 내부에서 후보 영역을 예측하는 내장형 RPN(Region Proposal Network)을 도입하였다.
Region Proposal Network

- RPN의 핵심 설계는 사전 정의된 앵커 박스(anchor box) 세트를 활용하는 것이다.
- 앵커 박스는 특징 맵의 각 위치마다 서로 다른 스케일과 종횡비(aspect ratio)를 갖도록 정의된 기준 상자이다.
- 슬라이딩 윈도우의 전수 조사 방식과 달리 사전에 정의된 대표 위치, 크기, 비율을 기반으로 샘플링되므로 검사 대상 후보 영역 수가 제한적이다.
- 앵커는 자연 이미지에서 객체가 주로 등장하는 영역 비율을 포괄하며, 모든 입력 이미지에 대해 동일한 앵커 구성을 공유한다.
- RPN은 특징 맵 위를 작은 합성곱 계층으로 슬라이딩하며 각 앵커 위치에 객체가 존재하는지 여부(객체성 점수, Objectness Score)와 바운딩 박스 오프셋을 예측한다.
- 특징 맵의 각 지점은 해당 좌표를 중심으로 배치된 앵커 박스들의 객체 포함 여부를 평가하는 수용 영역 역할을 수행한다.
Faster R-CNN (2)

- Faster R-CNN의 전체 추론 및 학습 흐름은 다음과 같다.
- RPN 단계의 분류/회귀 손실 2개와 최종 Fast R-CNN 단계의 분류/회귀 손실 2개를 합산한 총 4개의 멀티태스크 손실로 최적화한다.
- 입력 이미지가 CNN을 통과하여 전체 이미지에 대한 특징 맵을 생성한다.
- RPN이 특징 맵에서 객체성 점수가 높은 후보 영역(region proposal)을 예측한다.
- RPN이 예측한 후보 영역에 대해 물체 존재 여부 분류와 앵커 좌표 보정 회귀를 수행한다.
- 선별된 후보 영역에 대해 RoI Pooling을 적용하여 고정 크기 특징 벡터를 추출하고, FC 계층을 거쳐 최종 클래스 분류와 바운딩 박스 회귀를 진행한다.

- 계산 효율성 측면에서 Faster R-CNN은 이미지당 약 0.2초 수준으로 처리할 수 있어 Fast R-CNN 대비 약 10배의 속도 향상을 보인다.

- 객체 검출 모델은 구조적 파이프라인에 따라 1-Stage와 2-Stage 검출기로 분류된다7.
- 객체 검출은 객체의 위치를 특정하는 Localization과 범주를 식별하는 Classification 문제를 해결해야 한다.
- 1-Stage : 두 문제를 단일 신경망에서 동시에 예측하는 방식 (추론 속도가 빠르며 실시간 처리에 유리함, 예: YOLO, SSD, RetinaNet)
- 2-Stage : 영역 제안과 분류 및 위치 보정을 순차적으로 수행하는 방식 (추론 속도는 상대적으로 느리지만 검출 정밀도가 우수함, 예: R-CNN, Fast R-CNN, Faster R-CNN)
- Faster R-CNN은 특징 추출 및 영역 제안(1단계) 후 각 제안 영역을 개별 분류·정제(2단계)하는 대표적인 2-Stage 객체 검출기이다.
- 단일 단계 검출기는 영역 제안 단계를 생략하고 직접 박스를 예측하여 추론 속도를 극대화하는 방향으로 발전하였다.
Others

- YOLO(You Only Look Once)는 입력 이미지를 $S \times S$ 그리드로 분할하여 단일 순전파로 위치와 클래스를 동시에 예측하는 1-Stage 검출기이다.
- 각 그리드 셀마다 사전 정의된 다수의 바운딩 박스를 기준으로 좌표 오프셋과 신뢰도 점수(Confidence Score)를 예측한다.
- 동시에 각 그리드 셀의 조건부 클래스 확률을 예측하여 최종 바운딩 박스별 클래스 점수를 도출한다.
- YOLO는 별도의 영역 제안 단계 없이 단일 신경망의 1회 순전파(single forward pass)로 모든 경계 상자와 클래스를 출력하므로 실시간 처리에 적합하다.
핵심 정리
- Semantic Segmentation과 FCN: 픽셀 수준에서 범주를 예측하며, 고해상도 연산 부담을 해소하기 위해 특징 맵을 다운샘플링하여 깊게 학습한 뒤 업샘플링으로 원래 해상도를 복원하는 완전 합성곱 구조를 사용한다.
- Classification vs Localization: 이미지 내 단일 객체를 감지할 때는 범주 예측을 위한 분류 손실(Softmax)과 바운딩 박스 회귀를 위한 위치 손실($L_2$ Loss)을 결합한 멀티태스크 손실을 최적화한다.
- Region Proposal과 Selective Search: 슬라이딩 윈도우의 비효율성을 극복하기 위해 객체가 존재할 만한 후보 영역을 약 2,000개 수준으로 압축 추출하는 기법이다.
- R-CNN의 한계: 추출된 각 RoI에 대해 독립적으로 CNN 순전파를 수천 번 반복해야 하므로 학습 및 추론 속도가 매우 느리다.
- Fast R-CNN의 특징 맵 공유: 전체 이미지를 CNN에 먼저 통과시켜 특성 맵을 단 1회 추출한 후, RoI Pooling을 통해 후보 영역에 대한 고정 크기 특징 벡터를 잘라내어 중복 순전파 연산량을 절감했다.
- Faster R-CNN과 RPN: 외부 Selective Search 대신 네트워크 내부에서 앵커 박스를 기반으로 후보 영역을 예측하는 Region Proposal Network를 도입해 병목을 제거하고 End-to-End 고속 검출을 달성했다.
- 1-Stage vs 2-Stage Detector: 2-stage(R-CNN 계열)는 영역 제안과 분류를 순차 진행하여 정확도가 높고, 1-stage(YOLO 등)는 단일 순전파로 바운딩 박스와 클래스를 동시 예측하여 실시간 처리에 적합하다.
한계 및 트레이드오프
- 정확도와 추론 속도의 상충관계: Faster R-CNN과 같은 2-Stage 검출기는 영역 제안과 영역별 특징 정제를 거쳐 높은 검출 정확도를 제공하지만 다단계 파이프라인 구조로 인해 실시간 처리가 어렵다. 반면 YOLO와 같은 1-Stage 검출기는 초당 프레임 수(FPS)가 높아 실시간 검출이 가능하지만, 작은 객체(small object)나 서로 겹쳐 있는 밀집 객체 검출에서 상대적으로 위치 오차가 발생하기 쉽다.
- RoI Pooling의 양자화 오차: RoI Pooling은 연속형 좌표의 제안 영역을 이산 격자로 투영할 때 반올림(rounding) 양자화를 거치며 원본 위치와의 불일치가 발생한다. 이러한 위치 왜곡은 픽셀 정밀도가 중요한 고해상도 세부 분할 태스크에서 성능 저하를 야기하므로 RoI Align과 같은 보간 기법이 필수적이다.
- 시맨틱 분할의 공간 해상도 손실: FCN 구조의 다운샘플링은 넓은 수용 영역(receptive field)을 확보하는 장점이 있지만, 계층이 깊어질수록 고주파 에지 및 경계 정보가 비가역적으로 소실된다. 단순 전치 합성곱 기반 디코더만으로는 미세한 물체 경계선을 정밀하게 복원하기 어려워 스킵 연결(Skip Connection)이나 정교한 후처리 기법과의 결합이 요구된다.
References
-
Stanford CS231n Lecture 11: Detection and Segmentation (2017 Slides) ↩
-
[CS231n Lecture11. Detection and Segmentation - Jayden Lee](https://ai-rtistic.com/2021/12/02/cs231n-lecture11/#object-detection)
댓글남기기