이미지 전체를 바꾸는 대신 특정 부분만 섬세하게 수정하고 싶으신가요?
이번 포스트에서는 ComfyUI로 이미지의 특정 부분을 수정하는 인페인팅 기능에 대해 알아보겠습니다.
지난번 고래사진을 그리면서 하늘을 표현했으면 좋겠다는 생각이 들어 인페이팅에 대해 공부를 해보았습니다.
인페이팅은 특정 그림의 부분을 새로 만드는 것으로, 아래와같이 그림을 붙인듯한 느낌이 많이 들었습니다.
자연스럽게 나올수 있는 방법은 공부가 더 필요할 것으로 보입니다.
: 인페이팅은 기존 그림의 내용을 어느정도 포함하며(이전 사진과의 조화) 내가 추가하고 싶은 내용을 뚜렷하게 써야함을 알았다.
인페이팅 기능을 사용하기 위해선
1. 인페이팅 워크플로우 설정(필수)
2. 인페이팅 모델(체크포인트) 다운(선택)
3. 마스크 영역수정 및 이미지생성(필수)
의 과정을 거칩니다.
아래는 인페이팅 사용을 위한 과정입니다.
1. 인페이팅 워크플로우 설정
1) 인페이팅 워크플로우 다운
아래 url에서 워크플로우 그림을 저장한다.
https://comfyanonymous.github.io/ComfyUI_examples/inpaint/
다운받을 그림은 아래와 같다(아래 그림을 직접 다운받아도 된다).
2) 워크플로우 생성
: 다운받은 inpaint_example.png 를 ComfyUI 에 드래그앤드롭 해준다.
위 워크플로우 대로 실행할 경우 체크포인트가 존재하지 않으므로, 기존에 존재하는 체크포인트를 사용하거나 신규로 다운을 받습니다.
2. 인페이팅 모델(체크포인트) 다운인페이팅을 위한 모델은 좀더 성능이 좋지 않을까? 라는 생각으로 모델을 신규로 받았습니다.
1) Civitai 접속
인페이팅을 사용하기 위한 모델을 다운받기 위해 Civitai에 접속을 합니다.
2) 적절한 Checkpoint 다운
3) Checkpoint 폴더에 다운받은 파일 이동
: ComfyUI_windows_portable\ComfyUI\models\checkpoints 에 다운받은 체크포인트 모델을 넣는다.
3. 마스크 영역수정 및 이미지생성
. 마스크란 무엇일까요?
이미지 편집에서 마스크는 마치 페인트를 칠하기 전에 보호하려는 부분에 화가용 테이프를 붙이는 것과 비슷한 역할을 합니다. ComfyUI 마스크를 사용하면 이미지의 어느 부분이 편집의 영향을 받을지 정확하게 지정할 수 있어 원하는 부분만 수정할 수 있습니다.
1) 마스크 에디터 열기
: "Load image and alpha mask for inpainting"에 그림을 추가하고, 그림을 우클릭하여 "Open in MaskEditor"를 선택한다
2) 마스크 에디터로 마스크 영역 지정
(1) Thickness : 우측 하단의 Thick ness는 마스크의 크기를 조절한다.
(2) Color : 마스크의 색깔. 기능과 무관하며 구분하기 편한 색으로 선택한다.
(3) 마스크 영역 결과
(4) 프롬프트 수정 및 이미지생성 결과
문맥과 무관하게 "Cloud"를 입력한 탓에 이전과 조화롭지 못한 결과가 나온것으로 보인다.
이전의 프롬프트를 그대로 붙여본다.
(5) 프롬프트 수정 및 생성결과
: 프롬프트가 사막에 대한 내용이 많다보니 바닥도 모래로 나왔다.
인페이팅은 기존 그림의 내용을 어느정도 포함하며(이전 사진과의 조화) 내가 추가하고 싶은 내용을 뚜렷하게 써야함을 알았다.
기타) Mask Grow by의 의미
:마스크는 이미지의 노이즈를 제거할 부분을 나타내며, 노드는 마스크 아래의 픽셀을 회색으로 설정합니다.
이 값에 따라 마스크를 칠한 부분이 더 뚜렷히 보이기도 보이지 않기도 합니다.
grow_mask_by 값이 작을경우 노이즈가 보임을 알 수 있다.
스테이블 디퓨전의 원리가 노이즈를 없애면서 그림을 만드는 과정임을 생각해보면, 노이즈를 어느정도로 없앨지를 선택하는 값으로 보인다.