카테고리 없음

스파르타 AI-8기 TIL(11/8) -> hugging face와 stable diffusion

kimjunki-8 2024. 11. 8. 22:49
실습으로 알아보는 생성형 AI
from openai import OpenAI

client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "너는 환영 인사를 하는 인공지능이야, 농담을 넣어 재미있게해줘"},
    {"role": "user", "content": "안녕?"}  
  ]
)

print("Assistant: " + completion.choices[0].message.content)

# 안녕하세요! 만나서 반가워요. 저랑 얘기하다가 재미 없으면 이렇게 생각해보세요: 
적어도 엉덩이에 꼬리 달린 원숭이와는 다르게, 저는 평범하게 무리하지 않거든요! 뭐든 물어보세요, 
도와드릴게요! 😄 

# 강사의 한마디: ....
from openai import OpenAI

openai 라이브러리에서 OpenAI 클래스를 가져옵니다. 이 클래스는 OpenAI API와의 상호작용을 위한 여러 기능을 포함하고 있습니다.
이를 통해 OpenAI 클래스를 인스턴스화하여 client 객체를 생성할 수 있습니다.


client = OpenAI()

OpenAI 클래스의 인스턴스를 생성하여 client라는 이름의 객체에 할당합니다. client 객체를 사용해 API의 여러 기능을 호출할 수 있으며, 여기서는 chat.completions.create() 메서드를 사용합니다.


completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "너는 환영 인사를 하는 인공지능이야, 농담을 넣어 재미있게해줘"},
    {"role": "user", "content": "안녕?"}  
  ]
)

chat.completions.create() 메서드는 client 객체의 메서드 중 하나로, 주어진 메시지에 대한 AI의 응답을 생성합니다.
model: "gpt-4o" 모델을 지정합니다. 여기서 "gpt-4o"는 요청에 사용되는 특정 AI 모델을 의미합니다.
messages: AI에게 전달될 대화의 히스토리를 포함하는 목록입니다. 각 메시지는 role과 content를 포함하는 딕셔너리 형태로 구성됩니다:
첫 번째 메시지: 시스템 메시지("system" 역할)로, AI의 행동을 안내합니다. 여기서는 AI가 환영 인사를 하고, 농담을 더해 재미있게 응답하도록 지시합니다.
두 번째 메시지: 사용자의 입력으로, 단순한 인사("안녕?")를 전달합니다.


print("Assistant: " + completion.choices[0].message.content)

AI의 응답을 출력합니다.
completion.choices[0].message.content는 생성된 응답의 첫 번째 선택지를 가져와 content를 출력합니다.
print() 함수를 통해 결과가 Assistant: 로 시작하여 화면에 표시됩니다.

여기서 choices는 OpenAI API가 생성한 여러 응답 후보 중 하나를 나타내는 배열입니다. choices 배열에는 모델이 생성한 여러 응답이 포함될 수 있으며, 기본적으로 한 번의 요청에 대해 여러 응답을 받을 수 있도록 설정할 수 있습니다. choices[0]은 choices 배열의 첫 번째 항목을 가리킵니다.
예를 들어, n=3으로 요청하면 choices 배열에 3개의 응답이 포함됩니다.

message는 대화형 모델이 생성한 텍스트 응답의 세부 항목입니다. message는 일반적으로 role과 content라는 두 가지 주요 속성을 가집니다:
role: 메시지를 생성한 역할입니다. 예를 들어, "system", "user", "assistant" 중 하나일 수 있습니다.
content: 실제로 생성된 텍스트 메시지 내용입니다. 이 값이 바로 우리가 원하는 응답입니다.

content는 모델이 생성한 실제 텍스트입니다. 즉, 사용자가 요청한 내용에 대한 응답 텍스트가 이 부분에 포함됩니다.
예를 들어, 대화형 응답 생성 시 모델이 사용자에게 제공하는 실제 답변 내용이 content 속성에 포함됩니다.

chat.completions.create()말고도 다른 메서드들도 있습니다.

