AI 탐구노트

FaceFusion : 안면 얼굴 교체를 손쉽게 해주는 AI 소프트웨어 본문

DIY 테스트

FaceFusion : 안면 얼굴 교체를 손쉽게 해주는 AI 소프트웨어

42morrow 2024. 11. 12. 14:33

 

1.서론

 

최근 인공지능 기술의 발전으로 딥페이크 기술이 대중화되면서, 이를 활용한 성 착취물이 사회적 문제로 대두되고 있습니다. 특히 교육부가 발표한 자료에 따르면, 올해 1월부터 10월 25일까지 딥페이크 성 착취물로 피해를 본 학생 수는 누적 865명에 달하며, 교직원을 포함한 학내 피해자는 총 901명으로 집계되었습니다.

 

이는 일주일 사이에 24명이 증가한 수치로, 피해가 지속적으로 확산되고 있음을 보여줍니다. 이러한 피해는 단순한 개인의 문제가 아니라, 사회 전반에 걸쳐 심각한 영향을 미치고 있습니다. 피해 학생들은 심리적 충격과 함께 학업에 집중하기 어려운 상황에 처하게 되며, 이는 장기적으로 그들의 미래에도 부정적인 영향을 미칠 수 있습니다. 또한, 이러한 사건은 학교 내 신뢰 관계를 훼손하고, 교육 환경 전반에 부정적인 영향을 미칩니다.

 

이러한 문제에 대응하기 위해 사회적, 기술적 노력이 필요합니다. 법적 측면에서는 딥페이크 성 착취물 제작과 유포에 대한 처벌을 강화하는 법안이 국회를 통과하여, 제작자는 최고 7년형, 시청이나 소지, 구입, 저장한 경우에도 3년 이하의 징역형에 처하도록 규정하고 있습니다.

 

기술적 측면에서는 AI를 활용한 딥페이크 탐지 기술이 개발되고 있으며, 이러한 기술을 통해 허위 영상물을 신속하게 식별하고 차단하는 노력이 이루어지고 있습니다. 그러나 무엇보다 중요한 것은 예방 교육과 사회적 인식 개선입니다. 학생들과 교직원을 대상으로 딥페이크의 위험성과 피해 사례를 교육하고, 피해 발생 시 신속하게 대응할 수 있는 시스템을 구축하는 것이 필요합니다. 또한, 사회 전반에서 딥페이크 성 착취물의 심각성을 인식하고, 이를 근절하기 위한 공동의 노력이 요구됩니다.

 

이번 글에서는 이런 딥페이크의 위험과 관련되어 있는 가장 핵심적인 AI 서비스인 Face Swap 을 수행하는 소프트웨어 FaceFusion에 대한 것입니다. 비록 서두에 부정적인 내용이 대부분이긴 하지만, 기술 자체만으로는 좋다 나쁘다를 평가할 수는 없다고 생각합니다. 사용하는 사람의 의도와 방식, 용도가 중요한 것이니까요. 

 

2.FaceFusion이란

 

FaceFusion오픈 소스 영상 변환 도구로, 사용자가 영상 속 얼굴을 다른 사람의 얼굴로 바꿀 수 있도록 해 주는 AI 기반 소프트웨어입니다. 무료로 사용 가능한 오픈소스  소프트웨어이죠.

 

 

3.FaceFusion 특징

FaceFusion의 특징을 몇 가지만 언급해 보면 다음과 같습니다. 

  • MIT 라이선스를 가진 오픈 소스 솔루션
  • CPU, CUDA, TensorRT 실행 백엔드 지원
  • 입력 사진을 이용해 타겟 사진 혹은 타겟 영상 속의 얼굴과 교체하는 것 지원
  • 얼굴의 나이 변환 (더 젋게 혹은 더 늙게 보이게)
  • Live Portrait 를 통한 얼굴 편집(Face Editor) 기능 지원
  • 작업 큐, 워크플로우 기능 

 

4.설치 및 테스트

Pinokio(피노키오) 사이트에서 Pinokio 툴을 다운받아 설치 후 제공하는 서비스 항목에서 FaceFusion3를 선택하고 1 click으로 설치해서 테스트 해 볼 수도 있습니다. (제 경우는 github 소스를 이용하는 방식으로 진행했습니다)

 

4.1. 환경 구성

# 필요 패키지 설치 (우분투)
$ sudo apt install git-all curl ffmpeg mesa-va-drivers

# Conda 가상환경 생성
$ conda create -n facefusion python=3.12
$ conda activate facefusion

 

4.2. 추론 가속 소프트웨어 설치 

# CUDA, cudnn, TensorRT (NVIDIA GPU 이용 시)
$ conda install conda-forge::cuda-runtime=12.4.1 conda-forge::cudnn=9.2.1.18
$ pip install tensorrt==10.5.0 --extra-index-url https://pypi.nvidia.com

# OpenVINO (Intel 내장 GPU 등 이용 시)
$ conda install conda-forge::openvino=2024.3.0

 

4.3.코드 및 테스트 데이터 다운로드

# 코드 다운로드
$ git clone https://github.com/facefusion/facefusion
$ cd facefusion

# Application 설치 (cuda 용으로)
$ python install.py --onnxruntime cuda

 

