안경잡이개발자

728x90
반응형

Face Swapping에서 추출(Extraction) 과정은 반드시 필요하다.  FaceSwap에서 추출이란 '얼굴 잘라내기'라고 볼 수 있다.  다시 말해, 추출(Extraction) 자체는 단순히 비디오(Video)나 이미지 파일들이 들어있는 폴더로부터 얼굴이 있는 부분을 찾아서, 얼굴 사진들만 따로 모아놓는 일련의 과정을 의미한다. 당연히 얼굴(Face)에 있는 Identity 정보를 파악해서 Swapping을 해야 되는 것이므로 얼굴 이미지만 따로 추출하는 과정은 일반적으로 필요하다. (사람이 직접 추출하지 않아도 되는 것만으로 고맙다...)

추출 과정은 다음의 세 가지 단계로 구성된다. 아래 단계들에서 언급되고 있는 메소드들은 사실 Facial Manipulation 분야에서 굉장히 흔하게 사용되는 메소드들이다.

1) 얼굴 감지(Facial Detection): 동영상의 매 프레임마다 얼굴이 존재하는 위치를 찾는다.
2) 정렬(Alignment): 얼굴이 존재하는 위치를 찾은 뒤에는, 해당 얼굴에서 68개의 랜드마크(Landmarks)의 위치를 찾고 그에 상응하는 얼굴의 방향성을 결정한다.
3) 마스크 생성(Mask Generation): 어떤 부분이 얼굴이고, 어떤 부분이 배경인지를 잘 구분하기 위하여 얼굴 부분에 마스크를 씌운다.

FaceSwap의 학습 과정(Auto-Encoder 기반)에서는 얼굴 데이터가 필요하기 때문에, 이러한 추출 과정은 Face Swapping에서 매우 중요하다고 볼 수 있다.

또한 추출된(Extracted) 얼굴 정보들은 Alignment File 형태로 관리할 수 있다. Alignment File이란, 각 프레임에서의 얼굴에 대한 정보를 포함하고 있는 파일이다. 68개의 랜드마크를 이용하여 얼굴의 위치를 정확히 결정한다. 처음에는 조금 뜬금없게 느껴질 수 있는데, 일반적으로 Face Recognition 분야에서는 사람 얼굴에서 키 포인트들의 위치 정보를 처리하기 위해 68개의 랜드마크를 이용한다. 아무튼 이러한 Alignment File은 다음의 목적을 위해 사용된다.

1) 학습(Training): "Warp to Landmarks" 설정을 한 경우, 학습 과정에서 얼굴 랜드마크 정보를 제공하기 위해서
2) 변환(Converting): 원래 프레임에서 변환되어야 할 얼굴의 위치를 변환 과정(Convert Process)에게 알려주기 위해서

일단 간단히 Extraction을 해보자. FaceSwap을 실행하면 다음과 같은 화면을 만날 수 있다.

일단 가장 중요한 것은 입력(Input)과 출력(Output)이다.

 

Input Dir: 입력으로 사용할 비디오 혹은 이미지
Output Dir: 추출된 얼굴이 저장될 폴더

이어서 플러그인(Plugins)란에서는 어떤 라이브러리를 이용해서 얼굴을 Detection하고 Alignment할 것인지에 대한 내용을 설정할 수 있다. 자세한 내용은 FaceSwap 포럼(Forum)의 Extraction Guide 문서에서 살펴 볼 수 있다.

 

▶ FaceSwap Extraction Guide: https://forum.faceswap.dev/viewtopic.php?t=27

 

다음과 같이 입력으로 비디오 파일(.mp4)을 넣고 출력 폴더를 설정한 뒤에 [Extract] 버튼을 눌러 추출해보자. 저자는 입력과 출력을 설정한 것 이외에는 모두 기본 설정 그대로 진행하였다. [Generate] 버튼은 그냥 Python 커맨드(Command)를 얻기 위해 사용하는 버튼이고, [Extract]와 기능적으로 동일하다.

다만 [Extract] 버튼을 눌러도, 정상적으로 동작하지 않을 수 있다. 그럴 때는 컴퓨터를 재부팅한 뒤에 Conda Prompt를 실행해보거나, 재설치가 필요할 수 있다. 혹은 하드웨어(Hardware)적인 한계 때문일 수 있어서 RAM을 더 많이 끼우거나 더 높은 성능의 GPU 디바이스를 이용해야 할 수도 있다.

 