1. Completion.create (기본 텍스트 생성)(openai.chat.completions.create)
주어진 메시지에 대한 AI의 응답을 생성합니다.
주요 파라미터:
model: 사용할 모델을 지정합니다. 예: "gpt-3.5-turbo", "gpt-4"
messages: 대화의 맥락을 설정하는 메시지들의 리스트입니다. 각 메시지는 role (system, user, assistant)과 content (메시지 내용)를 포함합니다.
temperature: 응답의 창의성 정도를 결정합니다. 기본값은 1.0입니다.
max_tokens: 생성할 최대 토큰 수입니다.
top_p: 확률적 샘플링을 위한 파라미터입니다.
n: 생성할 응답의 개수입니다.
stop: 대화 생성 중에 멈출 조건을 설정하는 파라미터입니다.

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the capital of France?"}
    ],
    temperature=0.7,
    max_tokens=100
)


2. Completion API (openai.Completion.create)

텍스트 기반 모델에서 텍스트 생성 작업을 수행합니다. chat.completions.create와 유사하지만, 대화형 메시지가 아닌 단순 텍스트를 이어서 생성하는 데 사용됩니다.
용도: 일반적인 텍스트 생성 작업, 예를 들어 문장 완성, 요약 생성, 에세이 작성 등에 사용할 수 있습니다.

주요 파라미터:
model: 사용할 모델을 지정합니다. 예: "text-davinci-003", "gpt-3.5-turbo"
prompt: 모델에 제공할 텍스트 입력입니다. 텍스트 생성 작업의 시작점이 됩니다.
max_tokens: 모델이 생성할 텍스트의 최대 토큰 수입니다. 하나의 토큰은 대체로 한 단어 또는 단어의 일부입니다.
temperature: 모델의 응답의 "창의성"을 조절합니다. 값이 높을수록 더 다양한 응답을 생성하고, 낮을수록 더 정확하고 일관성 있는 응답을 생성합니다.
top_p: 확률적 샘플링 방식에 영향을 미칩니다. top_p=1은 전체 확률 분포를 사용하고, 값이 낮을수록 상위 몇 개의 토큰만 선택합니다.
n: 생성할 텍스트 응답의 개수입니다. 기본값은 1입니다.
stop: 텍스트 생성 중에 멈출 조건을 설정하는 파라미터입니다. 특정 문자열을 만나면 텍스트 생성을 중단합니다.

prompt는 단순한 텍스트 입력으로, 모델에게 주어진 텍스트를 기반으로 이어지는 내용을 생성하도록 요구합니다. chat.completions.create와 달리 Completion.create는 대화의 맥락을 고려하지 않고, 하나의 텍스트 프롬프트를 모델에 제공하여 응답을 받는 방식입니다.'

response = openai.Completion.create(
    model="text-davinci-003",
    prompt="Explain the theory of relativity in simple terms.",
    max_tokens=100
)
print(response.choices[0].text)

3. Embedding.create (임베딩 모델)(openai.Embedding.create)
텍스트를 벡터로 변환하여 텍스트 간의 유사성을 계산하거나 추천 시스템에서 사용될 수 있는 임베딩(벡터 표현)을 생성합니다.
용도: 검색, 유사도 매칭, 분류, 군집화 등 NLP 작업에서 활용됩니다
주요 파라미터:
model: 사용할 모델 (예: "text-embedding-ada-002")
input: 텍스트 입력 (이 텍스트의 벡터 표현을 반환)
embedding API는 텍스트를 벡터로 변환하는 데 사용되며, 이때 사용되는 파라미터는 prompt 대신 input을 사용합니다. input에 제공되는 텍스트는 벡터화되어 반환됩니다.

response = openai.Embedding.create(
    model="text-embedding-ada-002",
    input="What is the meaning of life?"
)
embedding_vector = response['data'][0]['embedding']

4. Image.create (이미지 생성 모델)(openai.Image.create)
이미지 생성을 위한 API로, 텍스트 프롬프트를 입력해 AI가 이미지를 생성할 수 있습니다.
용도: 이미지 생성, 예술 작품 생성, 비주얼 콘텐츠 제작 등에 사용됩니다.
model: 사용할 모델 (예: "dall-e-3")
prompt: 이미지 생성에 대한 설명
size: 이미지 크기 (예: "1024x1024")
n = 생성할 이미지의 갯수
Image.create에서는 prompt를 사용하여 이미지를 생성할 수 있으며, 텍스트를 기반으로 시각적인 콘텐츠를 만들어냅니다. 여기도 chat.completions.create와는 다르게 단일 텍스트 설명이 필요합니다.

