AI 이미지/Stable Diffusion

투명 배경 이미지를 생성하는 방법

하늘이푸른오늘 2024. 3. 21. 15:50

배경이 투명한 이미지는 디자인 작업에 유용합니다. 동일한 이미지를 여러가지 배경에 반복적으로 사용할 수 있기 때문입니다. 이 글에서는 layer Diffusion 모델을 사용하여 Stable Diffusion v1.5 및 SDXL 모델 용 투명 이미지를 생성하는 방법을 소개합니다.

소프트웨어

이 글에서는 SD Forge와 ComfyUI 웹 GUI를 사용합니다.

  • SD Forge는 AUTOMATIC1111을 속도를 향상시키고 편의성을 높인 버전입니다. 
  • ComfyUI는 노드를 기반으로한 스테이블 디퓨전용 웹GUI입니다. 설치방법은 이 글을 보시고, 튜토리얼도 확인하세요.

스테이블 디퓨전에 대해 조금 더 알고싶으신 분은 기본적인 이론을 읽어보시면 도움이 되실 겁니다.

SD Forge로 투명 배경 이미지 제작

SD Forge는 AUTOMATIC1111 과 UI 및 사용법은 거의 비슷하지만, 백엔드를 재작업하여 효율을 높인 버전입니다. 이 글에 따라 설치하시면 됩니다.

최신 버전 업데이트

먼저 SD Forge를 최신버전으로 업데이트해야 합니다.

파일 익스플로러를 시행하여 SD Forge가 설치된 폴더(web-forge-cuxxx_torchxxx)로 들어가서 update.bat 파일을 더블클릭하면 필요한 파일들이 업데이트 됩니다.

Layer Diffusion 확장 설치

먼저 Extension 페이지에 들어가서 Install from URL 탭을 열고 "URL for extension's git repository" 필드에 아래의 주소를 입력합니다.

https://github.com/layerdiffusion/sd-forge-layerdiffuse

그 다음 "Install" 버튼을 누른 후, 잠시 기다리면 위 그림 맨 아래와 같이 설치가 완료되었다는 메시지가 나옵니다. 이후 Installed 탭으로 들어가서 [Apply and Restart] 버튼을 누르면 SD Forge 가 새로 시작됩니다.

SD v1.5 투명 배경 이미지 생성

txt2img 페이지에 들어가서 아래와 같이 설정합니다.