저자의 경우 자세한 추가적인 메시지 없이 단순히 with status: failed - extract.py. return code: 1라는 오류 메시지가 출력되어 혼란스러웠다. 그래서 Conda Prompt 대신에 바탕화면에 있는 FaceSwap 바로가기를 이용해서 FaceSwap을 실행해서 Extraction을 해보았는데, 그제서야 정상적으로 동작했다.

 

아무튼 정상적으로 Extraction이 수행될 때는 다음과 같은 화면이 나온다. (저자의 경우 20초 가량의 Obama 연설 동영상을 넣었는데, 총 600 프레임의 이미지에 대하여 정상적으로 Extraction이 수행되는 것을 알 수 있다. 저자의 컴퓨터 환경에서는 약 10분 가량이 소요될 정도로 느렸다. 저자의 경우 GPU 디바이스 호환 문제인지 모르겠지만, 이처럼 오랜 시간이 소요되었다.)

또한 저자의 경우 추가적으로 다음과 같이 plaidml.exceptions.Unknown: Unable to map memory: CL_MEM_OBJECT_ALLOCATION_FAILURE라는 메시지와 함께 오류가 발생했다.

OpenCL 관련 오류 메시지가 나온 것으로 보아, 가지고 있는 AMD GPU와의 호환 문제인 것으로 보인다. 그래서 저자의 경우 그냥 Extraction 과정에서 CPU 기반의 플러그인을 사용하도록 하였다. 그래서 [Detector]에서 Cv2-Dnn을 선택하고, [Aligner]에서 Cv2-Dnn을 선택하였다. 저자의 경우 CPU 기반으로 Extraction을 했더니 매우 빠르게 동작했다. (600 Frames에 대하여 약 1분 가량 소요)

결과적으로 다음과 같이 성공적으로 추출이 진행되었다.

또한 추출(Extraction)을 마치고 나면 다음과 같이 폴더 안에 비정상적인 얼굴 이미지도 함께 포함되어 있다. 기본적으로 추출 과정에서 하나의 프레임 안에 여러 개의 얼굴이 감지(Detection)되는 경우 각각의 얼굴을 모두 추출해주기 때문이다. 따라서 다음과 같이 얼굴이 아닌데 얼굴로 감지되어 추출된 개체(Object)가 있는 경우 하나씩 선택하여 수동으로 삭제해주어야 한다.

이후에 저자는 오바마(Obama) 미국 전 대통령의 이미지를 더 추가하여 총 1,600개 가량의 Obama의 이미지를 준비하였다.

 

또한 기본적으로 FaceSwap 실습을 위해서는 두 개의 동영상이 필요하다. 따라서 하나의 동영상에 대해서 추가적으로 또 추출(Extraction)을 해준다. 참고로 두 개의 동영상에 대하여 서로 다른 폴더에 추출된 이미지가 저장되도록 해야 한다.

 

그래서 저자의 경우 부시(Bush) 미국 전 대통령의 스피치 영상 또한 준비하였다. 아까와 마찬가지로 추출 작업을 진행하였으며 대상의 얼굴이 아닌 다른 사람의 얼굴이거나, 사람의 얼굴이 아닌 경우 모두 선택하여 제거해주었다.

결과적으로 서로 다른 사람이 등장하는 2개의 동영상으로부터 각 인물에 대한 이미지를 1,000장 이상씩 추출하였다. 기본적으로 동영상으로부터 이미지를 추출할 때는 두 가지를 기억하자.

 

- 기본적으로 두 동영상에 대해서 사람의 얼굴 이미지가 각각 최소한 1,000장 이상 모일 수 있도록 준비해야 한다. 이미지가 너무 적으면 당연히 학습 결과 모델의 성능이 떨어진다.

- 또한 되도록 다양한 얼굴 각도와 표정이 나오도록 이미지를 구비할수록 좋다.

728x90
반응형

728x90
반응형

GPU SharkGPU 모니터링을 위한 유틸리티 프로그램이다. GPU Shark를 이용하면 NVIDIA GeForce 그래픽 카드 및 AMD/ATI Radeon 그래픽 카드 제품의 정보를 모니터링할 수 있다. 그냥 간단하게 설치한 뒤에 바로 사용할 수 있기 때문에 간편하다.

 

▶ GPU Shark 다운로드: http://www.ozone3d.net/gpushark/

 

GPU Shark의 공식 사이트에 접속하면 다운로드를 진행할 수 있다. 다음과 같이 [Download GPU Shark] 버튼을 눌러서 설치 프로그램을 받아보자.

이후에 릴리즈 된 설치 프로그램을 다운로드 받을 수 있는 경로로 이동할 수 있다.

다운로드를 진행하자.

다운로드 이후에는 gpushark.exe를 실행하면 된다.

