Skip to content

Latest commit

 

History

History
111 lines (109 loc) · 14.2 KB

README.md

File metadata and controls

111 lines (109 loc) · 14.2 KB

DFL(DeepFaceLab)실행 환경 설정

DFL은 중국에서 개발 및 배포된 소스로, 소스 영상에서 얼굴을 추출하여 타겟 영상에 합성, 손쉽게 Deep fake를 만들 수 있음
사진/영상 포함 포스팅 : https://wonder-j.tistory.com/14?category=778607

출처 : DeepFaceLab

DFL 가상환경 만들기

conda create -y -n deepfacelab python=3.6.6 cudatoolkit=9.0 cudnn=7.3.1
conda activate deepfacelab

clone DFL

git clone https://github.com/dream80/DeepFaceLab_Linux.git

Requirement 설치

cd DeepFaceLab_Linux
python -m pip install -r requirements-cuda.txt

ffmpeg 설치(conda)

conda install ffmpeg==4.0.2
conda insatll ffmpeg

Tensor version 맞추기(CUDA 10.0 기준)

conda install tensorflow-gpu==1.13.1 # 이때 cudatoolkit, cudnn 등 설치 됨
conda install tensorflow==1.13.1
conda install tensorboard==1.13.1

workspace에 영상 넣기

영상은 자유롭게 넣되, 아래와 같이 naming

$ scp -P 16022 ./data_src.mp4 {개인서버 개정}@{서버주소}:{DeepFaceLab 경로}/DeepFaceLab_Linux/workspace/
$ scp -P 16022 ./data_dst.mp4 {개인서버 개정}@{서버주소}:{DeepFaceLab 경로}/DeepFaceLab_Linux/workspace/

본 예시에서는 수지 광고 영상에 아이유의 얼굴을 합성할 것임

이 아이유를요 수지로 합성

DFL 실행

1. env 실행

  • DeepFaceLab_Linux/script/env.sh
export DFL_CUDA="CUDA_VISIBLE_DEVICES=1"
export DFL_PYTHON="python3.6"
export DFL_WORKSPACE="../workspace"

if [ ! -d "$DFL_WORKSPACE" ]; then mkdir "$DFL_WORKSPACE" mkdir "$DFL_WORKSPACE/data_src" mkdir "$DFL_WORKSPACE/data_src/aligned" mkdir "$DFL_WORKSPACE/data_src/aligned_debug" mkdir "$DFL_WORKSPACE/data_dst" mkdir "$DFL_WORKSPACE/data_dst/aligned" mkdir "$DFL_WORKSPACE/data_dst/aligned_debug" mkdir "$DFL_WORKSPACE/model" fi

export DFL_SRC="../"

2. data_src 프레임 추출

$ ./2_extract_PNG_from_video_data_src.sh

3. data_dst 프레임 추출

$ ./3_extract_PNG_from_video_data_dst.sh

3-1. data_dst  denoise(optional)

$ ./3_other_denoise_extracted_data_dst.sh

4. data_src 프레임에서 face 추출

  • face 추출의 경우 S3FD, MT 등 option이 있으나 S3FD권장
  • 이 작업은 환경이 CPU일 때 매우 느리게 작동함
$ ./4_data_src_extract_faces_S3FD_best_GPU.sh


이렇게 프레임에서 얼굴만 잘라줌

4.1. face를 유사 히스토그램으로 정렬

  • similar_histogram : 이 옵션은 추출된 face를 유사 히스토그램으로 정렬 해준다
  • 소스 영상에 원하는 사람의 얼굴(아이유)이 아닌 타인의 얼굴이 있을 때 제거가 용이하다
$ ./4.2.2_data_src_sort_by_similar_histogram.sh

4.1. face를 final option으로 정렬

  • final : 권장되는 정렬로, 소스로 활용하기 좋지 않은 프레임을 버리고, 필요한 프레임(yaw 기준으로 다양하게)만 남겨준다
$ ./4.2.6_data_src_sort_by_final.sh

5. data_dst 프레임에서 face 추출

$ ./5_data_dst_extract_faces_S3FD_best_GPU.sh

6. model train

  • model도 여러가지가 있는데, blending 할 때 option이 다양한 SAE로 실행
  • 학습이 정상적으로 실행되면 아래와 같은 미리보기 이미지가 workspace/model에 저장됨
$ ./6_train_SAE.sh


iter : 100

iter : 20,000

7. Convert

$ ./7_convert_{사용한 모델명}.sh
  • 아래와 같이 merged된 프레임을 workspace/data_dst/merged 경로에 얻을 수 있다.
  • convert를 진행하다보면 많은 option이 있는데, 이를 어떻게 조정하느냐에 따라 영상의 자연스러움이 다르다

converting option을 기본 값으로 준 것조금 더 자연스럽도록 option을 수정한 것

원본 이미지(좌) 합성된 이미지(우)

  • 위 예시에서 알 수 있듯 완벽히 합성되지 않는 frame 들이 있다(사실상 자연스러운 부분이 더 적음)
  • 턱의 검은 건 왜 생긴지 알 수가 없고, 아이유 영상에서 마이크를 들고 말하는 부분이 있는데 그 부분을 source로 합성, 검은 부분이 생겼고, 미표한 표정의 변화까지 완벽히 합성되지는 않는 모양

8. mp4 영상으로 추출

  • 추출된 영상은 /workspace 안에 result.mp4 로 저장된다.
$ ./8_converted_to_mp4.sh

 

합성된 딥페이크 영상 : https://youtu.be/qyB2GVonMrw

9. review

  • GPU 환경에서 train에 약 16시간 정도 소요, 가치가 있나..(ㅎㅎ)
  • Youtube 등에서 훨씬 자연스럽게 합성된 deep fake 들에 비해 뭐가 부족한걸까?
  • 합성된 영상은 퀄리티를 더 높이려면 어떤 시도를 할 수 있을지?
  • 특정 헤어스타일이 어울릴지에 대한 의사결정에 좋을 것 같다(?)