checkpoint 모델 : Realistic Vision v5.1
프롬프트 : a beautiful woman with messy hair, dress
부정적 프롬프트 : disfigured, deformed, ugly
샘플러(sampling method : DPM++ 2M Karras
샘플링 단계(steps) : 20
CFG 척도: 7
이미지 크기 : 512x768

다음으로 LayerDiffusion 영역을 열고 아래와 같이 설정합니다.

Enable : Yes
Method: (SD1.5) Only Generate Transparent Image (Attention Injection)

이제 [Generate] 버튼을 누르면 이미지가 생성됩니다. 

두가지 이미지가 생성되는데, 하나는 배경이 하얀색, 또하나는 배경이 체크무늬인 이미지입니다. 체크무늬인 이미지는 확인용이고, 하얀색으로 된 이미지가 사실은 투명한 배경입니다.

이미지를 생성할 때 얼굴이 잘 안나오는 경우가 있습니다. 특히 얼굴의 크기가 적을 때 이런 경우가 많이 발생합니다. 위의 이미지도 잘보시면 눈이 짝짝이입니다. 

이런 경우, Hires Fix를 사용하면 큰 이미지가 생성되면서 얼굴이 수정됩니다. (흠... 그런데 저에겐 오류가 발생하네요... ㅠㅠ)

SDXL 투명 배경 이미지 생성

layer diffusion은 SDXL 과도 함께 사용할 수 있습니다. 아래는 설정입니다.

체크포인트 모델: JuggernautXL 7
프롬프트 : a beautiful woman with messy hair
부정적 프롬프트 : disfigured, deformed, ugly
Sampling method : DPM++ 2M Karras
Sampling Steps : 20
CFG scale : 7
이미지 크기: 1216x832

아래는 LayerDiffusion 영역의 설정입니다.

Enable : Yes
Method : (SDXL) Only Generate Transparent Image (Attention Injection)

아래는 생성된 결과입니다.

참고사항

드롭다운 메뉴를 누르면 여러가지 모델이 있습니다. 이 글에서는 Attention Injection 방법만 사용했는데, 가장 좋은 결과를 생성합니다. 마음에 안드시면 Conv Injection 방법을 사용해보시기 바랍니다.

참고로, 유리와 같이 반투명한 객체에 대해서도 배경을 잘 소화합니다. 아래는 SDXL 설정과 동일한 설정에서 프롬프트만 a beautiful woman with wine glass, dress, close-up 로 바꾸고 생성한 이미지입니다.

아래는 이 이미지를 포토샵에 넣어서 배경색으로 바꿔본 예입니다. 투명 배경이 잘 설정되었음을 알 수 있습니다.

기타 스타일

사실적인 사진 외에도 그림 스타일 혹은 애니 스타일에서도 투명 배경을 생성할 수 있습니다. 아래는 설정입니다.

체크포인트 모델 : Dreamshaper v8
프롬프트: close-up of a beautiful girl, pick hair
                 BREAK
                 blue translucent dress

위에서 BREAK를 사용하면, 머리 색과 드레스 색이 섞이지 않습니다. 자세한 내용은 프롬프트에 관한 모든 것을 읽어보시기 바랍니다.

ComfyUI

Layer Diffuse 커스톰 노드를 사용하면 ComfyUI에서도 투명 배경의 이미지를 생성할 수 있습니다. 

워크플로 다운로드

아래는 투명 배경 이미지를 생성하는 워크플로입니다. 그림 혹은 json 파일을 다운로드 받은 후, ComfyUI 캔버스에 Drag&Drop 하면 사용할 수 있습니다.

transparent.json
0.01MB

이 워크플로를 불러오면 Layer Diffuse 커스톰 노드에서 가져온 노드는 빨간색으로 표시됩니다.  빠진 커스톰 노드를 가져오기를 따라 조치하면 사용할 수 있습니다. 기타 다음과 같은 작업이 필요할 수 있습니다.

혹시 Layer Diffuse 커스톰 노드를 불러올때 에러가 발생할 경우, 먼저 Manager -> Install PIP package를 누르고,  아래와 같이 입력란에 "diffusers>=0.25.0" 라고 입력한 후 [확인]을 누릅니다. 완료 이후에는 [Restart] 를 눌러주면 됩니다.

ComfyUI로 투명 배경 이미지 제작

이 워크플로에서는 JuggernautXL v6 모델을 사용하였습니다. 

다른 것은 건드릴 필요없이 [Queue Prompt]  버튼만 눌러주면 이미지가 생성됩니다. 아래와 같이 2개의 이미지가 생성되는데, [Layer Diffuse Decode (RGBA)] 노드를 거쳐 생성된 이미지가 투명 배경 이미지 입니다.

아래는 결과 이미지입니다.

SD 1.5용 투명 배경 이미지

아래는 SD 1.5 모델을 사용하여 투명 배경 이미지를 생성하는 워크플로입니다. 기본적으로 위의 워크플로와 동일하며, 필요에 따라 SDXL 용 설정을 SD 1.5용 설정으로 변경시킨 것입니다.

transparent2.json
0.01MB

아래는 이 워크플로를 사용해서 생성한 이미지입니다. 체크포인트 모델은 Dreamshaper v8을 사용했습니다.

Layer Diffusion 의 원리

Layer Diffusion 은 Lvmin Zhang과 Maneesh Agrawala가 저술한 논문인 Transparent Image Layer Diffusion using Latent Transparency에 설명되어 있습니다.

투명 배경이미지란

먼저 PNG 포맷 이미지에서 투명 이미지가 생성되는 원리에 대해 간단히 설명합니다. 

JPEG 포맷의 이미지에는 빨강(red), 녹색(green), 파랑(blue) 등 세가지 색 채널(color channel)이 존재합니다. 즉, JPEG 포맷의 이미지를 구성하는 하나하나의 픽셀에는 빛의 삼원색에 해당하는 값이 주어져 있습니다. 이들 RGB 색의 비율이 조합되어 색이 표현되는 것입니다.

그런데, RGB 채널 만으로는 투명을 표현할 수 없습니다. PNG 포맷의 경우에는 RGB 채널외에 별도로 알파 채널이 존재합니다. 이 알파 채널은 투명한 정도를 정의하죠. 0이면 완전히 투명하고, 최대값은 완전히 불투명하게 됩니다. 

Layer Diffuse 모델

Layer Diffuse 모델은 새롭게 학습시킨 VAE 인코더(E)와  디코더(D)를 포함하고 있으며, 이들이 투명한 이미지를 새로운 latent transparency  이미지로 인코딩하게 됩니다. 즉, Layer Diffuse 모델의 VAE는 RGB 및 알파채널의 4 채널을 가진 이미지를 생성합니다.

이 투명 잠상 이미지(latent transparency image)가 스테이블 디퓨전 잠상에 추가되어, 추론 품질에는 영향을 미치지 않고 원래의 잠상을 숨기게 됩니다.

아울러 U-Net 잠음 예측기도 투명 이미지의 잡음을 예측하도록 학습시켰습니다. 투명 이미지를 어떠한 미세 조정 모델에도 사용할 수 있도록, U-Net은 LoRA 모델로 저장됩니다.

저자는 또한 배경에 전경을 추가하고, 배경에 전경을 추가하는 모델도 공개했습니다.

이상입니다. 이 글은 https://stable-diffusion-art.com/transparent-background/ 을 일부 수정하여 작성했습니다.

민, 푸른하늘

====