ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AI] Stable Diffusion
    프로젝트/당일 2024. 5. 27. 20:35

    Stable Diffusion 왜 궁금했을까❓

    SSAFY 자율 프로젝트로 사용자가 일기를 작성하면 그 하루를 대표하는 그림을 뽑아주는 서비스를 하기로 했다. Text to Img를 지원하는 생성형 AI를 찾아봤고 그 중 Stable Diffusion을 선택했다. 선택한 이유를 알아보고 Stable Diffusion의 원리를 알아보도록 하겠다.
     

    [AI] Stable Diffusion + LoRA를 통한 이미지 생성 기능 구현

    Stable Diffusion + LoRA를 통한 이미지 생성 기능 구현 왜 궁금했을까❓이번 포스팅에서는 Stable Diffusion과 LoRA를 활용하여 4가지 화풍의 그림을 뽑아내는 기능을 구현할 것이다.  [AI] Stable Diffusion fine-

    pslog.co.kr

    위 포스팅을 통해 그림일기 생성 기능 구현 과정을 살펴볼 수 있다.

    1. Stable Diffusion vs Midjourney vs Dall-e

    Text to Img AI 모델에는 대표적으로 Stable Diffusion, Midjourney, Dall-e가 존재한다. 3개를 비교해보고 프로젝트에 적절한 AI 모델을 사용해보려고 한다.

    프로젝트에 활용 가능한 AI 모델의 조건

    • 모델 서빙이 가능한 모델
    • 그림의 화풍을 커스터마이징 가능한 모델
    • 최대한 짧은 시간 안에 이미지를 뽑을 수 있는 모델
    • 무료로 사용 가능한 모델
    1. Stable Diffusion
      • 모델링 서버를 구축하여 모델 서빙 가능
      • LORA를 활용하여 화풍 커스텀 가능
      • GPU 성능에 따라 시간 소요
      • 무료
    2. Midjourney
      • 모델 서빙은 불가능하지만 API를 통해 사용 가능
      • 화풍 커스텀 가능
      • 한 장에 이미지 생성 시간 약 1분 ~ 2분 소요
      • 유료
    3. Dall-e
      • 모델 서빙은 불가능하지만 API를 통해 사용 가능
      • 화풍 커스텀 가능
      • 트래픽에 따라 생성 시간이 변경되며 평균적으로 약 20초 소요
      • 유료
    결론적으로는 Stable Diffusion을 사용하는 게 맞다는 생각이 들었다. Midjourney와 Dall-e의 경우 각 API를 제공하는 플랫폼에 종속적이게 되어 안정적인 서비스를 지원하지 못할 것이다. 또한, GPU서버를 지원받고 자본은 지원받지 못했기에 유료로 진행할 수 없었다. 

     

    2. Stable Diffusion

    1. Diffusion 원리

    1.1 Forward Diffusion

    1. 학습용 이미지를 선택
    2. 무작위 잡음 이미지 생성
    3. 학습용 이미지에 정해진 단계만큼 무작위 잡음 이미지를 추가하여 손상
    4. UNet에게 잡음 추가량을 학습시킨 뒤 가중치를 조정하고 정답을 보여주는 방식
    5. 최종적으로 이미지에 추가된 잡음을 예측할 수 있는 UNet을 확보

    1.2 Reverse Diffusion

     

    1. 잡음 이미지 생성
    2. UNet(Predicted noise)에게 잡음이 얼마나 포함되어 있는 지 질문
    3. UNet이 반환한 예측 잡음을 기존의 잡음 이미지에서 제거한 뒤 다음으로 전달
    4. 이 과정을 사용자가 지정한 Step만큼 반복하다보면 최종적으로 이미지 생성

    2. Stable Diffusion 대표 구성 요소 

    1. Text Encoder
      • Text Prompt를 text Embedding 형태로 변환
    2. UNet
      • 입력받은 text Embedding과 노이즈 그리고 N번의 추론을 통해 VAE에 넣을 latent vector를 추출
    3. Scheduler
      • 노이즈의 세기, 종류, 확률 편미분 방정식 이용 등을 설정
      • DDPM, DDIM, PNDM, Euler, Euler a, DPM++ 등이 존재
    4. VAE
      • VAE는 하나의 모델로 Pretrained Model을 사용
      • UNet을 학습하거나 UNet에서 나온 값을 Decode하여 고해상도 이미지를 추출
      • Encoder를 통해 UNet의 학습 데이터를 만들고 UNet에서 나온 값을 Decoder에 넣으면 이미지 추출하는 방식

    3. Stable Diffusion 작동 과정

    1. 사용자 텍스트 입력
    2. 입력된 텍스트 데이터를 Stable Diffusion AI 모델에 입력
    3. 텍스트를 기반으로 이미지 추론 및 생성
    간단하게 설명하자면 위와 같이 설명할 수 있다. 하지만, Stable Diffusion을 커스터마이징 하기 위해서는 좀 더 상세하게 알아야 하기에 아래에 디테일하게 설명하겠다.

    1. 사용자가 일기를 입력하여 서버에 전송
    2. 비즈니스 로직이 실행되어 Stable Diffusion 모델에 데이터 입력
    3. 텍스트 인코더가 받아 Tokenizer를 이용하여 단어를 추출하고 숫자로 변환(tokenize)
    4. 이후, 숫자를 latent vector 형태인 text embedding로 변환하고 노이즈로 구성된 다차원의 텐서를 UNet에 입력
    5. UNet은 text embedding에 따라 conditioning된 채로 random latent vector를 지정한 Loop 만큼 반복하며 denoise
    6. 위 과정을 거치면 저해상도의 latent vector를 생성하여 이미지 디코더(VAE)로 전달하여 고해상도의 그림을 출력
    다음 포스팅에서는 fine-tuning을 쉽게 할 수 있게 도와주는 Lora에 대해서 알아보도록 하겠다.

     

Designed by Tistory.