C3AE(Compact yet efficient Cascade Context-based Age Estimation)은 이름에서도 볼 수 있듯, 1) compact 하면서(즉 가볍고 효율적이면서) 2) regression, label distribution learning, classification의 장점을 모두 살리기 위한 cascade 구조를 통해 나이를 예측하고, 3) 성능을 극대화하기 위해 context를 활용하는 모델이다. 세 가지 특성에 대해 자세히 설명함으로써 모델을 설명할 수 있을 것 같다.
Compact
페이퍼에서는 모바일에서도 굴릴 수 있는 compact한 모델에 집중하는데, 이러한 small-image, small-model의 상황에서는 MobileNet 등에서 채용한 depth-wise separable convolution의 이점이 없다고 한다. 즉 이미지가 작은 상황에서는 depth-wise separable 연산을 하느라 채널을 늘리는 것보다 오히려 standard convolution 연산을 사용하는 것이 더 효율적이라는 것이다. 그래서 이 페이퍼에서는 standard conv layer와 BN, pooling layer들로 이루어진 비교적 평범한(?) backbone 구조를 제안한다.
Cascade
우선 페이퍼에서는 나이의 label distribution을 표현하고자 하는데, 통상적인 상황에서는 label distribution을 구하기가 쉽지 않음을 감안하여 조금 신박한 방식으로 이를 표현해낸다. 즉 나이를 일정한 구간(interval)으로 나누고, 어떤 나이가 주어졌을 때 그 나이를 인접한 두 구간의 끝점에 대한 거리의 비율로 표현해낸다. 예컨대 나이를 0~10~20~30~40~...~70과 같이 나눈다고 하자. 그러면 34세는 과 같이 표현하게 된다.
그러면 이제 backbone을 통해 추출된 feature를 FC - softmax layer를 통해 label distribution을 추론해내고, 다시 추론된 distribution을 FC layer를 통해 최종적인 나이의 예측값을 추론해낸다. 이 구조 때문에 cascade라는 이름을 붙인 것 같다. 근데 distribution을 구했으면 그것을 통해서 바로 나이를 추론할 수 있을 것 같은데, 왜때문에 또 다시 linear layer를 붙여 나이를 추론하도록 한 걸까? Representation으로부터 나이를 뽑아내기가 애매해서 그런 걸까?
어쨌거나 학습은 label distribution estimation 브랜치에 대해 KL divergence로 구한 loss와 최종 age estimation 브랜치에 대해 L1(MAE) loss를 구한 것을 합하여 loss로 삼아 이루어진다.
Context
또 성능을 극대화하기 위해, C3AE에서는 얼굴 이미지를 각각 서로 다른 3개의 크기로 잘라 shared backbone에 넣고, 이 세 결과를 concatenate함으로써 최종 feature를 만들어낸다.
이로써 다른 compact model들(MobileNet, ShuffleNet 등) 중에서 SOTA를 달성한, 그리고 다른 deep model들과 견주는(?) 성능을 내는 C3AE 모델이 완성된다. 나는 굳이 가벼운 모델에 집착할 필요가 없으나, cascade 구조나 context method를 한 번 실험할 가치는 있을 듯하다.
E.O.D.