· 톺아보기

정보

컨트롤넷 + 투샷 활용방법

멍멍개찜 ·

조회 8,635 · 공감 4 · 댓글 11

출발점은 어린이용 동화책 만들기에 있습니다.

참고 : https://www.clien.net/service/board/cm_aigurim/17923158?od=T31&po=3&category=0&groupCd=CLIEN


투샷 기능은 webui에서 "Latent Couple extension"을 설치하면 사용할 수 있습니다.

https://github.com/opparco/stable-diffusion-webui-two-shot


예제가 별로 없어서 Divisions와 Positions 개념을 이해하는데 조금 시간이 걸렸습니다.

Divisions는 각 영역별로 Row(행):Column(열)을 몇등분 할 지 정의하는 것입니다. 2:3 이라고 하면 Row는 두조각, Column은 세조각 이라는 뜻입니다.

Positions는 앞에서 나눈 영역의 어느 위치인지를 지정하는 것입니다. 첫번째칸이 0이며, 앞에서처럼 2:3 으로 나누었다면, 0:0, 0:1, 0:2, 1:0, 1:1, 1:2로 각 칸을 선택할 수 있습니다.

mm.png

Divisions를 2:1.5 와 같이 소숫점으로 하면 절반보다 큰 영역을 지정할 수 있습니다.

mm2.png

다만, 이 값으로 한 칸의 크기가 결정되기 때문에, 아래나 오른쪽을 절반보다 큰 영역으로 지정하는 방법은 없어보입니다. 예를 들어 우측의 2/3를 지정하고싶어서 첫 칸을 1/3로 설정하면 Positions에서 지정 가능한 것은 아래처럼 되기때문입니다.

mm3.png

정말 필요한 경우에는 그림을 그리고 나서 상하/좌우를 반전시키거나, 여러개의 zone에 같은 prompt를 넣는 방법밖에 없을 것 같습니다.


컨트롤넷을 사용하면 prompt만으로는 전달하기 어려운 그림의 구도를 전달할 수 있습니다. 세마리의 돼지와 기린이 함께 있는 모습을 그려서 scribble로 입력해주었습니다.

story4.png


구도에 맞춰 zone을 설정하고 Latent Couple에 값을 적절히 넣어줍니다.

mm4.png

prompt는 다음과 같이 각 영역별로 서술하면 됩니다. 첫번째는 그림 전체의 분위기를, 두번째와 세번째는 각 영역의 세부 내용을 적어 줍니다. 몇번의 시행착오 끝에 아래와 같이 하는 것이 제일 좋아보였습니다.


watercolor, animals in the forest

AND watercolor, 3piglets

AND watercolor, 1giraffe


물론 돼기린이 생성되는 경우도 여전히 존재 했습니다만, 컨트롤넷+투샷을 사용하지 않았을 때 희망이 거의 없어보였던것에 비하면 매우 높은 확률로 원하는 결과를 얻을 수 있었습니다.


또한 Latent Couple extension 예시에서는 기본 step을 28로 하고, end at step을 20으로 설정하는 것으로 보아, 투샷 기능을 어느정도 적용하고 나서 추가로 최종 디테일을 더해주는 것으로 보입니다. 다만 수채화 특성상 과하게 디테일을 넣을 경우에 높은 확률로 혼합체가 생성되는 부작용이 있어서, 이 부분은 상황에 따라 시행착오가 필요할 것 같습니다.


아래는 성공적으로 생성한 이미지들입니다.


watercolor, animals in the forest
AND watercolor, 3piglets
AND watercolor, 1giraffe
Negative prompt: (worst quality, low quality:1.4),
Steps: 28, Sampler: Euler a, CFG scale: 7, Seed: 3533367577, Size: 512x512, Model hash: 4c13cf9c00, Model: hasdx_hasedsdx, ControlNet Enabled: True, ControlNet Module: scribble, ControlNet Model: control_scribble-fp16 [c508311e], ControlNet Weight: 1, ControlNet Guidance Strength: 1, Latent Couple: "divisions=1:1,2:1.5,1:3 positions=0:0,1:0,0:2 weights=0.2,0.8,0.8 end at step=20"

06493-3533367577-hasdx_hasedsdx-Euler a-watercolor, animals in the forest_AND watercolor, 3piglets_AND watercolor, 1giraffe.png

Steps: 28, end at step=20, Seed: 3533367580

06496-3533367580-hasdx_hasedsdx-Euler a-watercolor, animals in the forest_AND watercolor, 3piglets_AND watercolor, 1giraffe.png

Steps: 20, end at step=20, Seed: 2421207057

