어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
이전 포스팅을 통해서 이미지를 생성하는 것에 대해서 설명하였습니다. 이번 포스팅에서는 조금 더 퀄리티를 높여서 이미지를 생성하는 방법에 대해서 설명하도록 하겠습니다.
업스케일링(Hires)만 보고 싶으신 분들은 아래 1번 내용만 보시면 되고, 임베딩(Embedding =Textual Inversion)만 보고싶으시면 목차에서 2번을 선택하시면 됩니다.
🔸이미지 생성하는 포스팅 내용 아래 링크 참고
1. 업스케일링 (Hires) 사용
이미지를 처음 생성할 때 512x768 사이즈로 생성하였습니다. 이런 크기로 생성하면 이미지 크기가 작기 때문에 디테일한 부분, 특히 사람 얼굴의 세부적인 특징이나 손가락 등의 심각한 일그러짐 현상이 일어납니다.
이런 문제는 AI가 이미지를 학습할 때 작은 사이즈를 기반으로 학습하다 보니 세부적인 디테일이 품질이 떨어집니다. 그래서 대부분 이미지를 작은 사이즈로 생성한 뒤에 업스케일링 (이하 Hires) 기능을 통해서 퀄리티를 높이면서 사이즈도 키우는 방식을 사용합니다.
🟦 Hires 옵션 설명
'Generation' 옵션 설정에 보면 아래에 'Hires. fix'에 체크하면 업스케일링을 사용하여 이미지를 생성합니다. 처음에는 접혀있는데 체크하면 아래 옵션이 펼쳐져 나타납니다.
'Hires. fix' 옆에 보면 'from 512x768 to 768x1152' 이런식으로 적혀있는 것이 기존의 이미지 크기를 업스케일링을 통해 키웠을 때 이미지 사이즈를 볼 수 있습니다.
🔹Upscaler 종류 및 특징
Upscaler를 보면 굉장히 종류가 많은데, 아래는 제가 사용하고 있는 Upscaler들입니다. 아마 다른 분들과 종류 숫자가 다를 수 있는데 저는 따로 받아서 넣은 Upscaler들이 있어서 종류가 좀 많습니다. 종류만 많지 사용하는 Upscaler는 몇 개 없습니다.
자세한 내용은 아래 접은 글을 통해 확인하시면 됩니다. 주로 실사급 모델 이미지에서는 'R-ESRGAN 4x+'를 사용하고, 애니메이션 이미지에서는 'R-ESRGAN 4x+ Anime6B'를 사용합니다.
만약 다른 곳에서 Upscaler 모델을 다운로드하였다면 'WebUI'가 설치된 폴더 안에 [models] - [ESRGAN] 폴더에 넣어주면 Upscaler에 나타납니다. 만약 'ESRGAN' 폴더가 없다면 새로 만들어주시면 됩니다.
🔸원본이미지와 Hires를 사용한 이미지 차이 비교 (클릭하면 크게 볼 수 있습니다.)
🔸각 Upscaler 종류별 특징 설명 및 예시 이미지
- Latent
Denoising strength를 낮게쓰면 이미지가 뜨거운 여름날 아지랑이 피듯 열화현상이 나타나므로, 0.5 이상으로 사용해야 디테일이 풍부하고 색감이 선명한 이미지를 생성.
다른 업스케일러에 비하면 변화율이 가장 높은 편으로 세부적으로 디테일한 이미지를 원한다면 사용하는 것을 추천
- Lanczos
이미지의 선명도를 높이면서 부자연스러운 부분이나 노이즈를 제거하여 부드럽게 만듬. 다만 세부적인 디테일이 필요한 부분도 밋밋하게 만들 수 있음. 단순한 사진이나 풍경 이미지에 적합
- R-ESRGAN 4x+ / R-ESRGAN 4x+ Anime6B
두 업스케일러는 비슷하면서도 프롬프트의 내용이나 Generation 옵션에 따라서 약간씩 차이가 납니다. 'Anime6B'는 이름에서 볼 수 있듯이 조금 더 명확한 이미지를 뽑기 위해서 애니메이션 스타일에 좀 더 어울립니다. 그렇다 보니 세부적인 디테일이 좀 부각되는 경향이 있습니다.
'R-ESRGAN 4x+'는 이음새나 디테일한 부위를 자연스럽고 부드럽게 표현하다보니 실사에서의 초점거리에 맞춰진 디테일효과를 잘 구현해 주거나 조금 더 안정적인 이미지를 생성합니다.
아래 예시 이미지로 실사와 2D 애니메이션을 비교하여 올렸습니다. 클릭하면 크게 볼 수 있으므로 한 번 직접 확인해보시는 것이 이해가 되실 겁니다 ㅎㅎ
- 4xUltrasharp
4배율로 늘려서 이미지를 업스케일링한 효과를 주는 업스케일러입니다. 확실히 디테일적인 부분이 명확해지는 만큼 시간이 조금 더 소요됩니다. 'R-ESRGAN 4x+' 계열 업스케일러에 비하면 한 2~4초가량 더 소요됩니다. 물론 이미지 사이즈와 프롬프트의 양, Generation 옵션 등에 따라서 더 늘어날 수 있습니다.
아래는 'Anime6B'와 '4xUltrasharp'로 생성한 이미지의 비교 모습입니다. 가장 뚜렷하게 차이 나는 것은 갑옷의 거친 느낌과 문양의 디테일이 차이 나는 것을 볼 수 있습니다.
- 8x_NMKD-Superscale
이번에는 8배율로 업스케일링한 효과를 주는 업스케일러입니다. 해당 업스케일러를 사용하면 위에 언급한 업스케일러들보다 거의 20% 정도 이상 시간이 더 소요됩니다. 그만큼 세부적인 디테일이 명확하게 나타납니다.
아래는 차례로 왼쪽부터 'Anime6B', '4xUltrasharp', '8x_NMKD-Superscale'을 사용한 이미지입니다. 8배율이다보니 갑옷의 질감과 거친 느낌, 문양이 4x보다 훨씬 더 뚜렷해졌고, 뒤쪽의 성채 부분의 디테일도 향상된 것을 볼 수 있습니다.
🔹Hires steps
업스케일링을 통해서 고품질 이미지를 생성할 때 얼마나 반복적으로 정교한 이미지를 생성할지 횟수를 나타내는 값입니다. 0으로 설정하면 기존의 'Sampling steps' 값을 사용하여 이미지를 생성합니다.
당연히 Hires를 사용하지 않은 상태의 이미지 생성 시 사용하는 Steps 값은 생성 시간이 큰 차이가 없지만, Hires를 사용하면 'Hires steps'를 우선하여 사용합니다. Hires는 시간 자체가 꽤 오래 걸리므로 보통 'Hires steps' 값을 10 ~ 20 사이로 사용합니다.
다양한 값을 사용하여 테스트해보면서 자신에게 맞는 설정값을 찾아보셔도 상관없습니다.
🔸Hires steps 값에 따른 이미지 차이 비교
🔹Denoising Strength
고품질 이미지를 생성하는 과정에서 노이즈를 제거하는 강도(Strength)를 나타내는 값입니다. 이 값이 낮으면 낮을수록 원본 이미지에 가까운 디테일과 노이즈를 유지하여 생성하고, 반대로 높으면 원본이미지에서 정교하게 노이즈를 추가 적용하여 굉장히 디테일하면서 원본이미지와 다른 스타일로 생성합니다.
다만 너무 높게(0.7보다 높게) 사용하면 프롬프트의 정확도를 크게 벗어나지는 않지만, 노이즈가 너무 극단적으로 추가되어서 괴이한(?) 이미지가 생성될 수 있습니다. (아래 예시 이미지 참고)
본인이 원본이미지 스타일을 더 좋게 본다면 낮게 쓰시면 되고, 좀 다양한 느낌으로 보고 싶다면 높이시면 됩니다. 보통은 0.3 ~ 0.7 사이로 사용하지만 본인 취향에 따라서 값을 다르게 사용하셔도 상관없습니다.
🔸Denoising Strength 값에 따른 이미지 차이 비교
🔹Upscale by
이미지의 확대 크기 배율을 설정하는 값입니다. 즉, 몇 배로 크게 만들지를 설정하는데, 보통 1.5 ~ 2.0으로 사용합니다. GPU가 RTX30시리즈 이상이고, VRAM이 12GB 이상이라면 더 높게 써도 GPU가 버틸만하겠지만 8GB 이하에서는 가급적 2배 이상으로 많은 이미지를 생성할 경우 GPU 과부하가 걸릴 수 있습니다.
저도 이미지의 퀄리티는 좋게해서 여러 장을 보고 싶을 때에는 1.4 ~ 1.5로 낮게 설정해서 생성하고, 좋은 이미지를 더 크게 뽑고 싶을 때 2.0으로 생성합니다.
업스케일 크기를 변경하는 것만으로도 이미지의 디테일이 달라집니다. 사이즈가 커진다는 것은 그만큼 커진 공간에 세부적인 디테일을 더 그릴 수 있게 되므로 원본과 비교했을 때 세부적인 디테일이 다를 수 있습니다.
🔸Upscale by 값에 따른 이미지 차이 비교
2. Embedding(=Textual inversion) 사용
Emdedding(이하 임베딩)는 이미지를 생성하는 모델에 새로운 키워드를 추가하여 새로운 스타일로 이미지를 생성하는 기술을 말합니다. 임베딩 기법은 보통 적은 숫자의 샘플 이미지를 기반으로 특정한 스타일만을 학습하므로 미세조정 및 새로운 스타일로 이미지를 생성할 수 있습니다.
임베딩은 단순히 특정 키워드만 프롬프트에 삽입하면 되므로, 모델 변경을 할 필요 없이 사용할 수 있다는 장점이 있습니다. 예를 들면, 고흐 스타일의 화폭 몇 개를 가지고 학습한 임베딩을 특정 모델에 추가하여 이미지를 생성할 경우, 기존 모델에 고흐의 스타일이 들어간 이미지 형태로 변경하여 생성합니다.
임베딩은 Civitai나 Hugging face와 같은 사이트에서 다운로드 받을 수 있으며, 'WebUI'가 설치된 폴더에 보면 'embeddings'라는 폴더가 있습니다. 이 폴더 안에 다운로드 받은 임베딩을 넣어주면 사용 가능합니다.
🟦 Embedding 다운로드
가장 보편적으로 사용하는 임베딩 중 하나를 다운로드 받아보겠습니다.
🔹Fast Negative Embedding (+ FastNegativeV2) : 링크
'Fast Negative Embedding' 임베딩 사용법은 부정프롬프트에 'FastNegativeV2' 라는 키워드를 넣어주면 이 임베딩에 학습된 내용을 이미지에 적용시킵니다. 해당 임베딩은 품질이 떨어지는 이미지 생성을 방지하기 위한 부정적인 요소를 제거해 주는 다양한 키워드들을 하나의 키워드로 묶어서 사용할 수 있습니다. 특히 손의 퀄리티가 저하되는 것을 일부 방지해 줍니다. (물론 SD 1.5에서는 손가락 퀄리티는 복불복이라 잘 나오기는 힘듭니다 ㅎㅎ;)
다운로드한 임베딩 파일을 'embeddings' 폴더에 넣은 뒤 WebUI를 실행합니다. 이미 실행 중인 상태라면 'Generation' 카테고리 우측에 보면 'Textual inversion' 카테고리를 선택합니다. 그리고 우측 끝에 보면 새로고침 아이콘 버튼을 눌러 임베딩을 새로 불러오기 합니다. 불러오기가 완료되면 아래 추가된 임베딩이 나타납니다.
🟦 Embedding 사용하기
임베딩을 사용하는 방법은 아주 간단합니다. 'Textual inversion'에 추가된 임베딩을 선택하면 프롬프트에 해당 임베딩의 키워드가 자동으로 입력됩니다. 참고로 방금 추가한 'FastNegativeV2' 임베딩은 이름에서도 알 수 있듯이 '부정 프롬프트'에 추가하는 임베딩입니다.
아래는 임베딩을 사용하여 생성한 이미지와 사용하지 않은 이미지들의 비교입니다. 단순히 부정프롬프트에 아무것도 넣지 않은 것과 'FastNegativeV2' 키워드 하나 넣은 것만으로도 이미지의 퀄리티가 확연히 차이가 납니다.
🔹부정프롬프트에 임베딩 사용한 것과 사용하지 않은 이미지 차이
🔸위 이미지의 프롬프트 (그대로 복사하여 사용해도 됩니다)
(masterpiece, best quality, highres, highest detailed), (illustration, colorful, dim colors, official art), (extremely intricate, intricate details, extreme detailed), fashion photography, (extremely detailed CG unity 8k wallpaper, professional photograph), dynamic angle, upper body, outdoors, the most beautiful in the world, far away castle, looking at viewer, from front, BREAK 1girl, (mechanical bodysuit, mechanical parts, mecha, mechanical armor:1.2)
🔸사용한 모델과 Generation 옵션
- Checkpoint Model : RealCartoon3d_v17
- VAE : vae-ft-mse-840000-ema-pruned
위의 프롬프트에서 '부정 프롬프트'에 `(worst quality, low quality:1.4)` 프롬프트를 추가하여 생성하면 아래와 같이 이미지가 생성됩니다. 해당 프롬프트는 낮은 퀄리티의 이미지를 제거하고 이미지를 만들겠다는 의미입니다.
※ 아래 우측 이미지는 부정 프롬프트에 `(worst quality, low quality:1.4), FastNegativeV2`를 넣은 모습입니다.
여기서 괄호와 1.4라는 숫자는 강조수치인데, 이 부분에 대해서는 다음 포스팅에서 프롬프트 관련 설명을 할 때 자세히 설명하도록 하겠습니다.
🔹위 프롬프트에서 부정 프롬프트에 (worst quality, low quality:1.4) 이것만 추가한 이미지 비교
이와 같이 다양한 임베딩을 추가하면 적은 수의 키워드로 괜찮은 이미지를 생성할 수 있습니다. 아래는 제가 사용하는 것 중 괜찮은 임베딩을 다운로드할 수 있는 Civitai 페이지 링크입니다. (전부 부정프롬프트에서 사용하는 임베딩들)
🔸bad_prompt negative embedding : 링크
🔸BadDream + UnrealistickDream (두 가지 각각 다운로드하아야 합니다) : 링크
두 임베딩은 DreamShaper모델에 최적화된 임베딩인데 다른 모델에서도 사용해도 상관없습니다. 다만, 극 사실 위주의 모델에서만 사용하길 권장하며 2D 애니메이션 스타일 이미지 생성 시 너무 디테일하게 생성되므로, 단순한 2D 이미지 생성할 때는 사용하지 않는 것을 권장합니다.
'UnrealistickDream'은 단독으로 사용 시 너무 극사실로 생성하기 때문에 조금 더 부드럽게 처리해 주는 'BadDream' 임베딩을 같이 사용합니다. 물론 본인 취향에 맞춰서 사용하셔도 됩니다 ㅎㅎ
🔸veryBadImageNegative : 링크
아래 이미지를 보시면 상단에 사용한 임베딩 목록이 적혀있습니다. 맨 우측에 있는 것이 부정 프롬프트에 `(worst quality, low quality:1.4), FastNegativeV2` 프롬프트만으로 생성한 이미지이고, 나머지는 각각 상단에 보이는 임베딩들이 추가된 모습입니다.
이 외에도 Civitai 같은 곳에서 Embedding을 필터로 설정하여 검색하면 다양한 임베딩들을 다운로드 하실 수 있습니다. 본인이 취향껏 원하는 것을 받아서 적용하시면 됩니다. 다만, 대부분 부정 프롬프트에서 사용하기는 하나 간혹 일반 프롬프트에서 사용하는 것들이 있으니 구분하셔서 사용하시면 됩니다.
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.