본문 바로가기
딥러닝&머신러닝

Deepfake Tutorial - 자신만의 딥페이크를 만드는 기본 방법

by David.Ho 2023. 4. 26.
728x90
반응형
먼저, 자신의 컴퓨터 환경에 맞는 GPU, CUDA, TENSORFLOW 등등을 맞춰줍니다!!!
아래 링크 참조:
https://davidho.tistory.com/entry/GPU-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85GPU%EC%99%80-%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98-with-Window

 

[Deepfake Tutorial - FACESWAP]
1. 설치

이제, 모든 준비는 끝났습니다. 이제 본격적으로 시작하도록 하겠습니다.

https://faceswap.dev/download/ 를 통해서 faceswap 파일을 다운받아줍니다.

그림 1 faceswap 프로그램 다운로드

 

설치 과정은 기본적으로 할 줄 아시니, 이 포스팅을 보고 있을거라 생각해 생략하겠습니다.

 

faceswap의 파일은 다음과 같은 경로에 존재합니다.

C:\Users\[사용자명]\faceswap

cmd 또는 쉘을 통해서 다음과 같이 입력합니다.

그림 2 pip install -r

 

faceswap 에 필요한 외부 모듈들을 다운 받기 위해서 pip install -r 을 통해서 진행합니다.

 

requirements 에는 총 3가지 버전이 존재합니다. CPU, AMD, Nvidia 가 존재하는데, 사용자의 환경에 따라 설치를 진행해 주시면 됩니다. 설치를 완료하고 faceswap_win_launcher.bat 파일을 실행하면 다음과 같은 화면을 발견 할 수 있습니다.

 

그림 3 faceswap 메인 화면

 

 

[Deepfake Tutorial - FACESWAP]
2. 구성

먼저 Extract, train, Convert, Tools 총 4개의 메뉴를 확인 할 수 있습니다.

 

Extract의 경우 얼굴 데이터 셋의 추출, Train은 얼굴 학습, Convert는 동영상에 얼굴 Swap 기능을 담당하고 있습니다.

 

먼저 대상 얼굴이 있는 동영상을 src라 부르고, 합성을 할 동영상을 dst라고 칭하겠습니다.

 

대상 얼굴이 있는 동영상(src)을 Extract - Data - input dir에 탑재합니다.  동영상의 경우 알아서 준비하길 바랍니다.

그림 4 파일 준비

 

필자의 경우, 미리 파일 명에 src와 dst를 통해서, 대상 얼굴이 있는 동영상과, 합성을 할 동영상을 구분했습니다.

 

[Deepfake Tutorial - FACESWAP]
3. 학습 과정

그림 5 faceswap에 동영상 탑재

Input Dir 에는 대상 동영상을 탑재, Output Dir 에는 데이터가 담길 폴더를 지정합니다. 그후 Detector에서는 Cv2-Dnn, Aligner에서도 Cv2-Dnn 을 선택합니다. 따로 설명은 하지 않겠습니다. 경로 설정을 완료 했다면, Extract 버튼을 눌러 추출을 진행합니다.

 

그림 6 Extract 버튼
그림 7 Extract 과정

 

Extract 버튼을 누르게 되면, Preview에서 얼굴이 추출되는 것을 확인 할 수 있고, 우측 하단에 남은 게이지를 확인 할 수있습니다. 

추출이 완료되면, dst 즉 합성을 할 동영상도 동일하게 지정해서 추출을 진행합니다.

그림 8 총 파일 개수

 

data_dst와 data_src 폴더에는 총 2450파일이 존재하는것을 확인했고, 얼굴이 인식되지 않았거나, 다른 얼굴이 인식된 경우를 삭제해줘야 하기에, 사진 분류 작업을 진행합니다.
(데이터 전처리)

그림 9 불필요한 사진 및 인식되지 않은 얼굴 삭제

 

 

위 그림 같이 불필요하거나, 다른 얼굴이 인식된 사진을 모두 삭제합니다. src와 dst 둘다 동일하게 삭제합니다.

그후 학습 과정을 시작합니다. Train 탭으로 들어가 다음과 같이 세팅합니다.

그림 10 Train 탭

 

Input A에는 합성 할 대상 얼굴 데이터 폴더 , Input B에는 합성을 시킬 얼굴 데이터 폴더를 각각 지정해주고, Model Dir에는 합성 데이터가 들어갈 경로를 지정해줍니다. 그후 Train 버튼을 누르면 학습이 진행됩니다.

 

필자의 경우 미리 학습을 진행시키고 있었어서, Preview와 Graph 값이 다르게 나옴을 알려드립니다.

그림 11 Train 과정

 

위 그림 같이 학습 진행 현황을 확인 할 수 있으며, Graph 탭으로 넘어가면 다음과 같은 화면을 확인 할 수 있습니다.

그림 12 Train - Graph

 

위 그래프를 간단히 설명하자면 Iterations는 학습한 데이터 수, Loss 는 정확도 라고 생각하시면 됩니다.

 

Loss 값이 0에 수렴 할 수록, 합성이 원할하게 진행될 것이고, Loss 값이 크다면, 합성이 정상적으로 진행되지 않을 수 있습니다.

 

어느정도 학습을 진행했다면, 합성 과정을 진행합니다.

 

Stop 을 누르면 학습을 멈추고, 다시 Train을 할 수도 있습니다. 합성이 원할하게 되지 않았다면 다시 Train을 해서  학습을 시키는 것을 추천드립니다.

 

[Deepfake Tutorial - FACESWAP]
4. 합성 과정

다음은 합성과정입니다. Convert 탭으로 들어갑니다.

 

그림 13 Convert 탭

 

Input Dir 에는 합성할 영상, 즉 dst파일을 선택하고, Ouput Dir에는 합성이 완료된 동영상이 저장될 폴더를 지정합니다.

 

Alignments의 경우 Extract 과정시 자동으로 생성되는 파일으로, 해당 영상이 있는 폴더에 같이 존재합니다.

 

Model Dir에는 Train 에서 지정한 Model 폴더를 지정합니다.

 

모든 경로가 설정되었다면, Convert 버튼을 통해서 합성을 진행합니다.

그림 14 Convert 과정

 

합성이 완료된 파일을 확인해봅니다.

그림 15 합성 과정후 영상

 

아직 학습이 완료 되지 않아, 대상을 구분하기 어렵습니다. 학습을 최대한 많이 한 후 Convert 를 하게 된다면, 원하시는 작업물을 얻을수 있을겁니다.

 

대략 1시간  ~ 1일 까지 걸릴 수도 있습니다.

 

그림 16 합성할 영상의 일부

 

 

아래 사진은 각각 Iterations가 25000 ~ 52000 학습을 진행한 일부 결과물이다.

그림 17 학습 진행 현황

728x90
반응형

댓글