response = openai.Embedding.create(
    model="text-embedding-ada-002",
    input="What is the meaning of life?"
)
embedding_vector = response['data'][0]['embedding']

4. Audio.transcribe (음성 인식 모델)(openai.Audio.transcribe, openai.Audio.translate)
오디오를 텍스트로 변환하거나 번역할 수 있는 API입니다.
용도: 음성 인식, 자막 생성, 외국어 오디오 번역 등에 활용됩니다.
model: 사용할 모델 (예: "whisper-1")
file: 오디오 파일
language: 언어 (선택사항)
음성 파일을 텍스트로 변환하는 작업에서는 file 파라미터를 사용해 오디오 파일을 모델에 제공하고, 모델은 이를 텍스트로 변환하여 응답합니다.

audio_response = openai.Audio.transcribe(
    model="whisper-1",
    file=open("audio_sample.mp3", "rb")
)
print(audio_response['text'])

5. Moderation.create (콘텐츠 검토)(openai.Moderation.create)
텍스트가 정책을 위반하는지 여부를 검사하는 API입니다. 주로 생성된 콘텐츠가 불건전하거나 유해한 내용인지 검토할 때 유용합니다.
용도: 사용자 입력 검증, 생성된 텍스트 모니터링 등 콘텐츠의 안전성을 평가하는 데 사용됩니다.
주요 파라미터
input: 검토할 텍스트입니다. 이 텍스트가 OpenAI의 정책을 위반하는지 확인합니다.
model: 사용할 모델을 지정합니다. 기본적으로 "text-moderation-001" 모델을 사용합니다.

response = openai.Moderation.create(
    input="This is a violent statement."
)
print(response['results'][0]['flagged'])

6. Fine-tuning API (openai.FineTuningJob.create)
사용자가 제공한 데이터를 이용해 OpenAI 모델을 특정 작업에 맞게 미세 조정(fine-tuning)할 수 있습니다.
용도: 회사의 데이터나 특정 고객 응대 스타일에 맞는 맞춤형 모델을 만들고 싶을 때 활용합니다.
주요 파라미터:
model: 사용할 기본 모델을 지정합니다. 예: "gpt-3.5-turbo".
training_file: Fine-tuning에 사용할 파일의 ID입니다.
validation_file: (선택 사항) 검증 파일의 ID입니다.
n_epochs: 훈련할 epoch 수입니다.
batch_size: 한 번에 처리할 데이터의 배치 크기입니다.

response = openai.FineTuningJob.create(
    model="gpt-3.5-turbo",
    training_file="file-abc123",
    n_epochs=4
)

7. File API (openai.File.create, openai.File.list, openai.File.delete)

Fine-tuning이나 기타 작업에 필요한 파일을 업로드하고 관리할 수 있는 API입니다. 용도: 학습 데이터 업로드, 파일 목록 조회, 불필요한 파일 삭제 등에 활용됩니다.
주요 파라미터:
file: 업로드할 파일입니다. open() 함수로 파일을 열어 전달합니다.
purpose: 업로드하는 파일의 용도입니다. 예: "fine-tune", "answers", "search" 등.
file_name: (선택 사항) 업로드할 파일의 이름입니다.
response = openai.File.create(
    file=open("data.jsonl", "rb"),
    purpose="fine-tune"
)

실습 코드 Diffuser
from diffusers import StableDiffusionPipeline
import torch

# Stable Diffusion 파이프라인 로드
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16)
pipe = pipe.to("cuda")  # GPU 사용

# 텍스트 설명을 기반으로 이미지 생성
prompt = "A futuristic cityscape with flying cars at sunset"
image = pipe(prompt).images[0]

