본문 바로가기
DeepLearning

[DeepLearning] DeepFake(deepfacelab) 구글 Colab에서 개발하기

by daewooki 2021. 8. 1.
반응형

 

딥페이크에서 아주 유명한 이미지다.  로버트 다우니 주니어의 연설 영상에 일론 머스크의 얼굴을 입히는 과정을 담은 이미지이다. 기회가 생겨 Deepfake를 시도해보기로 했다. 


구글 코랩을 이용해서 딥페이크를 진행했다.

용량이 부족하고 램이나 T4, P100등 좋은 GPU를 이용하기 위해서 코랩 프로를 구독한 상태로 진행했다.

 

우선 DeepFaceLab에서 제공하는 deepfake 코드를 받아서 구글 드라이브에 업로드 해주었고, 해당 폴더를 workspace로 사용했다.

 

코드나 논문은 아래 링크에서 받을 수 있다.

 

DeepFaceLab github

 

GitHub - iperov/DeepFaceLab: DeepFaceLab is the leading software for creating deepfakes.

DeepFaceLab is the leading software for creating deepfakes. - GitHub - iperov/DeepFaceLab: DeepFaceLab is the leading software for creating deepfakes.

github.com

논문 : https://arxiv.org/abs/2005.05535

 

DeepFaceLab: Integrated, flexible and extensible face-swapping framework

Deepfake defense not only requires the research of detection but also requires the efforts of generation methods. However, current deepfake methods suffer the effects of obscure workflow and poor performance. To solve this problem, we present DeepFaceLab,

arxiv.org

 

 

우선 딥페이크를 하기 위한 영상을 구해야했는데, 유튜브 영상을 다운받아서 사용했다. 

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)

 

MXF-MP4 포맷 변환(MXF to MP4 using ffmpeg shell script)

환경 : MAC OS DeepFake 연구를 진행하면서 MXF 포맷의 고화질 영상 파일을 MP4로 바꾸기 위해서 작성한 코드이다. 맥에서 스크립트를 작성하고 해당 영상이 있는 곳에서 실행시켜주면 된다. -- ffmpeg 에

wookidocs.tistory.com

 

 

우선 구글 코랩에서 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하고, 학습을 위한 데이터 준비이다. 

반응형

댓글