AI 이미지/AI 기타

Fooocus: 아주 간편한 Stable Diffusion

하늘이푸른오늘 2024. 1. 9. 23:03

Fooocus는 스테이블 디퓨전을 기반으로 한 무료, 오픈소스 AI 이미지 생성기입니다. Fooocus는 스테이블 디퓨전과 미디저니(Midjourney)의 장점을 결합하였습니다. 즉, 오픈소스, 오프라인, 무료로 사용할 수 있으며, 사용법이 매우 간단합니다.

Fooocus는 스테이블 디퓨전 파이프라인을 최적화하여 고품질의 이미지를 생성합니다. 설정을 어떻게 바꿀까 고민할 필요가 없이,  그 시간에 어떤 이미지를 생성하고 싶은지를 고민하시면 됩니다. 아래는 이 글의 목차입니다.

Fooocus의 장단점

Fooocus의 장점은 아래와 같습니다.

  • 설치하기 쉽다.
  • 사용하기 쉽다.
  • 고품질의 이미지를 생성할 수 있다.

반면, Fooocus는 아래와 같은 단점이 있습니다.

  • AUTOMATIC1111 이나 ComfyUI와는 달리, 스타일을 마음대로 조종하기가 쉽지 않다.
  • 기능이 많지 않습니다.

Fooocus 설치 방법

Fooocus는 GPU가 없는 PC에서도 사용할 수 있습니다. 다만, VRAM 8GB의 Nvidia 그래픽 카드가 설치된 PC에 설치하는 것을 추천합니다. 자세한 설치요건은 여기를 읽어보시기 바랍니다.

Fooocus는 Mac 이나 Linux, Google Colab에도 설치할 수 있으나, 저는 윈도 11에 설치하는 방법만 설명합니다(물론 다른 기기의 설치방법도 동일합니다).

  1. 이 페이지에 들어가 >>> Click here to download <<<라고 쓰여진 링크를 클릭하여 zip 파일을 다운로드 받고, 원하는 폴더에서 압축을 풀어주면 설치가 완료됩니다. 
  2. run.bat를 클릭하면 Fooocus가 실행됩니다. 처음 실행하면 아래와 같이 "Windows의 PC 보호" 창이 뜨는데, 추가정보를 누르고 [실행] 버튼을 눌러 주시면 됩니다. 또한 처음 실행하면 체크포인트 파일을 다운로드 받고 환경을 설정하느라 시간이 좀 오래 걸립니다. 실행 상황은 터미널에서 확인할 수 있습니다.

아래는 제가 설치한 결과입니다.

Fooocus 사용 방법

