| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Link Prediction
- Road network
- CNN
- CityJSON
- Stable Diffusion #Image generation #Diffusion #AI #Generative model
- Consistent Video Depth Estimation
- Today
- Total
목록Image Generation (17)
빙글빙글 돌아가는 바람개비
Scheduler는 스텝을 어디에 놓을지 정한다Stable Diffusion에서 sampler와 scheduler는 자주 붙어서 보인다. 예를 들어 DPM++ 2M Karras라고 적혀 있으면, 전체가 하나의 sampler 이름처럼 보이기 쉽다.하지만 나눠서 보면 역할이 다르다. DPM++ 2M은 한 스텝에서 latent를 어떻게 갱신할지 정하는 방식이고, Karras는 그 스텝들을 어떤 노이즈 구간에 배치할지 정하는 방식이다.이미지 생성은 완전한 노이즈에서 시작해서 조금씩 깨끗한 이미지 쪽으로 이동한다. 이때 20 steps로 생성한다면, 모델은 총 20번만 중간 상태를 확인할 수 있다. Scheduler는 그 20번을 어디에 쓸지 정한다.큰 노이즈→구도 형성→형태 정리→디테일 보정→최종 이미지초반에는..
DreamBoothDreamBooth는 특정 인물이나 사물을 Stable Diffusion에 학습시키는 방법이다. 예를 들면 내 얼굴, 우리 집 강아지, 특정 제품처럼 기존 모델이 정확히 알지 못하는 대상을 몇 장의 이미지로 추가 학습시키는 방식이다.LoRA가 널리 쓰이기 전에는 이런 용도로 DreamBooth가 많이 사용됐다. 지금은 DreamBooth 방식 그대로 전체 모델을 다시 저장하기보다는, DreamBooth의 학습 아이디어를 LoRA와 함께 쓰는 경우가 많다.핵심은 단순하다. 모델에게 sks dog 같은 낯선 이름을 하나 알려주고, 그 이름이 특정 강아지를 가리키도록 학습시키는 것이다.1. 왜 필요한가Stable Diffusion은 dog, woman, car 같은 일반적인 개념은 잘 안다...
CFG++ — CFG 코드에서 바뀌는 부분CFG++는 CFG 공식을 새로 만드는 방식이 아니다.기존 CFG 코드에서 guided 값을 어디까지 쓰는지 바꾸는 쪽에 가깝다.guided noise를 만드는 부분은 그대로 둔다. 대신 다음 latent으로 넘어가는 업데이트에서 unconditional 값을 다시 사용한다.그래서 코드를 보면 차이는 꽤 작다. DDIM에서는 마지막 업데이트 줄이 바뀌고, Euler 계열에서는 이동 방향을 계산하는 기준이 바뀐다.기준이 되는 CFG 코드일반 CFG에서는 conditional 예측과 unconditional 예측을 섞어서 guided noise를 만든다.noise_uc, noise_c = self.predict_noise(zt, t, ...)noise_pred = n..
CFG 다음에 등장한 CFG++CFG (Classifier-Free Guidance) 는 텍스트-이미지 디퓨전 모델에서 거의 기본처럼 쓰이는 기법이다. 조건부 예측과 무조건부 예측의 차이를 이용해 프롬프트 방향을 더 강하게 반영한다. 그래서 같은 모델이라도 guidance scale 을 높이면 프롬프트를 더 잘 따르는 이미지가 나온다.근데 CFG 에는 분명한 부작용도 있다. scale 을 높이면 프롬프트 충실도는 올라가지만, 이미지가 과하게 날카로워지거나 색이 과포화되고, 다양한 결과 대신 비슷한 결과만 반복되는 경우가 생긴다. 이미지 편집에서 중요한 DDIM inversion 도 불안정해질 수 있다.CFG++ 는 이걸 "scale 을 낮추자" 로 해결하는 방법이 아니다. 논문의 핵심은 기존 CFG 가 ..
SDXL 77 token 이상 생성하기SDXL로 이미지를 만들다 보면 프롬프트를 꽤 길게 썼는데도, 뒤에 적은 키워드가 결과에 거의 반영되지 않는 경우가 있다.처음에는 모델이 프롬프트를 제대로 이해하지 못하는 것처럼 보이지만, 실제 원인은 조금 다르다.핵심은 CLIP 텍스트 인코더가 한 번에 처리할 수 있는 토큰 수가 77개로 제한되어 있다는 점이다.프롬프트가 이 길이를 넘으면 뒤쪽 내용이 잘리거나 약하게 반영될 수 있다.이때 Compel 라이브러리를 사용하면 긴 프롬프트를 여러 조각으로 나눠 처리하는 방식으로 이 제한을 우회할 수 있다.77 토큰 제한은 어디서 나오는가positional embedding이 필요한 이유Transformer 구조는 기본적으로 단어의 순서를 스스로 알지 못한다.attenti..
DiT: Diffusion에 Transformer를 쓰는 방식DiT는 Diffusion Transformer의 줄임말이다. 말 그대로 디퓨전 모델에서 U-Net이 하던 역할을 Transformer로 바꾼 구조다.Stable Diffusion 1.5, 2.0, SDXL은 기본적으로 U-Net을 쓴다. 노이즈가 섞인 이미지를 넣으면 U-Net이 그 안의 노이즈를 예측하고, 그 예측을 바탕으로 이미지를 조금씩 깨끗하게 만든다.DiT는 이 부분을 다르게 본다. 이미지나 잠재 공간을 작은 조각으로 나누고, 그 조각들을 Transformer가 처리하게 만든다. 구조만 놓고 보면 Vision Transformer에 디퓨전 학습을 붙인 형태에 가깝다.이 글에서는 DiT가 왜 나왔고, U-Net과 무엇이 다르며, 실제로..
Stable Diffusion 3 — UNet 을 버리고 Transformer 로2024년 2월 Stability AI 는 Stable Diffusion 3 의 기술 보고서를 공개했고, 같은 해 6월 SD3 Medium(2B 파라미터) 을 정식 출시했다. SD3 는 SDXL 의 후속이지만 단순한 업그레이드가 아니다. UNet 기반 디퓨전 구조를 통째로 갈아엎고 Transformer 기반 아키텍처(MMDiT) 로 옮겼고, 학습 방식도 표준 디퓨전 대신 Rectified Flow 를 쓴다. 텍스트 인코더는 SDXL 의 두 개에 T5-XXL 을 더해 세 개로 늘렸다.바꾼 부분이 많고 각각의 변화가 모델의 작동 방식을 근본적으로 건드린다. 각 변경이 어떻게 작동하는지를 원리 중심으로 본다.1. SDXL 의 구조..
SDXL 2023년 7월, Stability AI 는 SDXL (Stable Diffusion XL) 을 공개했다. 기본 학습 해상도가 1024×1024 로 올라갔고, UNet 은 약 3배로 커졌고, 텍스트 인코더가 두 개로 늘었다. 이름이 XL 인 만큼 모델이 커진 건 사실이지만, 단순히 파라미터만 늘렸다면 메모리만 더 먹는 모델이 됐을 것이다. SDXL 의 변화는 크기보다 구조와 학습 방식 쪽에 더 많이 들어가 있다.SD 1.5 와 비교해서 SDXL 이 무엇을 어떻게 바꿨는지 하나씩 본다.1. SD 1.5 에서 자주 부딪히던 문제들SDXL 이 어디를 손봤는지 보려면 SD 1.5 의 약점부터 짚는 게 빠르다. SD 1.5 를 써본 사람이라면 한 번쯤 마주쳤을 패턴들이다.해상도가 올라가면 구도가 무너진다..