# 생성된 이미지 저장 및 출력
image.save("generated_image.png")
image.show()
from diffusers import StableDiffusionPipeline​
diffusers는 Hugging Face에서 제공하는 라이브러리로, Stable Diffusion과 같은 이미지 생성 모델을 사용하기 위한 도구를 제공합니다. StableDiffusionPipeline은 Stable Diffusion 모델을 로드하고, 텍스트 설명을 이미지로 변환하는 작업을 수행하는 파이프라인 클래스입니다.

import torch​

torch는 PyTorch 라이브러리로, 모델을 실행할 때 GPU(CUDA)와 CPU를 사용하도록 설정할 수 있습니다. 여기서는 GPU를 사용하여 모델을 더 빠르게 실행하기 위해 torch를 임포트합니다.


pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", 
torch_dtype=torch.float32)​
StableDiffusionPipeline.from_pretrained: 미리 학습된 Stable Diffusion 모델을 로드하는 메서드입니다. "CompVis/stable-diffusion-v1-4": Stable Diffusion 모델의 사전 학습된 버전 v1.4를 로드합니다. Hugging Face에서 제공하는 모델 이름입니다. torch_dtype=torch.float32: 모델을 로드할 때 데이터 타입을 float16으로 지정하여 메모리 사용을 최적화하고, GPU에서 빠르게 처리할 수 있도록 설정합니다.

그런데 여기서는 openai가 아니라 StableDiffusionPipeline을 씁니다. 둘 다 같은 이미지 생성을 할 수 있는데 그 차이가 뭘까요?
diffusers 라이브러리의 Stable Diffusion과 OpenAI의 Image.create API는 모두 텍스트를 기반으로 이미지를 생성하는 모델이지만, 두 가지에는 몇 가지 주요 차이점이 있습니다. 
diffusers 라이브러리:
Stable Diffusion이라는 모델을 사용합니다. Stable Diffusion은 텍스트 설명을 기반으로 이미지를 생성하는 오픈 소스 모델로, Hugging Face의 diffusers 라이브러리에서 제공됩니다.
이 모델은 다양한 버전이 있으며, 유저가 모델을 로드하고 자신의 환경에서 직접 실행할 수 있도록 설계되어 있습니다. 예를 들어, StableDiffusionPipeline.from_pretrained()을 사용해 모델을 로드하고, GPU에서 실행할 수 있도록 설정하는 방식입니다.

OpenAI.Image.create:
OpenAI에서는 DALL·E라는 모델을 사용하여 텍스트를 이미지로 변환합니다. DALL·E는 OpenAI에서 개발한 모델로, 텍스트를 기반으로 이미지를 생성하는 능력을 가지고 있습니다.
OpenAI API의 Image.create 메서드는 DALL·E 모델을 사용해 텍스트 설명을 기반으로 이미지를 생성합니다. DALL·E는 OpenAI의 클라우드 기반 API로 제공되며, 사용자는 OpenAI의 서버에서 직접 이미지를 생성합니다.

게다가 diffusers는 커스터마이징이 쉽습니다.
diffusers 라이브러리:

고도화된 제어: Stable Diffusion은 오픈 소스로 제공되기 때문에, 모델을 로컬에서 실행하는 동안 더 많은 커스터마이징이 가능합니다. 예를 들어, 모델 파라미터를 조정하거나, 파인튜닝(fine-tuning)을 통해 모델을 특정 데이터셋에 맞게 학습시킬 수 있습니다.
그라디언트 기반의 제어: 사용자는 diffusers 라이브러리에서 제공하는 다양한 기능을 사용하여 이미지를 생성하는 방식에 더 많은 제어를 가할 수 있습니다. 예를 들어, "랜덤 시드"나 "이미지 품질"을 설정하거나, 조건부 생성을 제어할 수 있습니다.

OpenAI.Image.create:
간편한 사용: OpenAI의 Image.create API는 사용자가 단순히 텍스트 설명만 제공하면 이미지를 생성하는 방식으로, 그라디언트 제어나 커스터마이징이 덜 세밀합니다. 사용자는 모델에 대한 파라미터나 설정을 조정할 수 없고, 단일 API 호출로 간단하게 이미지를 생성할 수 있습니다.
하지만 OpenAI는 API 사용에 대한 다양한 설정을 제공하며, 크기, 응답 수(n 파라미터), 이미지 품질 등을 설정할 수 있습니다.
pipe = pipe.to("cuda")  # GPU 사용​