Fooocus 를 사용하는 방법은 매우 간단합니다. 아래가 기본 모드 화면인데 무척 썰렁합니다^^ 여기에서 프롬프트를 입력하고 [Generate] 버튼을 눌러주면 이미지가 생성됩니다(Cntl+Enter를 눌러도 됩니다.

프롬프트 : a dragon, snow, moon

기본 모드에서 처음 사용하면, Fooocus는 SDXL 미세조정 모델 중 하나인 juggernautXL 체크포인트 파일을 사용하여 이미지를 생성합니다. 이 모델은 여러가지 스타일의 이미지를 잘 생성해주는 범용 모델입니다.

위에서 입력한 프롬프트(a dragon, snow, moon)가 매우 간단한데, 이처럼 Fooocus에서는 길고 복잡한 프롬프트를 입력할 필요가 없습니다. Fooocus 는 GPT-2 기반의 프롬프트 엔진을 사용하여 입력한 프롬프트를 확장시켜주기 때문입니다. 이를 Prompt Expansion이라고 합니다.

예를 들어 "a dragon, snow, moon"이라는 프롬프트는 내부적으로 아래와 같이 확장됩니다. 보시는 것처럼 여러가지 장식과 관련된 단어들이 자동으로 포함됩니다.

a dragon, snow, moon, light, intricate, elegant, sharp focus, beautiful dynamic, highly detailed, very sleek, professional fine detail, cinematic, dramatic ambient bright colors, perfect, warm color, epic composition, striking, brave, attractive, elite, best, vivid, clear, coherent, advanced, creative, cute, artistic, trendy, cool, gorgeous, awesome

고급 설정

프롬프트 입력란 아래의 "Advanced" 체크박스를 클릭하면 오른쪽에 고급 설정 메뉴가 나타납니다.

성능(Performance) 설정

"가능하면 쉽게"라는 디자인 철학에 따라, 고급 설정마저 이해하기 쉽게 구성되어 있습니다.

성능은 아래와 같이 3가지 종류가 있습니다.

  • Speed : 일반적인 설정입니다. 품질/속도가 균형을 이루며, 샘플링 단계는 30입니다.
  • Quality : 샘플링 단계가 2배인 60입니다.
  • Extreme Speed : LCM LoRA를 사용하여 샘플링 단계가 8입니다.
Speed(18.5초) Quality(32.7초) Extreme Speed(7.7초)

Speed 와 Quality는 거의 비슷합니다. SDXL  모델의 경우 샘플링 단계 30 이후에는 거의 이미지 품질이 향상되지 않기 때문입니다. 

Extreme Speed 의 경우에는 이미지 품질이 떨어집니다. 이는 LCM-LoRA의 특성상 어쩔 수 없는 부분입니다. 다만 위에서 적어둔 것처럼 속도는 거의 3배에 달합니다. (참고로 저는 3070을 사용합니다)

참고로, AUTOMATIC1111에서 LCM-LoRA를 사용할 경우, CFG 척도와 샘플링 단계를 직접 수정해야 합니다. 그런데, Fooocus에서는 그냥 무시해도 내부적으로 알아서 설정을 바꿔주니 편리합니다.

종횡비(Aspect Ratio) 설정

Fooocus에서는 이미지 크기를 직접 설정할 수 없고, 여러가지 이미지 크기를 목록으로 제시합니다. 이중 원하는 종횡비를 선택하시면 됩니다. 이런 방식을 택한 이유는 SDXL 모델에서 최적의 이미지를 생성할 수 있는 크기이기 때문입니다.

만약 이 이외에도 다른 크기를 원하신다면 아래와 같이 설정할 수 있습니다.

  1. Fooocus 폴더에 들어가 config.txt 파일을 config.txt.org 으로 이름을 바꿔줍니다.
  2. config_modification_turorial.txt 파일을 찾아 config.txt로 이름을 바꿔줍니다.
  3. config.txt 파일을 수정합니다. "available_aspect_ratios" 부분을 찾은 후 원하는 파일 크기를 추가하면 됩니다.
  4. 변경 사항은 즉시 반영되지 않고, Fooocus를 다시 시작해야 적용됩니다.

스타일(Style) 설정

일반적으로 AUTOMATIC1111과 같은 스테이블 디퓨전 GUI에서는 프롬프트 작성법에서 말씀드린 것처럼 스타일, 해상도, 조명 등 다양한 영역의 단어들을 사용해야 좋은 이미지가 생성됩니다. 하지만, Fooocus에서는 Style 탭에 포함된 여러가지 스타일을 선택하기만 해도 멋진 이미지가 탄생합니다. 

아래 그림은 스타일 탭을 열었을 때 기본으로 보이는 설정입니다. 약 340개 정도의 스타일이 들어 있는데, 이중에는 SDXL 모델 스타일 106가지에서 설명드린 스타일도 포함되어 있습니다.

이들 스타일은 중복하여 지정할 수 있습니다. 조합될 수 있는 가지수를 생각한다면 거의 무한대이겠죠. 하지만, 기본스타일을 제거해야만 나타나는 효과도 있고, 서로 중복하면 의미가 없는 스타일도 있으므로, 적절하게 사용하셔야 합니다.

기본 Mk Van Gogh
SAI Origami ArtStyle cubist

모델(Model) 설정

Fooocus가 설치되면, 자동적으로 juggernautXL 체크포인트 파일을 사용합니다. 여기에 새로운 체크포인트 모델이나 LoRA를 추가로 설치할 수 있습니다.

또한 모델이 위치한 폴더를 config.txt를 편집하여 바꿀 수도 있습니다. 예를 들어 아래는 제가 편집한 config.txt(앞부분만)인데 이렇게 설정하면 AUTOMATIC1111과 체크포인트 파일 등을 공유할 수 있습니다. 참고로 맨 마지막줄은 결과물이 저장되는 위치를 변경한 것입니다.

{
    "path_checkpoints": "F:\\sd\\stable-diffusion-webui\\models\\checkpoints",
    "path_loras": "F:\\sd\\stable-diffusion-webui\\models\\loras",
    "path_embeddings": "F:\\sd\\stable-diffusion-webui\\embeddings",
    "path_vae_approx": "F:\\Fooocus\\Fooocus\\models\\vae_approx",
    "path_upscale_models": "F:\\Fooocus\\Fooocus\\models\\upscale_models",
    "path_inpaint": "F:\\Fooocus\\Fooocus\\models\\inpaint",
    "path_controlnet": "F:\\sd\\stable-diffusion-webui\\models\\controlnet",
    "path_clip_vision": "F:\\Fooocus\\Fooocus\\models\\clip_vision",
    "path_fooocus_expansion": "F:\\Fooocus\\Fooocus\\models\\prompt_expansion\\fooocus_expansion",
    "path_outputs": "E:\00GoogleDrive\00SDOutput",

이미지 확대(Upscale)

Fooocus에서 이미지를 확대하는 것도 간단합니다.

  1. [Input Image] 체크박스를 켜고 이미지를 불러옵니다.
  2. "Upscal or Variations"에서 원하는 업스케일 옵션을 선택합니다.
  3. [Generate] 버튼을 누릅니다.

이미지 변형(Variation)

미드저니의 V1/V2/V3/V4 기능처럼, 이미지의 변형을 생성할 수 있습니다.

  1. [Input Image] 체크박스를 켜고 이미지를 불러옵니다.
  2. "Upscal or Variations"에서 원하는 Vary(Subtle)혹은 Vary(Strong) 옵션을 선택합니다.
  3. [Generate] 버튼을 누릅니다.

아래는 적용 결과를 비교해 본 것입니다. Strong은 변화가 좀 있네요.

원본 Vary(Subtle) Vary(Strong)

이미지 프롬프트(Image Prompt)

Fooocus에서도 AUTOMATIC1111과 비슷하게 이미지를 추가 프롬프트로 사용할 수 있습니다. 하지만 확장을 설치할 필요없이 사용할 수 있습니다.

이미지 프롬프트를 사용하려면, [Input Image] 체크박스를 체크하고 [Image Prompt] 탭을 선택한뒤 이미지를 올려주면 됩니다. 또한 아래쪽에 있는 [Advanced] 체크박스를 켜면 여러가지 설정이 나타납니다. 

이미지 프롬프트에는 ImagePrompt, PyraCanny, CPDS, FaceSwap 등 네가지 옵션이 있습니다.

ImagePrompt

아래는 ImagePrompt  기본 설정입니다. 

여기에서 각 매개변수는 아래와 같습니다. 

  • Stop at : 이미지 프롬프트 제어를 언제 끝낼것인지를 제어합니다. 0.5로 설정할 경우, 30 단계중 앞쪽 15단계에만 이미지 프롬프트를 적용한다는 뜻입니다.
  • Weight : 이미지 프롬프트의 가중치를 제어합니다. 

이 두 값 모두 크게하면 이미지의 효과가 더 많이 작용합니다. 아래는 적용 결과입니다.

프롬프트:  a chair that resembles a cat
Weight = 0.5 Weight = 0.75 Weight = 1.0

PyraCanny

PyraCanny는 피라미드 기반 Canny 외곽선 제어 기법입니다. SDXL 이미지는 해상도가 높아서 일반적인 Canny 알고리즘을 사용할 경우 미세한 부분이 날라갈 수 있습니다. PyraCanny 는 다중 해상도에서 계층방식으로 외곽선을 감지하는 방식을 사용합니다.

PyraCanny는 Canny 콘트롤넷과 비슷하게 구도나 인간의 자세를 복제하는데 사용합니다. 

아래는 프롬프트를 "an Asian man"을 사용하여 PyraCanny를 적용한 결과입니다.

CPDS

CPDS는 깊이기반의 구조 감지 기법입니다. Canny는 외곽선만을 추출하지만, CPDS는 이미지의 3차원 구성을 복제하며 이미지 변화가 심한편입니다. 아래는 CPDS를 적용한 결과입니다. 

FaceSwap

FaceSwap은 IP-adapter Face 콘트롤넷과 비슷합니다. 기본적으로 참조이미지의 얼굴을 복사하는 기능을 합니다.

아래는 프롬프트를 "a woman, praying"이라고 입력했을 때의 결과입니다. 헐... 송혜교님 얼굴이 들어 있기는 한데 완전 성숙한 분위기의 여인이 되어버렸네요~ㅎ

흠... 

다중 이미지 프롬프트

AUTOMATIC1111의 콘트롤넷처럼, Fooocus에서도 다중 이미지 프롬프트를 사용할 수 있습니다. 

예를 들어 아래의 두가지 이미지 프롬프트를 사용해 보겠습니다.

  • FaceSwap - Weight 0.5, Stop at: 0.9 - 얼굴을 복사합니다.
  • PyraCanny - Weight 0.5, Stop at: 0.5 -  자세을 복사합니다.  

아래는 결과입니다. 그런데 얼굴이... 별로 잘 복제가 안되네요. ㅠ

다중 이미지 프롬프트를 사용할 경우, 가중치를 낮춰야하는 경우가 많습니다. 이상한 색채 등 결함이 발생하기 쉽기 때문입니다.

PyraCanny 는 자세를 복제하는 데 매우 훌륭합니다. 가중치를 낮추고 Stop at을 낮추면 자세가 좀 더 유연해집니다. 이렇게 되면 위의 그림처럼 배경이 좀더 다양하게 연출됩니다. 

FaceSwap의 경우 가중치와 Stop at 값을 높이면 얼굴이 좀 더 잘 복제되는 경향이 있다고 합니다.

인페인트(Inpainting)

인페인트(Inpaint)는 입력한 이미지의 일부를 재생성하는 기능입니다. Fooocus에서는 아주 사용하기 쉽습니다.

[Input Image] 체크박스를 켜고 [Inpaint or Outpaint]를 선택한 뒤, 원하는 이미지를 업로드합니다.

다음으로 페이트 도구를 사용해서 재생성하고자 하는 부분을 마스크 처리합니다.

그 다음 [Generate] 를 누르면 생성됩니다. 아래가 결과입니다. 아주 잘되네요.ㅎㅎ

Image Detail로 지정할 경우, 아래와 같은 옵션이 추가되는데, 이중 원하는 버튼을 클릭해주면 해당되는 부분에 대한 원본 이미지의 미세한 디테일이 추가됩니다. 그런데... 얼굴이 좀 변했네요~~ ㅠㅠ

Modify Content를 지정할 경우, 마스크된 지역을 프롬프트를 지정하여 변경시킬 수 있습니다. 

Inpaint addtional prompt 에 "a woman with sunglasses"를 추가로 지정한 경우입니다.

아웃페인트(Outpainting)

아웃페인트는 이미지를 한쪽 또는 여러방향으로 확대시키는 기법입니다.

[Input Image] 체크박스를 켜고 [Inpaint or Outpaint]를 선택한 뒤, 원하는 이미지를 업로드합니다.

[Method] 드롭다운 메뉴에서 "Inpaint or Outpaint"를 선택합니다(기본 값입니다).

다음으로 원하는 방향을 지정합니다.

아래는 며칠전 올린 자동 인페인트/아웃페인트 - ComfyUI에서 사용한 이미지를 사용하여 아웃페인트 시켜본 결과입니다.

아래는 또다른 예입니다. 별로 신경쓰지 않아도 정말 잘 되네요.

프롬프트 알아내기(Describe)

Describe는 이미지의 프롬프트를 알아내는 기능입니다. AUTOMATIC1111에서 Interrogate CLIP을 사용하는 것과 비슷합니다.

이미지를 캔버스에 올리고 Content Type에서 사진인지 그림인지를 선택합니다.

그 다음 [Describe this image into Prompt] 버튼을 누르면 아래와 같이 프롬프트가 생성됩니다.

이렇게 프롬프트를 얻고나서 아웃페인트를 하니 편리하네요.

의견

저는 스테이블 디퓨전을 제일 많이 사용합니다. 미드저니는 아주 조금만 사용해 봤고, DALLE는 최근에 접해봤습니다. 그런데 대체적으로 스테이블 디퓨전은 상세하게 제어할 수 있다는 점이 좋고, 미드저니는 이미지 품질이 뛰어나며, DALL-E 3는 프롬프트를 잘 이해하고 따른다는 점에서 각각 장점이 있다고 합니다.

Fooocus는 간단하면서도 사용하기 쉽다는 점에서 이들을 보완하고 있습니다. 

특히 미드저니는 간단한 프롬프트만으로 품질 높은 이미지를 생성해 주는데, Fooocus가 이러한 점에서 미드저니의 기능을 어느 정도 보완하고 있고 무엇보다 자신의 PC에서 돌릴 수 있어서 마음대로 사용할 수 있다는 장점이 있습니다. 

처음에는 너무 간단해 보여 이걸로 뭘 그려낼 수 있나... 싶었는데, 정말 짜임새 있게 잘 만들었다는 생각이 드네요. 특히 간단한 프롬프트만 입력하면 된다는 점, 그리고 인페인트 아웃페인트가 편리하다는 점이 정말 마음에 듭니다. 앞으로도 자주 사용할 수 있을 것 같네요.

이 글은 https://stable-diffusion-art.com/fooocus/#Multiple_Image_Prompts 을 번역하면서 일부는 편집하여 작성한 글입니다.

민, 푸른하늘

===