기본적으로 다음과 같이 나온다. 저자는 현재 컴퓨터에 그래픽 카드가 하나만 장착되어 있어 하나만 나오는데, 그래픽 카드의 개수가 많으면 그 개수만큼 GPU 정보가 출력된다.

실제로 GPU 사용량이 높은 소프트웨어를 실행하게 되면, 다음과 같이 GPU Usage가 증가하는 것을 확인할 수 있다.

 

 

728x90
반응형

728x90
반응형

FaceSwap사진 혹은 비디오에 있는 얼굴을 인식(Recognize)하여, 얼굴 부분을 바꾸어주는(Swap) Deep Learning 기술 기반의 Software이다. 흔히 DeepFakes와 동일한 의미로 언급되는 라이브러리의 이름이기도 하다. 지금은 다양한 Face Manipulation 기술들이 DeepFakes라는 대명사로 불리는 경우가 많은데, FaceSwap에서 제시된 기술이 기본적인 DeepFakes의 기술적 방법론과 같다.

Computer Vision 기술에 대한 깊은 지식이 없어도, FaceSwap 프로그램을 다운로드 받아서 사용하는 것은 매우 간단하다. 그렇기 때문에 Fake Video들이 자연스럽게 양산될 수 있기 때문에, 올바른 윤리 의식을 갖추는 것이 중요하다. 기본적으로 FaceSwap의 GitHub에서는 다음과 같은 문구들을 따르도록 제시하고 있다.

1) FaceSwap is not for creating inappropriate content.
2) FaceSwap is not for changing faces without consent or with the intent of hiding its use.
3) FaceSwap is not for any illicit, unethical, or questionable purposes.
4) FaceSwap exists to experiment and discover AI techniques, for social or political commentary, for movies, and for any number of ethical and reasonable uses.

쉽게 말하면, 비윤리적인 목적으로 FaceSwap을 이용하지 말라는 소리이다. 비윤리적으로 사용되는 다양한 사례들은 이미 뉴스에서 수차례 언급된 적이 있으므로 생략하겠다. 아무튼 저자는 최근에 AI Security 및 Privacy 파트의 논문도 많이 Follow-up 하고 있는데, DeepFakes로 발생하는 Privacy Concern에 관심이 많아서 실험을 몇 번 해보았다.

 

일단 사용자 친화적인 FaceSwap Software는 다음의 경로에서 설치할 수 있다.

 

▶ FaceSwap 다운로드: https://faceswap.dev/download/

 

Download - Faceswap

You can get the latest Windows Installer from this link. If you experience problems with Github, you can also get the installer directly from this link To install on any other platform, please download our git repository from Github If you’re comfortable w

faceswap.dev

일반적인 Computer Vision 실습과는 다르게, FaceSwap GUI 프로그램은 GPU 환경이 갖추어진 윈도우나 Mac OS에서 실습하는 것이 편할 것이다. 터미널 기반의 Linux와 비교했을 때 사진이나 동영상을 옮기고 쉽게 실행할 수 있기 때문이다.

기본 설정 그대로 설치를 진행하면 된다.

이 때 자신의 그래픽 카드(Graphic Card) 환경에 맞게 설치를 진행한다. 저자는 AMD GPU를 사용하고 있기 때문에 이를 선택했다. 자신의 컴퓨터의 그래픽 카드 정보를 확인하고자 할 때는 [장치 관리자]를 열어서 자신이 사용하고 있는 그래픽 카드 드라이버를 확인하면 된다.

 

또한 기본적으로 아나콘다(Anaconda) 개발환경이 갖추어져 있어야 한다. 만약에 Python 및 Conda 환경이 구축되지 않았다면 Conda 환경부터 구축하자.

 

▶ Anaconda 환경 구축: https://ndb796.tistory.com/355

 

아무튼 FaceSwap의 설치는 매우 간단하다. 

[Install] 버튼을 눌러 설치를 마쳤다.

설치 이후에는 FaceSwap이 설치된 폴더로 이동하여 python faceswap.py gui 명령으로 소프트웨어를 실행할 수 있다.

다만, 이 때 자신의 그래픽 카드 환경 및 설치된 파이썬 패키지에 따라서 오류가 발생할 수 있다. 저자는 PlaidML 라이브러리가 없어서 오류가 발생하였다. 따라서 저자의 경우 pip install plaidml-keras 명령을 통해 필요한 라이브러리를 설치하라는 오류 메시지를 확인할 수 있었다. 그래서 pip install plaidml-keras plaidbench로 라이브러리를 설치하였다.

 