.to("cuda")는 모델을 GPU로 전송하는 명령어입니다. GPU는 이미지 생성과 같은 계산 집약적인 작업에서 CPU보다 훨씬 빠르기 때문에, 이를 통해 더 빠르고 효율적으로 이미지를 생성할 수 있습니다.

prompt = "A futuristic cityscape with flying cars at sunset"
image = pipe(prompt).images[0]

prompt는 생성하고자 하는 이미지의 설명입니다. 여기서는 "A futuristic cityscape with flying cars at sunset" (해가 지는 날, 하늘을 나는 자동차가 있는 미래 도시 풍경)이라는 텍스트 설명을 사용합니다.
pipe(prompt)는 모델에게 이 텍스트 설명을 전달하고, 이에 맞는 이미지를 생성합니다. images[0]은 반환된 이미지 목록에서 첫 번째 이미지를 선택하는 코드입니다. (일반적으로 여러 이미지를 한 번에 생성할 수 있지만, 여기서는 첫 번째 이미지만 사용합니다.). 참고로 여기서는 prompt만 전달합니다.

image.save("generated_image.png")
image.show()

image.save("generated_image.png"): 생성된 이미지를 "generated_image.png"라는 파일명으로 저장합니다.
image.show(): 생성된 이미지를 화면에 표시합니다. 이는 일반적으로 Jupyter 노트북 환경이나 GUI 환경에서 이미지가 자동으로 표시됩니다.

 

diffusers 라이브러리에는 StableDiffusionPipeline 외에도 여러 다른 파이프라인들이 있습니다. 각 파이프라인은 다양한 이미지 생성 모델을 다루며, 다양한 용도로 사용할 수 있습니다. diffusers 라이브러리에는 기본적인 텍스트-이미지 변환 외에도 이미지 수정, 이미지에서 텍스트 생성, 기타 생성적 작업을 위한 파이프라인이 제공됩니다.

1. StableDiffusionPipeline
Stable Diffusion 모델을 사용하는 기본 파이프라인입니다. 텍스트 설명을 기반으로 이미지를 생성하는 데 사용됩니다.
주요 파라미터:
prompt (str): 생성할 이미지에 대한 텍스트 설명입니다.
num_inference_steps (int, 기본값: 50): 이미지 생성 과정에서의 추론 단계 수입니다. 단계가 많을수록 이미지 품질이 좋아지지만 시간이 더 걸립니다.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 "강도"입니다. 높은 값은 더 정확한 이미지 생성으로 이어집니다.
height (int, 기본값: 512): 생성할 이미지의 높이.
width (int, 기본값: 512): 생성할 이미지의 너비.
seed (int, 기본값: None): 랜덤 시드 값. 동일한 시드를 사용하면 항상 같은 결과를 생성할 수 있습니다.
from diffusers import StableDiffusionPipeline
import torch

# 모델 로드
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", 
torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 텍스트 설명
prompt = "A futuristic cityscape with flying cars at sunset"

