Few-shot Knowledge Transfer for Fine-grained Cartoon Face Generation
- Submission : 2020
- Paper Link : arxiv.org/abs/2007.13332
Keywords
- Face2Cartooon
- Conditional GAN
- Unpaired image to image translation
- Few shot learning
Contribution
- 데이터가 많은 group에서 얻은 knowledge를 few shot group으로의 image translation에 transfer하는 방법을 소개했다.
Proposed methods
- 기존의 U-GAT-IT같은 cartoon generation 모델을 보면, 이미지의 group을 구분하지 않아서 모든 input이 dominate한 group으로 translate되는 단점이 있었다.
- 가령 face2anime의 경우 anime 데이터셋에는 어린 여성 캐릭터가 많은데, 이러면 노인 사진을 넣었을 때 어린 여자로 바꿔버린다.
- 그래서 group을 나누어 학습하는게 중요한데, 문제는 anime 데이터셋에 노인 캐릭터가 별로 없다는 것이다.
- 이 논문은 이런 경우에, 데이터가 풍부한 어린 여성으로의 translation을 학습한 뒤 그 knowledge를 다른 data sparse한 group에 transfer 해냈다.
우선 데이터가 많은 group간의 translation을 먼저 학습한다. 여기서 architecture는 unpaired 모델이면 다 되는데, 이 논문이 영향을 많이 받은 오픈소스 프로젝트에서 U-GAT-IT기반 모델을 사용해서 거기서 가져왔다고 한다.
Generator를 encoder와 decoder로 나눠서 생각할 때, encoder의 top layer와 decoder의 low layer는 domain specific하지 않고 공유될 수 있다.
- Encoder를 깊게 타고 들어갈수록 원래 domain의 style 정보가 사라지고, 상단의 layer들은 일반적인 feature를 추출하는 역할을 할 것이다.
- Decoder를 깊게 타고 들어갈수록 target domain으로의 구체적인 style이 입혀지고, decoder의 아랫단은 encoder의 상단에서 온 일반적인 feature를 다루는 구간이 될 것이다.
그런데 transfer learning을 할 때, CNN의 아랫단은 general feature extractor라서 공유할 수 있는 것과 조금 상반되는 개념인 것 같다. 오히려 generator의 encoder의 아랫단은 edge나 색반전 등 general한 low level feature를 잡아내므로 공유할 수 있을 것 같은데.
또한, 완전히 group-shared parameter를 얼리고 학습을 시키면 adaptation이 부족해서 성능이 떨어진다고 한다. 따라서 selective backpropagation을 사용하는데, 이 논문에서 설명한 것으로만 이해하자면 few shot group의 input에 대해서는 group-shared parameter를 update 하지 않고, 데이터가 많은 group의 input일 때만 update를 한다는 것이다.
위 두 개념을 잘 이해하려면 이 논문이 참고한 (arxiv.org/abs/1806.06029)를 읽어보자.
Translation을 수식으로 나타내면 위와 같다.
논문에서는 데이터가 많은 group을 0번으로 두었다. 위를 보면 shared encoder/decoder 위에 bar가 붙는데, freezing 된다는 것을 의미한다.
Objective Function
Least square를 사용한다.
여기까지는 U-GAT-IT과 같다.
이건 위에서 얘기한 오픈소스 프로젝트에서 가져온 loss라고 한다. F는 pre-trained face recognition 모델이다. 그 모델에 돌려서 feature를 뽑고 cosine distance를 잰다.
Cosine distance를 이해하려면 우선 cosine similarity를 알아야 하는데, 위와 같이 두 벡터간의 cosine theta 값이다. 1이면 두 벡터의 각이 0인 것이고, 0이면 두 벡터의 각이 90도인 것이다. Cosine distance는 1 - cosine similarity이다. 즉 이 loss term은 face recognizer의 feature space에서 generated image와 source image의 각이 0도가 되도록(유사하도록) 한다. 이 논문에서 사용된 cartoon 데이터셋이 사람 얼굴과 큰 차이가 없어서 이런 loss를 사용했다. 가령, 심슨과 같이 사람 형태가 거의 남아있지 않는 cartoon face를 생성하는 모델이라면 이 loss를 사용하지 않는 것이 좋을 것 같다.
위와 같은 group classification loss도 추가되었다. Generator가 group label을 고려하지 않고 생성하는 것을 막을 수 있을 것이다.
합쳐서 이런 objective를 가지게 된다.
Results
- Basic model은 group 0에 해당하는 여성 얼굴과 여성 캐릭터간의 mapping만 학습했다. 우리는 여기서 branch를 만들어서 다른 group간의 mapping도 학습하길 원하는 것이다. 그래서 보면 남자 얼굴도 여자처럼 바꾼다.
- Baseline 1은 group을 신경쓰지 않고 그냥 unpaired로 돌린 것이다. 데이터셋에는 여자 캐릭터가 200개이고 나머지 그룹의 캐릭터는 15개 이하이다. 그래서 많은 group쪽으로 생성 결과가 쏠린다. 남자 캐릭터의 눈을 보면 속눈썹이 길다.
- Baseline 2는 fine tuning시에 group 1,2,3을 구분하지 않고 합쳤다고 한다. 결과는 나쁘지 않지만, 모델이 pre-train 된 여자와 여자 캐릭터간의 mapping을 까먹은 모습이다. 여기서 shared parameter를 freeze했는지 궁금하다. Freeze를 풀었을 때 어떻게 망가지는지 아래에서 실험하기 때문에, 여기서는 아마 freeze를 한 채로 실험을 했을 거라고 생각한다. 저자에게 문의해보니 freeze 하지 않았다고 한다. Freeze 하고 여자 캐릭터의 이미지를 간헐적으로 보여주면 mapping을 까먹는 문제를 해결할 수 있지 않을까?
Baseline 3에서는 baseline 2와 달리 group label을 구분지었다. 하지만 각 group을 동시에 fine tuning하지 않고 하나의 group에 대해서만 fine tuning 했다. 결과적으로 overfitting이 일어났다. 그 말은 각 group을 동시에 training하면 overfitting이 안난다는 것인데, 각 group이 공동으로 update하는 것은 discriminator밖에 없으므로 여기서는 discriminator overfitting이 일어났다는 의미일 것이다.
이 실험들로 알 수 있는것은,
1. 통째로 학습시키는 것은 안된다(baseline 1).
2. Group별로 branch가 필요하다(baseline 2).
3. 각 group을 동시에 훈련해서 discriminator overfitting을 막자(baseline 3).
이렇게 정리할 수 있겠다.
Selective backpropagation을 사용하지 않고 few shot group에 대해서도 shared parameter들을 update 한 결과이다. 이렇게 하면 distribution을 해친다고 주장한다. Distribution을 해친다는게 정확히 어떤 의미인지 모르겠다. 하지만 transfer learning 시에 데이터가 적음에도 freezing을 안걸고 하면 pre trained model을 망친다는 것은 당연해 보인다.