웹툰을 기반으로한 드라마 제작이 많아지면서 온라인 상에서 웹툰 캐릭터 가상 캐스팅의 콘텐츠가 인기를 끌고 있다. 이를 실제 웹툰 캐릭터의 '이미지'만을 기반으로 하여 배우 가상캐스팅을 할 수 있는 프로젝트를 수행하였다.
- UGOTIT-pytorch : U-GAT-IT 모델을 학습 및 모델 생성
- UI2I_via_StyleGAN2 : StyleGAN2 모델을 학습 및 모델 생성
- baseline_exp : InceptionResNetV1 모델 transfer-learning
- demo : 데모 페이지 실행
- embedding : 사람 및 웹툰 얼굴 embedding 생성 및 시각화
- webtoon_det : 웹툰 얼굴 alignment 및 crop
- Python 3.7.11
pip install -r requirements.txt
anime_face_detector==0.0.6
beautifulsoup4==4.10.0
facenet_pytorch==2.5.2
fastapi==0.70.1
ipython==7.30.1
lmdb==1.2.1
numpy==1.21.4
opencv_python==4.5.4.60
Pillow==8.4.0
requests==2.26.0
scikit_image==0.19.1
scipy==1.7.3
skimage==0.0
streamlit==1.3.0
torch==1.10.0
torchsummary==1.5.1
torchvision==0.11.1
tqdm==4.62.3
uvicorn==0.16.0
wandb==0.12.9
-
Face Detector (RetinaFace)
Step 1) 웹툰 이미지의 face crop 얻기
cd webtoon_det python align_crop.py --image_name IMAGE_NAME --model MODEL --face_thres FACE_THRES --landmark_thres LANDMARK_THRES
Step 2) 얼굴 이미지의 face crop과 embedding 얻기
cd ../embedding python get_face_embedding.py --detect_size DETECT_SIZE --data_dir DATA_DIR --save_dir SAVE_DIR --img_info_dir IMAGE_INFO_DIR --save_crops SAVE_CROPS --crop_save_dir CROP_SAVE_DIR
-
Face Generator (UI2I)
UI2I 학습에 앞서 align과 crop이 완료된 이미지로 구성이 된 웹툰 데이터셋과 연예인 데이터셋을 준비
Step 1) 각 도메인 데이터셋을 LMDB 데이터 format으로 변환
cd UI2I_via_StyleGAN2 python prepare_data.py --out WEBTOON_LMDB_PATH --n_worker N_WORKER --size SIZE1,SIZE2,SIZE3,... WEBTOON_DATASET_PATH python prepare_data.py --out PHOTO_LMDB_PATH --n_worker N_WORKER --size SIZE1,SIZE2,SIZE3,... PHOTO_DATASET_PATH
Step 2) 각 Domain 의 Generator Fine-Tuning
도메인별로 저장된 LMDB 데이터셋과 pre-trained weight를 이용하여 fine-tuning을 진행합니다. 이 과정에서 pre-trained weight 은 이곳을 사용했습니다.
python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train.py --batch BATCH_SIZE WEBTOON_LMDB_PATH --ckpt your_base_model_path python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train.py --batch BATCH_SIZE PHOTO_LMDB_PATH --ckpt your_base_model_path
Step 3) Model weight를 이용하여 latent Code를 얻기 위해 사용되는 Factor계산
python3 closed_form_factorization.py --ckpt webtoon_stylegan_model_path --out webtoon_stylegan_model_factor_path
Step 1) 웹툰 이미지를 넣으면 실사화 한 후에, 임베딩 벡터를 이용하여 얼굴 유사도 계산 k개의 가장 까까운 이미지 출력
cd demo
python inference.py --toon_ckpt webtoon_stylegan_model_path
--real_ckpt photo_stylegan_model_path
--toon_fact webtoon_stylegan_model_factor_path
--webtoon_image_path webtoon_Image_Path
--max_k k
-o output
- 네이버 웹툰 크롤링 이미지
- 배우 크롤링 이미지
- 인스타 크롤링 이미지
- 실행 결과
웹툰 이미지 | 실사화 이미지 |
---|---|
- demo 영상 https://youtu.be/_sUZ2_L7Owg
- 조원 : 장동주, 최한준, 이유진, 차미경, 서동진, 오주영
장동주 | 최한준 | 이유진 | 차미경 | 서동진 | 오주영 |
---|---|---|---|---|---|
- Image-translation
- U-GAT-IT : https://arxiv.org/abs/1907.10830
- UI2I via Pre-trained StyleGAN2 Network : https://arxiv.org/pdf/2010.05713
- Face Detection & Embedding
- FaceNet: https://arxiv.org/abs/1503.03832
- MTCNN: https://arxiv.org/abs/1604.02878
- RetinaFace: https://arxiv.org/abs/1905.00641
- Anime Face Detector : https://github.com/hysts/anime-face-detector
- Data
- NaverWebtoonData 크롤링 (https://github.com/bryandlee/naver-webtoon-faces)
- VGGFace2 : https://github.com/ox-vgg/vgg_face2
- iCartoonFace Dataset : [https://github.com/luxiangju-PersonAI/iCartoonFace](