생성형 인공지능
Text to Image
Open AI의 Dall-e 2, 구글의 Imagen
컨트롤넷 플러그인으로 포즈 지정 가능
CLIP, UNet, VAE 세 가지 인공신경망
텍스트 입력 > CLIP > UNet > VAE > 이미지 생성
파인튜닝:
이미 학습된 인공지능 모델을 새로운 문제에 맞게 미세하게 조정하여 성능을 높이고 학습 시간을 줄이는 과정
GAN: 생성적 적대 신경망, 랜덤 노이즈로부터 가상의 데이터 생성.
단점이 존재하며 Stable Diffusion과 경쟁했지만 Stable Diffusion이 판정승
https://ffighting.net/deep-learning-paper-review/diffusion-model/diffusion-model-basic/
Diffusion Model: 이미지 생성 모델의 일종. 일반적으로 가장 많이 알려진 이미지 생성 모델은 GAN. GAN은 Generator와 Discriminator를 상호 적대적으로 학습하여 활용. Diffusion Model은 GAN과 원리가 다르다. 학습 데이터에 없는 형태의 이미지들도 입력으로 주어진 Text가 묘사하는 대로 이미지를 생성할 수 있다(Dall-e 2). 주어진 위치 정보에 따라서 이미지를 생성할 수 있다(GLIGEN). => 다양한 요구조건에 맞는 고화질 이미지 생성
Diffusion Model의 작동 원리:
Diffusion : 확산 현상. 분자의 확산 현상을 그림. 정규분포를 따름. 매시간 t마다 각 분자의 움직임을 계산한다면 Diffusion Process를 거꾸로 되돌릴 수 있다(Reverse Diffusion Process).
Image에 Diffusion Process 적용하기: 분자의 움직임을 정규 분포를 따르는 Noise로 볼 때, Image의 Pixel 값에 정규분포를 따르는 Noise 값을 추가한다면 흐려진 원본 이미지(?)가 생성된다.
이런 과정을 무수히 반복해서 Noise를 계속 추가한다면
이렇게 흐려진 이미지를 얻을 수 있다. 이런 과정을 Diffusion Process의 Forward라고 한다.
X_t 이미지는 아주 긴 시간 T를 거쳐 완전 균등 분포 상태가 된 이미지이다.
X_t 이미지를 Reverse Diffusion Process로 처리한다면 원본 이미지 X_0이 나타나게 된다.
Architecture: Diffusion Model은 t시점의 이미지를 입력으로 받아 각 픽셀별로 추가된 Noise를 예측하는 과정이 필요할 것이다. 예측한 Noise를 빼면 한 시점 전의 이미지로 바뀔 것이고 이 과정을 계속해 나가면 원본 이미지가 나타날 것이다.
Input으로 이미지, Noisy 이미지
몇 번째 Process인지를 의미하는 t
추가 조건 (특정 클래스 정보나 생성한 이미지를 표현할 Text 정보)
Output은 Input과 동일한 형태
Unet의 구조를 하고있는데, Input과 동일한 Resolution의 Output을 내기에 적절한 구조이기 때문이다.
Loss Function: 실제 Noise와 예측한 Noise의 차이
응용:
1. Class Guided Image Generation: 내가 원하는 Class 이미지만 생성하는 방법
ImageNet 데이터 셋을 활용하면 1000개의 Class가 존재하는데 여기서 특정 클래스의 이미지만 생성해낼 수 있다. Classifier Guidance 방법과 Classifier Free Guidance 방법이 있다.
2. Super-Resolution: 저화질 이미지를 고화질 이미지로 변환하는 작업.
3. Inpainting: 이미지의 가려진 부분을 그럴듯하게 채워 넣는 기술.
4. Text Guided Image Generation: Text가 묘사하는 이미지를 생성하는 Diffusion Model. OpenAI의 GLIDE 모델, Google의 Imagen 모델, OpenAI의 DALLE2 모델
5. Multi Modal Guided Image Generation: 4번 Text의 한계는 Condition으로 Text만 입력받을 수 있다는 것이다. Text가 아닌 다른 것들을(ex. Bouding Box) Condition으로 입력받아 위치를 지정한다던가 이런 옵션을 추가한 모델이 Stable Diffusion 이다.
6. Multi Modal Input Image Generation: 5번 Stable Diffusion은 Condition의 형태에 제약이 없지만 하나만 선택해야하며 Diffusion Model을 처음부터 학습하기 위해 엄청난 컴퓨팅 자원을 필요로 한다는 두가지 단점이 존재한다. 이를 극복한 것이 GLIGEN 모델. Stable Diffusion이 그대로 들어가며 Grounding, Gated Self Attention 등을 추가한 것이다.
https://ffighting.net/deep-learning-paper-review/diffusion-model/stable-diffusion/
Stable Diffusion
Diffusion Model은 Non Perceptual 한(사람 눈에 중요하지 않은 부분) 부분에 초점을 맞춰 학습하는 문제가 있다. Pixel 값을 직접 예측하기 때문에 이런 문제가 발생하므로 이를 해결하기 위해 Auto Encoder를 사용한다. Auto Encoder의 Latent Embedding을 예측하는 방법이다.
빨간색 영역이 Auto Encoder, 초록색 영역이 Latent Diffusion Model, 회색 영역이 Condition 입력 부분이다. Auto Encoder는 쉽게 말해 입력 데이터를 최대한 압축하고 다시 원본 형태로 복원시키는 신경망이다.
Perceptual Image Compression: Auto Encoder를 학습하는 과정이다. Perceptual Loss를 사용하여 이뤄진다.
Loss Function: 기존 Diffusion Model의 Loss Function은
이고 Noise를 Pixel 값으로 예측한다.
Latent Diffusion Model의 Loss Function은
이다. 입력으로 픽셀값 x가 아닌 Latent Embedding z가 들어간다. Auto Encoder를 활용해 사람 눈으로 인식이 안되는 Noise 정보들은 모두 제거된다.
Conditioning Mechanisms: Stable Diffusion은 다양한 Condition 입력 중 한 가지만 입력으로 받는데, 각 입력에 대응하는 Encoder τ가 필요하다. 입력된 Condition은 모델 내에서 연산중인 Image 정보 Z_t 와 연산 되어야 한다. 이 둘의 상관관계를 잘 고려해야하는데 이때 Cross Attention 방법을 가장 많이 사용한다. Attention이란 가중치를 의미한다. Stable Diffusion에 적용된 Cross Attention을 수식으로 표현하면
이고 각 Query, Key, Value는
이다. Z_t 는 이미지 정보, y는 Condition 정보이다. 따라서 이는 이미지와 Condition의 상관 관계를 고려하여 Condition 정보에 가중치를 반영하는 것이다. 이를 적용한 최종적인 Stable Diffusion Loss Function은
이다. 입력은 Latent Embedding z이고 Process Time t와 Condition y를 모두 반영한다.
다음은 Text를 Condition으로 받아 생성한 이미지이다.
https://youtu.be/7fBQDaJkcSU Stable Diffusion 논문 분석 영상
https://pitas.tistory.com/11 Dreambooth (파인튜닝 방식) 관련 문서
Stable Diffusion API 활용
https://stablediffusionapi.com/
https://stablediffusionapi.com/docs/text-to-3d/textto3d/
https://faun.pub/stable-diffusion-enabling-api-and-how-to-run-it-a-step-by-step-guide-7ebd63813c22
https://www.youtube.com/watch?v=emObTucGMOA
Stable Diffusion Web UI 활용
'STUDY' 카테고리의 다른 글
딥러닝 관련 사이트 북마크 (0) | 2024.08.01 |
---|---|
정보처리기사 실기 2024년 2회 (2024.07.28.) 문제 (0) | 2024.07.28 |
윈도우 아나콘다 딥러닝 가상환경 설정 (1) | 2024.01.26 |
라이브러리 프레임워크 API (0) | 2022.08.03 |