스테이블 디퓨전(StableDiffusion)

너무 이쁘게 잘 뽑혔는데, 손이 이상하다고요?(스테이블 디퓨전 Inpaint)

물범쌤 2024. 5. 29. 08:15

안녕하세요 여러분 물범쌤입니다 :)

오늘은 스테이블 디퓨전을 사용하다가 안타까운 경우가 발생했을때

수습하는 방법을 한번 알아보려고 합니다.

먼저 예시 이미지부터 보시죠

 

 

앗! 너무 맘에 들게 잘 뽑혔는데 손이 3개나 나와버렸네요ㅠㅠ

한쪽 손을 제거하기 위한 기능, Inpaint(인페인트) 기능을 한번 사용해보도록 하지요


인페인트는 이미지내에 특정 부분을 마스킹처리를 통해 지정할 수 있고

해당 부분, 혹은 해당부분을 제외한 나머지 부분을 수정할 수 있는

스테이블 디퓨전의 고급 기능입니다.

아래의 순서를 따라 천천히 진행해주세요!

 

 

1.먼저 img2img 메뉴에 Inpaint 탭을 활성화 시키고,

수정하고 싶은 이미지를 넣어주세요 

(txt2img에서 팔레트 모양을 클릭해서 바로 보낼 수도 있습니다.)

 

 


2. 다음은 UI 설정입니다.

 

 

Resize는 이제 다들 아실테니 넘어가도록 하겠습니다 :)

 

● Mask blur : 인페인트 대상부위를 재생성하기 위해

어느 정도 강도로 전처리를 할것인지(흐리게) 묻는 옵션입니다.

보통 1~4사이로 많이 작업합니다.

 

●  Mask mode : 재생성할 부분에 대한 지정 옵션입니다.

Inpaint masked는 마스킹 된 부분을 재생성하겠다는 뜻이고,

 

Inpaint not masked 마스킹 된 부분을 제외하고

나머지 부분을 재생성하겠다는 뜻입니다.

 

● Masked content : 마스킹한 부분에 진행할 작업을 설정합니다.
보통 오리지널로 진행하고 변경하지 않습니다.
  -fill : 블러로 가득 채웁니다.
  -original : 원본에 맞춰 이미지를 채워넣습니다.
  -latent noise : 노이즈로 채워넣습니다.
  -latent nothing : 공백으로 채워넣습니다.

 

●  Inpaint area : 재생성 되는 이미지에 대한 설정입니다.

 

  -Whole picture는 재생성될 이미지에 톤과 색을 어느정도 맞춰서
   전체 그림을 다시 생성합니다.

 

 -Only masked는 전체 이미지에 관계 없이 마스킹 된 부분만 이미지를 생성합니다.

  이부분은 이해가 어려우실테니 예시를 보여드릴게요!

 

 

 

CFG Scale, Batch count&Batch size는

UI상세 설명 포스팅에 정리해드렸으니 넘어가겠습니다.

 

다만 Denoising strength 는 이 기능의 핵심이기 때문에 다시 한번 설명드리겠습니다.

Denoising strength는 말 그대로 노이즈를 제거하는 가중치를 설정하는 옵션입니다만

노이즈를 제거하는 과정에서 원본에 변형을 일으키게 됩니다.

하지만 이런 이론적인 설명보다는 쉽게 원본 변경률 이라고 생각하시는게 편합니다.

 

원본 '보존률'이 라니라 원본 '변경률'이니까

당연히 수치를 낮게 설정할수록 원본에 가깝게 이미지가 생성되겠죠?

 

인페인트의 범위를 설정할때에는

몸을 기준으로 멀리있는 객채,그리고 최대한 작은 객체를 선택하시는게 좋습니다.

해당부분이 블러(흐림)처리 된 후에 다시 이미지가 덧씌워 지는 개념이기 때문에

자칫하면 이미지의 전반적인 영향을 줄 수 있기 때문입니다.

 

자 그럼 다시 이미지로 돌아가 볼까요?


 

3.마지막으로 마스킹 부분에 적용될 프롬프트를 작성해주세요

저는 수정대상 손이 바위 위에 있었기 때문에 바위로 흡수시키기 위해
바위에 관련된 프롬프트를 채워넣었습니다. 

 


여기서 중요한게 있는데,
원본을 보호해야 하는 상황에서

Denoising strength를 한번에 올려버리면,

급격한 변화로 오히려 그림이 어색하게 보이게 될 수도 있습니다.

 

따라서 보통 0.4~0.5정도의 Denoising strength로 반복해서 생성하는 과정을 통해

어느정도 변화를 준 다음에, 디노이징 수치를 높이는게 좋은데,

중간중간에 변화된 이미지를 다시 기준 이미지로 넣어줘야 하기때문에

매우 번거로운 작업이죠.

 

이 과정에 가장 적합한 기능이 바로

최하단 메뉴인 Script에 있는 Loopback 기능입니다.

 

Loopback 기능은 사용자가 설정한 반복횟수와 마지막 디노이징 수치를 통해

