지금까지 배운거

WebUI 설치 - https://arca.live/b/aiart/68935395

모델 설치 - https://arca.live/b/aiart/68304467

Prompt 걍 때려 박아보기, Width, Height 만져보기, CFG Scale 마구마구 만져보기

i2i만져보기 삽질 삽질


이전 글 : Dora의 AI 그림 학습 일기-1 https://arca.live/b/aiart/70776712


 

 



[주의] 완전 비전공자이면서 완전 뉴비가 완전 주관적인 내용을 썼기 때문에 틀린 부분 많을 수 있습니다. 


--------------------------------------------------------------------------------------------------------------------------------------


첫 10시간 동안 이것저것 무지성으로 만지면서  Prompt, Negative 바꿔가며 그림을 뽑다보니, 

아 가중치란 것도 있구나 하면서 그림을 만들어 본다. 


step 20, CFG 7, 오렌지 믹스2로 대충

Prompt: aged up, macho, male focus, 1boy, high quality, masterpiece, best quality, perfect fingers, distinct_image, high_resolution


얼굴은 극애니, 몸은 극실사라니... 맘에 안 든다.


Aged up에 가중치를 줘본다 Aged up:1.8로 줘봤다. 


20대 미남이 된 듯 하다. 근데 팔이 털복숭이....

 

음 좀 더 어른스런 얼굴이 된 걸 확인 할 수 있네. 근데 내가 원한 건 30대 이상의 남자란 말이지? 여기서 가중치를 더 많이 주는 것도 있대. 괄호를 사용하는 것.

((aged up)) 으로 돌려보자. seed를 동일하게 하고. 괄호를 2번 씩이나 붙여줬다. 제.발. 좀. 중년이 나오라고. (할아버지 나오게 하려면 Old man 하면 될듯?)


오 미중남... 늙은 얼굴은 얼마나 데이터가 없는건지 Hires를 안 켜면 뭉개진다...


괄호를 사용하면 훨씬 더 그 단어에 집중하는 듯 하다. 숫자로 써주는 가중치랑 괄호의 정확한 차이는 잘 모르겠고 지금 알고 싶지도 않다. 힘들어. 걍 체험하면서 느낌 잡을란다. 지금은 이게 내 관심사가 아니다. 내 맘대로 그림을 만들기 위해선 Prompt만으론 부족하다. 


다른 기능을 더 살펴보기로 한다. 


일단 눈에 보이는 건

Lora - 모델에서 나온 그림을 한번 더 꼬아주는 보조 모델 같은 듯 --> 그림체를 일정하게 하기 위해 필수일 거 같다.

Inpaint - 그림 부분 수정해주는 God

Controlnet- 원하는 포즈, 구도 등을 만들어주는 God --> 여기 들어있는 기능이 Canny, Seg, Openpose. 등등


그 밖에도

Upscaling, Hyperlink, Lora 학습 방법, 병합 방법, 모델도 만들 수 있다고? Lora도 만들고? 일단은 덮어두자... 


난 무지성 뉴비답게 Controlnet를 먼저 만질거다. 


왜냐? 지금까지 그림 뽑으면서 아쉬운 게 손가락 삐꾸이고, 포즈는 한정적이고(Prompt로 고치고 수정하는 것엔 한계가 있다), 그리고 팔과 다리 숫자가 늘어난 것이 정말 짜증난다. 


원하는 구도를 만들려면 원하는 포즈부터 만들어야겠단 생각.