이후에 plaidml-setup 명령으로 환경 설정을 진행하면 된다. 다만, 다음과 같이 [WinError 126] 메시지와 함께 오류가 발생할 수 있다.

이는 저자가 글을 쓸 당시에 존재하던 PlaidML의 버전 문제로, 다음과 같이 PlaidML 삭제 및 구버전으로 재설치하여 해결할 수 있었다.

 

pip uninstall plaidml 
pip uninstall plaidml-keras 
pip uninstall plaidbench 
pip install plaidml==0.6.4

 

아무튼 이제 다시 plaidml-setup 명령으로 설정을 진행하자. 몇 가지를 물어보는데, 다음과 같이 Yes로 답을 진행하면 된다.

 

Q. Enable experimental GPU support? y

Q. Default device? 1 : opencl_amd_tahiti.0

Q. Save settings to C:\Users\\.plaidml? y

이후에 setx KERAS_BACKEND plaidml.keras.backend를 입력한 뒤에 Shell Prompt를 껐다가 다기 실행하자. 또한 FaceSwap의 requirements.txt 폴더에는 필요한 라이브러리들이 명시되어 있다. 따라서 그냥 pip install -r requirements.txt 명령으로 추가적으로 필요한 라이브러리를 모두 설치하자.

이후에 다시 python faceswap.py gui 명령으로 FaceSwap을 실행해보자. PlaidML을 위한 설정은 성공적으로 마쳤으나, 여전히 오류가 발생하고 있다. FaceSwap은 기본적으로 TensorFlow를 이용하여 학습을 진행하기 때문에, TensorFlow가 설치되어 있어야 하는 것이다.

따라서 이러한 오류가 발생하는 경우 pip install tensorflow명령으로 tensorflow를 설치할 수 있다. 다만, 저자의 경우 버전 호환 문제로 TensorFlow 2.0 이상 버전을 설치했을 때는 오류가 발생했다. 따라서 저자는 pip install tensorflow==1.14.0로 설치하였다.

설치가 완료된 이후에 다시 python faceswap.py gui를 입력하여 실행하면 정상적으로 FaceSwap 소프트웨어가 구동된다.

정상적으로 동작이 되는 것을 확인한 이후에는 Tutorial 가이드 문서를 읽어 보면서 사용 방법을 익혀보도록 하자.

 

▶ Extraction: https://forum.faceswap.dev/viewtopic.php?f=5&t=27

▶ Training: https://forum.faceswap.dev/viewtopic.php?f=6&t=146

 

상당히 내용이 잘 정리되어 있기 때문에 이 내용들을 꼼꼼히 읽어보는 것을 추천한다.

728x90
반응형

728x90
반응형

아나콘다(Anaconda)는 파이썬으로 개발을 할 때 필요한 다양한 패키지들을 손쉽게 관리할 수 있도록 도와주는 패키지 관리 시스템입니다. 다시 말해 Python을 활용한 머신러닝을 효과적으로 도와주는 도구라고 할 수 있습니다. 매우 다양한 파이썬 패키지(NumPy, Matplotlib, pandas 등)들을 빠르게 다운로드 하여 사용할 수 있도록 도와줍니다.

 

▶ Anaconda 다운로드: https://www.anaconda.com/distribution/

 

자신의 운영체제에 맞는 Anaconda Installer를 다운로드 하여 설치를 진행하시면 됩니다. 기본 설정(Default Setting) 그대로 설치를 진행하시면 편하게 사용할 수 있을 겁니다.

 

Anaconda를 설치하게 되면, 파이썬에서의 기본적인 다양한 패키지들을 자동으로 함께 설치해주기 때문에 많은 용량을 잡아먹게 됩니다. 제가 설치할 때는 약 3GB 정도를 요구하네요.

이후에 환경변수 설정에 대한 내용이 나오는데, 그대로 진행하겠습니다.

설치가 다 되고 나면 [시작]에서 [Anaconda Prompt]를 검색하셔서 아나콘다 콘솔창을 열어주세요. 이후에 python --version 명령을 입력하여 최신 Python 버전으로 설치가 잘 되었는지 확인합니다.

 

또한 pip list 명령을 이용하여 기본적으로 Anaconda를 통해 설치된 파이썬 패키지들을 확인할 수 있습니다. NumPy나 pandas와 같은 기본적인 라이브러리들이 모두 설치되어 있는 것을 확인할 수 있습니다.

또한 Anaconda를 설치하면 자동으로 Jupyter 개발환경도 설치가 되기 때문에, 바로 jupyter notebook 명령을 통하여 Jupyter 개발환경을 실행하실 수 있습니다.

728x90
반응형