참고로 필요한 모델의 사전 학습 가중치들은 어플리케이션 구동 후 화면 상에서 필요한 기능을 선택하면 그에 맞춰 자동으로 다운로드 하도록 되어 있습니다. 

 

4.4. 테스트 용 인물사진 다운로드

 

테스트 용 인물 사진은 다음 링크에서 다운받았습니다.

 

사진: UnsplashOSPAN ALI

 

OSPAN ALI (@ospanali) | Unsplash 사진 커뮤니티

Unsplash에서 OSPAN ALI의 무료 다운로드 사진, 이미지 및 배경 중에 128개를 확인해 보세요.

unsplash.com

 

사진: UnsplashErik Lucatero

 

Erik Lucatero (@erik_lucatero) | Unsplash 사진 커뮤니티

Unsplash에서 Erik Lucatero의 무료 다운로드 사진, 이미지 및 배경 중에 27개를 확인해 보세요.

unsplash.com

 

 

4.5.환경 재로딩 및 어플리케이션 실행

프로그램을 실행하면 필요한 사전학스 모델 파일들을 다운로드한 후 7860 포트를 가지는 서버를 기동하게 됩니다. 

$ conda deactivate 
$ conda activate facefusion

# 프로그램 실행
$ python facefusion.py run

# tensorrt로 동작하도록 기동. 로그를 볼 수 있도록 하는 예시
$ python facefusion.py run --execution-providers tensorrt --log-level debug

 

 

4.6.서버 기동한 결과 확인

화면 상에 표시되는 링크를 브라우저로 열어보면 화면은 다음과 같이 표시됩니다. 

기본적으로 cuda, cudnn, tensorrt 패키지가 정상적으로 설치되어야 아래와 같이 나오면 만약 이것들이 설치되지 않았으면 cpu만 활성화된 상태로 제공됩니다. 

 

UI에서 제공하는 기능은 다음과 같이 표시됩니다. 

  • face_swapper
  • face_enhancer
  • age_modifier
  • expression_restore
  • face_debugger
  • face_editor
  • frame_colorizer
  • frame_enhancer
  • lip_syncer

 

4.7.적용 결과 확인

face_swapper와 face_enhancer를 적용해 봤습니다. 다운받았던 2개 사진이 크게 효과를 보기 힘들어서 예전 글 작성 시 다운받아뒀던 사진을 일부 함께 썼습니다. 소스 이미지는 귀여운 아이 이미지를 동일하게 이용했습니다. 

사진 : 입력 사진과 타겟 사진을 Swapping한 결과. 윤곽과 표정을 잘 살리고 있다는 것을 알 수 있음

 

 

 

4.8.웹캠에서 테스트

 

웹캠을 이용해서 라이브 영상에서 얼굴 교체를 하려면 아래의 커맨드로 시작하면 됩니다. 그런데 입력 이미지를 여러 사람으로 바꿔도 나오는 출력 얼굴은 비슷하게 나옵니다. Swapper 모델을 변경해봐도 크게 차이가 나진 않았습니다. 흠... 뭐가 문제였을까요?

$ python facefusion.py run --ui-layouts webcam

 

 

43.9.이상현상 

 

정상적이라면 TensorRT를 이용하도록 하면 face_swapper + face_enhancer 를 적용하면 3090 GPU에서 3~5초 가량이면 결과물이 나오는 것 같습니다. 다만, 이상하게도 느리게 나오는 사례가 있긴 했습니다. 아무래도 TensorRT를 이용하는 쪽은 뭔가 안정화가 더 필요한 듯한 느낌이 들었다고나 할까... 

 

Execution Providers를 TensorRT로 했을 때 처리 속도가 예상보다 많이 느려서 Face Swap + Enhancer + Age Modifier를 함께 선택했다가 Age Modifier만 해제를 했는데 흠... GPU 99% 사용으로 계속 돌았습니다. 뭔가 문제가 생긴 건 아닌 것 같고 계속 결과를 기다려 봤는데 결국 200초 가량 후에 결과물이 나왔습니다. 당시 뭐가 문제였는지는 지금도 모르겠습니다. -_-;

 

2024-11-11 16:15:53.122398851 [E:onnxruntime:Default, tensorrt_execution_provider.h:88 log] [2024-11-11 07:15:53 ERROR] Error Code: 9: Skipping tactic 0x2cac8ad6921b6399 due to exception Cask convolution execution

 

5.결론

 

FaceFusion은 인물 사진을 조작할 수 있는 잘 만들어진 도구입니다. 하지만, 원가 많은 기능을 가지고 있어서인지 초보자인 저한테는 많이 복잡해 보였습니다. 제공되는 기능에 대해 미리 스터디를 제대로 해서 익숙해진 상태에서 사용하면 좋겠다는 생각이 들었습니다. 특히나 저같은 초보 사용자가 이것저것 건드려 보면서 사용하기에는 도구의 안정성 측면에서는 약간 아쉬운 부분이 있어 보였습니다. 


 

6.참고 정보

6.1.코드 (깃헙)

 

GitHub - facefusion/facefusion: Industry leading face manipulation platform

Industry leading face manipulation platform. Contribute to facefusion/facefusion development by creating an account on GitHub.

github.com

 

6.2.Discord

 

Join the FaceFusion Discord Server!

Industry leading face manipulation platform | 35187 members

discord.com