본문 바로가기
프로젝트

[프로젝트] 내가 이모티콘이 된다면

by rahites 2023. 2. 4.

# 본 프로젝트는 '2022 5th D&A BigData Conference'에서 발표한 프로젝트임을 명시합니다.

( 2022.07.02 ~ 2022.11.25 )

 

주제

내가 이모티콘이 된다면 (StyleGAN을 이용한 이모티콘 생성)

 

팀원

신예주, 윤경서, 이경욱, 조문주

 

배경

현재 사용하는 이모티콘은 작가들이 이미 만들어 놓은 이모티콘으로 나의 본질적인 감정을 표현하는 데 있어 한계가 존재한다. 따라서 나의 표정을 담은, 내가 원하는 캐릭터의 모습의 이모티콘을 만들어 이모티콘을 사용하는 사람의 재미와 흥미를 더 돋우어 보자!!

 

방법

1. 이모티콘 이미지 생성

  • 데이터 수집 및 가공 : '짱구는 못말려'에 나오는 등장인물의 이미지 수집 및 데이터 셋에 알맞은 형태로 가공
  • 실제 이미지 그림체 변환 : '짱구는 못말려' 그림체로 학습한 모델을 이용하여 실제 사람의 이미지 변환

2. 감정 텍스트 생성

  • 감정분류 : 실제 사람의 얼굴 표정을 보고 7가지의 감정으로 분류
  • 감정에 따른 텍스트 생성 : 감정분류를 통해 나온 감정에 어울리는 짱구 말투의 짧은 텍스트 생성

3. 이모티콘 이미지에 감정 텍스트 삽입

4. 결론

 

https://github.com/Rahites/IF_I_AM_A_EMOTICON

 

GitHub - Rahites/IF_I_AM_A_EMOTICON

Contribute to Rahites/IF_I_AM_A_EMOTICON development by creating an account on GitHub.

github.com


1. 이모티콘 이미지 생성

1.1. 데이터 수집 및 가공

- 크롤링 : 네이버, 구글 등의 웹사이트 크롤링을 통해 '짱구는 못말려'에 등장하는 캐릭터들의 이미지 데이터 수집

https://github.com/YoongiKim/AutoCrawler

 

GitHub - YoongiKim/AutoCrawler: Google, Naver multiprocess image web crawler (Selenium)

Google, Naver multiprocess image web crawler (Selenium) - GitHub - YoongiKim/AutoCrawler: Google, Naver multiprocess image web crawler (Selenium)

github.com

- 데이터 정제 : 화질이 괜찮은지, 사진에 얼굴이 50% 이상 차지하는지, 얼굴이 다른 물체에 의해 가려지지는 않았는지 등의 평가기준을 가지고 휴리스틱한 방법으로 데이터를 정제 -> 2096개의 학습 데이터를 구축

- LMDB 변환 : 사용할 모델인 StyleGAN2-ADA가 요구하는 LMDB 형식으로 데이터를 변환 (LMDB형식은 메모리 효율이 좋아 대용량 데이터를 load 할 때 용이)

 

1.2. 실제 이미지 그림체 변환

https://github.com/happy-jihye/Cartoon-StyleGAN

 

GitHub - happy-jihye/Cartoon-StyleGAN: Fine-tuning StyleGAN2 for Cartoon Face Generation

Fine-tuning StyleGAN2 for Cartoon Face Generation. Contribute to happy-jihye/Cartoon-StyleGAN development by creating an account on GitHub.

github.com

- Google Colab Pro Plus를 이용하여 StyleGAN2-ADA 모델 Fine Tuning (ffhq-256 Dataset으로 학습된 pretrained 모델 사용)

학습 예시

 

2. 감정 텍스트 생성

2.1. 감정분류

- 분류 모델을 활용해 감정을 분류하기에는 시간, 컴퓨팅 파워 이슈가 있어 pretrained 된 패키지를 사용

- FER(Facial Expression Recognition) : 사람의 표정을 인식하여 감정에 따라 7가지(화남, 혐오, 두려움, 행복, 슬픔, 놀람, 보통)로 분류해 주는 패키지

