일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- ASAC5기
- SQL
- EDA
- 뷰티 광고
- 크롤링
- 파이썬 이미지 처리
- selenium
- DFS
- 데이터분석
- 백준
- Machine learning
- join
- ASAC
- deep learning
- sql eda
- Shorts
- CCP자격증
- ML
- Python
- 프로그래머스
- ASAC14일차
- 머신러닝
- cnn optuna
- YouTube
- 파이썬
- pandas
- JSON
- Crawling
- BFS
- text summarization
- Today
- Total
낼름낼름 동동이
[ASAC 0807] 스테이블 디퓨전: 생성형 AI 기초 Part 2 본문
8월 7일의 기록
내용이 길어 나눠서 작성했고, 오늘부터는 실제 실습을 해보면서 결과를 계속 업로드 할 예정이다.
목차
- 얼마나 많은 이미지를 생성해야 하나?
- 잘못된 이미지 수정하기
- 어떤 모델을 사용할 것인가?
- 새로운 모델을 학습시키는 방법
- 부정적 프롬프트
- Stable Diffusion으로 인쇄용 대형 이미지를 생성하는 방법
- 이미지의 구도를 제어하는 방법
- 특정한 피사체 생성하기
얼마나 많은 이미지를 생성해야 할까?
실행시 Batch size를 크게 할수록 생성하는 속도는 빨라지며 한 번에 많은 이미지를 뽑을 수 있다. 처음 2~4장 생성한 뒤 지속적으로 원하는 이미지가 나오는지 확인해보는 것이 중요하다.
잘못된 이미지 수정
AI 이미지를 생성하다보면, 특히 사람의 모습을 생성할 경우, 부자연스러운 표정이나 자세를 취한 이미지가 만들어지는 경우가 많다. 정말 마음에 드는 데 일부분만 잘못되었다면 일부 수정할 수 있는 부분에 대해 알고 있어야 한다.
얼굴 복원(Face Restoration)
생성형 인공지능으로 출력한 이미지는 특히 얼굴이 부자연스럽게 나오는 경우가 많다. (Stable Diffusion 최신버전인 SDXL의 경우 부자연스러운 얼굴/손/발 등은 많이 사라짐) 예전에는 이를 후처리해야 했던 모양이지만, [Restore faces]를 선택하고 생성하면 거 해결된다. Settings에 들어가면 얼굴 복원에 관한 설정이 있는데, 아래와 같이 설정하면 크게 문제가 없다. 만약 얼굴 복원 옵션을 꺼둔 상태로 이미지를 생성했다면, 해당 영상의 씨드번호를 넣어주고 또 다시 돌려주면 된다고 한다.
아래는 얼굴 복원을 꺼뒀을 때와 켰을 때의 차이를 보인 것 (프롬프트는 "A portrait of a fairy princess, tiara, long flowery hair, fantasy, soft background, sea-like , bluish dress, bare shoulders, UHD, 8k, beautiful composition, a modern surrealistic " ) 인물이 들어간 이미지를 뽑을 때는 무조건 [Restore faces] 옵션을 켜두는 게 좋게 이미지를 뽑을 수 있다.
인페인트를 사용한 결함 제거
생성한 이미지가 전체적으로는 마음에 드는데, 일부분에 결함이 있을 경우, 인페인트(Inpaint)를 이용해 수정할 수 있다. 예를 들어 아래 왼쪽에 있는 사진을 뽑았는데(프롬프트 "Photo of A couple of lovers staring at the milkyway, dark and dim in midnight, in the desert, highly detailed, wide-angle lens, HD"), 연인의 모습이 마음에 안들어 앉아있는 모습으로 수정함.
이렇게 Stable Diffusion에서 생성한 이미지 뿐만 아니라, 실제로 찍은 사진이나 그림 등도 물론 수정할 수 있다.
어떤 모델을 사용할 것인가?
스테이블 디퓨전이 생성하는 이미지에 가장 영향을 미치는 것이 사용하는 모델이다. 고양이를 학습하지 않는 모델을 사용하면 고양이 이미지를 생성할 수 없고, 고양이만 학습한 모델이라면 고양이 이미지만 생성할 수 있다.
스테이블 디퓨전 개발사인 Stability AI에서는 현재까지 Stable Diffusion 1.4, 1.5, 2.0, 2.1, SDXL 등 총 5가지의 기반 모델(base model)을 공개하였다. 이 기반 모델을 사용하면 모든 종류의 이미지를 생성할 수 있지만, 그렇다고 특별히 원하는 이미지(내가 좋아하는 연예인이나, 내가 좋아하는 애니 스타일 등)를 생성할 수는 없다. 그런 이미지를 학습하지 않았기 때문이다.
이럴 때 원하는 스타일의 이미지를 사용해 추가로 학습, 즉 미세조정한 모델(fine-tuning)들이 존재한다. 이러한 미세 조정 모델은 매우 종류가 많고 매일 매일 새로운 것들이 나오고 있다. CivitAI 사이트를 참고하면 사람들이 사용한 Checkpoint, Lora, Dreambooth 모델을 어떻게 사용했는지 상세하게 알 수 있다.
참고: 어떤 모델을 사용하면 좋을지에 대해서는 이 글을 읽어보면 좋다.
처음 시작한다면 기본 모델에 먼저 익숙해지자. 기본적으로 Stable Diffusion은 3가지 종류의 기본 모델이 존재한다.
- v1 모델 : 1.4 or 1.5
- v2 모델 : 2.0 or 2.1
- SDXL 1.0
v2 모델이 v1 보다 좋다고 생각할 수 있지만, 프롬프트대로 생성되지 않는 경우가 많다고 함. 차라리 v1.5 모델이나 최신 모델인 SDXL 1.0을 사용하는게 좋다. 쉽게 사용하려면 SDXL, 내 맘대로 커스텀을 해보겠다면 v1.5를 사용하자.
참고했던 블로그 글에서는 2004년 1월 기준으로 v1.5보다 SDXL 1.0을 추천하고 있다. 기본적으로 v1.5보다 모델 크기도 크고 생성한 이미지 품질도 좋기 때문이라고 한다. ControlNet도 지원이 되고 미세조정 모델도 많이 나왔기에 사용하기도 편리하다고 한다.
새로운 모델을 학습시키는 방법
스테이블 디퓨전의 가장 좋은 점 중 하나가 모델을 마음대로 제어할 수 있다는 것. 다른 온라인 서비스는 편리하지만, 해당 서비스에서 제공하는 모델만 사용할 수 있다. 그런데, 스테이블 디퓨전의 경우 원한다면 자신만의 독자적인 모델을 생성할 수도 있다. 새로운 모델을 학습시키는 방법은 많지만, 가장 많이 사용하는 방법은 (1)Dreambooth 와 (2)임베딩이다.
이 두가지 중에서 드림부스(Dreambooth)가 훨씬 강력하다. 모델에 포함된 모든 가중치를 미세 조정할 수 있기 때문이다. 반면 임베딩의 경우 모델은 그대로 둔 상태에서 새로운 주제 혹은 스타일을 설명하는 새로운 키워드를 만드는 방식이다.
부정적 프롬프트
프롬프트는 이미지에 나타나길 원하는 것을 넣는건데 이미지에 안 나타나길 원하는 내용은 부정적 프롬프트(negative prompt)에 적어야 한다. 모든 스테이블 디퓨전 서비스가 부정적 프롬프트를 지원하는 것은 아니다. 하지만, v1 모델이나 v2 의 경우 거의 반드시 필요하다. 사용하기가 어렵지도 않으므로 무조건 부정적 프롬프트를 써주자.
예를 들어 손가락이 6개씩 나오면 안되고, 사람은 1명만 나와야되고 같은 것도 부정적 프롬프트를 통해 해결이 가능하다. NLP의 불용어와 같은 동작을 해준다.
이 블로그를 보면 자세하게 알 수 있다. 자세한 내용은 이 글을 읽어보자.
Stable Diffusion으로 인쇄용 대형 이미지를 생성하는 방법
스테이블 디퓨전 v1의 기본 이미지 크기는 512x512. 스테이블 디퓨전 1.4 혹은 1.5를 사용한다면, 무작정 큰 이미지를 생성해서는 안된다. 완전히 이상하거나 품질이 떨어지는 이미지가 생성되기 때문. 기본적으로 한쪽 면의 크기가 512 픽셀이 되도록 생성하는 것이 좋다.
- 풍경화(Landscape) 모드 : 대략 높이를 512로 맞추고, 폭을 원하는대로 설정하는 게 좋다. 제일 많이 사용하는 해상도는 768x512
- 초상화(Portrait) 모드 : 폭을 512로 맞추고 높이를 원하는 대로 설정하는 게 좋다. 가장 많이 사용하는 해상도는 512x768
SDXL의 경우엔 기본 해상도가 1024x1024로 커졌다. 그런데, SDXL의 경우엔 여러가지 이미지 크기로 학습시켰고, 그래서 SDXL을 사용할 때는 몇가지 정해진 해상도로 생성하는 것이 최적의 결과를 만들 수 있다.
이렇게 이미지를 생성하더라도 인쇄용으로는 많이 부족하다. 그래서 그 다음에는 확대(upscale)이 필요하다. 인공지능 확대기(Upscaler)는 단순한 뻥튀기가 아니라, 이미지를 확대하면서 보다 자세한 디테일을 끼워넣는 방식으로 이루어진다. 또한 원 이미지에 존재하는 결함을 없애주기도 한다. 자세한 내용은 이 글을 읽어보자.
이미지의 구도를 제어하는 방법
이미지를 생성할 때, 그냥 생각하는 프롬프트를 입력하고, 인공지능에게 여러 장을 생성하도록 한 다음, 그중에서 마음에 드는 것을 고르는 방법이 일반적이다. 하지만, 좀 더 머리속에 그리는 구도가 있다면, 그 구도를 따라 이미지를 생성하도록 지시하는 방법도 존재한다.
Image-to-image
아래는 좌측의 검독수리 이미지를 기반으로 드래곤 이미지를 생성한 것. img2img에서 입력 영상을 주면, 결과 이미지가 그 구도를 따라 생성된다. 가운데와 오른쪽은 잡음 제거 강도(Denoising Strength)를 달리한 결과다. 자세한 내용은 Stable Diffusion 초보자 가이드를 참고하자.
ControlNet
인공지능 생성 이미지에서 특정한 자세를 취한 영상을 얻으려면 ControlNet을 사용하는 것이 좋다.. ControlNet도 입력 이미지를 사용하여 출력 이미지를 제어한다. 다만, 특정한 정보, 예를 들면 사람의 자세와 같은 정보만 추출해 사용한다. 아래는 ControlNet을 사용하여 왼쪽의 입력 이미지로부터 자세를 복사하여 생성한 이미지이다. 자세만이 아니라, 외곽선과 같은 정보도 추출해 사용하는 방법도 있다.
ControlNet에 대해서는 SDXL만 다룬 글과 함께 추가로 공부해서 포스팅할 예정이다.
Depth-to-Image
Depth-to-Image를 사용해도 입력 이미지로부터 구조를 제어할 수 있다. Depth-to-Image는 입력된 영상의 전경과 배경을 감지할 수 있는데, 출력 이미지는 동일한 전경과 배경을 따르게 된다.
지역분할 프롬프트(Regional Prompting)
Regional Prompter라는 확장(extension)을 설치하면, 일부 이미지에만 프롬프트가 적용되도록 할 수 있습니다.
예를 들어 아래는 오른쪽 위에 보름달이 있도록 하고, 왼쪽에 불꽃이 있도록 제어한 마녀 이미지입니다.
수 있다.
인페인트를 사용한 결함 제거
생성한 이미지가 전체적으로는 마음에 드는데, 일부분에 결함이 있을 경우, 인페인트(Inpaint)를 이용해 수정할 수 있다. 예를 들어 아래 왼쪽에 있는 사진을 뽑았는데(프롬프트 "Photo of A couple of lovers staring at the milkyway, dark and dim in midnight, in the desert, highly detailed, wide-angle lens, HD"), 연인의 모습이 마음에 안들어 앉아있는 모습으로 수정함.
이렇게 Stable Diffusion에서 생성한 이미지 뿐만 아니라, 실제로 찍은 사진이나 그림 등도 물론 수정할 수 있다.
어떤 모델을 사용할 것인가?
스테이블 디퓨전이 생성하는 이미지에 가장 영향을 미치는 것이 사용하는 모델이다. 고양이를 학습하지 않는 모델을 사용하면 고양이 이미지를 생성할 수 없고, 고양이만 학습한 모델이라면 고양이 이미지만 생성할 수 있다.
스테이블 디퓨전 개발사인 Stability AI에서는 현재까지 Stable Diffusion 1.4, 1.5, 2.0, 2.1, SDXL 등 총 5가지의 기반 모델(base model)을 공개하였다. 이 기반 모델을 사용하면 모든 종류의 이미지를 생성할 수 있지만, 그렇다고 특별히 원하는 이미지(내가 좋아하는 연예인이나, 내가 좋아하는 애니 스타일 등)를 생성할 수는 없다. 그런 이미지를 학습하지 않았기 때문이다.
이럴 때 원하는 스타일의 이미지를 사용해 추가로 학습, 즉 미세조정한 모델(fine-tuning)들이 존재한다. 이러한 미세 조정 모델은 매우 종류가 많고 매일 매일 새로운 것들이 나오고 있다. CivitAI 사이트를 참고하면 사람들이 사용한 Checkpoint, Lora, Dreambooth 모델을 어떻게 사용했는지 상세하게 알 수 있다.
참고: 어떤 모델을 사용하면 좋을지에 대해서는 이 글을 읽어보면 좋다.
처음 시작한다면 기본 모델에 먼저 익숙해지자. 기본적으로 Stable Diffusion은 3가지 종류의 기본 모델이 존재한다.
- v1 모델 : 1.4 or 1.5
- v2 모델 : 2.0 or 2.1
- SDXL 1.0
v2 모델이 v1 보다 좋다고 생각할 수 있지만, 프롬프트대로 생성되지 않는 경우가 많다고 함. 차라리 v1.5 모델이나 최신 모델인 SDXL 1.0을 사용하는게 좋다. 쉽게 사용하려면 SDXL, 내 맘대로 커스텀을 해보겠다면 v1.5를 사용하자.
참고했던 블로그 글에서는 2004년 1월 기준으로 v1.5보다 SDXL 1.0을 추천하고 있다. 기본적으로 v1.5보다 모델 크기도 크고 생성한 이미지 품질도 좋기 때문이라고 한다. ControlNet도 지원이 되고 미세조정 모델도 많이 나왔기에 사용하기도 편리하다고 한다.
새로운 모델을 학습시키는 방법
스테이블 디퓨전의 가장 좋은 점 중 하나가 모델을 마음대로 제어할 수 있다는 것. 다른 온라인 서비스는 편리하지만, 해당 서비스에서 제공하는 모델만 사용할 수 있다. 그런데, 스테이블 디퓨전의 경우 원한다면 자신만의 독자적인 모델을 생성할 수도 있다. 새로운 모델을 학습시키는 방법은 많지만, 가장 많이 사용하는 방법은 (1)Dreambooth 와 (2)임베딩이다.
이 두가지 중에서 드림부스(Dreambooth)가 훨씬 강력하다. 모델에 포함된 모든 가중치를 미세 조정할 수 있기 때문이다. 반면 임베딩의 경우 모델은 그대로 둔 상태에서 새로운 주제 혹은 스타일을 설명하는 새로운 키워드를 만드는 방식이다.
부정적 프롬프트
프롬프트는 이미지에 나타나길 원하는 것을 넣는건데 이미지에 안 나타나길 원하는 내용은 부정적 프롬프트(negative prompt)에 적어야 한다. 모든 스테이블 디퓨전 서비스가 부정적 프롬프트를 지원하는 것은 아니다. 하지만, v1 모델이나 v2 의 경우 거의 반드시 필요하다. 사용하기가 어렵지도 않으므로 무조건 부정적 프롬프트를 써주자.
예를 들어 손가락이 6개씩 나오면 안되고, 사람은 1명만 나와야되고 같은 것도 부정적 프롬프트를 통해 해결이 가능하다. NLP의 불용어와 같은 동작을 해준다.
이 블로그를 보면 자세하게 알 수 있다. 자세한 내용은 이 글을 읽어보자.
Stable Diffusion으로 인쇄용 대형 이미지를 생성하는 방법
스테이블 디퓨전 v1의 기본 이미지 크기는 512x512. 스테이블 디퓨전 1.4 혹은 1.5를 사용한다면, 무작정 큰 이미지를 생성해서는 안된다. 완전히 이상하거나 품질이 떨어지는 이미지가 생성되기 때문. 기본적으로 한쪽 면의 크기가 512 픽셀이 되도록 생성하는 것이 좋다.
- 풍경화(Landscape) 모드 : 대략 높이를 512로 맞추고, 폭을 원하는대로 설정하는 게 좋다. 제일 많이 사용하는 해상도는 768x512
- 초상화(Portrait) 모드 : 폭을 512로 맞추고 높이를 원하는 대로 설정하는 게 좋다. 가장 많이 사용하는 해상도는 512x768
SDXL의 경우엔 기본 해상도가 1024x1024로 커졌다. 그런데, SDXL의 경우엔 여러가지 이미지 크기로 학습시켰고, 그래서 SDXL을 사용할 때는 몇가지 정해진 해상도로 생성하는 것이 최적의 결과를 만들 수 있다.
이렇게 이미지를 생성하더라도 인쇄용으로는 많이 부족하다. 그래서 그 다음에는 확대(upscale)이 필요하다. 인공지능 확대기(Upscaler)는 단순한 뻥튀기가 아니라, 이미지를 확대하면서 보다 자세한 디테일을 끼워넣는 방식으로 이루어진다. 또한 원 이미지에 존재하는 결함을 없애주기도 한다. 자세한 내용은 이 글을 읽어보자.
이미지의 구도를 제어하는 방법
이미지를 생성할 때, 그냥 생각하는 프롬프트를 입력하고, 인공지능에게 여러 장을 생성하도록 한 다음, 그중에서 마음에 드는 것을 고르는 방법이 일반적이다. 하지만, 좀 더 머리속에 그리는 구도가 있다면, 그 구도를 따라 이미지를 생성하도록 지시하는 방법도 존재한다.
Image-to-image
아래는 좌측의 검독수리 이미지를 기반으로 드래곤 이미지를 생성한 것. img2img에서 입력 영상을 주면, 결과 이미지가 그 구도를 따라 생성된다. 가운데와 오른쪽은 잡음 제거 강도(Denoising Strength)를 달리한 결과다. 자세한 내용은 Stable Diffusion 초보자 가이드를 참고하자.
ControlNet
인공지능 생성 이미지에서 특정한 자세를 취한 영상을 얻으려면 ControlNet을 사용하는 것이 좋다.. ControlNet도 입력 이미지를 사용하여 출력 이미지를 제어한다. 다만, 특정한 정보, 예를 들면 사람의 자세와 같은 정보만 추출해 사용한다. 아래는 ControlNet을 사용하여 왼쪽의 입력 이미지로부터 자세를 복사하여 생성한 이미지이다. 자세만이 아니라, 외곽선과 같은 정보도 추출해 사용하는 방법도 있다.
ControlNet에 대해서는 SDXL만 다룬 글과 함께 추가로 공부해서 포스팅할 예정이다.
Depth-to-Image
Depth-to-Image를 사용해도 입력 이미지로부터 구조를 제어할 수 있다. Depth-to-Image는 입력된 영상의 전경과 배경을 감지할 수 있는데, 출력 이미지는 동일한 전경과 배경을 따르게 된다.
지역분할 프롬프트(Regional Prompting)
Regional Prompter라는 확장(extension)을 설치하면, 일부 이미지에만 프롬프트가 적용되도록 할 수 있습니다.
예를 들어 아래는 오른쪽 위에 보름달이 있도록 하고, 왼쪽에 불꽃이 있도록 제어한 마녀 이미지입니다.
'데이터분석 > 머신&딥러닝' 카테고리의 다른 글
[ASAC 0806] 스테이블 디퓨전: 생성형 AI 기초 Part 1 (1) | 2024.08.07 |
---|---|
[ASAC 0705] 텍스트 요약 모델 공부 (0) | 2024.07.18 |
[ASAC 0625] 딥러닝 프로젝트에 대한 회고 (0) | 2024.06.26 |
[ASAC 0621] Yolo 이론 2 (0) | 2024.06.24 |
[ASAC 0620] yolo 이론 공부 1 (0) | 2024.06.21 |