젤 중요한 링크
https://github.com/deepfakes/faceswap/blob/master/USAGE.md
https://github.com/deepfakes/faceswap/blob/master/INSTALL.md
Faceswap with Linux
linux 설치하고 나서 하나씩
Extraction
Train
Convert
할 때 사용한 코드 정리
python faceswap.py extract -i ./src/dcut_original.mp4 -o ./faces/dcut_original
python faceswap.py extract -i ./src/target_face.mp4 -o ./faces/target_face
python faceswap.py train -A ~/faceswap/faces/dcut_original -B ~/faceswap/faces/target_face -m ~/faceswap/trained_model/
python faceswap.py convert -i ~/faceswap/src/dcut_original.mp4 -o ~/faceswap/converted/ -m ~/faceswap/trained_model/
ffmpeg -i ~/faceswap/converted/dcut_original_%6d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4
ffmpeg -i no_audio.mp4 -i ~/faceswap/src/dcut_original.mp4 -c copy -map 0:v -map 1:a -shortest output.mp4
가장 먼저 주의할 점은
bash faceswap setup을 한 후 깔려진
홈위치(cd ~)에 있는 faceswap 폴더로 이동한 후 명령어를 실행해야 한다.
1. Extraction
Extraction 단계에서는 동영상에서 이미지를 뽑는다.
mp4에서 face를 중심으로 한 영역을 추출하고 alignment.fsa와 png를 저장하는 과정이다.
python faceswap.py extract -i ./src/dcut_original.mp4 -o ./faces/dcut_original
python faceswap.py extract -i ./src/target_face.mp4 -o ./faces/target_face
python faceswap.py extract 를 주면서 옵션 별로 경로를 지정해주면 된다.
-i 는 인풋 동영상 경로 (.mp4)
-o 는 아웃풋 경로 (directory)
내 경우는 인풋에는 src에 있고 원하는 아웃풋 사진들은 faces에 디렉토리로 나온다.
디렉토리가 없다는 에러가 생기면 mkdir dcut_original 명령어를 쳐서 디렉토리 만들고 실행하면 된다.
결과
faces/dcut_original
faces/target_face
src/alignments.fsa
그러면 이렇게 동영상 두개에 대한 source, target 을 extraction한 이미지 결과가 담긴 디렉토리가 만들어진다.
안에를 살펴보면
frame별로 추출한 얼굴 이미지들이 <오리지널 영상 이름_number6d>이름으로 쭉 생겨난다.
원래 한 400~1000장 까지도 나오는데 한 사진에 담기 위해서 현재 000005까지만 있다.
원래 src 폴더 안에는 .fsa 포맷의 alignments 파일도 생긴다. (경로 옮기지 말고 그냥 두자)
2. Train
Train 단계에서는 두 개의 얼굴 사이 swap을 학습한다.
방금 우리가 faces 폴더에 저장한 이미지들을 거지고 이제 train을 하면 된다.
python faceswap.py train -A ~/faceswap/faces/dcut_original -B ~/faceswap/faces/target_face -m ~/faceswap/trained_model/
python faceswap.py train에 옵션 뒤에 경로를 설정해준다.
-A는 swap할 때 얼굴을 지우는 사람 (dcut_original)
-B는 swap할 때 얼굴을 넣을 사람 (target_face)
-m 은 model을 저장할 경로 위치 (디렉토리)라고 보면 된다.
그러면 이렇게 로그가 뜨면서 loss가 계산되기 시작한다!
gpu로 하면 엄청 빠르다
만약 저장하고 나갈 예정이면
"S" 키를 눌러 저장하고
"Enter" 키를 눌러 나가면 된다. (사실 Enter만으로 save and quit가 되긴 한다)
05/03/2023 13:28:24 INFO [Saved models] - Average loss since last save: face_a: 0.00687, face_b: 0.00462
나는 loss가 0.006~ 0.004가 될 때까지 100,0000 iteration을 돌렸다. (그러면 최고 12시간 정도 소모됨)
3. Convert
마지막 단계에서는 Convert를 한다.
python faceswap.py convert -i ~/faceswap/src/dcut_original.mp4 -o ~/faceswap/converted/ -m ~/faceswap/trained_model/
python faceswap.py convert 에서 옵션별로 또 경로를 정확하게 지정해주면 된다.
-i original.mp4 원래 오디오가 있던 소스
-o frame별로 swap시킨 얼굴 이미지를 저장할 위치
-m 은 전단계에서 trained model을 저장한 경로를 설정해주면 된다.
근데 converted를 다 수행한 결과가 동영상이 아니라 프레임마다 이미지다!
이걸 다시 영상을 만들기 위해서는 ffmpeg라는 명령어를 사용해야 한다.
ffmpeg -i ~/faceswap/converted/dcut_original_%6d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4
ffmpeg -i no_audio.mp4 -i ~/faceswap/src/dcut_original.mp4 -c copy -map 0:v -map 1:a -shortest output.mp4
이 두 개를 거치면 output.mp4가 최종적으로 나오고
다운로드해서 활용하면 된다.
만약 아래와 같은 오류가 뜬다면
Could find no file with path '/home/home/faceswap/converted/dcut_original_%d.png' and index in the range 0-4
이건 뒤에 000001 이미지의 숫자를 잘못 파악해서 그러므로 뒤에 자릿수만큼을 %6d에서 수정하면 된다.
ex) name_001.png, name_002.png ...이렇게 되어 있으면
ffmpeg -i ~/faceswap/converted/dcut_original_%3d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4
%3d.png로 수정하면 된다.
Reference :
https://superuser.com/questions/277642/how-to-merge-audio-and-video-file-in-ffmpeg
https://github.com/deepfakes/faceswap/issues/63
https://github.com/deepfakes/faceswap/blob/master/USAGE.md
https://github.com/deepfakes/faceswap/blob/master/INSTALL.md
'머신러닝,딥러닝' 카테고리의 다른 글
[Error] onnx importerror (0) | 2023.05.08 |
---|---|
pip install insightface 오류날 때 (onnx install 오류 해결) (0) | 2023.05.04 |
GPU를 차지하는 프로세스 찾기 nvidia-smi | ps -ef | grep {PID} (0) | 2023.05.03 |
conda 가상환경 지우기 conda remove -n ENV_NAME --all (0) | 2023.05.03 |
AWS를 사용할 때 항상 주의합시다.. 세금까지 8만원 (0) | 2023.05.03 |
[Faceswap] linux virtualenv 파이썬 버전 문제 해결 : virtualenv {venv-name} --python=3.8 (0) | 2023.05.01 |
Faceswap 설치하고 사용하기 기록과정 Part 3 - Convert (0) | 2023.04.27 |
Faceswap 설치하고 사용하기 기록과정 Part 2 - Train (0) | 2023.04.27 |