https://pypi.org/project/fer-pytorch/

 

fer-pytorch

Facial Expression Recognition package implemented in Pytorch.

pypi.org

FER 결과

 

2.2. 감정에 따른 텍스트 생성

- 언어 생성 모델 중 한국어에 최적화된 모델을 탐색하여 SKT-AI에서 제공하는 KoGPT2 모델을 선택

- KoGPT2 : 한국어 성능을 극복하기 위해 40GB 이상의 한국어 데이터로 Fine-Tuning한 한국어 언어 모델

https://github.com/SKT-AI/KoGPT2

 

GitHub - SKT-AI/KoGPT2: Korean GPT-2 pretrained cased (KoGPT2)

Korean GPT-2 pretrained cased (KoGPT2). Contribute to SKT-AI/KoGPT2 development by creating an account on GitHub.

github.com

- 챗봇 데이터로 pretrained된 모델을 사용하여 자체 제작한 '짱구는 못말려' 말투의 데이터로 Fine Tuning 진행 (감정분석을 거쳐 분류된 감정이 입력되었을 때 해당 감정과 관련된 문장을 생성)

3. 이모티콘 이미지에 감정 텍스트 삽입

- 텍스트를 포함한 이모티콘 : StyleGAN2-ADA 모델을 통해 생성된 이모티콘에 감정에 따라 생성된 텍스트 합성(OpenCV)

4. 결론

- 팀원 이미지

- 외국인(ffhq data) 이미지

ffhq 데이터 셋으로 pretrained 된 모델을 사용했기 때문에 서양인 이미지로만 학습된 모델로 결과를 찍어낼 수밖에 없었습니다. 따라서 동양인 데이터 셋으로 모델을 Fine Tuning 한다면 더 좋은 성능을 기대할 수 있습니다.

- '짱구는 못말려'에 나오는 캐릭터들이 일반적으로 단조로운 표정을 가지고 있어, 더 다양한 표정을 가진 스타일의 그림체로 학습을 진행하면 좋을 것입니다.

- Colab Pro Plus까지 사용하며 많은 돈을 컴퓨팅 파워에 투자했음에도 컴퓨팅 파워가 부족했습니다. 더 좋은 성능의 환경에서 더 많은 학습을 반복한다면 더욱 향상된 결과가 나올 것입니다. 

 


후기

여름방학부터 시작해서 Conference 발표를 진행할 때까지, 지금까지 했던 프로젝트 중 가장 긴 기간을 투자했고 처음으로 진행했던 딥러닝 프로젝트였습니다. 처음 시작할 때에는 GAN, GPT 등 알지 못하는 모델들이 많아 해당 논문이나 모델의 구조를 공부하는 데에 많은 시간을 들였습니다. 프로젝트를 진행하며 가장 어려웠던 부분은 StyleGAN으로 이미지를 학습시키는 부분이었는데 기본적인 리눅스 명령어나 딥러닝 모델이 돌아가는 구조 등을 알지 못한 채 코드를 실행하려 했기 때문인 것 같습니다.

 

팀원 분들과 이번 프로젝트를 준비하며 주제도 여러 번 변경하였고, 데이터 구축이나 모델 학습에 있어 어려움을 많이 겪었는데 프로젝트 진행이 막힐 때마다 훌륭하신 팀원분들이 방향을 잘 잡고 진행을 해주셔서 발표까지 잘 마무리할 수 있었다고 생각합니다. 데이터 수집부터 모델 학습(Fine Tuning이긴 하지만ㅎㅎ), 결과 도출까지 딥러닝 프로젝트의 모든 파이프라인을 겪어 볼 수 있는 좋은 경험이었고 다음에 또 컨퍼런스를 진행하게 된다면 이번보다 더 흥미롭고, 획기적인 프로젝트로 발표를 진행하고 싶습니다.

 

발표자료

https://youtu.be/tGV1ynBkhVE?si=Z21_PufzXy0kSjXb

댓글