
Stable Diffusion으로 이미지를 생성하기로 했으니 방법을 찾아보자.
구글의 Colab과 같은 서비스를 통하면 클라우드 컴퓨터 자원을 사용하기 때문에,
로컬 컴퓨터의 사양(주로 GPU)요구에서 자유로워진다. 하지만 많은 제약이 있고, 현재 시점에서는 유료구독의 경우에만 Stable Diffusion을 정상적으로 사용할 수 있다고 한다.
나의 경우는 게이머의 기본 소양(?)을 갖추고 있기에, 충분한 CPU / GPU / RAM 이 갖춰져 있기에 로컬에서 직접 Stable Diffusion을 직접 설치하는 것이 더 좋은 선택지다.
Stable Diffusion을 쉽게 사용하기 위해서, WebUI 환경에서 편의를 제공하고 있는 버전이 있다. 여기에서 따로 더 찾아보니 나는 SD Forge라는 버전을 찾게 되었다.
기존보다 이미지 생성의 속도가 빠르다고 하니 SD Forge를 사용하기로 했다.
Stable Diffusion Forge WebUI 설치

깃허브 링크를 통해서 설치 파일을 받을 수 있다. update.bat 파일을 실행 하면 실행에 필요한 파일을 받는다. 이 작업이 끝나고 run.bat 파일을 실행하고 조금 기다리면 (이 때에도 필요한 여러 파일을 다운 받는 작업이 진행될 수도 있으며, 반응이 없는 것 같다면 엔터키를 눌러 주자) 자동으로 브라우저가 켜지면서 Stable Diffusion을 웹 환경에서 사용 할 수 있다.
WebUI를 처음 봤다면 정확히 무엇을 해야 할지 어렵다. 모든 기능을 설명하기에는 양이 방대하고, 나도 전문적으로 잘 알지는 못한다. 그래서 가장 실 사용에 가깝게 핵심 기능만 바로 사용해 보기로 한다.

우선은 xl이라는 것을 선택 하자.
여기서 옵션 값의 상세내용은 다음과 같다.
일반적인 경우에 고해상도의 고품질 이미지를 원하기 때문에 xl을 대부분 선택한다. 다른 부분은 나중에 필요 할 때 설명하기로 한다.
GPU Weights (MB) 는 Stable Diffusion 모델이 사용하는 가중치(Weights) 데이터를 GPU 메모리에 얼마나 할당할지를 결정하는 값으로, 현재 컴퓨터의 VRAM에 따라서 자동으로 설정되니 이 값은 그냥 설정된 값을 사용하면 된다.
가장 기본으로 선택이 되어있는 Txt2img를 통해 이미지를 생성 해 보기로 한다.
명칭 그대로 텍스트를 통해서 이미지를 선택한다는 뜻이다.
Stable Diffusion에서 텍스트를 통해 생성하려는 이미지를 만들 때 사용하는 키워드를 프롬프트(Prompt)라고 한다.
일반(긍정) 프롬프트와 부정 프롬프트(Negative Prompt)의 두 영역으로 나뉘는데,
일반에는 이미지에 포함되었으면 하는 것, 부정은 포함 되지 않았으면 하는 것을 입력하는 구조이다.

