스테이블 디퓨전을 이용해서 간단하게 빙으로 생성한 이미지의 비율 변경하기
또 컨트롤넷입니다.
컨트롤넷의 인페인트 모델을 사용해서 아웃페인팅을 할 수 있습니다.
아웃페인팅을 통해서 정사각형 이미지를 좌우로 넓게 또는 상하로 길게 바꿀 수 있습니다.
아마 컨트롤넷 확장기능이 자동으로 다운받아주긴 할텐데,
혹시 다운이 안된다면 컨트롤넷 아웃페인팅 모델은 다음 허깅페이스에서 다운받을 수 있습니다.
https://huggingface.co/lllyasviel/control_v11p_sd15_inpaint/tree/main
일단 빙에서 정사각형 이미지를 생성합니다.
프롬프트로 "a wide shot of an anime girl standing on lake side. sunset sky. beautiful scenary. detailed anime style game art."를 사용했습니다.
SD를 실행하고 빙에서 생성한 이미지를 컨트롤넷에 넣습니다.
이때 text to image에서 작업을 한다는 점에 주의해주세요.
imgae to image 탭에서 작업하는 것이 아닙니다.
제가 사용한 설정은 위와 같습니다.
전처리기(Preprocessor) 중 그냥 inpaint_only를 써도 되기는 하는데 inpaint_only+lama가 더 잘 먹히는 것 같습니다.
그리고 꼭 리사이즈 모드에서 Resize and Fill을 선택해주어야 합니다.
이미지의 비율을 결정해줍니다. 좌우로 넓히고 싶으니 비율을 1088x640으로 해봅니다.
원래 이미지가 1024x1024이므로 더 작아지는 결과이긴 한데, 테스트용이라 대충 빨리 뽑고 싶기도 하고 제 vram이 딸리기도 해서 1088x640으로 했습니다. 크게 뽑고 싶다면 Tiled Diffusion & VAE 같은 확장기능을 이용하면 가능할겁니다.
프롬프트는 그냥 생성할때 만들었던 프롬프트 그대로 넣어줍니다.
아니메 모델들이 태그식 프롬프트를 추천한다고는 하지만 SD가 태생적으로 자연어 기반 이미지 생성 모델인 만큼 이정도는 알아먹어 줄겁니다.
생성하면 위와 같이 좌우로 긴 이미지를 얻을 수 있습니다.
생성 원본: 1024x1024 | 하단에 빈공간 추가: 512x768 |
원하는 방향으로만 아웃페인팅 하는 것도 가능합니다.
먼저 위와 같이 생성한 이미지를 가지고 빈 공간을 만들어줍니다.
컨트롤넷을 설정해줄 때 마스킹을 해줄 수 있는데 위와 같이 추가된 영역을 마스킹 해주고 생성합니다.
하반신 아웃페인팅 | 인페인팅 추가 |
배경이 아닌 인물을 아웃페인팅하면 결과가 썩 잘 나오는 편이 아니라서 가챠가 좀 많이 필요하더라고요.
아무튼 하반신을 만들 수 있습니다.
접합부가 좀 어색하게 나오는 경우가 잦은데, 이 결과물을 i2i로 보내서 낮은 강도로 인페인팅을 살짝 한번 추가해주면 조금 더 자연스러워집니다.