06498-2421207057-hasdx_hasedsdx-Euler a-watercolor, animals in the forest_AND watercolor, 3piglets_AND watercolor, 1giraffe.png


마지막으로 투샷 없이 컨트롤넷만을 사용했을 때에는 아래처럼 높은 확률로 기린을 나무로 만들어버리네요.

watercolor, three piglets and a giraffe playing together in the forest.
Negative prompt: (worst quality, low quality:1.4),
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2111786568, Size: 512x512, Model hash: 4c13cf9c00, Model: hasdx_hasedsdx, ControlNet Enabled: True, ControlNet Module: scribble, ControlNet Model: control_scribble-fp16 [c508311e], ControlNet Weight: 1, ControlNet Guidance Strength: 1

06520-2111786568-hasdx_hasedsdx-Euler a-watercolor, three piglets and a giraffe playing together in the forest.png



댓글 11

  1. 불토끼 ·
    구역 설정하는 기능이 있군요 감사합니다
  2. MeltCz ·
    흥미롭네요. Latent Couple extension 이란 익스텐션은 화면을 행과 열로 분할하고 지정된 분할에 각각 원하는 오브젝트를 그려주는 역할을 하는건가 보네요.
  3. MeltCz ·
    파라미터 Divisions 1:1,2:1.5,1:3 // Positions 0:0, 1:0, 0:2
    이걸 해석하면
    Divisions 1:1 = 전체를 1개의 덩어리로 나누고 Positions 0;0 첫번째 오브젝트를 전체의 가운데에 놓아라
    Divisions 2:1.5 = 전체를 2행, 1.5열(?)로 나누고 Positions 1:0 1행 1열(2/3폭) 에 두번째 오브젝트를 놓아라
    Divisions 1:3 = 전체를 1행 3열로 나누고 Positions 0:2 1행 3열에 세번째 오브젝트를 놓아라.
    Weights 0.2, 0.8, 0.8 = 첫번째 오브젝트의 가중치(?? 투명도를 말하는걸까요? 1은 불투명 0은 완전투명?) 0.2, 두번째 세번쩨 오브젝트의 가중치 0.8...

    메인 Prompt 란에 각 오브젝트의 순서는 'AND' 로 구분되는것

    end at this step 은 20번 반복하라는 명령

    일단 이렇게 이해해 봤는데 맞는지요?
  4. 멍멍개찜 ·
    @쿠쿠쿠리님 네, Weights는 투명도라기보다는, 각 step에서 denoise를 실시할 때 해당 영역에 어느정도 개입할지를 정하는 수치로 보입니다. 툴에서 "Visualize"를 눌러보면 가중치에 따라 칸의 색깔이 0:검은색 -> 1:하얀색 으로 변하는 것을 보실 수 있습니다. 실제로 지정할 수 있는 값은 -1부터 1까지 줄 수 있는데, 테스트 해보지는 않았지만 음수로 설정한 경우에는 negative prompt로 해석될 것 같습니다.
  5. 멍멍개찜 ·
    @쿠쿠쿠리님 "Positions 1:0 1행 1열(2/3폭)" -> 2행 1열의 오타로 보이네요.
  6. MeltCz ·
    @멍멍개찜님 지금 까지 AI Drawing이 활용하기 어려웠던 것은 이런 구체적인 구도나 포즈를 주문자 맘대로 정하기 어려워서라고 할수 있는데 컨트롤넷이나 이런 툴들이 있다면 훨씬 다양하게 활용할수 있게 될것 같네요. ^^ 알려주셔서 감사합니다.
  7. MeltCz ·
    @멍멍개찜님 아 네 0이 첫번째 1이 두번째니까. 2행 1열(2/3폭) 이 맞겠네요. ㅎ
  8. MeltCz ·
    @멍멍개찜님 어제 그림 하나 그리면서 주변 객체들을 좀 원하는 위치와 거리에 배치하고 싶었는데 아무리 텍스트로 해도 우연에 기댈수 밖에 없어서 답답했는데... 좋네요 ㅎㅎ 근원 위치도 이제 지정할수 있다면 완벽할것 같네요!
  9. 멍멍개찜 ·
    @쿠쿠쿠리님 감사합니다. 도움이 되신다니 저도 작성한 보람을 느낄 수 있어서 좋네요!
  10. 도시 ·
    댓글 이미지
    controlnet의 Segmentation 기능을 이용하면 나무와 동물 분할이 가능하지 않을까요?
  11. 멍멍개찜 ·
    @도시님 오오! 감사합니다. 컨트롤넷에 이런 기능도 있었군요. 스케치에 자신이 없어지는 상황에 써봐야겠네요.

AI그림당 최근 글

AI그림당 목록 더 보기