a beautiful fantasy princess, highly detailed, intricate, ultra high definition, cinematic lighting, wearing a royal gown, flowing hair, magical aura, glowing eyes, soft shadows, photorealistic
low quality, blurry, ugly, deformed, extra limbs, bad anatomy, low resolution, text, watermark, bad hands
ChatGPT 를 통해서 프롬프트 예시를 얻어냈다. 판타지 풍 공주 이미지를 의도했다. 부정 프롬프트의 경우 특별히 나타나지 않았으면 하는 요소이외에, 기본적으로 저품질을 배제하는 키워드를 항상 넣는 것을 추천한다고 한다. (추가적으로 Stable Diffusion의 이미지 생성방식은 일반적으로 자연어 문장보다는 키워드로 표현한다)
지금 시점에서는 각 내용에 대해서 자세히 설명하지는 않겠다. 이미지 품질에 대한 최적값을 다른 사람들의 공유를 통해 알 수 있었으므로, 자연스럽게 따라 한다.
이제 모든 값을 입력 했다면 Generate를 눌러 주자. 하지만 에러메시지가 발생할 것이고,
Model이 없다는 에러가 발생한 것을 알 수 있다.
이제 그럼 이 Model이 무엇이고 어디서 찾을 수 있는지 알아보기로 하자.
Stable Diffusion을 직접 사용하는 입장에서만 간단히 설명하면, Model은 이미지를 생성하는 기본적인 AI 구조 혹은 알고리즘의 방식을 의미한다.
이 모델로는 Stable Diffusion 1.5, 2.1, SDXL 등이 존재하고, WebUI 상단 메뉴에서 선택했던 것이 이것을 의미했다. 각 세부 모델이 어떤 방식으로 이미지를 생성하고, 어떻게 학습 시키는 것이 좋은 결과를 만들 수 있을지 아는 것은 나의 영역이 아니다.
사용자 입장에서는 최적으로 학습되어 실제로 사용가능한 모델을 직접 찾는 것이 중요하다.
그리고 이 학습이 완료된 결과물도 아주 쉽게 구할 수 있다.
다른 사이트도 있지만 위 2개의 사이트가 가장 유명하다. 그리고 해당 모델로 어떤 결과(이미지)를 확인 할 수 있는지 먼저 확인 해 볼 수 있는 Civitai 사이트가 Stable Diffusion을 처음 사용하는 입장에서는 편했다. 이 Civitai를 기준으로 Model을 다운 받아보도록 한다.

Civitai 에서 모델을 눌러보면 어떤 이미지를 생성 해 볼 수 있는지 (2D, 3D, 실사, 화풍 등) 대표 이미지와 함께 모델을 찾고 다운 받을 수 있는 페이지를 확인 할 수 있다.
여기에서 여러 용어들이 또 등장하는데 중요한 핵심 개념만 잡고 넘어가기로 한다.
이전에 Model을 다운 받아야 한다고 했는데 정확히는 Checkpoint를 받아야 한다. 이 Checkpoint는 특정 모델의 전체 가중치(Weights)를 저장한 파일로 모델의 전체 구조를 포함한 학습된 주요 모델 파일이다. 파일 용량이 아주 큰 편이다.
특정 스타일이나 캐릭터를 추가로 학습시킨 보조 모델로, 범용적인 이미지를 생성하는 것이 아닌 자신이 원하는 특정 스타일과 캐릭터만을 생성하기 위한 모델이다.
예를 들면 지브리, 원피스와 같은 특정 만화 & 애니메이션의 스타일을 적용하거나, 특정 캐릭터의 외형을 생성 하도록 의도하는 모델이다. LoRA를 이용하면 마치 동일한 작가가 그림을 그린 듯한 균등한 결과를 만들 수 있는 장점이 있다.
색감과 디테일을 보정하는 역할을 한다. 이미지를 더 선명하고, 색감이 풍부하게 만들어준다. 일부 모델에서는 자체적으로 VAE를 포함하고 있고, 반드시 필요한 요소는 아니다.
만약 자신이 사용하려는 Checkpoint에 VAE를 같이 사용할 것을 표기한다면 이때 같이 사용해야 샘플 이미지와 유사한 이미지를 확인 해 볼 수 있다.
아직 첫 예시 이미지를 생성조차 못했으니, 가장 빠르게 적용 해 볼만한 Checkpoint를 찾아 다운받기로 해 보자.

Civitai의 검색 필터를 통해서 Checkpoint, SDXL Hyper 모델을 선택 했다. 각 Base Model에 따라 지향하는 그림체나 화풍 등이 다른데, 지금 시점에서는 그냥 이것을 선택하고 적당한걸 받아 보기로 하자.

