기타/AI 활용하기 - 스테이블디퓨전

스테이블 디퓨전을 활용하기 위한 세팅 4 (Forge 에 ControlNet 모델 설치)

codehunter 2024. 5. 25. 20:33

 

이 글은 개인적으로 학습한 내용을 기록하기 위한 글이다.

 

참고 동영상

https://www.youtube.com/watch?v=_T3zvBva8uE

 

 

https://www.youtube.com/watch?v=4NS8bSwtud4

 

 

 

전 글에서 스테이블 디퓨전 포지의 기본 세팅에 대해 작업했었는데 이번 영상에서는 기본 세팅 이후에 추가 작업에 대해 언급하고 있다. 정리해 보도록 하자.

 

포지 메뉴에 보면 ControlNet Integrated 이라는 메뉴가 있는데 확장해서 보면 

 

중간쯤에 사전 처리기, 모델 이라는 항목이 있는데 모델을 클릭해서 보면 아무것도 없는 상태이다. 이 모델은 수동으로 다운받아서 설치해야 한다.

 

깃주소 (https://github.com/lllyasviel/ControlNet-v1-1-nightly) 여기에서는 컨트롤넷의 각 기능에 대해 자세히 알수 있고 실제 다운받는 주소는 여기이다. (https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main)

 

영상에서는 컨트롤넷의 여러 기능중에 Openpose에 대해 설명하고 있다.

 

일단 모델을 다운받자. 주의할게 SDXL을 사용하는 사람들은 다운받는 모델 주소가 다르므로 주의하고 일반적으로는 SD1.5 기준으로 되어 있으면 그걸 사용하면 된다. 위 주소에서 필요한 모델만 다운받아도 되고 나는 일단 다 다운받았다.

 

다운받은 모델은 

매트릭스 설치폴더 \ Data \ Models \ ControlNet 폴더에 넣으면 된다. (폴더에 대한 설명을 굉장히 길고 자세히 하고 있다)

여기에 넣게 되면 설치한 스테이블 디퓨젼 관련 프로그램들이 다 공유해서 쓰는 형식이다.

 

다 복사해 넣은 다음 오른쪽 빙글빙글 돌아가는 아이콘을 클릭해서 화면 갱신을 한번 하고 메뉴를 눌러서 살펴보면 잘 나오는걸 확인할수 있다.

 

 

이 상태에서 제어방식의 OpenPose를 선택하면 자동으로 사전 처리기와 모델이 선택되는걸 볼 수 있다.

사전 처리기에서 openpose_full이 기본으로 선택되는데 메뉴를 클릭해서 보면 포즈 풀, 핸드, 페이스 등등 오픈 포즈에 관련된 메뉴들이 필터링 되서 보인다.

 

모델들이 뜨는걸 확인했으면 매트릭스 콘솔창으로 가서 왼쪽 메뉴의 Checkpoints 아이콘을 클릭하면 (책 처럼 생긴) 매트릭스에 설치한 체크포인트, 로라등등이 보이는데 안보인다면 상단의 Categories를 눌러서 ControlNet을 추가하자.

그러면 각 모델별로 연결이 되어 있으면 각 모델 아이콘 우측 상단에 구름 모양이 활성화 된다고하는데 SD 1.5 콘트롤 넷은 수동으로 다운받아 설치했기 때문에 연결되지 않았다고 나온다.

 

영상에서는 팁으로 모델의 아이콘이 현재 No Images Found라고 나오는걸 바꾸고 싶다면

 

적당한 이미지를 하나 가져와서 바꾸면 되는데 나는 Civitai.com 에서 제공하는 포트 컬렉션이 있는데 여기서 가져와서 바꿔도 된다. ( OpenPoses Collection - v 1.0 | Stable Diffusion Poses | Civitai)

 

이 이미지의 파일명을 아이콘 이미지를 넣고 싶은 모델명과 동일하게 맞춘다음 뒤에 .preview.jpeg로 바꾸면 된다.

 

예를 들어 control_v11p_sd15_openpose.pth 의 아이콘을 바꾸고 싶다면 control_v11p_sd15_openpose.preview.jpeg로 바꾸고 새로고침을 하면 이처럼 아이콘이 바뀌는걸 볼수 있다. (이 작업은 굳이 안해도 된다.)

 

또는 수동으로 받는거 말고 모델브라우저에서 컨트롤넷 모델을 받을수 있는데 이름을 변경해줘야 하는 번거로움이 좀 있다.

 

이제 모델을 이용해 오픈포즈 사용법을 간단히 테스트 해보는데 이때 전신이 나오도록 프롬프트를 살짝 수정해준다. 프롬프트 관련해서는 

여기를 참조한다.

 

프롬프트

1girl, best quality, (photorealistic:1.4), perfect female figure, (full body:1.5)
(RAW photo, best quality), (realistic, photo-realistic:1.3), masterpiece, an extremely delicate and beautiful, extremely detailed, finely detail, 8k, huge filesize, ultra-detailed, highres, soft light, beautiful detailed girl, detailed fingers, extremely detailed eyes and face, beautiful detailed nose, beautiful detailed eyes, long eyelashes, light on face, looking at viewer, cute, young, realistic face, realistic body, beautiful detailed thigh, (ulzzang-6500-v1.1:0.8),  stand pose, white t shirt, blue jean

 

네거티브

paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glans, extra fingers, fewer fingers, ((watermark:2)), (white letters:1), (multi nipples), bad anatomy, bad hands, text, error, missing fingers, missing arms, missing legs, extra digit, fewer digits, cropped, worst quality, jpeg artifacts, signature, watermark, username, bad feet, {Multiple people}, blurry, poorly drawn hands, poorly drawn face, mutation, deformed, extra limbs, extra arms, extra legs, malformed limbs, fused fingers, too many fingers, long neck, cross-eyed, mutated hands, polar lowres, bad body, bad proportions, gross proportions, wrong feet bottom render, abdominal stretch, briefs, knickers, kecks, thong, {{fused fingers}}, {{bad body}},
bad-picture-chill-75v,  ng_deepnegative_v1_75t, EasyNegative, bad proportion body to legs, wrong toes, extra toes, missing toes, weird toes, 2 body, 2 pussy, 2 upper, 2 lower, 2 head, 3 hand, 3 feet, extra long leg, super long leg, mirrored image, mirrored noise, (bad_prompt_version2:0.8), aged up, old,

 

계속 야한 이미지만 나와서 옷도 좀 입혀주고 ADeatiler도 적용해서 그럭저럭 영상과 비슷한 이미지를 얻었다.

 

이 이미지의 포즈를 사용하고 싶다면 ControlNet Intergrated의 단일이미지 탭에 드래그앤 드롭해주고 OpenPose를 선택한다. 그리고 활성화 탭, 픽셀 퍼펙트, 미리 보기 허용을 선택해주고 크기 조정 후 채우기도 선택한다.

 

그리고 그대로 다시 생성 버튼을 눌러서 생성한다. 시간이 조금 걸리는데 OpenPose로 기존 영상에서 포즈를 추출해서 새로운 영상에 적용하기 때문이다.

 

첫번째 영상이 포즈를 얻기 위한 영상이고 두번째가 오픈포즈 적용후 생성한 이미지이다. 포즈가 그대로 적용되는걸 알수있다.

 

여기까지가 첫번째 영상 내용이다.

 

두번째 영상부터 본격적인 Openpose 사용법이 나온다.

 

먼저 간단한 실사 이미지를 하나 만들자 서 있는 포즈가 잘 안나오면 프롬프트에 추가해서 어느정도 서 있는 모델을 생성하자. 얼굴은 무시하자. (A디테일러를 추가하면 되지만 이번에는 포즈만 있으면 되기 때문이다.)

 

이렇게 나온 모델을 드래그해서 ControlNet Intergrated에 넣자. 

 

ControlNet Intergrated 의 활성화, 픽셀 퍼펙트를 체크하자. 픽셀 퍼펙트를 체크하면 아래에 Resolution 항목이 사라지는데

Resolution 값은 Preprocess의 해상도를 어느정도 적용할지 정하는 건데 픽셀 퍼펙트를 체크하면 스테이블 디퓨전이 가장 적합한 값으로 설정해 준다고 함.

그리고 미리보기 허용을 체크하면 오른쪽에 사전처리 미리보기 UI가 생성되는데 이때 아래에 있는 사전처리기 와 모델 사이에 있는 빨간색 버튼을 누르면 사진을 분석해서 포즈를 분석한 이미지를 보여준다. 이렇게 생성된 포즈가 맘에 든다면 사전 처리 미리보기 우측 상단에 있는 다운로드 버튼을 눌러서 저장해둔다. 이때 포즈를 생성하는데 사용된 사진도 같이 세트로 저장해두면 도움이 된다.

 

사전 처리 미리보기에서 편집을 누르면 사진과 포즈를 겹쳐서 보여주면서 어떻게 분석했는지 보여준다. 이때 포즈 이미지에서 손가락등이 잘못분석되어 있으면 사전처리기를 dw_openpose_full등으로 교체해보면 제대로 분석해주는걸 볼수 있다. 또한 편집화면에서 각 점을 직접 이동하면서 편집을 할 수도 있다. 회전, 스케일등도 되니 포즈 변경을 원한다면 충분히 가능하다.

 

사전처리기와 모델 항목 밑에 제어단계시작과 제어단계 종료 항목이 있는데 제어 시작은 0이고 종료를 1로 보았을때 어느 단계부터 이 포즈를 반영할지 정하는 부분이다. 동일한 포즈를 사용할 거면 시작은 0이고 종료는 1로 두고 작업하면 된다.

 

재 생성을 해보자. 역시 포즈가 그대로 나오는걸 알수 있다.

 

이번엔 포즈를 편집한뒤에 생성해 보자. 오른쪽 팔을 허리에 대는 동작으로 수정해보자. 수정한 뒤에는 ControlNet에 자세 보내기를 클릭한다.

 

근데 디테일하게 포즈 잡는게 힘들때 Civitai에 포즈 항목을 검색해서 Filters 항목에 poses를 체크하면 여러가지 포즈들이 올라와있는걸 볼수 있다.

 

여기서 다운받은 포즈를 활용해 보자 

 

아래는 샘플 이미지.

 

옆에 사진 이미지가 아니라 포즈 이미지를 사용할때는 사전처리기에 없음으로 처리해야 한다.

 

생성해보면 잘 나오는걸 볼수 있다.

 

사전 처리기에 나온 항목을 설명하자면

openpose_full : 얼굴, 손 등 모든 포즈가 디테일하게 나옴

openpose_hand : 얼굴은 위치만 나옴

openpose_faceonly : 얼굴만 나옴

 

openpose_face : 손이 제외

dw_openpose_full : openpose_full 보다 사진에서 포즈를 인식하는 인식률이 개선됨.

 

왼쪽이 openpose_full, 오른쪽이 dw_openpose_full 겹쳐있는 손이나 영상에서 캡처한 흐릿한 영상인데도 포즈를 잘 인식함.

 

그리고 제어모드는 3가지가 있는데 내 프롬프트 선호가 말 그대로 프롬프트에 좀 더 가중치를 주는 부분이다. 프롬프트에 포즈가 자세히 작성되어 있다면 그걸 선택해도 된다.