그럼 Controlnet을 먼저 깔아본다. (링크: https://arca.live/b/aiart/69816884)


Controlnet은 확장 기능이고 Controlnet의 기능(Canny, Seg, Openpose 등등)은 또 따로 다운 받아야 한다. 

쨋든, 빨리 원하는 포즈를 만들어 봐야겠다. 

  위 링크 타고 따라하면 그림처럼 ContolNet 칸이 생긴 걸 볼 수 있다. 저걸 눌러보면


또 모르는 것들이 잔뜩 써져 있다...(control model-4까지 있는 이유 : 멀티 컨트롤넷 옵션 킴)

1 : Enable을 체크해야 현재 Controlnet에 입력된 정보가 그림 생성시 반영된다. -->t2i, i2i, inpaint에서도 적용된다!

2 : Preprocessor, 내가 "Controlnet에 업로드한 이미지"를 어떤 방법으로 "분석"하냐를 정해준다. 

3 : Model, 내가 업로드한 이미지의 무엇을 내가 만들 그림에 "적용"하냐를 정해준다.

4: Controlnet에 올라간 이미지를 어떻게 사이즈 조정해서 "적용" 할거냐를 알려준다.

5: Canvas W, H는 Controlnet의 Canvas 사이즈이다. 그냥 일단은 맘편히 전부 512로 통일. (만들 이미지도 512x512니깐)



난 Openpose, canny 보고 설치한 거니 먼저 그거부터 해보자. 

Openpose, Canny를 써보기 위해 이미지도 하나 다운 받았다. (다른 기능들? 일단 생각하지 않기로 함)

 

이미지를 컨트롤넷 쪽에 넣어주고 위 그림에서 2번 칸 Preprocessor를 눌러보면 Canny가 있다. 그거 선택해주고 아래 아래 있는 Preview annotator result를 눌러보면 저렇게 윤곽선을 잡아준다는 것을 보여준다. 와우... Controlnet canny 데이터도 그림 사이즈로 추출되니 필요한 것들은 꾸준히 저장해두면 좋을듯


마찬가지로 2번 칸에서 Openpose를 선택해주고 이미지를 넣어 Preview를 봐보자


뭔가 이상하지만 일단 넘어가자. 


Controlnet이 대단하긴 하지만 스파이더맨을 고른 게 잘못 한거다. 얼굴과 오른손의 위치는 빨간 덩어리라서 제대로 인식이 안 된 거다.


쨌든 저것들로 이제 뭘하느냐? 3번 칸에 각각의 Controlnet 데이터에 맞는 모델을 선택해주고 1번 칸의 'enable'을 체크해주면 저 포즈(openpose)와 윤곽(Canny)으로 그림이 그려지는 거다!  


먼저 openpose 데이터만 이용해 본다. 1. Enable 체크 해주고 3번 모델에서 설치한 Control_sd15_openpose를 선택해준다. 난 포즈 좀 더 강렬히 유지하고 싶어서 weight 1.3으로만 해놓고 Generate! prompt는 위에 쓴 거 그대로.


.....??? 낮술 하셨..?


Openpose 정보가 불완전하고 Canny는 사용도 안 했으므로 정보가 '존재하는 부분만' 포즈가 잘 나온 것 같다.


Prompt에다 1girl로 바꾸면 그 포즈대로 이미지 생성.


포즈는 Openpose로 어느 정도 내가 제어가 가능하다는 걸 알 수 있었다. 그런데 아직도 거슬리는게 있다. 바로 손꾸락지이다. 


근데 컨트롤넷이 더 쩌는건 Canny, Openpose, Seg 등등을 최대 10개의 정보를 합쳐서 그림을 만들 수 있다는 것. 이제 저 망할 손가락에 Canny를 적용 시켜보면 어떨까? 


그 전에, Inpaint 기능을 사용하면 부분 수정이 가능하다 길래, prompt에 손 관련된 거 다 집어 넣고 돌려봤는데.... (고통의 시간만 늘어나게 된다.) 


제발... 제발 손 좀 어떻게 해봐 ㅜㅜ 

 

Prompt 바꿔보고, CFG, denosing level, sampling step 등등 이것 저것 바꿔가며,  왜 이렇게 잘 안 되는지 한참을 헤매다가 결국 포기하고 새로 Openpose + canny 조합을 시도한다. 


먼저 Openpose 그림을 다운 받아 포토샾으로 열어보자. (링크 :  https://civitai.com/models/11573/zpose-fighting-styles-1-pose-helper) 그리고 인터넷에서 아무 손모양이나 알아서 받아서 알아서 잘라서 Openpose그림에 붙여본다. 대충 이런 느낌을 원했다.


Photoshop으로 512x512 크기의 캔버스를 만들어서 다운 받은 Openpose 그림을 넣고,  손 모양을 Canny하여 원하는 손모양 만들라고 시켜볼 것이다.  



손 모양을 왜 저렇게 배치했냐고? Openpose만 적용 시켜서 나온 그림(512x512)을 포토샾에 옮겨서 손 모양 있는 곳에 위치시켰다. 


Controlnet 스크린샷을 보면 2번, 3번 근처에 있는 Weight와 Guidance strength가 대충 뭐인가 하니 (링크: 

https://github.com/Mikubill/sd-webui-controlnet/discussions/175)


Weight - 저 Openpose와 연관된 Prompt를 얼마나 강화 시킬거냐. --> 0.6 아래로 떨어지면 포즈가 완전 바뀐다나

Guidance strength - 저 Openpose와 연관된 Step으로만 갈거니? 를 묻는 단다. 

자세한 건 잘 모르겠으니 포즈를 조금 바꿔가면서 이미지 만들고 싶으면 Weight~0.8, Guidance ~0.9

데이터가 부족해도 되니 강제 포즈, 강제 Canny 윤곽 유지하고 싶으면 Weight~1.3, Guidance ~1로 해두면 되나 보다.  



멀티컨트롤넷 관련은 링크 https://arca.live/b/aiart/70495537 참고


Control model을 2개 사용할 것이니 0에는 Canny 데이터를 업로드 하고 Preprocessor = none, Model = Canny

Control model-1에는 Openpose 데이터를 업로드 하고 Preprocessor = none, Model = Openpose

Prepocessor--> 분석하는 Tool이기 때문에 난 이미 분석한 데이터를 올렸으니 또 분석하면 안 되서 None으로 하는 거.


*Canvas size와 분석 데이터들의 크기는 전부 포토샾으로 512x512로 통일 시켰다. 굳이 사이즈 다르거나 Resize, inner fit 등으로 위치 엇나가게 되는 불상사는 먼저 피하고 싶어서이다. 복잡하면 머리 아파.*


prompt는 그냥 심플하게 1girl, high quality, masterpiece, best quality, perfect fingers, distinct_image, high_resolution

그리고 두 모델 전부 Enable하고 Generate! 하면 손 모양 제대로 된 그림 나오겠지!!!??? 


.....??? 안 되잖아?

손 윤곽에 좀더 비중을 줘볼까? 


Openpose Weight, guide를 0.8 정도로 줄이고 Canny는 Weight 2


저 손모양의 이미지들만 꼭 써!! 라고 명령을 하니 손 모양은 제법 그럴싸 해졌다. 근데 그런 이미지가 적다 보니깐 손과 얼굴만 조금 선명하고 나머지 부분은 다 뭉개뭉개 열매를 먹어버렸다. 


컨트롤넷은 신이... 아니었습니다!


이 뻘 짓을 하다 보면 추측되는 것이 있다.

1. 왜 하필 손가락만 잘 안 나올까?(발가락도) 일단 손가락은 비슷한 것들이 몇 개가 모여있다 --> 뿌옇게 보면 다 똑같이 생겨서 분간이 안 된다. 데이터가 중첩된다. 여러 이미지에서 모인 손꾸락들은 이러나 저러나 말이 되어 보인다.(AI 입장에서)

2. 만드는 그림 크기가 작다 --> 데이터 중첩의 확률이 커진다

3. Canny 데이터도 512 px짜리다 --> 충분한 데이터가 아니다! --> 그리고 이왕이면 원하는 그림체의 손을 쓰는 것이 더 타율이 좋다! --> 평소에 손에 대한 데이터는 쌓아두자. 


위에서 1번 같은 경우는 데이터의 부족 문제다. sampling method가? 모델이? 512크기?로 만들어져서 그 이상의 크기로 이미지 만들라고 하면 추상화 나온다는 건 이전 글에서 배웠다.


그나마 이걸 해결하기 위해서 T2i 단계에서 Hires를 켜주고, 컨트롤넷을 2개 다 적용 시켜서 그림을 얻으면 어느 정도 해소된다. 

1단계에서 컨트롤넷으로 한번 먹여주고 --> Hires 단계에서 또 한번 컨트롤넷이 데이터를 먹여주기 떄문이다. (Preview보면 그래보임)



그래서 궁극의 조합. Controlnet + inpaint 기능을 시도해보기로 한다. 먼저 Hires 켜주고 위처럼 컨트롤넷 2개 적용 시키고 Prompt 동일하게 두고 돌려본다. 


Openpose weight, guide 좀 낮췄다고 지멋대로 또 아이돌 포즈한다. 일단 걍 넘어가자.


왼손이 가닥은 잡혔는데 아직 손가락 괴물이긴 하다. 이제 Inpaint로 그림을 옮겨서 원하는 부분을 넓직하게 칠해준다 (손목 조금 넘어가게 하는게 좋은듯?)



Inpaint 사용 방법은 (링크 : https://arca.live/b/aiart/60364202) 참고


1 : 그림을 유지하면서 고칠거니 Original

2 : Whole picture = Inpaint 시 전체 이미지를 연산할거냐? Only masked = 부분만 연산할거냐? 전체 이미지를 계산하면 불필요한 연산도 많이 하니 필요 없다. 난 Only masked에 체크했다. 그 오른쪽은 칠한 부분에서 주변부를 얼마나 참조할지 설정하는 거다. 대~~~충 56 px 더 참고 하라고 해줬다. 

3 : Step 수 설정. 아무리 내가 원하는 모양의 손의 정보가 별로 없더라고 하더라도, Step으로 조지면 비슷한 모양을 만들긴 할거다. --> 그래픽카드가 고생하는거지 내가 고생하는게 아니지 않는가?

4 : Inpaint 화질 결정. hires로 돌려서 1024크기 됐으니 걍 1024로 했다. 

5 : Denoising은 손의 모양이 좀 많이 바뀌어야 할거 같으니 0.7 이상으로 ? 하면 되지 않을까? 츄라이츄라이. 


Prompt에는 ((perfect fingers))만 추가해줬다. 이제 Generate를 눌러보자. 


 

드디어! 내가 원하는 손모양 만들 줄 알게 되었구나?? 

Controlnet & Inpaint는 신이.... 맞았습니다!


아직 손이 완벽하지 않고, 주변 환경과 좀 안 맞는 부분들은 canny데이터를 잘 쓰고, 여러 설정값 조절하고, 포토샾으로 세부 색상 조절하고 Upscaling하고 등등으로 고칠 수 있을 거 같다. 

애초에 내가 사용한 Canny 데이터의 품질이 안 좋았다. 이 정도는 연습을 통해 익숙해지면 된다.


그렇게 내 20시간 날라간 듯 하네. 원래 10시간씩 끊어서 쓰려고 했는데, 그건 힘들 거 같아. ㅋㅋ... 그냥 일기마다 몇시간 걸려서 배운건지 쓰려고. 그럼 이만~


- To be continued -