나는 우선 Waitfriend 라는 Checkpoint 받아보기로 한다. 대부분의 Checkpoint는 2GB를 시작으로 6GB를 넘는 대용량의 파일이다. 다운로드를 받으려면 회원가입이 필요하다. 참고로 확장자의 경우 .safetensors가 존재 한다면 이것을 받는 것이 보안에 좀 더 좋다고 한다.
이 파일을 다 받았다면 Stable Diffusion을 설치한 폴더의 하위 다음 경로에 Checkpoint 파일을 옮기도록 한다.
webui\models\Stable-diffusion

WebUI를 다시 실행 시키지 않고도, 상단 메뉴에서

새로고침 아이콘을 누르고나면 Checkpoint의 셀렉트 박스가 갱신 되는 것을 확인 할 수 있다. 이제 사용할 Checkpoint를 선택하고, 이전의 생성하려고 했던 이미지를 다시 한번 Generate를 눌러보자. 시간이 조금 지나면 (개인 PC의 사양에 따라 생성 시간이 차이가 난다) 결과를 다음과 같이 확인 해 볼 수 있다.

나의 경우는 위와 같은 결과를 얻을 수 있었다. AI 생성 이미지의 가장 빈번한 문제인 손가락이 이상한 듯한 느낌도 들긴 하지만, 테스트 단계니 그냥 넘어가도록 한다.
이 Txt2img 방식으로 생성한 이미지는 같은 모델과 설정 값을 써도, 그 결과는 매번 다르다. 그 이유는 현재의 Seed 값이 : -1 로 설정 되어있으며, 이것은 랜덤 값을 의미한다. 만약 모든 설정과 이 Seed 값이 동일하다면 동일한 결과의 이미지를 확인 할 수 있다.(이론적으로)

추가로 생성 버튼에서 마우스 오른쪽 버튼을 누르면 위와 같은 선택을 할 수 있다. 생성을 무한대로 하겠다는 건데, 보통 이런식으로 작업을 걸어 놓고, 의도했던 것과 가장 가까운 이미지를 일부 보정하거나, 이 이미지를 기반으로 재생성 시키는 방식으로 원하는 이미지에 최대한 가깝도록 결과를 만들어 낼 수가 있다.
아주 간단하게나마 Stable Diffusion의 Txt2img 기능을 체험 해 봤다. 자신이 원하는Checkpoint 나 LoRA 등을 찾고 원하는 결과에 가깝도록 계속 프롬프트나 설정 값을 조정하는 것이 AI를 통한 이미지 생성의 기술아닌 기술이요, 시간과 함께 품을 요구 하는 작업이다.
이Txt2img 기능은 보편적으로 Stable Diffusion에서 가장 쉽게 접할 수 있는 기능이며,
인물이나 배경 등을 프롬프팅이라는 키워드를 나열하는 것으로 그 이미지 전체를 만들어 준다. 이 경우로 만든 결과는 게임의 배경이나 일러스트를 만드는데는 아주 적합하다.
그러나 사전에 게임 개발의 설계에서 의도했던 것과는 맞지 않는다.
키워드만 언급 했던 Spine 으로 잠시 넘어가 보도록 한다. 여기서의 예제를 하나 살펴보고, 실제 사용되는 이미지를 보면 다음과 같다.

위와 같은 캐릭터를 구현하기 위해 사용된 이미지는 아래와 같이 분리된 이미지이다.
Spine은 개별로 분리된 이미지를 적절한 위치에 배치 해 주는 기능을 해주고 있는 것이다.

그렇다면 이 같은 결과를 어떻게 만들어 낼 수 있을까? 하나의 완성된 이미지를 따로 포토샵으로 분리해야 할까? 만약 이 작업을 매번 거친다면 별도의 추가 작업과 함께, 명확한 분리 작업이 까다로울 수도 있다. 다음 포스팅은 이 Skeletal Animation을 위한 작업물을 최대한 쉽게 만들어보기 위한 Stable Diffusion의 사용법을 찾아보기로 한다.