ControlNet은 원본 이미지의 형태(composition)를 유지하면서 디테일을 더하거나 색감을 바꾼 새로운 이미지를 생성해줄 수 있는 툴이다.
관련 설명은 아래를 참고할 수 있다.
- https://github.com/Mikubill/sd-webui-controlnet/tree/main
- https://www.reddit.com/r/StableDiffusion/comments/119o71b/a1111_controlnet_extension_explained_like_youre_5/
아래에서는 모델을 다운로드할 수 있는데, 용량이 맞는지 체크 필수... (37 KB 정도의 모델 정보만 다운받았는데 잘 다운이 된 줄 알고 어디서 에러가 났는지 찾느라 헛짓을 오래했다..)
https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main
사용을 하려면 ControlNet 탭에서 Enable를 체크해준다. 원하는 모델을 선택하고 그에 따라서 Preprocessor를 선택하면 된다 (control_canny-fp16 [e3fe7712] 모델을 선택했다면, preprocessor도 그와 동일한 canny를 고르는 식). 여러가지 preprocessors가 존재한다.
- canny: 이미지의 디테일한 선을 따주기 때문에 색을 변경할 때 사용할 수 있다 (NovelAI의 Palette Swap). 노이즈가 있을 수 있다.
- depth: 이미지의 3D 모양을 인식하여 생성하는 이미지의 composition을 정의할 때 이용한다. 캐릭터 포즈나 구도를 정의할 때 유용하다 (NovelAI의 Form Lock). 더 디테일한 묘사를 하고 싶다면 depth lres를 사용한다.
- open pose: 인물의 동작을 뽑아내준다.
- fake scribble: 이미지에서 loose하게 틀을 따준다. 이미지의 간단한 실루엣으로 새로운 이미지를 생성할 때 이용할 수 있다 (NovelAI의 Scribbler). 참고로 직접 canvas에 그릴 때는 scribble, 이미지에서 따줄 때는 fake scribble이라고 하는 것 같다.
- MLSD (Mobile Line Segment Detection): 직선을 통해서 구조물의 형태를 나타내줄 수 있다. 특히 비슷한 구도의 방이나 빌딩을 그릴 때 사용할 수 있다 (NovelAI의 Building Control)
- Segmentation: 이미지 내에 있는 물체를 구분해준다. 특히 비슷한 구도의 배경을 그릴 때 사용할 수 있다 (NovelAI의 Landscaper).
- HED (Holistically-Nested Edge Detection): 부드러운 outlines를 생성한다. 주로 사용되는 tool로서, canny와 같이 디테일을 제공하지만 노이즈가 적다고 한다. 이미지의 컬러를 다시 입힐 때 사용해볼 수 있다.
- pidinet (Pixel Difference Network): 부드러운 outlines를 생성한다. Scribble과 Hed의 중간.
- tile: 이미지를 비슷하게 유지하면서 화질을 좋게 할 때 사용 가능. 이미지를 타일로 나눠서 각각 생성하여 합치는 방식이다.
- t2ia_style_clipvision: 특정 그림의 스타일을 다른 그림에 적용할 수 있다.
여러 preprocessors 한번에 사용하려면 (Multi ControlNet), [Settings] > [ControlNet] > Multi ControlNet: Max models amount (requires restart) 값을 조절한 후 web UI를 재시작한다.
Txt2Img나 Img2Img에서 총 3가지 방식으로 사용할 수 있다.
- Txt2Img의 ControlNet 탭에 이미지를 올려두고 생성
- Img2Img에 이미지를 올려두고 생성
- Img2Img 및 Ixt2Img의 ControlNet 탭에 이미지를 올려두고 생성
정확한 차이는 아직 모르지만, 2는 Img2Img에 올려둔 이미지를 틀로 하여 해당 느낌으로 이미지를 생성해 줄 수 있는 것 같고, 3은 ControlNet 탭에 올려둔 이미지를 틀로 하여 Img2Img에 올려둔 이미지 느낌으로 새로운 이미지를 생성해 줄 수 있는 것 같다.
관련 개념
- Pixel Perfect: Preprocessor (annotator)의 resolutions을 수동으로 조절하지 않아도 자동으로 best annotator resolution을 계산하여 pixel이 완벽하게 맞도록 해준다.
Blender를 이용한 원하는 포즈 생성
지금까지는 사진이 있는 상태에서 그 사진의 형태를 뽑아왔다면, 사진이 없어도 캐릭터의 포즈 등을 생성할 수 있는 방법이 있다.
https://www.reddit.com/r/StableDiffusion/comments/12p01tw/controlnet_11_fingers/
한편, 위 레딧글의 댓글에 Blender 프로그램을 이용해서 원하는 포즈를 생성할 수 있는 방법이 소개되어 있다.
https://toyxyz.gumroad.com/l/ciojz
Blender 및 Character bones that look like Openpose for blender를 설치하면 원하는 캐릭터 포즈가 나오도록 조절할 수 있다. 원하는 캐릭터 포즈를 설정했다면 그 포즈대로 ControlNet의 input으로 쓰일 사진들을 저장한다. ControlNet에서 그 사진들을 기반으로 새로운 이미지를 생성할 수 있는 것 같았다.
활용 사례
1. https://www.reddit.com/r/StableDiffusion/comments/12isqcs/my_talent_vs_my_talent_ai/
- 모델은 Deliberate_v2, CFG scale around 22, Denoise 7-8로 세팅하였다고 한다.
- Prompt:"a beautiful winged dragon is flying over snowy capped mountains and air balloons, the dragon is very colorful, the air balloons are very colorful with medieval patterns, fluffy clouds in the sky"
- Image2image + ControlNet (Preprocessor: Scribble, model: control_sd15_scribble)
- ControlNet (Preprocessor: canny, weight: 0.4)
- 단체 사진을 애니메이션화 시켰다.
- 댓글에서 구체적인 워크플로우를 확인할 수 있다.
- 먼저 단체 사진을 한번에 애니메이션화 시킨 것은 아니고, 개개인을 나눠서 하고 합쳤다고 한다.
- Multi-controlNet을 사용하였는데, 얼굴 annotation을 위해 MediaPipe face preprocessor를 썼고, OpenPose editor 및 ControlNet hed를 사용했다고 한다.
- 개개인별로 그림을 생성할 때 나중에 합치기 쉽도록 white background나 greenscreen 등을 넣었다고 한다. 또한 수정이 필요한 부분은 inpaint로 진행했다고 한다.
- 마지막으로 인물 부분을 제외하고 inpainting을 통해 배경에 그림자를 넣었다고 한다
참조
'AI Image > News & Tips' 카테고리의 다른 글
[NovelAI] 그림의 퀄리티를 높이는 매직 태그 (0) | 2023.03.26 |
---|---|
[Stable Diffusion] 게임 배경으로 사용 가능한 픽셀 아트 모델 (0) | 2023.03.26 |
[Stable Diffusion] 구글 코랩을 이용해서 web UI 실행하기 (무료) (0) | 2023.02.28 |
[NovelAI] 프롬프트 믹싱(Prompt Mixing)을 통한 그림 생성 (0) | 2023.01.29 |
[NovelAI] 자주 쓰는 프롬프트 모음 + 기본 세팅 (0) | 2023.01.29 |