딥페이크에서 아주 유명한 이미지다. 로버트 다우니 주니어의 연설 영상에 일론 머스크의 얼굴을 입히는 과정을 담은 이미지이다. 기회가 생겨 Deepfake를 시도해보기로 했다.
구글 코랩을 이용해서 딥페이크를 진행했다.
용량이 부족하고 램이나 T4, P100등 좋은 GPU를 이용하기 위해서 코랩 프로를 구독한 상태로 진행했다.
우선 DeepFaceLab에서 제공하는 deepfake 코드를 받아서 구글 드라이브에 업로드 해주었고, 해당 폴더를 workspace로 사용했다.
코드나 논문은 아래 링크에서 받을 수 있다.
논문 : https://arxiv.org/abs/2005.05535
우선 딥페이크를 하기 위한 영상을 구해야했는데, 유튜브 영상을 다운받아서 사용했다.
A영상에 나오는 인물을 B영상에 나올 수 있도록 하는 것이 목표였다.
따라서 소스 영상, 타겟 영상이 필요하다.
소스 영상이 A영상, 타겟 영상이 B영상이다. (처음엔 A영상에 나오는 인물을 B영상에 나오도록 할 것이라 A영상이 타겟영상인가 헷갈렸다.)
나는 연예인 김세정님 얼굴을 김보라님 얼굴로 바꿔보기로 했다.
소스 영상 출처 : https://www.youtube.com/watch?v=y1UohU1RuRI
타겟 영상 출처 : https://www.youtube.com/watch?v=122a--g6GCI
영상은 고화질인 MXF 파일을 얻어서 사용했다. 따라서 MXF 파일을 MP4로 변환하는 작업이 필요했다.
MXF 파일을 MP4로 바꾸는 작업은 bash를 이용했다. 아래 글을 참고하면 된다.
[Linux] - MXF-MP4 포맷 변환(MXF to MP4 using ffmpeg shell script)
우선 구글 코랩에서 GPU가 제대로 되는지 체크했다.
구글 코랩 프로를 구독해서 무료 버전에서는 제공되지 않는 Tesla-P100을 할당받았다.
이제 DeepFaceLab을 install 하거나 update 해야한다.
Install or update DeepFaceLab from Github 코드
Mode = "install" #@param ["install", "update"]
Download_FFHQ = True #@param {type:"boolean"}
pretrain_link = "https://github.com/chervonij/DFL-Colab/releases/download/"
pretrain_link = pretrain_link+"pretrain_FFHQ/pretrain_FFHQ.zip" if Download_FFHQ else pretrain_link+"pretrain-CelebA/pretrain_CelebA.zip"
from pathlib import Path
if (Mode == "install"):
!git clone https://github.com/iperov/DeepFaceLab.git
# fix linux warning
# /usr/lib/python3.6/multiprocessing/semaphore_tracker.py:143: UserWarning: semaphore_tracker: There appear to be 1 leaked semaphores to clean up at shutdown
fin = open("/usr/lib/python3.6/multiprocessing/semaphore_tracker.py", "rt")
data = fin.read()
data = data.replace('if cache:', 'if False:')
fin.close()
fin = open("/usr/lib/python3.6/multiprocessing/semaphore_tracker.py", "wt")
fin.write(data)
fin.close()
else:
%cd /content/DeepFaceLab
!git pull
!pip uninstall -y tensorflow
!pip install -r /content/DeepFaceLab/requirements-colab.txt
!pip install --upgrade scikit-image
!apt-get install cuda-10-0
if not Path("/content/pretrain").exists():
print("Downloading Pretrain faceset ... ")
!wget -q --no-check-certificate -r $pretrain_link -O /content/pretrain_faceset.zip
!mkdir /content/pretrain
!unzip -q /content/pretrain_faceset.zip -d /content/pretrain/
!rm /content/pretrain_faceset.zip
if not Path("/content/pretrain_Q96").exists():
print("Downloading Q96 pretrained model ...")
!wget -q --no-check-certificate -r 'https://github.com/chervonij/DFL-Colab/releases/download/Q96_model_pretrained/Q96_model_pretrained.zip' -O /content/pretrain_Q96.zip
!mkdir /content/pretrain_Q96
!unzip -q /content/pretrain_Q96.zip -d /content/pretrain_Q96/
!rm /content/pretrain_Q96.zip
if not Path("/content/workspace").exists():
!mkdir /content/workspace; mkdir /content/workspace/data_src; mkdir /content/workspace/data_src/aligned; mkdir /content/workspace/data_dst; mkdir /content/workspace/data_dst/aligned; mkdir /content/workspace/model
import IPython
from google.colab import output
display(IPython.display.Javascript('''
function ClickConnect(){
btn = document.querySelector("colab-connect-button")
if (btn != null){
console.log("Click colab-connect-button");
btn.click()
}
btn = document.getElementById('ok')
if (btn != null){
console.log("Click reconnect");
btn.click()
}
}
setInterval(ClickConnect,60000)
'''))
print("\nDone!")
Mode는 Install, Update 두 가지가 있고, FFHQ 다운로드 옵션이 있다.
FFHQ 다운로드 옵션은 CelebA 대신 고품질 FFHQ 데이터 세트를 다운로드 한다는 것인데, 사전 훈련을 수행하는 경우 이 옵션을 사용하는 것이 좋다.
FFHQ는 더 많은 메모리를 차지하므로 CelebA보다 다운로드 시간이 더 오래 걸린다.
해당 코드를 실행하고 나면 아래와 같이 결과가 나온다. (위에 output은 생략됨)
성공적으로 github에서 deepfacelab을 clone 했고, 필요한 패키지들도 함께 설치가 된다.
# 다음 내용은 구글 드라이브에 있는 workspace를 import하고, 학습을 위한 데이터 준비이다.
'DeepLearning' 카테고리의 다른 글
[PyTorch] torch.load 시, 학습 환경과 달라 모델 로딩이 되지 않는 에러 (map_location으로 해결) (0) | 2022.06.24 |
---|---|
[캐글 Kaggle] 캐글 에러 - Unable to find the required key value error 해결 방법 (0) | 2021.08.17 |
Computer Vision Summary | 컴퓨터 비전 총정리 -4 (0) | 2021.07.12 |
Computer Vision Summary | 컴퓨터 비전 총정리 -3 (0) | 2021.07.12 |
Deep Learning | GAN (Generative Adversarial Network) (0) | 2021.07.05 |
댓글