| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Road network
- Consistent Video Depth Estimation
- CNN
- Stable Diffusion #Image generation #Diffusion #AI #Generative model
- Link Prediction
- CityJSON
- Today
- Total
목록분류 전체보기 (25)
빙글빙글 돌아가는 바람개비
Sigma 스케줄 코드 정리샘플러는 매 step마다 사용할 sigma 값을 필요로 한다. 큰 sigma에서 시작해서 0에 가까운 값으로 내려가며 노이즈를 줄인다.여기서 중요한 건 sigma의 의미보다, 코드에서 이 값들을 어떻게 만드는지다. 같은 20 step이라도 sigma를 어떤 간격으로 배치하느냐에 따라 결과가 달라진다.이 코드에서는 네 가지 스케줄을 다룬다.linear: 모델의 기본 timestep을 그대로 사용exponential: log sigma 공간에서 균등 분할karras: 작은 sigma 구간에 step을 더 몰아주는 방식ays: 미리 정해진 timestep 목록을 사용전체 코드: mi-song/image-generation ├ utils/schedule.py — 스케줄 함수 └ c..
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과 무엇이 다르며, 실제로..