이전 글에서는 deepfacelive를 어떻게 설치하고 사용하는 지 알아보았는데요
deepfacelive에서 가장 핵심이 DFM 모델, 즉 학습된 얼굴의 모델이죠
이 글에서는 deepfacelive의 모델인 DFM 모델을 만드는 방법을 알아보겠습니다.
목차
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
DFM 모델이란?
DFM 모델은 DeepFaceLive에서 사용되는 핵심 모델입니다. 이 모델은 먼저 DeepFaceLab 프로그램을 사용하여 사진에 대한 훈련을 수행한 후, 이를 DeepFaceLive에서 사용 가능한 형식으로 변환합니다. 다시 말해, DeepFaceLab을 통해 얼굴 특징을 학습시킨 후 이를 DeepFaceLive에서 활용할 수 있는 DFM 형식으로 변환하는 것입니다. 이를 통해 DeepFaceLive에서 실시간 딥 페이크를 생성하거나 다양한 작업을 수행할 수 있습니다.
deepfacelab 설치하기
우선 deepfacelab github 링크를 타고 들어간 후에 Releases 섹션에서 os 에 맞는 링크를 눌러줍니다.
자신의 컴퓨터에 맞는 파일을 받아줍니다. (저는 Nvidia그래픽 카드에 3060을 이용하고 있습니다.)
여기서 중요한 점은 나중에 받아야할 사전학습모델이 MEGA다운로드 한계점을 넘을 수 있기때문에 mega말고 토렌트로 받는 것을 추천합니다.
이제 exe파일을 실행시켜 압축을 풀어주면 설치는 끝납니다.(여기서 경로가 너무길거나 한글이포함될시 문제가 될 수있으므로 드라이브의 최상단에 풀어줍니다. ex: c드라이브)
학습전 사전 준비하기
압축 풀기가 완료 되었다면 학습할 얼굴의 동영상과, 얼굴이 바뀔 동영상을 준비합니다 (저는 기본 내장된 샘플을 이용했습니다.)
그리고 학습할 얼굴의 동영상의 동영상 이름을 data_src.mp4 로 바꿔주고 얼굴이 바뀔 동영상을 data_dst.mp4 로 바꿔준 뒤에 \workspace폴더에 넣어줍니다.
2) extract images from video data_src.bat 을 실행시켜 data_src 로부터 모든 프레임을 사진으로 저장해줍니다. 빈칸에 엔터를 눌러 그냥 진행해 줍니다.
3) extract images from video data_dst FULL FPS.bat 을 실행 시켜 data_dst 로부터 모든 프레임을 사진으로 저장해 줍니다. 빈칸에 엔터를 눌러 그냥 진행해 줍니다.
\workspace\data_dst 이나 \workspace\data_src 폴더에 들어가 주면 저장된 사진이 있는것을 확인할 수 있습니다.
그 후에 4) data_src faceset extract.bat 와 5) data_dst faceset extract.bat 를 실행시켜 저장된 사진에서 얼굴을 추출해 줍니다. 역시 빈칸에 엔터를 눌러 진행을 시켜 줍니다.
\workspace\data_dst\aligned 이나 \workspace\data_src\aligned 폴더에 들어가 주면 뽑힌 얼굴이 있는 것을 알 수 있습니다.
그후에 https://www.deepfakevfx.com/에 들어가 사전학습된 모델의 설정을 확인하기위해 Download 의 pretrained model 클릭해 줍니다.
이와 같이 선택을 하고 submit 해줍니다. 그리고 사전학습된 모델의 세팅값을 을 확인하기위해 원하는 사이즈의 모델을 선택후 들어가줍니다.
그 후에 6) train SAEHD.bat 을 실행 시켜 줍니다. 사전학습모델과 같은 세팅으로 실행시켜 봅니다.
아래 같이 오류가 뜬다면 사양에 맞지 않는 모델입니다. (우선 배치사이즈를 4로설정하여 최소값을 돌려보면서 테스트를 해줘야합니다. 배치사이즈는 컴퓨터 사양과 관련이 큽니다. 기본적으로 4이상을 설정합니다.)
아래와 같이 뜬다면 이 사전모델을 써도 된다는 뜻입니다.
조금더 빠른 학습 훈련을 원하신 다면아래 글을 참고하세요
Xseg-더 빠른 효율로 deepfacelab모델 만들기
사전 학습된 모델 준비하기
사전 학습된 모델을 사용하는 이유
deepfacelab 모델 학습은 꾀 오래 걸립니다. 어느정도 퀄리티를 보장하려면 2~3일 이상 훈련을 해야합니다. 이때 미리 사전된모델을 이용하면 조금더 시간을 단축할 수 있습니다.
사전학습된 모델은 기본적으로 새로운 얼굴을 학습하기전에 어느정도 틀을 잡아주는 역할을 합니다.
사전 학습 모델을 받아주기
그러면 다시 사전 학습된 모델을 다운로드 하기 위한 링크 에 들어가 줍니다. 여기서 사전학습된 모델을 받기 위해서는 가입을 해 줘야합니다.
그 후에 Download 의 pretrained model 클릭해 줍니다. 아래와 같이 선택을 하고 submit 해줍니다.
이제 모델을 선택하고 받아주면 됩니다. ( 해상도가 높을 수록 그래픽 카드 사양이 받쳐주지않으면 아래와 같은오류가 뜹니다. )
저는 DF-UDT WF 384 SAEHD Pretrained Model을 선택하여 테스트한결과 오류가 떴습니다. (오류가 뜬다면 좀더 낮은 해상도의 모델을 선택해야합니다.)
그리고 DF-UDT WF 224 SAEHD Pretrained Model를 선택하여 테스트한 결과 오류가 안뜨고 잘되어 이 사전 모델을 선택했습니다.
그 후에 \workspace\model 폴더에 아래와 같이 사전 학습된 모델을 넣어줍니다.
훈련 시작하기
6) train SAEHD.bat 를 실행시켜 줍니다
우선 모델선택에서 엔터를 눌러 모델을 선택하게 합니다.
Press enter in 2 seconds to override model settings.가 뜰때 엔터를 눌러줘 설정을 해줘야합니다.
[0] Autobackup every N hour ( 0..24 ?:help ) :에서는 1입력후 엔터를 눌러 1시간마다 저장이 되게 합니다.
[1000000] Target iteration :에서 0입력해 무제한으로 학습 되게 합니다.
[8] Batch_size ( ?:help ) :에서는 알맞은 배치사이즈를 선택해야합니다. (여기서 초반에는 4로 돌린후 어느정도 시간이 지난뒤 8로 바꾸어 진행해주는것이 좋다고 합니다만, 배치사이즈에 대한 내용은 다양한 의견이 있습니다. 일단 4로 선택해 줍니다.)
[y] Enable pretraining mode ( y/n ?:help ) :에서는 n을 입력해 줍니다. (y 입력하면 계속해서 사전훈련을 지속하는 것입니다. 우리는 새로운 모델을 만들 것이기 때문에 n을 입력해줍니다.)
이제 훈련이 시작되었습니다. 이제 남은건 인내와 시간입니다. 저는 기본적으로 배치사이즈 4로 약 50000~70000 iteration 정도 훈련을 진행한후 얼굴의 치아가 명확히 보일때까지 진행해 줍니다. 어느 정도 얼굴의 훈련이 되었다 싶었을때 GAN Power나 True face 옵션을 켜줍니다. 그러면 더욱 빠르고 정확한 얼굴의 학습을 하게 됩니다. 최종적으로 대략 100000~300000 사이로 했을때 모델의 학습이 잘 되었습니다.
- GAN: 일반적으로 0.1정도로 해도 무방합니다.
- GAN patch size: 높을 수록 퀄리티는 좋지만 그래픽카드의 RAM을 많이 요구합니다. 일반적으로 해상도사이즈의 /8입니다. ex) 224/8=28
- GAN dimensions: 일반적으로 16으로 설정해 줍니다.
- True Face power: 일반적으로 0.01로 설정해줍니다. 결과값을 src 얼굴에 근접하게 합니다.
모델을 DFM파일로 변환후 Deepfacelive 실행하기
이제 Deepfacelive에서 쓸수 있는 DFM 모델로 변환을 해 보겠습니다. 6) export SAEHD as dfm.bat을 실행시켜 줍니다
엔터를 눌러 다음으로 진행시켜 줍니다.
그후 \workspace\model에 들어가 주면 모델 파일이 있습니다.
이제 이파일을 Deepfacelive가 설치된 폴더에서 \userdata\dfm_models에 저장해줍니다.
이제 deepfacelive를 실행시켜주면 아래와 같이 모델이 있습니다.
모델을 선택한 후 실행시켜주면 됩니다.
결론
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”
“DeepFaceLive” 프로그램을 활용하여 실시간 딥 페이크를 생성하고 활용하는 방법에 대해 알아보았습니다. 이를 위해 DFM 모델을 생성해야 합니다. DFM 모델은 DeepFaceLive의 핵심이며, DeepFaceLab 프로그램을 통해 사진에 대한 훈련을 거쳐 이를 DeepFaceLive에서 활용 가능한 형태로 변환합니다. 글에서는 DFM 모델 생성 과정을 단계별로 설명하고, 사전 학습된 모델을 활용하여 훈련 시간을 단축하는 방법도 제시하였습니다. 생성된 DFM 모델을 DeepFaceLive에서 활용하여 실시간 딥 페이크 작업을 수행할 수 있습니다.
함께 참고하면 좋은 글
1. deepfacelive:실시간 딥 페이크 만들어보기
3. Xseg-더 빠른 효율로 deepfacelab모델 만들기
train SAEHD 실행중에 GAN power 나 true face 옵션을 어떻게 킬 수 있나요? 학습을 중단하고 다시 train SAEHD bat파일을 실행하여 옵션을 바꿔줘야 하나요?
일단 혹시모르니 workspace 의 model 폴더를 백업해 주시고,
학습을 중간에 저장하신다음에 bat파일을실행 시켜준후에 Press enter in 2 seconds to override model settings.가 나오면 엔터를 눌러 옵션을 바꾸어 진행을 시켜 주시면 이어서 진행이 됩니다!
3080으로 해도 속도가 답답하네요…
4090*4way나 a100이라도 사야하나…
벤치마크같은게 없으니 참고할것도 없고 난감하네요
가정용 컴퓨터로는 많이 답답하죠…ㅎㅎ AI학습할때 보통 서버를 많이들 빌려서 학습시키시더라구요
항상 돈이 문제죠…
https://www.deepfakevfx.com/ 이 사이트 응답하는데 시간이 오래걸린다는데 저만 그런가요?
AI학습은 기본적으로 오래걸립니다…
컴퓨터 사양과 모델에 따라 천차만별인데 사실 좋은컴퓨터도 학습에 대해서는 오래걸려요
저 사이트만 접속이 안됐거든요 오늘 들어가니까 바로 접속되네요 사이트에 문제가 있었던거 같아요
아하… 사이트 응답에대한 이야기 이군요,, 저는 모델학습 시간으로 착각했네요 ;;;
제가 이해하기로 사전모델 세팅값으로 맞추고 훈련시켰을 때 오류가 안뜨는 사전모델을 다운받아서 model 폴더안에 넣고 훈련하면 시간이 단축된다는거죠?
기본적으로 오래걸리긴하지만요, 확실히 사전 모델을 이용하면 시간대비 학습 수렴 결과물이 잘 나오긴 합니다.
GAN patch size 설정에서 해상도라는게 어떤 해상도 말하는건가요?
여기에서 해상도는 모델의 크기를 이야기 합니다. 예를들어 사전 학습 모델(학습 시키려는 사진의 사이즈)이 224라면 여기서 224 / 8 을 해주는 것입니다.
안녕하세요?
혹시 훈련중인 모델에다 이미지를 보강하고싶은데
이부분도 가능한가요??
이미지 보강을 해서 훈련해도 가능하긴 하지만 미리 백업을 해놓는 것을 추천드립니다!
친절한 답변 감사합니다!
죄송하지만, 영어를 못해서 어디 물어 보거나 찾아볼 곳이 없어,, ㅜㅜ하나 더 물어볼게요
다른 모습들은 학습이 잘되는데
특정 모습이 학습이 안되는 것은
얼굴면이 모자라서 그런건가요?
얼굴 부분들이 까맣게 아예 안 만들어지는 부분이 있네요..
좋은 하루 보내세요!
face_style_power 많이 올리셧나요? 보통은 face_style_power를 아주 적은값 (0.001)부터 시작하는게 정설이긴 합니다만.
너무 많이 올리면 얼굴부위에 까만 공간이 생기는 현상이 있다고 합니다만.
그렇게 세팅한게 아니라면 보통은 모델을 훈련시키려는 이미지와 적용시키려고하는 이미지(목표이미지)의 차이가 적을수록 , 즉 비슷한 사람끼리 딥페이크를 하는경우가 훈련이 좀더 잘되는 경향이 있어요
또한 측면의 경우 학습이 잘 안되는 경향도 있고, 모델 훈련 시간에 따라 일부면에 대해서 학습이 안되는 경우도 많아요.
또한 완전 이상하게 나오는경우에는 또 다른 세팅값에 따라 학습 자체가 안되는 경우도 있어요.
지금 까지의 작업을 미리 백업하시고 다시 기본세팅으로 해보는것도 하나의 방법이 될 수 있을 것 같아요.
답변 감사합니다
페이스파워는 아예 만지지도 않았네요..
비슷한 사람이 좀더 훈련이 잘된다면
적용시키려는 이미지(목표이미지)와 훈련시키는 이미지를
동일한 사람으로 사용하여도 상관이 없나요?
(완전히 같은 사진)
완전히 같은사진으로 하면 사실 학습에 의미가 사라지긴 합니다…
결국 다른 사람의 얼굴에 씌우는게 목표이긴 하니까요… 그래도 학습은 되긴한데요
좀더 다양한 얼굴에 씌울 목적이라면 목표이미지를 완전 다양하게 가져가는게 좋고, 빠른 학습을 원하신다면 비슷한 얼굴의 이미지를 사용하는 것이 빠르게 될거에요.
소스 영상에 1명의 얼굴을 사용하는 것이 아니라 2~3명의 얼굴을 넣고 학습 시키면, 결과물은 2~3명의 얼굴이 합쳐진 것으로 나오나요?
합쳐진 다기 보다는 일정 각도의 면에서 좀더 많이 학습한 사람의 얼굴이 더 보이실 거 에요!
그러면, 딥페이크로 만든 가상 인간은 여러 얼굴이 합쳐서 만든다고 하던데, 소스로 다양한 사람을 사용하는 것이 아니라 다른 방법이 있는 건가요?
다양한 사람을 학습하든 한사람을 학습하든 학습한 사진의 얼굴모습의 각도나 특징들을 학습하는 원리입니다!
Xseg 단계를 스킵하고 merge단계에서 블러 처리를 하면 얼굴 경계가 그렇게 티가 안낫는데 Xseg를 하고 나니까 merge 단계에서 src얼굴이 dst얼굴보다 너무 작게 나오고 블러 처리를 해도 경계선이 티나 너무 나는데 Alpha mask 크기를 조정하는 방법은 없나요? mask 모드 말구요
Alpha mask 수정, 그러니까 최종적으로 눈코입만 src와 동일하고 얼굴 면적은 dst와 동일하게 못하나요? 아니면 블러처리, 노이즈 처리 말고 경계선이 최대한 안보이게 못하나요?
deepfacelab에서 merge 단계에서 얼굴 사이즈는 조절이 가능 할 거에요 face scale 요소입니다. (u 와 j 로 조절가능 할 겁니다.)
이게 다양한 요인과 방법으로 결과가 천차만별이어서 하나 하나 바꿔가면서 학습하거나, merge 단계에서 다양하게 바꾸어 가면서 해보는 수 밖에 없어요.
딥러닝이 시간과 노력이 많이 드는 작업입니다.
정확히 어떻게 해야된다는 답을 못드려서 죄송합니다
학습률이 부족한거엿네요.. 20k면 나름 많이 한거라 생각했는데.. 50k까지 하니까 티가 널 나네요.. 답변 감사합니다
원본데이터의 양과 질에 따라 20k도 좋은 결과 나올 수도 있고, 150k도 좋지 않은 결과가 나올 수 있습니다.
기본적으로 150k가 보통 완성도 높은 퀄리티가 나오는 수치로 알고 있습니다.
2) extract images from video data_src.bat 을 실행시켜 data_src 로부터 모든 프레임을 사진으로 저장해줍니다. 빈칸에 엔터를 눌러 그냥 진행해 줍니다. << 이부분에서
/!\ input_file not found.
Done.
계속하려면 아무 키나 누르십시오 . . .
라고 뜨는데 어떻게 하면 될까요? 파일이름 전부 변경했고 \workspace폴더에 넣었습니다
흠.. https://alltommysworks.com/ffmpeg/ 이거 먼저 해보시겠어요?
혹시 CPU와 GPU 가 뭔지 알 수 있을까요?
해결했습니다. D드라이브에서 C드라이브로 옮기니까 되네요. 간단한 문제였는데 질문부터 해서 죄송합니다
안녕하세요 글 잘 봤습니다.
DFLab을 공부하고 있습니다.
DF 와 LIAE 중 DF를 더 선호하시나요?
가이드에 보니 LIAE가 다양한 각도에서 좀 더 나은 결과물을 만들어 준다는 것 같은데
트레이닝이 오래 걸리다 보니 확실히 이게 더 좋다 라고 할만한 녀석으로 트레이닝을 시작하고 싶은데 유튜브 결과물을 보면 DF가 더 나아보이기도하고… 너무 어렵네요.
UD와 UDT도 가이드만으론 정확히 차이가 뭔지 모르겠고…
아무래도 경험이 저보다 많으실듯 하여 의견 여쭈어 봅니다.
아마 UD 와 UDT는 아키 텍쳐 차이입니다
여기서 U 는 원본 소스와의 유사성을 올리는 것이고 (더 많은 vram 이 필요합니다)
D 는 해상도를 좀더 올리는 것 ( 더 긴 학습시간이 요구됩니다.)
T 또 한 원본 얼굴과의 유사성을 올린다고 나와있습니다.
딥러닝 이라는 것이 약간 실험의 영역이 크다보니까 어쩔수 없이 여러가지 조정하면서 하는수 밖에 없습니다… ㅎㅎ 중요한 건 이런 저런 실험하면서 어떤게 나은지 기록하면서 하거나, 아니면 다른 사람들의 결과들을 참고하면서 하는 수밖에 없을 것 같아요
그리고 RTM과 RTT 모델이 정확히 뭘 의미 하는건지 혹시 아시나요?
가이드 내용이 너무 어렵게 써있어서 해석이 잘 안되는데..
RTM이 무작위의 수많은 사람들 얼굴을 모아놓은 DST 훈련 세트로 이해 했는데 맞나요?
SRC가 다양한 사람 얼굴에서 표현될 수 있도록 DST가 되어 훈련하기 위한 페이스셋 이라고 이해하고 있습니다만.. 그렇다면 RTT는 또 무엇인지. 이 부분은 가이드를 보고 웹서핑을 해봐도 찾기가 힘드네요…
RTM : ready to merge
RTT : ready to train
이라고 하네요 ㅎㅎ..
사전훈련된모델을 쓰는이유가 궁금합니다..라이브용으로 쓰려고 제작된건가요??
그냥 일반적으로 사전훈련모델을 쓰면 뭐가좋은건지 어떤게 장점인지를 전혀모르겠어요..
예를들어 마이클잭슨의 춤추는영상에 제얼굴을 딥페이크할시에 사전훈련된 모델을 사용하면 어떤점이 장점이있는건지요??
기본적으로 베이스가 있는 상태에서 추가로 훈련을 시키면 더욱 빠르게 수렴합니다.
어느정도 얼추 갖추어져 있는 상태에서 추가로 훈련을 시키면 빠른 결과를 얻으실 수 있을 것 입니다.
혹시 이 훈련이 전세계적으로 공유가 되나요? 예를들어 제 얼굴대신 훨씬 유명한 로다주얼굴을 딥페이크 했을 경우 훈련시간이 단축되나요?
기본적으로 공유가 되지는 않고, 특징이 도드라지는 얼굴이 훈련시간이 단축 되긴 할 겁니다.
또 가장 중요한 것이 소스인데, 다양한 각도, 선명한 사진 등의 사람의 눈으로 봤을 때 선명하고, 학습이 잘될 것 같다 하는 사진이 확실히 학습이 잘되는 경향이 있습니다.
보통 동영상을 잘라서 소스로 쓰는데 동영상에서 움직일 때 블러 같이 흔들리는 장면이 적을 수록 학습은 잘되긴 할 겁니다.
모든 과정이 로컬로만 진행되기 때문에 (물론 서버를 이용하는 사람도 있긴 하지만) 대부분의 경우에는 서로 공유가 되진 않습니다.
* 참고로 요즘에는 구글 코랩에서 딥페이크 돌리면 구글 코랩 막힐 수도…
훈련 단축 시키는 방법에는 일반적으로 사전 훈련된 모델을 사용하는 경우가 많습니다.
영어로 pretrained model 이라고 하는데 이는 여러 사람의 일반적인 특징을 미리 학습해, 추가로 학습할 시에 좀더 빨리 목표에 대하여 수렴하게 되는 매커니즘 입니다.