# 이미지 생성
image = pipe(prompt, num_inference_steps=50, guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image.save("generated_image.png")

2. LDMTextToImagePipeline (Latent Diffusion Model)
LDM (Latent Diffusion Model)은 Stable Diffusion의 핵심 기술 중 하나로, 텍스트 설명에서 이미지를 생성하는 파이프라인입니다.
Latent Diffusion은 공간을 압축하여 모델의 효율성을 높이고 계산 비용을 줄이면서도 고품질의 이미지를 생성할 수 있습니다.
주요 파라미터:
prompt (str): 생성할 이미지에 대한 텍스트 설명입니다.
num_inference_steps (int, 기본값: 25): Latent Diffusion 모델에서의 추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
height, width (int): 이미지 크기.
latents (tensor, 기본값: None): Latent 공간에서 시작하는 벡터로, 이미지 생성의 초기화 방법을 제어합니다.
from diffusers import LDMTextToImagePipeline
import torch

# 모델 로드
pipe = LDMTextToImagePipeline.from_pretrained("CompVis/ldm-text-to-image", 
torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 텍스트 설명
prompt = "A beautiful garden with roses and a fountain."

# 이미지 생성
image = pipe(prompt, num_inference_steps=25, guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image.save("garden_image.png")

3. StableDiffusionInpaintPipeline
인페인팅 (Inpainting)은 이미지를 수정하거나 결함을 고치는 데 사용됩니다. 주어진 이미지의 일부를 수정하거나 특정 영역에 맞춰 이미지를 생성할 수 있습니다.
예: "이미지의 오른쪽 하단에 나무를 추가하세요."
주요 파라미터:
prompt (str): 텍스트 설명.
image (PIL Image or Tensor): 수정할 이미지. 이미지에서 수정할 영역이 마스크로 지정됩니다.
mask_image (PIL Image): 수정할 부분을 나타내는 마스크 이미지 (흰색: 수정, 검은색: 수정하지 않음).
num_inference_steps (int, 기본값: 50): 추론 단계.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import torch

# 모델 로드
pipe = StableDiffusionInpaintPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", 
torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 수정할 이미지와 마스크
image = Image.open("image_to_inpaint.png")
mask_image = Image.open("mask.png")

# 텍스트 설명
prompt = "Add a tree to the empty space."

# 이미지 인페인팅
image_result = pipe(prompt=prompt, image=image, mask_image=mask_image, 
num_inference_steps=50, guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image_result.save("inpainted_image.png")

4. StableDiffusionUpscalePipeline
해상도 업스케일 (Image Super-Resolution)을 위한 파이프라인입니다. 낮은 해상도의 이미지를 고해상도로 변환하는 데 사용됩니다.
예를 들어, 생성된 이미지의 해상도를 높여서 더 세밀한 디테일을 추가할 수 있습니다.
주요 파라미터:
image (PIL Image or Tensor): 업스케일할 이미지.
num_inference_steps (int, 기본값: 25): 업스케일 추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
scale (float, 기본값: 2.0): 업스케일 비율 (예: 2배, 4배).
from diffusers import StableDiffusionUpscalePipeline
import torch

# 모델 로드
pipe = StableDiffusionUpscalePipeline.from_pretrained("CompVis/stable-diffusion-v1-4", 
torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 업스케일할 이미지
image = Image.open("low_res_image.png")

# 이미지 업스케일
upscaled_image = pipe(image, scale=2.0).images[0]

# 생성된 이미지 저장
upscaled_image.save("upscaled_image.png")

5. TextToImagePipeline
이 파이프라인은 텍스트 설명을 입력받아 이미지를 생성하는 가장 기본적인 파이프라인입니다. 사용자가 텍스트를 입력하면 이에 맞는 이미지를 생성해냅니다.
StableDiffusionPipeline과 유사하지만, 보다 단순한 구성으로 텍스트-이미지 변환에 집중합니다.
주요 파라미터:
prompt (str): 텍스트 설명.
num_inference_steps (int, 기본값: 50): 추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 강도.
height, width (int): 생성할 이미지의 크기.
from diffusers import TextToImagePipeline
import torch

# 모델 로드
pipe = TextToImagePipeline.from_pretrained("CompVis/text-to-image", torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 텍스트 설명
prompt = "A serene landscape with a river and mountains."

# 이미지 생성
image = pipe(prompt, num_inference_steps=50, guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image.save("landscape_image.png")

6. Blip2Processor / Blip2ForConditionalGeneration
BLIP-2 (Bootstrapping Language-Image Pretraining)은 이미지와 텍스트를 동시에 이해하고 생성할 수 있는 모델입니다. 주로 이미지 설명 또는 이미지에서 텍스트 생성을 위한 파이프라인입니다.
예: 이미지를 보고 그에 대한 설명을 생성하거나, 이미지를 기반으로 질문에 답할 수 있는 모델입니다.
주요 파라미터:
image (PIL Image or Tensor): 입력 이미지.
num_beams (int, 기본값: 1): Beams Search에서의 탐색을 위한 빔 수.
max_length (int, 기본값: 30): 생성할 텍스트의 최대 길이.
from diffusers import Blip2Processor, Blip2ForConditionalGeneration
from PIL import Image

# 모델 로드
processor = Blip2Processor.from_pretrained("Salesforce/blip2")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2")

# 이미지 로드
image = Image.open("image.jpg")

# 이미지에서 텍스트 생성
inputs = processor(image, return_tensors="pt")
out = model.generate(**inputs)
generated_text = processor.decode(out[0], skip_special_tokens=True)

print("Generated Text:", generated_text)

7. DPTDepthModel (Depth Prediction)
DPT (Dense Prediction Transformers)는 이미지에서 깊이 정보를 예측하는 모델입니다. 이미지를 입력받아 해당 이미지의 깊이(3D 정보)를 예측하여, 3D 환경을 이해하는 데 도움이 됩니다.
예: "이 이미지를 3D로 변환하려면, 각 객체의 깊이를 계산하세요."
prompt (str): 생성할 이미지에 대한 텍스트 설명.
image (PIL Image): 이미지의 윤곽선 또는 제어할 다른 요소들.
num_inference_steps (int, 기본값: 50): 추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
from diffusers import ControlNetPipeline
import torch

# 모델 로드
pipe = ControlNetPipeline.from_pretrained("CompVis/controlnet")
pipe = pipe.to("cuda")

# 윤곽선 이미지와 텍스트 설명
image = Image.open("control_image.png")
prompt = "Draw a cityscape with a futuristic style."

# 이미지 생성
generated_image = pipe(prompt, image=image, num_inference_steps=50, 
guidance_scale=7.5).images[0]

# 생성된 이미지 저장
generated_image.save("controlled_image.png")

8. ControlNetPipeline
ControlNet은 이미지 생성 시 특정 조건을 제어할 수 있는 파이프라인입니다. 예를 들어, 이미지 생성 과정에서 사용자 정의된 윤곽선, 구조적 제어 등을 추가하여 생성된 이미지를 더 정교하게 조정할 수 있습니다.
예: "특정 윤곽선을 따라 이미지를 생성하세요."
주요 파라미터:
prompt (str): 생성할 이미지에 대한 텍스트 설명.
instance_prompt (str): DreamBooth 모델이 학습한 특정 객체나 스타일에 대한 설명입니다.
num_inference_steps (int, 기본값: 50):추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
height, width (int): 생성할 이미지의 크기.
from diffusers import DreamBoothPipeline
import torch

# 모델 로드
pipe = DreamBoothPipeline.from_pretrained("google/dreambooth_model", 
torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 텍스트 설명과 DreamBooth 인스턴스 프롬프트
prompt = "A portrait of a cute dog in a blue jacket."
instance_prompt = "A golden retriever wearing a red scarf."

# 이미지 생성
image = pipe(prompt=prompt, instance_prompt=instance_prompt, num_inference_steps=50, 
guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image.save("dreambooth_image.png")

9. DreamBoothPipeline
DreamBooth는 특정 스타일이나 객체를 학습하고, 이를 기반으로 이미지를 생성하는 파이프라인입니다. 개인화된 스타일로 이미지를 생성하고 싶을 때 사용됩니다.
예: "저의 고양이를 기반으로 다양한 스타일의 이미지를 생성해 주세요."
주요 파라미터:
prompt (str): 생성할 이미지에 대한 텍스트 설명.
instance_prompt (str): DreamBooth 모델이 학습한 특정 객체나 스타일에 대한 설명입니다.
num_inference_steps (int, 기본값: 50): 추론 단계 수.
guidance_scale (float, 기본값: 7.5): 텍스트 설명에 대한 강도.
height, width (int): 생성할 이미지의 크기.
from diffusers import DreamBoothPipeline
import torch

# 모델 로드
pipe = DreamBoothPipeline.from_pretrained("google/dreambooth_model", torch_dtype=torch.float16)
pipe = pipe.to("cuda")

# 텍스트 설명과 DreamBooth 인스턴스 프롬프트
prompt = "A portrait of a cute dog in a blue jacket."
instance_prompt = "A golden retriever wearing a red scarf."

# 이미지 생성
image = pipe(prompt=prompt, instance_prompt=instance_prompt, num_inference_steps=50, 
guidance_scale=7.5).images[0]

# 생성된 이미지 저장
image.save("dreambooth_image.png")