객체 인식 Part 4: 빠른 감지 모델
요약
본 기사는 객체 인식 모델의 발전 과정 중 '빠른 감지(Fast Detection)'에 초점을 맞춘 내용을 다룹니다. 기존의 R-CNN 계열 지역 기반 모델들이 높은 정확도를 보였으나 느렸던 단점을 극복하기 위해, SSD와 YOLO 같은 일 단계(One-stage) 객체 감지 알고리즘을 소개합니다. 이들 모델은 지역 제안 과정을 생략하고 이미지 전체에 걸쳐 직접적으로 객체를 예측하여 속도와 효율성을 크게 향상시켰습니다.
핵심 포인트
- **Two-stage vs One-stage Detectors:** R-CNN 계열의 2단계(Two-stage) 방식은 지역 제안 후 분류하는 반면, YOLO나 SSD 같은 1단계(One-stage) 방식은 직접적으로 감지를 수행하여 속도가 빠릅니다.
- **YOLO (You Only Look Once):** 단일 단계로 작동하며 손실 함수를 로컬라이제이션과 클래시피케이션 두 부분으로 구성합니다. 매우 빠르지만, 불규칙하거나 작은 객체 그룹 인식에는 한계가 있습니다.
- **SSD (Single Shot MultiBox Detector):** 다양한 크기의 객체를 효율적으로 검출하기 위해 VGG-16 기반의 피라미드 특징 계층을 사용하며, 미리 정의된 '안커 박스(Anchor Boxes)'를 활용하여 여러 스케일에서 감지를 수행합니다.
- **성능 트레이드오프:** 1단계 감지기는 속도가 빠르고 단순하지만, 2단계 방식에 비해 성능이 약간 떨어질 수 있다는 특징이 있습니다.
Part 3 에서 우리는 R-CNN 계열의 모델을 검토했습니다. 모두 지역 기반 객체 감지 알고리즘이며, 높은 정확도를 달성할 수 있지만 자율 주행과 같은 특정 응용 프로그램에는 너무 느릴 수 있습니다. Part 4에서는 SSD, RetinaNet 및 YOLO 계열 모델 등 빠른 객체 감지 모델에만 집중합니다.
시리즈의 모든 포스트 링크: [Part 1] [Part 2] [Part 3] [Part 4].
Two-stage vs One-stage Detectors
R-CNN 계열의 모델은 모두 지역 기반입니다. 감지는 두 단계에서 발생합니다: (1) 먼저, 모델은 선택 검색 또는 지역 제안 네트워크를 통해 관심 영역의 일련을 제안합니다. 제안된 영역은 희소하며 잠재적인 박스 후보가 무한할 수 있기 때문입니다. (2) 그런 다음 분류기는 단지 영역 후보만 처리합니다.
다른 접근법은 지역 제안 단계를 건너뛰고 가능한 위치의 밀집 샘플링에 대해 직접 감지를 실행합니다. 이것이 일 단계 객체 감지 알고리즘이 작동하는 방식입니다. 이는 더 빠르고 단순하지만 성능을 약간 떨어뜨릴 수 있습니다.
이 포스트에서 소개된 모든 모델은 일 단계 감지기입니다.
YOLO: You Only Look Once
YOLO 모델 (**
손실 함수는 두 부분으로 구성됩니다: 박스 오프셋 예측을 위한 로컬라이제이션 손실과 조건부 클래스 확률을 위한 클래시피케이션 손실. 두 부분 모두 제곱 오차의 합으로 계산됩니다. 박스 좌표 예측에서 손실을 얼마나 증가시키고 싶고, 객체가 없는 박스의 신뢰도 점수 예측 손실을 얼마나 감소시키는지 조절하기 위해 두 가지 스케일 파라미터가 사용됩니다 ($\lambda_\text{coord}$ 및 $\lambda_\text{noobj}$). 배경 박스에 기여하는 손실을 하강시키는 것은 매우 중요하며, 대부분의 박스가 인스턴스를 포함하지 않기 때문입니다. 논문에서는 모델이 $\lambda_\text{coord} = 5$ 와 $\lambda_\text{noobj} = 0.5$ 를 설정합니다.
NOTE: 원본 YOLO 논문에서 손실 함수는 신뢰도 점수로 $C_i$ 대신 $C_{ij}$를 사용합니다. 저는 모든 박스가 자신의 고유한 신뢰도 점수를 가져야 한다고 이해했기 때문에 이를 수정했습니다. 동의하지 않으시면 언제든지 말씀해 주세요. 많은 감사의 인사드립니다.
여기서,
- $\mathbb{1}_i^\text{obj}$: 셀 i 가 객체를 포함하는지 여부를 나타내는 지표 함수입니다.
- $\mathbb{1}_{ij}^\text{obj}$: 셀 i 의 j 번째 박스가 객체 예측에 “책임”을 지는지 여부를 나타냅니다 (참조: Fig. 3).
- $C_{ij}$: 셀 i 의 신뢰도 점수로,
Pr(containing an object) * IoU(pred, truth)
. - $\hat{C}_{ij}$: 예측된 신뢰도 점수입니다.
- $\mathcal{C}$: 모든 클래스의 집합입니다.
- $p_i(c)$: 셀 i 가 클래스 $c \in \mathcal{C}$ 의 객체를 포함하는지 여부의 조건부 확률입니다.
- $\hat{p}_i(c)$: 예측된 조건부 클래스 확률입니다.
손실 함수는 해당 그리드 셀에 객체가 있는 경우에만 ($\mathbb{1}i^\text{obj} = 1$) 분류 오차를 페널티합니다. 또한 해당 예측자가 ground truth 박스에 “책임”을 지는 경우에만 ($\mathbb{1}{ij}^\text{obj} = 1$) 박스 좌표 오차를 페널티합니다.
단일 단계 객체 검출기인 YOLO 는 매우 빠르지만, 박스 후보자의 수에 제한이 있어 불규칙한 형태의 객체나 작은 객체 그룹을 인식하는 데는 잘하지 못합니다.
SSD: Single Shot MultiBox Detector
Single Shot Detector (SSD; Liu et al, 2016) 는 다양한 크기의 객체를 효율적으로 검출하기 위해 컨볼루션 신경망의 피라미드 특징 계층을 사용하는 첫 번째 시도 중 하나입니다.
이미지 피라미드
SSD 는 유용한 이미지 특성을 추출하기 위해 VGG-16 모델을 ImageNet 에서 사전 학습한 모델을 기반으로 합니다.
VGG16 위에 SSD 는 감소하는 크기의 여러 개의 컨볼루션 특징 레이어를 추가합니다. 이는 다른 규모에서 이미지를 나타내는 피라미드 표현으로 볼 수 있습니다. 직관적으로 초기 단계의 대형 미세Granularity 특징 맵은 작은 객체를 잘 포착하고, 소형 거친 Granularity 특징 맵은 대형 객체를 잘 검출할 수 있습니다. SSD 에서 검출은 다양한 크기의 객체를 목표로 하는 피라미드 레이어에서 발생합니다.
워크플로우
YOLO 와 달리 SSD 는 임의 크기의 그리드로 이미지를 분할하지 않고, 특징 맵의 각 위치마다 미리 정의된 안커 박스 (논문에서는 "default boxes"라고 함) 의 오프셋을 예측합니다. 모든 박스는 해당 셀에 상대적으로 고정된 크기 및 위치를 가집니다. 모든 안커 박스는 컨볼루션 방식으로 전체 특징 맵을 타일링합니다.
Feature maps at different levels have different receptive field sizes. The anchor boxes on different levels are rescaled so that one feature map is only responsible for objects at one particular scale. For example, in Fig. 5 the dog can only be detected in the 4x4 feature map (higher level) while the cat is just captured by the 8x8 feature map (lower level).
The width, height and the center location of an anchor box are all normalized to be (0, 1). At a location $(i, j)$ of the $\ ext{th}$ feature layer of size $m \times n$, $i=1,\dots,n, j=1,\dots,m$, we have a unique linear scale proportional to the layer level and 5 different box aspect ratios (width-to-height ratios), in addition to a special scale (why we need this? the paper didn't explain. maybe just a heuristic trick) when the aspect ratio is 1. This gives us 6 anchor boxes in total per feature cell.
At every location, the model outputs 4 offsets and $c$ class probabilities by applying a $3 \times 3 \times p$ conv filter (where $p$ is the number of channels in the feature map) for every one of $k$ anchor boxes. Therefore, given a feature map of size $m \times n$, we need $kmn(c+4)$ prediction filters.
Loss Function
Same as YOLO, the loss function is the sum of a localization loss and a classification loss.
$\\ ext{L} = \frac{1}{N}(\\text{L}\\text{cls} + \alpha \\text{L}\\text{loc})$
where $N$ is the number of matched bounding boxes and $\alpha$ balances the weights between two losses, picked by cross validation.
The localization loss is a smooth L1 loss between the predicted bounding box correction and the true values. The coordinate correction transformation is same as what R-CNN does in bounding box regression.
where $\\ ext{1}_{ij}^\\text{match}$ indicates whether the $i$-th bounding box with coordinates $(p^i_x, p^i_y, p^i_w, p^i_h)$ is matched to the $j$-th ground truth box with coordinates $(g^j_x, g^j_y, g^j_w, g^j_h)$ for any object. $d^i_m, m\in\{x, y, w, h\}$ are the predicted correction terms. See this for how the transformation works.
The classification loss is a softmax loss over multiple classes (softmax_cross_entropy_with_logits in tensorflow):
where $\\ ext{1}_{ij}^k$ indicates whether the $i$-th bounding box and the $j$-th ground truth box are matched for an object in class $k$. $\text{pos}$ is the set of matched bounding boxes ($N$ items in total) and $\text{neg}$ is the set of negative examples. SSD uses hard negative mining to select easily misclassified negative examples to construct this $\text{neg}$ set: Once all the anchor boxes are sorted by objectiveness confidence score, the model picks the top candidates for training so that neg:pos is at most 3:1.
YOLOv2 / YOLO9000
YOLOv2 (Redmon & Farhadi, 2017) is an enhanced version of YOLO. YOLO9000 is built on top of YOLOv2 but trained with joint dataset combining the COCO detection dataset and the top 9000 classes from ImageNet.
YOLOv2 Improvement
A variety of modifications are applied to make YOLO prediction more accurate and faster, including:
1. BatchNorm helps: Add batch norm on all the convolutional layers, leading to significant improvement over convergence.
2. Image resolution matters: Fine-tuning the base model with high resolution images improves the detection performance.
3. Convolutional anchor box detection: 전체 특징맵 (feature map) 을 넘어fully-connected 레이어로 bounding box 위치를 예측하는 대신, YOLOv2 는 faster R-CNN 과 같이 convolutional layers 를 사용하여 anchor boxes 의 위치를 예측합니다. 공간적 위치와 클래스 확률의 예측은 분리됩니다 (decoupled). 전체적으로 이 변화는 mAP 에 약간의 감소를 가져오지만, recall 을 증가시킵니다.
4. K-mean clustering of box dimensions: faster R-C NN 가 anchor boxes 의 크기를 수동으로 선택 (hand-picked sizes) 한 것과 달리, YOLOv2 는 훈련 데이터에서 k-mean clustering 을 실행하여 anchor box 차원 (dimensions) 에 대한 좋은 사전 확률 (priors) 을 찾습니다. 거리 측정법 (distance metric) 은 IoU scores 를 *의존 (rely)*하도록 설계되었습니다:
여기서 $x$ 는 ground truth box 후보이고, $c_i$ 는 하나의 중심점 (centroid) 입니다. 가장 좋은 중심점 수 (anchor boxes) $k$ 는 elbow method 로 선택할 수 있습니다.
클러스터링으로 생성된 anchor boxes 는 고정된 개수의 박스 조건에서 더 나은 평균 IoU 를 제공합니다.
5. Direct location prediction: YOLOv2 는 bounding box 예측을 이미지 중심 위치 (center location) 에서 너무 많이 *발산 (diverge)*하지 않는 방식으로 형식화합니다. 박스 위치 예측이 regional proposal network 와 같이 이미지의 어느 부분을 배치할 수 있다면, 모델 훈련은 불안정해질 수 있습니다.
크기가 $(p_w, p_h)$ 인 anchor box 가 상단 왼쪽 모서리가 $(c_x, c_y)$인 그리드 셀에 있을 때, 모델은 오프셋과 스케일 $(t_x, t_y, t_w, t_h)$을 예측하고, 이에 해당하는 예측된 bounding box $b$는 중심 $(b_x, b_y)$와 크기 $(b_w, b_h)$를 가집니다. 신뢰도 점수 (confidence score) 는 다른 출력 $t_o$의 sigmoid ($\sigma$)입니다.
6. Add fine-grained features: YOLOv2 는 이전 레이어에서 fine-grained features 를 마지막 출력 레이어로 가져오기 위해 passthrough 레이어를 추가합니다. 이 passthrough 레이어의 메커니즘은 이전 레이어에서 더 높은 차원의 특징 (higher-dimensional features)을 추출하기 위해 ResNet 의 identity mappings과 유사합니다. 이는 1%의 성능 증가를 가져옵니다.
7. Multi-scale training: 모델이 다양한 크기의 입력 이미지에 대해 견고하게 훈련되도록 하기 위해, *새로운 크기 (new size)*의 입력 차원은 10 batches마다 *무작위 샘플링 (randomly sampled)*됩니다. YOLOv2 의 conv 레이어는 입력 차원을 32 배로 다운샘플링하므로, 새로 샘플링된 크기는 32의 배수입니다.
8. Light-weighted base model: 예측을 더 빠르게 만들기 위해, YOLOv2 는 19 개의 conv 레이어와 5 개의 max-pooling 레이어를 가지는 가벼운 기반 모델인 DarkNet-19 을 채택합니다. 핵심 포인트는 3x3 conv 레이어 사이에 avg poolings 과 1x1 conv 필터를 삽입하는 것입니다.
YOLO9000: Rich Dataset Training
이미지 객체 감지를 위해 bounding box 를 그리는 것은 이미지 분류를 위해 이미지를 태그하는 것보다 훨씬 비용이 많이 듭니다. 따라서, 모델이 훨씬 더 많은 객체 범주에 노출되도록 작은 객체 감지 데이터셋과 큰 ImageNet 을 결합할 수 있는 방법을 제안했습니다. YOLO9000 의 이름은 ImageNet 의 상위 9000 클래스에서 유래했습니다. 합동 훈련 (joint training) 중, 입력 이미지가 분류 데이터셋에서 온 경우에만 분류 손실 (classification loss) 이 backpropagates 됩니다.
감지 데이터셋은 훨씬 적은 수의 일반적 라벨을 가지며, 또한 라벨이 여러 데이터셋을 가로지르는 경우가 종종 서로 배타적이지 않습니다. 예를 들어, ImageNet 은 "Persian cat"이라는 라벨을 가지지만 COCO 에서 같은 이미지는 "cat"으로 라벨링됩니다. 상호 배타성 (mutual exclusiveness) 이 없으면 모든 클래스에 대해 softmax 를 적용하는 것은 의미가 없습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Lilian Weng Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기