DeepLearning/Computer Vision

[Object Detection] RetinaFace(2019) 리뷰

yooj_lee 2021. 12. 2. 23:24
300x250

Object Detection의 subtask인 Face Detection 연구 중 하나로, 2019년 발표된 논문이다. extra supervision (label을 손수 추가)과 self supervision을 joint하게 학습시킴(multi-task learning)으로써 WIDER FACE hard 데이터셋 기준 기존 SOTA보다 1.1% 정도의 face box AP를 끌어올렸다.

RetinaFace

  • WIDER FACE hard test set → 91.4%로 기존 SOTA보다 1.1% 앞섬.

  • IJB-C test set, RetinaFace을 사용하면 face verification의 sota인 ArcFace도 성능 향상이 이루어짐

  • Backbone을 가볍게 한다면 싱글 코어 CPU 환경에서도 실시간으로 수행이 가능함.

  • How? joint extra-supervised and self-supervised multi-task learning→ 이걸 병렬적으로 구성해서 multi-task한다는 건 output을 아예 여러 개 내뱉는다는 거. (아래처럼)

    1. existing branch

      1. 기존의 일반적인 detection network (classification과 box regression의 multi-task learning 구조)
    2. extra-supervision branch

      1. retinanet에서는 5개의 face landmark annotation을 추가해줌. (extra label이 추가 → extra-supervision)
      2. 이를 regression하는 branch가 extra-supervision branch
    3. self-supervision (self-supervised mesh decoder branch)

      1. pixel-wise 3D shape face information을 예측, 해당 브랜치는 supervised branch와 병렬적으로 구성
      • a.k.a. dense regression branch (pixel-wise localization)
        • colored face mesh를 하나의 그래프 $\mathcal{G} = (\mathcal{V},\mathcal{E})$ 로 정의함.
        • 이때 $\mathcal{V}$는 joint shape and texture information을 담는 face vertices의 집합임 (n*6 차원의 실수집합에 속함)
        • a joint shape and texture decoder
        • Edge $\mathcal{E}$는 vertices 간 연결여부를 나타내는 $n \times n$ sparse 인접행렬로 구현됨.
        • graph convolution $g_\theta$ 의 수식은 다음과 같이 정의됨.
          • $L = D-\mathcal{E}$ ($L$ : graph Laplacian)
            • 이때 $D$는 그래프 차수로, $n\times n$ 의 대각행렬
          • recursive Chebyshev polynomial truncated at order K의 형태로 formulated
          • $\theta$: K-dim의 체비셰프 계수 벡터
          • $T_k(\tilde{L})$: scaled Laplacian $\tilde{L}$에서 계산되는 k차 체비셰프 다항식 (nxn)
          • 위의 식을 풀면, $[\bar{x}_0, ..., \bar{x}_{K-1}]\theta$ 의 형태로 reduce됨. 이때, $\bar{x}_k = T_k(\tilde{L})x$ 임.
          • 점화식 형태($\bar{x}_k = 2\tilde{L}\bar{x}_{k-1} - \bar{x}_{k-2}$, $\bar{x}_0 = x\ and\ \bar{x}_1 = \tilde{L}_x$)로 계산되고, 위의 filtering 연산은 굉장히 효율적. (due to K sparse matrix-vector multiplications and one dense matrix-vector multiplication)
          • cf.) graph convolution
            • 2D convolution operation → kernel-weighted neighbor sum within the Euclidean grid receptive field
            • 둘 다 kernel-weighted neighbor sum이라는 개념은 같음.
            • 2d conv의 경우에는 kernel size로 neighbor를 정의하지만, graph conv에서는 두 정점을 잇는 edge의 최소 개수를 count하는 형식으로 neighbor distance를 정의함.
              • 이 경우에는 parameter 개수가 $K\times Channel_{in} \times Channel_{out}$
        • $$y = g_\theta(L)x = \sum_{k=0}^{K-1}\theta_kT_k(\tilde{L})x$$
        • Differentiable Renderer
          • mesh decoder는 3D mesh를 predict해줌. 하지만 우리의 target은 2D 이미지 상에 존재. 따라서 3D to 2D로 projection해줘야함.
          • colored mesh $\mathcal{D}_{P_{ST}}$ to be projected onto a 2D image plane with camera parameters $P_{cam} = [x_c, y_c, z_c, x'_c, y'_c, z'_c, f_c]$ (i.e. camera location, camera pose and focal length) and illumination parameters $P_{ill} = [x_l, y_l, z_l, r_l, g_l, b_l, r_a, g_a, b_a]$ (i.e. location of point light source, color values and color of ambient lighting)
          • $P_{ST}$ → shape and texture parameters (128차원의 실수집합 내에 존재)
        • Dense Regression Loss (pixel-wise)
          • $W$, $H$ : the width and height of the anchor crop $I^*_{i,j}$, respectively
          • $$L_{pixel} = \frac{1}{W*H}\sum_{i}^{W}\sum_{j}^{H}\Vert\mathcal{R}(\mathcal{D}_{P_{ST}},P_{cam},P_{ill})_{i,j} - I^*_{i,j}\Vert_1$$
      • mesh decoder로 graph convolution (based on fast localized spectral filtering) 을 이용.
  • output = (bbox_out, cls_out, landmark_out, mesh_out)

  • → 총 3가지의 branch가 있음. (in parallel)

  • Context Module

    • 마치 FCN에서 decoding할 때 (upsampling), skip connection 더해준 거처럼 각 feature pyramid마다 넣어주기..
  • ablation study

    • dense regression은 추가하면 오히려 hard의 경우는 boxAP가 하락함.
    • 반면, landmark branch의 추가는 모든 경우에 다 성능 향상을 가져옴
    • dense regression과 landmark를 두 개 다 추가해주면, 가장 성능이 좋았음. (landmark detection이 dense regression task를 도와줌을 알 수 있음)
  • Inference Efficiency

    • lightweight version을 사용해서 inference 속도를 높이겠다.
    • lightweight, 즉 MobileNet-0.25 backbone을 사용하는 경우 AP 78.2% on WIDER FACE hard set
    • light-weight의 경우에는, 7x7 conv (stride of 4)를 사용해서 이미지를 빠르게 축소시켜줌. deformable layers는 없애줌.
    • 처음 두 개 conv layer는 높은 accuracy를 달성하기 위해 ImageNet에서 사전학습된 weight으로 고정해줌.
    • inference time 비교
    • VGA(640X480)의 경우, single-thread cpu에서 60fps, ARM에서는 16fps의 속도를 보여줌. (모바일에서도 어느 정도 빠른 구동이 가능하다)

notion에 적어뒀던 걸 옮기느라 가독성이 조금 떨어지는 듯하다. ㅠㅠ

300x250