횟수를 반복하는 동안 점진적으로 디노이징 수치를 자동으로 가중시켜 줍니다.

 

잘 안보이시는 분들은 이미지를 클릭해서 봐주세요!

 

 

UI를 설명드리자면,

Loops 는 반복횟수 입니다. 횟수가 많을수록 세세하게 이미지가 컨트롤 되지만,

5이상 설정시 이미지 생성에 너무 오랜 시간이 걸리기 때문에

보통 3~5사이로 두시는 것을 추천드립니다.

 

Final denoising strength는 말 그대로 마지막 이미지 조정때에

최종적으로 적용할 디노이징 수치를 적용하는 옵션입니다.

최종 수치는 1이며, 위에 말씀드린대로 여러 단계로 나눠져서

최종적으로 적용되는 수치이기 때문에 높게 주셔도 괜찮습니다.

지금처럼 적용 범위가 작을때에는 0.7~1까지 주셔도 좋습니다.
(*적용범위가 넓을수록 수치를 작게 주시는것이 좋습니다)

 

 

Denoising strength curve는 이미지에 가장 큰 변화폭을 주는 시기를 나타냅니다.

옵션은 Aggressive (초반 강성),Linear(비례적 점진),Lazy(후반강성) 입니다.

보통 디폴트값인 Linear를 많이 사용합니다.


 

어떤가요? 손이 있었는지도 잘 모를정도로 자연스럽죠?

 

Q. 앗! 쌤 그런데 이미지의 왼쪽 손도 이상한데요?

손가락이 3개 밖에 없어요ㅠㅠ!

 

A.이런, 그렇다면 이번에 배운 Loop back기능을 통해
손을 없애는게 아니라 손가락을 수정해 보도록 합시다 :)

 

 

방금 전 어색했던 손을 바위로 만든 최종 이미지를 기준 이미지로 넣어주고,

이번에는 왼쪽 손에 마스킹 처리를 해주겠습니다.

 

 

기존에 바위를 나타내던 프롬프트들도

이제는 손과 손가락에 관련된 프롬프트들로 바꿔주세요!

그리고 다시 Loopback 기능을 통해 이미지를 수정해줍니다.

 

 

어떤가요? 무조건 5개의 손가락이 나오는 것이 아니라

손이 바위 위에 얹어져 있는 원근감을 더 살리기 위해

손가락에서 엄지의 느낌이 강조되고

검지,중지,약지가 나옴으로서 새끼손가락이 뒤에 가려진것같은 느낌을 주고있죠?

 

이렇게 Ipaint 기능은 해당 마스킹된 부분을 수정할 수 있게 지정해주는

고급 기능입니다.

 

그리고 Loopback 기능은 그런 Inpaint 기능을 보조해주기에 아주 탁월한 기능이죠

 


Loopback기능은 Denoising strength 수치를 분배하는 기능이기때문에

유용하게 써먹을 수 있는 때가 바로 실사화때에도 요긴하게 쓰입니다.

 

단순 img2img로 그림을 실사로 바꾸기에는

원본에 영향을 주지 않는 Denoising strength 수치로

계속해서 반복해야 하지만,

그 단계를 Loopback 기능으로 자동실행 할 수 있으니까요

 

단, 애니메이션 이미지를 실사화 할때에는 아무리 Loopback 기능이라고 해도
Final denoising strength 수치를 높게 주는것은 주의해야 합니다.

 

오늘 배운 Inpaint와는 다르게 img2img는

기본적으로 이미지 전체가 변경 범위에 속하기 때문에

아주 작은 수치에도 분위기가 아예 달라지기 때문입니다.

 

아래는 Loopback 기능을 이용한 실사화 과정입니다.

 

기준이미지_출처:civitai

루프 단계를 늘리고 Final denoising strength는 낮춰줍니다.

보통 0.4~0.5 사이로 설정할때 원본의 분위기를 유지하면서 변화가 일어나는 편입니다.

 

 

애니메이션 이미지 생성을 위한 프롬프트와,

실사이미지에서 구현이 어려운 프롬프트,

그리고 실사화 작업에 필요없는 로라 프롬프트를 제거하고,

실사화에 관련된 화질 프롬프트로 채워 넣습니다.

 

마지막으로 실사화에 최적화된 체크포인트로 변경하고

Generate 버튼을 눌러줍니다.

Loopback 변화단계

 

실사화 단계가 높다고 해서 꼭 퀄리티가 높은것은 아닙니다.

모든 사진을 비교해봤을때 저는 두 번째 사진이 가장 퀄리티가 높다고 생각되어 

최종 결과물로 선정하겠습니다.

 

 

 


오늘은 그림의 특정 부분을 알아볼수 있는 Inpaint 기능과

Loopback 기능에 대해서 자세히 알아보았습니다.

 

이 컨텐츠가 유익하셨다면 공감(♡)과 댓글 부탁드리겠습니다.

 

그럼 모두들 좋은 하루 되시길 바랍니다! ^^

반응형