8주차 수업도 바쁘게 흘러가고 있다. 새로운 회사에서도 3개월차가 되었다. 이렇게 삶이 하루씩 흘러가는 것이지 싶다.

01. 얼굴 검출 개요: Haar → SSD → YOLO

  • Haar Cascade: 사전 정의된 사각 특징(haar-like features)을 슬라이딩 윈도우 + cascade로 평가. 간단 특징 → 복잡 특징으로 단계적 거름, 학습은 AdaBoost로 약분류기 가중 결합. 실제 구현은 적분영상(integral image)로 특징 합을 O(1) 계산
  • SSD (Single Shot MultiBox Detector): 단일 네트워크(1-stage)에서 여러 스케일의 feature map(예: 38×38, 19×19, 10×10, 5×5, 3×3, 1×1)을 동시에 사용하여 다양한 크기의 물체/얼굴을 탐지. 각 셀마다 여러 default boxes(=anchor 유사)를 두고 오프셋 + 클래스를 예측
  • YOLO 계열: 이미지 전체를 격자 단위로 한 번에 예측(속도 강점). SSD는 다중 스케일 특징을 활용해 속도와 정확도 균형을 강화

02. SSD 아키텍처 핵심

  • Backbone: VGG16 등 분류기에서 fc를 conv로 대체하여 검출기에 적합화
  • 멀티스케일 특징맵(예시 입력 300×300일 때):
    38×38, 19×19, 10×10, 5×5, 3×3, 1×1에서 모두 예측 헤드 적용
  • 예측 방식: 각 셀마다 k개의 default box에 대해 (4+C) 채널(= 4개 bbox 오프셋 + C개 클래스 점수) 출력. 전체 박스 수(SSD300 기준)는 8732

03. Default Box(Anchor) 스케일 & 형태

  • 스케일 정의(총 m개의 특징맵 사용):
    sk=smin+smaxsminm1(k1),k=1,,ms_k = s_{\min} + \frac{s_{\max} - s_{\min}}{m-1}\,(k-1),\quad k=1,\dots,m
  • 권장 범위: smin=0.2s_{min} = 0.2, smax=0.9s_{max} = 0.9, m=6m=6 (SSD 300)
    가로세로비(Aspect Ratios): 𝑎𝑟 ∈ {1,2,3,12\frac{1}{2},13\frac{1}{3}}
  • 박스 크기:
    wk=skar,hk=skarw_k = s_k\sqrt{ar},\qquad h_k = \frac{s_k}{\sqrt{ar}}
  • 정사각 extra box: ar=1일 때
    sk=sksk+1s'_k = \sqrt{s_k\, s_{k+1}}
    • 위 정의는 스케일이 작은(고해상) 특징맵에서 작은 물체, 스케일이 큰(저해상) 특징맵에서 큰 물체를 포착하도록 설계된다

04. 학습: 매칭, 샘플링, 손실함수

04-01. 매칭 전략 (Ground Truth ↔ Default Box)

  • 각 GT 박스와 IoU(Jaccard overlap)가 가장 큰 default box를 우선 positive로 지정하고
  • IoU ≥ 0.5인 나머지 default box도 positive
  • 그 외는 negative
    • 클래스 불균형 해소를 위해 Hard Negative Mining으로 Pos:Neg ≈ 1:3 되도록 음성 샘플을 선택
IoU(A,B)=ABAB\mathrm{IoU}(A,B)=\frac{|A \cap B|}{|A \cup B|}

04-02. 로스 함수 (SSD 기본식)

  • 총 손실:

    L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g)),α=1L(x,c,l,g) = \frac{1}{N}\Big(L_{\mathrm{conf}}(x,c) + \alpha L_{\mathrm{loc}}(x,l,g)\Big),\quad \alpha=1
  • Localization Loss(Smooth L1, GT와 매칭된 양성만 합산):

    Lloc(x,l,g)=iPosm{cx,cy,w,h}xijk  smoothL1 ⁣(limg^jm)L_{\mathrm{loc}}(x,l,g) = \sum_{i\in \mathrm{Pos}} \sum_{m\in\{cx,cy,w,h\}} x^{k}_{ij}\; \mathrm{smoothL1}\!\left(l^m_i - \hat{g}^m_j\right)
  • Confidence Loss(Softmax Cross-Entropy; 양성은 GT 클래스, 음성은 배경 0번 클래스):

    Lconf(x,c)=iPoslogc^ip    iNeglogc^i0,c^ip=exp(cip)qexp(ciq)L_{\mathrm{conf}}(x,c) = - \sum_{i\in \mathrm{Pos}} \log \hat{c}^{p}_i \;-\; \sum_{i\in \mathrm{Neg}} \log \hat{c}^{0}_i, \quad \hat{c}^{p}_i = \frac{\exp(c^{p}_i)}{\sum_{q}\exp(c^{q}_i)}
    • 여기서 NN은 매칭된 양성 박스 수(없으면 0으로 정의), ll은 예측 오프셋, g^\hat{g}는 정규화된 GT오프셋, xijkx_{ij}^{k}는 매칭 인디케이터

05. 추론단계

  • 모든 특징맵에서 (4+C) 예측 획득
  • 디코딩(오프셋 → 실제 좌표)
  • 클래스별 스코어 임계값 필터링
  • *NMS(Non-Maximum Suppression)로 중복 박스 제거
    SSD는 이 파이프라인으로
    속도(1-stage) + 다양한 스케일 대응(멀티스케일 특징)**을 양립
    NMS:  B{bBIoU(b,bmax)<τ} 를 반복\text{NMS}: \; \mathcal{B} \leftarrow \{b \in \mathcal{B}\mid \mathrm{IoU}(b, b_{\max}) < \tau\}\ \text{를 반복}
profile
2025화이팅!

0개의 댓글