Amazon SageMaker JumpStart를 사용하여 텍스트에서 이미지로의 안정적인 확산 모델 미세 조정

Amazon SageMaker JumpStart를 사용하여 텍스트에서 이미지로의 안정적인 확산 모델 미세 조정

소스 노드 : 1968900

2022년 XNUMX월, 우리는 발표 AWS 고객이 텍스트에서 이미지를 생성할 수 있는 안정적인 확산 ~에있는 모델들 Amazon SageMaker 점프스타트. Stable Diffusion은 사실적인 고품질 이미지와 놀라운 아트를 단 몇 초 만에 생성할 수 있는 딥 러닝 모델입니다. 인상적인 이미지를 만드는 것은 예술에서 NFT 및 그 이상에 이르는 다양한 산업에서 사용할 수 있지만 오늘날 우리는 AI도 개인화할 수 있을 것으로 기대합니다. 오늘 우리는 이미지 생성 모델을 사용자 지정 데이터 세트에서 미세 조정하여 사용 사례에 맞게 개인화할 수 있음을 발표합니다. Amazon SageMaker 점프스타트. 이는 아트, 로고, 맞춤형 디자인, NFT 등을 만들거나 애완 동물 또는 아바타의 맞춤형 AI 이미지 생성과 같은 재미있는 작업을 할 때 유용할 수 있습니다.

이 게시물에서는 두 가지 방법으로 Stable Diffusion 모델을 미세 조정하는 방법에 대한 개요를 제공합니다. 점프스타트 API 사용할 수있는 SageMaker Python SDK, 및 JumpStart의 사용자 인터페이스(UI) 아마존 세이지 메이커 스튜디오. 또한 데이터 세트 품질, 교육 데이터 세트 크기, 하이퍼파라미터 값 선택 및 여러 데이터 세트에 대한 적용 가능성을 포함하여 디자인을 선택하는 방법에 대해서도 논의합니다. 마지막으로, 최근 JumpStart에 추가된 다양한 입력 언어 및 스타일을 사용하여 공개적으로 사용할 수 있는 80개 이상의 미세 조정 모델에 대해 논의합니다.

안정적인 확산 및 전이 학습

Stable Diffusion은 텍스트 프롬프트에서 사실적인 이미지를 생성할 수 있는 텍스트-이미지 모델입니다. 확산 모델은 실제 이미지에 추가된 노이즈를 제거하는 방법을 학습하여 학습합니다. 이 노이즈 제거 프로세스는 사실적인 이미지를 생성합니다. 이러한 모델은 텍스트에 대한 생성 프로세스를 조정하여 텍스트만으로 이미지를 생성할 수도 있습니다. 예를 들어 안정적인 확산은 모델이 순수한 노이즈 이미지에서 모양을 인식하는 방법을 학습하고 모양이 입력 텍스트의 단어와 일치하는 경우 점차 이러한 모양에 초점을 맞추는 잠재 확산입니다. 텍스트는 먼저 언어 모델을 사용하여 잠재 공간에 포함되어야 합니다. 그런 다음 U-Net 아키텍처를 사용하여 잠재 공간에서 일련의 노이즈 추가 및 노이즈 제거 작업을 수행합니다. 마지막으로 노이즈가 제거된 출력은 픽셀 공간으로 디코딩됩니다.

기계 학습(ML)에서 한 도메인에서 학습한 지식을 다른 도메인으로 이전하는 기능을 호출합니다. 전학 학습. 전이 학습을 사용하여 원래 모델을 교육하는 데 드는 비용보다 훨씬 적은 교육 비용으로 더 작은 데이터 세트에서 정확한 모델을 생성할 수 있습니다. 전이 학습을 사용하면 최소 XNUMX개의 이미지로 자체 데이터 세트에서 안정적인 확산 모델을 미세 조정할 수 있습니다. 예를 들어 왼쪽에는 모델을 미세 조정하는 데 사용되는 Doppler라는 강아지의 훈련 이미지가 있고, 중간과 오른쪽에는 해변에서 Doppler의 이미지와 연필 스케치를 예측하도록 요청했을 때 미세 조정된 모델이 생성한 이미지가 있습니다.

왼쪽에는 모델을 미세 조정하는 데 사용되는 흰색 의자 이미지와 미세 조정된 모델에 의해 생성된 빨간색 의자 이미지가 있습니다. 오른쪽에는 모델을 미세 조정하는 데 사용되는 오토만의 이미지와 오토만에 앉아 있는 고양이의 이미지가 있습니다.

Stable Diffusion과 같은 대형 모델을 미세 조정하려면 일반적으로 훈련 스크립트를 제공해야 합니다. 메모리 부족 문제, 페이로드 크기 문제 등 많은 문제가 있습니다. 또한 종단 간 테스트를 실행하여 스크립트, 모델 및 원하는 인스턴스가 효율적인 방식으로 함께 작동하는지 확인해야 합니다. JumpStart는 견고하게 테스트된 즉시 사용 가능한 스크립트를 제공하여 이 프로세스를 단순화합니다. Stable Diffusion 모델을 위한 JumpStart 미세 조정 스크립트는 드림부스. Studio UI를 통해 한 번 클릭하거나 점프스타트 API.

Stable Diffusion 모델을 사용하면 다음에 동의하는 것입니다. CreativeML Open RAIL++-M 라이선스.

SageMaker SDK와 함께 프로그래밍 방식으로 JumpStart 사용

이 섹션에서는 SageMaker Python SDK. JumpStart에서 사전 훈련된 적절한 모델을 선택하고, SageMaker 훈련 작업으로 이 모델을 훈련하고, 훈련된 모델을 SageMaker 엔드포인트에 배포합니다. 또한 SageMaker Python SDK를 모두 사용하여 배포된 엔드포인트에서 추론을 실행합니다. 다음 예제에는 코드 스니펫이 포함되어 있습니다. 이 데모의 모든 단계가 포함된 전체 코드는 다음을 참조하세요. JumpStart 소개 – 텍스트를 이미지로 예시 노트북.

Stable Diffusion 모델 학습 및 미세 조정

각 모델은 고유한 model_id. 다음 코드는 다음 코드로 식별되는 Stable Diffusion 2.1 기본 모델을 미세 조정하는 방법을 보여줍니다. model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base 사용자 지정 교육 데이터 세트에서. 전체 목록은 model_id 값과 미세 조정 가능한 모델은 다음을 참조하십시오. 사전 훈련된 모델 테이블이 있는 내장 알고리즘. 각각 model_id, 다음을 통해 SageMaker 교육 작업을 시작하려면 견적 SageMaker Python SDK의 클래스를 사용하려면 SageMaker에서 제공하는 유틸리티 기능을 통해 Docker 이미지 URI, 훈련 스크립트 URI 및 사전 훈련된 모델 URI를 가져와야 합니다. 훈련 스크립트 URI에는 데이터 처리, 사전 훈련된 모델 로드, 모델 훈련 및 추론을 위해 훈련된 모델 저장에 필요한 모든 코드가 포함되어 있습니다. 선행 학습된 모델 URI에는 선행 학습된 모델 아키텍처 정의 및 모델 매개변수가 포함됩니다. 선행 학습된 모델 URI는 특정 모델에 따라 다릅니다. 사전 훈련된 모델 타르볼은 Hugging Face에서 사전 다운로드되었으며 적절한 모델 서명과 함께 다음 위치에 저장되었습니다. 아마존 단순 스토리지 서비스 (Amazon S3) 버킷(예: 교육 작업이 네트워크 격리에서 실행됨). 다음 코드를 참조하십시오.

from sagemaker import image_uris, model_uris, script_uris # Currently, not all the stable diffusion models in jumpstart support finetuning. Thus, we manually select a model
# which supports finetuning.
train_model_id, train_model_version, train_scope = ( "model-txt2img-stabilityai-stable-diffusion-v2-1-base", "*", "training",
) # Tested with ml.g4dn.2xlarge (16GB GPU memory) and ml.g5.2xlarge (24GB GPU memory) instances. Other instances may work as well.
# If ml.g5.2xlarge instance type is available, please change the following instance type to speed up training.
training_instance_type = "ml.g4dn.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve(
region=None,
framework=None, # automatically inferred from model_id
model_id=train_model_id,
model_version=train_model_version,
image_scope=train_scope,
instance_type=training_instance_type,
) # Retrieve the training script. This contains all the necessary files including data processing, model training etc.
train_source_uri = script_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
) # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
)

이러한 모델별 교육 아티팩트를 사용하여 개체를 구성할 수 있습니다. 견적 수업:

# Create SageMaker Estimator instance
sd_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", # Entry-point file in source_dir and present in train_source_uri. instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, base_job_name=training_job_name,
) # Launch a SageMaker Training job by passing s3 path of the training data
sd_estimator.fit({"training": training_dataset_s3_path}, logs=True)

훈련 데이터세트

다음은 교육 데이터의 형식을 지정하는 방법에 대한 지침입니다.

  • 입력 – 인스턴스 이미지가 포함된 디렉토리, dataset_info.json, 다음 구성:
    • 이미지는 .png, .jpg 또는 .jpeg 형식일 수 있습니다.
    • XNUMXD덴탈의 dataset_info.json 파일 형식이어야 합니다. {'instance_prompt':<<instance_prompt>>}
  • 산출 – 추론을 위해 배포할 수 있는 훈련된 모델

S3 경로는 다음과 같아야 합니다. s3://bucket_name/input_directory/. 후행 참고 / 필요합니다.

다음은 교육 데이터의 예시 형식입니다.

input_directory |---instance_image_1.png |---instance_image_2.png |---instance_image_3.png |---instance_image_4.png |---instance_image_5.png |---dataset_info.json

사전 보존을 사용하는 동안 데이터를 포맷하는 방법에 대한 지침은 섹션을 참조하십시오. 사전 보존 이 게시물에.

고양이 이미지의 기본 데이터 세트를 제공합니다. 클래스 이미지가 없는 한 마리 고양이의 XNUMX개 이미지(인스턴스 프롬프트에 해당하는 인스턴스 이미지)로 구성됩니다. 에서 다운로드할 수 있습니다. GitHub의. 기본 데이터 세트를 사용하는 경우 데모 노트북에서 추론을 수행하는 동안 "a photo of a riobugger cat" 프롬프트를 시도하십시오.

특허: MIT.

하이퍼 파라미터

다음으로 사용자 지정 데이터 세트에 대한 전이 학습을 위해 훈련 하이퍼파라미터의 기본값을 변경해야 할 수 있습니다. 다음을 호출하여 기본값을 사용하여 이러한 하이퍼파라미터의 Python 사전을 가져올 수 있습니다. hyperparameters.retrieve_default, 필요에 따라 업데이트한 다음 Estimator 클래스에 전달합니다. 다음 코드를 참조하십시오.

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
model_id=train_model_id, model_version=train_model_version
) # [Optional] Override default hyperparameters with custom values
hyperparameters["max_steps"] = "400"

미세 조정 알고리즘에서 지원하는 하이퍼파라미터는 다음과 같습니다.

  • with_prior_preservation – 사전 보존 손실을 추가하는 플래그입니다. 사전 보존은 과적합을 방지하는 regularizer입니다. (선택: [“True”,“False”], 기본: “False”.)
  • num_class_images – 사전 보존 손실에 대한 최소 클래스 이미지. 만약에 with_prior_preservation = True 에 이미 있는 이미지가 충분하지 않습니다. class_data_dir, 추가 이미지는 class_prompt. (값: 양의 정수, 기본값: 100.)
  • 신기원 – 미세 조정 알고리즘이 교육 데이터 세트를 통과하는 패스 수입니다. (값: 양의 정수, 기본값: 20.)
  • Max_steps – 수행할 총 교육 단계 수입니다. 그렇지 않다면 None, 신기원을 재정의합니다. (값: “None” 또는 정수 문자열, 기본값: “None”.)
  • 배치 크기 –: 모델 가중치가 업데이트되기 전에 작업한 훈련 예제의 수입니다. 다음과 같은 경우 클래스 이미지 생성 중 배치 크기와 동일 with_prior_preservation = True. (값: 양의 정수, 기본값: 1.)
  • 학습_속도 – 훈련 예제의 각 배치를 통해 작업한 후 모델 가중치가 업데이트되는 비율. (값: 양의 실수, 기본값: 2e-06.)
  • 이전_손실_가중 – 이전 보존 손실의 가중치. (값: 양의 실수, 기본값: 1.0.)
  • center_crop – 원하는 해상도로 크기를 조정하기 전에 이미지를 자를지 여부. (선택: [“True”/“False”], 기본: “False”.)
  • lr_스케줄러 – 학습률 스케줄러의 유형. (선택: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], 기본: "constant".) 자세한 내용은 다음을 참조하십시오. 학습률 스케줄러.
  • adam_weight_decay – 모든 바이어스 및 LayerNorm 에 가중치 AdamW 옵티마이저 (값: float, 기본값: 1e-2.)
  • adam_beta1 – 베타1 하이퍼파라미터(첫 모멘트 추정치에 대한 지수적 감쇠율) AdamW 옵티마이저 (값: float, 기본값: 0.9.)
  • adam_beta2 – 베타2 하이퍼파라미터(첫 모멘트 추정치에 대한 지수적 감쇠율) AdamW 옵티마이저 (값: float, 기본값: 0.999.)
  • adam_epsilon - epsilon 에 대한 하이퍼파라미터 AdamW 옵티마이저 일반적으로 0으로 나누지 않도록 작은 값으로 설정합니다. (값: float, 기본값: 1e-8.)
  • 그래디언트_축적_단계 – 역방향/업데이트 패스를 수행하기 전에 누적할 업데이트 단계의 수입니다. (값: 정수, 기본값: 1.)
  • max_grad_norm – 최대 기울기 표준(기울기 클리핑용). (값: float, 기본값: 1.0.)
  • – 학습에서 재현 가능한 결과를 얻기 위해 무작위 상태를 수정합니다. (값: 정수, 기본값: 0.)

미세 훈련된 모델 배포

모델 학습이 완료되면 영구 실시간 엔드포인트에 모델을 직접 배포할 수 있습니다. 필요한 Docker 이미지 URI 및 스크립트 URI를 가져오고 모델을 배포합니다. 다음 코드를 참조하십시오.

inference_instance_type = "ml.g4dn.2xlarge" # Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=train_model_id, model_version=train_model_version, instance_type=inference_instance_type,
) # Retrieve the inference script uri. This includes scripts for model loading, inference handling etc.
deploy_source_uri = script_uris.retrieve( model_id=train_model_id, model_version=train_model_version, script_scope="inference"
) # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = sd_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

왼쪽에는 모델을 미세 조정하는 데 사용되는 riobugger라는 고양이의 훈련 이미지가 있습니다(기본 매개변수는 제외). max_steps = 400). 중간과 오른쪽에는 해변에서 리오버거의 이미지와 연필 스케치를 예측하도록 요청했을 때 미세 조정된 모델에 의해 생성된 이미지가 있습니다.

지원되는 매개변수, 응답 형식 등 추론에 대한 자세한 내용은 다음을 참조하세요. Amazon SageMaker JumpStart에서 안정적인 확산 모델을 사용하여 텍스트에서 이미지 생성.

Studio UI를 통해 JumpStart에 액세스

이 섹션에서는 Studio UI를 통해 JumpStart 모델을 교육하고 배포하는 방법을 보여줍니다. 다음 동영상은 JumpStart에서 사전 훈련된 Stable Diffusion 모델을 찾아 훈련한 다음 배포하는 방법을 보여줍니다. 모델 페이지에는 모델 및 사용 방법에 대한 중요한 정보가 포함되어 있습니다. SageMaker 교육 인스턴스를 구성한 후 다음을 선택합니다. Train . 모델이 학습된 후 다음을 선택하여 학습된 모델을 배포할 수 있습니다. 배포. 엔드포인트가 "서비스 중" 단계에 있으면 추론 요청에 응답할 준비가 된 것입니다.

추론 시간을 단축하기 위해 JumpStart는 새로 생성된 엔드포인트에서 추론을 실행하는 방법을 보여주는 샘플 노트북을 제공합니다. Studio에서 노트북에 액세스하려면 노트북 열기 FBI 증오 범죄 보고서 Studio에서 Endpoint 사용 모델 끝점 페이지의 섹션.

JumpStart는 안정적인 확산 모델을 미세 조정하고 그 결과 미세 조정된 모델을 배포하는 데 사용할 수 있는 간단한 노트북도 제공합니다. 강아지의 재미있는 이미지를 생성하는 데 사용할 수 있습니다. 노트북에 액세스하려면 JumpStart 검색 표시줄에서 "강아지의 재미있는 이미지 생성"을 검색하십시오. 노트북을 실행하려면 최소 3개의 교육 이미지를 사용하고 로컬 스튜디오 폴더에 업로드하면 됩니다. 20개 이상의 이미지가 있는 경우 이미지도 업로드할 수 있습니다. 노트북은 교육 이미지를 SXNUMX에 업로드하고 데이터 세트에서 모델을 교육하고 결과 모델을 배포합니다. 교육을 완료하는 데 XNUMX분이 소요될 수 있습니다. 훈련 속도를 높이기 위해 단계 수를 변경할 수 있습니다. Notebook은 배포된 모델로 시도할 수 있는 몇 가지 샘플 프롬프트를 제공하지만 원하는 프롬프트를 시도할 수 있습니다. 노트북을 조정하여 자신이나 애완 동물의 아바타를 만들 수도 있습니다. 예를 들어 첫 번째 단계에서 개 대신 고양이 이미지를 업로드한 다음 프롬프트를 개에서 고양이로 변경하면 모델이 고양이 이미지를 생성합니다.

미세 조정 고려 사항

안정적인 확산 모델을 훈련하면 빠르게 과대적합되는 경향이 있습니다. 좋은 품질의 이미지를 얻으려면 훈련 단계 수와 학습률과 같은 사용 가능한 훈련 하이퍼파라미터 사이에서 적절한 균형을 찾아야 합니다. 이 섹션에서는 몇 가지 실험 결과를 보여주고 이러한 매개변수를 설정하는 방법에 대한 지침을 제공합니다.

추천

다음 권장 사항을 고려하십시오.

  • 좋은 품질의 학습 이미지로 시작합니다(4–20). 사람의 얼굴을 훈련하는 경우 더 많은 이미지가 필요할 수 있습니다.
  • 개나 고양이 및 기타 비인간 대상에 대해 훈련할 때 200~400보를 훈련합니다. 사람의 얼굴을 훈련하는 경우 더 많은 단계가 필요할 수 있습니다. 과적합이 발생하면 n단계를 줄입니다. 과소적합이 발생하면(미세 조정된 모델이 대상 피사체의 이미지를 생성할 수 없음) 단계 수를 늘립니다.
  • 사람이 아닌 얼굴로 훈련하는 경우 다음을 설정할 수 있습니다. with_prior_preservation = False 성능에 큰 영향을 미치지 않기 때문입니다. 사람의 얼굴에는 다음을 설정해야 할 수 있습니다. with_prior_preservation=True.
  • 설정하는 경우 with_prior_preservation=True, ml.g5.2xlarge 인스턴스 유형을 사용하십시오.
  • 여러 주제를 순차적으로 훈련할 때 주제가 매우 유사하면(예: 모든 개) 모델은 마지막 주제를 유지하고 이전 주제는 잊어버립니다. 주제가 다른 경우(예: 먼저 고양이 다음 개) 모델은 두 주제를 모두 유지합니다.
  • 낮은 학습률을 사용하고 결과가 만족스러울 때까지 단계 수를 점진적으로 늘리는 것이 좋습니다.

훈련 데이터세트

미세 조정된 모델의 품질은 훈련 이미지의 품질에 직접적인 영향을 받습니다. 따라서 좋은 결과를 얻으려면 고품질의 이미지를 수집해야 합니다. 흐리거나 저해상도 이미지는 미세 조정된 모델의 품질에 영향을 미칩니다. 다음 추가 매개변수에 유의하십시오.

  • 교육 이미지 수 – 최소 4개의 훈련 이미지에서 모델을 미세 조정할 수 있습니다. 최소 16개 이미지에서 많게는 XNUMX개 이미지 크기의 학습 데이터 세트로 실험했습니다. 두 경우 모두 미세 조정을 통해 모델을 주제에 맞게 조정할 수 있었습니다.
  • 데이터 세트 형식 – .png, .jpg 및 .jpeg 형식의 이미지에 대해 미세 조정 알고리즘을 테스트했습니다. 다른 형식도 작동할 수 있습니다.
  • 이미지 해상도 – 트레이닝 이미지는 어떤 해상도도 될 수 있습니다. 미세 조정 알고리즘은 미세 조정을 시작하기 전에 모든 훈련 이미지의 크기를 조정합니다. 즉, 훈련 이미지의 자르기 및 크기 조정을 더 잘 제어하려면 모델의 기본 해상도(이 예에서는 512×512픽셀)에 맞게 이미지 크기를 직접 조정하는 것이 좋습니다.

실험 설정

이 게시물의 실험에서 미세 조정하는 동안 지정하지 않는 한 하이퍼 매개 변수의 기본값을 사용합니다. 또한 다음 네 가지 데이터 세트 중 하나를 사용합니다.

  • 도그1-8 – 1개의 이미지가 있는 개 8
  • 도그1-16 – 1개의 이미지가 있는 개 16
  • 도그2-4 – 네 개의 이미지가 있는 개 2
  • 고양이 -8 – 8개의 이미지가 있는 고양이

혼란을 줄이기 위해 데이터 세트 이름과 함께 각 섹션에서 데이터 세트의 대표 이미지 하나만 표시합니다. 섹션에서 전체 훈련 세트를 찾을 수 있습니다. 실험 데이터세트 이 게시물에.

피팅

안정적인 확산 모델은 몇 개의 이미지를 미세 조정할 때 과대적합되는 경향이 있습니다. 따라서 다음과 같은 매개변수를 선택해야 합니다. epochs, max_epochs, 학습률을 주의 깊게 살펴보십시오. 이 섹션에서는 Dog1-16 데이터 세트를 사용했습니다.

모델의 성능을 평가하기 위해 다음 네 가지 작업에 대해 미세 조정된 모델을 평가합니다.

  • 미세 조정된 모델이 훈련된 것과 동일한 설정에서 대상(도플러 개)의 이미지를 생성할 수 있습니까?
    • 관찰 - 예, 그럴 수 있습니다. 훈련 단계의 수에 따라 모델 성능이 증가한다는 점은 주목할 가치가 있습니다.
  • 미세 조정된 모델이 훈련된 것과 다른 설정에서 대상의 이미지를 생성할 수 있습니까? 예를 들어 해변에서 도플러 이미지를 생성할 수 있습니까?
    • 관찰 - 예, 그럴 수 있습니다. 특정 지점까지 훈련 단계의 수에 따라 모델 성능이 증가한다는 점은 주목할 가치가 있습니다. 그러나 모델이 너무 오래 훈련되면 모델이 과적합되는 경향이 있으므로 모델 성능이 저하됩니다.
  • 미세 조정된 모델이 훈련 대상이 속한 클래스의 이미지를 생성할 수 있습니까? 예를 들어 일반 개의 이미지를 생성할 수 있습니까?
    • 관찰 – 학습 단계의 수를 늘리면 모델이 과대적합되기 시작합니다. 결과적으로 개의 일반 클래스를 잊어버리고 해당 주제와 관련된 이미지만 생성합니다.
  • 미세 조정된 모델이 교육 데이터 세트에 없는 클래스 또는 주제의 이미지를 생성할 수 있습니까? 예를 들어 고양이 이미지를 생성할 수 있습니까?
    • 관찰 – 학습 단계의 수를 늘리면 모델이 과대적합되기 시작합니다. 결과적으로 지정된 클래스에 관계없이 주제와 관련된 이미지만 생성합니다.

다른 단계 수에 대해 모델을 미세 조정합니다(설정하여 max_steps 하이퍼파라미터) 및 미세 조정된 각 모델에 대해 다음 네 가지 프롬프트 각각에서 이미지를 생성합니다(다음 예에서 왼쪽에서 오른쪽으로 표시됨).

  • “도플러 개 사진”
  • “해변에서 도플러 강아지 사진”
  • “강아지 사진”
  • "고양이 사진"

다음 이미지는 50단계로 학습된 모델의 이미지입니다.

다음 모델은 100단계로 훈련되었습니다.

다음 모델을 200단계로 학습했습니다.

다음 이미지는 400단계로 학습된 모델의 이미지입니다.

마지막으로 다음 이미지는 800 단계의 결과입니다.

여러 데이터 세트에서 학습

미세 조정하는 동안 여러 피사체를 미세 조정하고 미세 조정된 모델이 모든 피사체의 이미지를 생성할 수 있도록 할 수 있습니다. 안타깝게도 JumpStart는 현재 단일 주제에 대한 교육으로 제한되어 있습니다. 동시에 여러 주제에 대해 모델을 미세 조정할 수 없습니다. 더욱이, 서로 다른 주제에 대해 모델을 순차적으로 미세 조정하면 주제가 유사할 경우 모델이 첫 번째 주제를 잊어버리는 결과를 낳습니다.

이 섹션에서는 다음과 같은 실험을 고려합니다.

  1. 주제 A의 모델을 미세 조정합니다.
  2. 주제 B에 대해 1단계의 결과 모델을 미세 조정합니다.
  3. 2단계의 출력 모델을 사용하여 주제 A와 주제 B의 이미지를 생성합니다.

다음 실험에서 우리는 다음을 관찰합니다.

  • A가 개 1이고 B가 개 2이면 3단계에서 생성된 모든 이미지는 개 2와 유사합니다.
  • A가 개 2이고 B가 개 1이면 3단계에서 생성된 모든 이미지는 개 1와 유사합니다.
  • A가 개 1이고 B가 고양이인 경우 개 프롬프트로 생성된 이미지는 개 1과 유사하고 고양이 프롬프트로 생성된 이미지는 고양이와 유사합니다.

개 1을 훈련시킨 다음 개 2를 훈련시키십시오.

1단계에서는 개 200의 1개 이미지에 대해 2단계에 대해 모델을 미세 조정합니다. 200단계에서는 개 2의 XNUMX개 이미지에 대해 XNUMX단계에 대해 모델을 미세 조정합니다.

다음은 다양한 프롬프트에 대해 2단계 끝에서 미세 조정된 모델이 생성한 이미지입니다.

개 2을 훈련시킨 다음 개 1를 훈련시키십시오.

1단계에서는 개 200의 2개 이미지에 대해 2단계에 대해 모델을 미세 조정합니다. 200단계에서는 개 1의 XNUMX개 이미지에 대해 XNUMX단계에 대해 모델을 미세 조정합니다.

다음은 2단계가 끝날 때 미세 조정된 모델이 다른 프롬프트로 생성한 이미지입니다.

개와 고양이 훈련

1단계에서는 200개의 고양이 이미지에 대해 200단계에 대해 모델을 미세 조정합니다. 그런 다음 dog 1의 XNUMX개 이미지에 대해 XNUMX단계에 대해 모델을 미세 조정합니다.

다음은 2단계에서 미세 조정된 모델에 의해 생성된 이미지입니다. 고양이 관련 프롬프트가 있는 이미지는 미세 조정 1단계의 고양이처럼 보이고 강아지 관련 프롬프트가 있는 이미지는 개처럼 보입니다. 미세조정 2단계.

사전 보존

사전 보존은 훈련하려는 동일한 클래스의 추가 이미지를 사용하는 기술입니다. 예를 들어 훈련 데이터가 특정 개의 이미지로 구성되어 있는 경우 사전 보존을 통해 일반 개의 클래스 이미지를 통합합니다. 특정 개를 훈련하는 동안 다른 개의 이미지를 보여줌으로써 과적합을 피하려고 합니다. 인스턴스 프롬프트에 있는 특정 개를 나타내는 태그가 클래스 프롬프트에 없습니다. 예를 들어 인스턴스 프롬프트는 "리오버거 고양이 사진"이고 클래스 프롬프트는 "고양이 사진"일 수 있습니다. 하이퍼파라미터를 설정하여 사전 보존을 활성화할 수 있습니다. with_prior_preservation = True. 설정하는 경우 with_prior_preservation = True, 다음을 포함해야 합니다. class_prompt in dataset_info.json 사용 가능한 수업 이미지를 포함할 수 있습니다. 다음은 설정 시 교육 데이터 세트 형식입니다. with_prior_preservation = True:

  • 입력 – 인스턴스 이미지가 포함된 디렉토리, dataset_info.json 및 (선택 사항) 디렉토리 class_data_dir. 다음 사항에 유의하십시오.
    • 이미지는 .png, .jpg, .jpeg 형식일 수 있습니다.
    • XNUMXD덴탈의 dataset_info.json 파일 형식이어야 합니다. {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • XNUMXD덴탈의 class_data_dir 디렉토리에 클래스 이미지가 있어야 합니다. 만약에 class_data_dir 이(가) 없거나 이미 있는 이미지가 충분하지 않습니다. class_data_dir, 추가 이미지는 class_prompt.

고양이 및 개와 같은 데이터 세트의 경우 사전 보존은 미세 조정된 모델의 성능에 큰 영향을 미치지 않으므로 피할 수 있습니다. 그러나 얼굴 훈련을 할 때는 이것이 필요합니다. 자세한 내용은 다음을 참조하십시오. Diffusers를 사용하는 Dreambooth로 안정적인 확산 교육.

인스턴스 유형

안정적인 확산 모델을 미세 조정하려면 GPU 지원 인스턴스에서 제공하는 가속 계산이 필요합니다. ml.g4dn.2xlarge(16GB CUDA 메모리, 1 GPU) 및 ml.g5.2xlarge(24GB CUDA 메모리, 1 GPU) 인스턴스를 사용하여 미세 조정을 실험합니다. 클래스 이미지를 생성할 때 메모리 요구 사항이 더 높습니다. 따라서 설정하면 with_prior_preservation=True, ml.g5.2dn.4xlarge 인스턴스에서 교육 실행 시 CUDA 메모리 부족 문제가 발생하므로 ml.g2xlarge 인스턴스 유형을 사용하십시오. JumpStart 미세 조정 스크립트는 현재 단일 GPU를 사용하므로 다중 GPU 인스턴스에서 미세 조정해도 성능이 향상되지 않습니다. 다른 인스턴스 유형에 대한 자세한 내용은 다음을 참조하십시오. Amazon EC2 인스턴스 유형.

한계와 편향

Stable Diffusion은 이미지를 생성하는 데 있어 인상적인 성능을 제공하지만 몇 가지 제한 사항과 편견이 있습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • 교육 데이터에 이러한 기능이 있는 충분한 이미지가 포함되어 있지 않기 때문에 모델이 정확한 얼굴이나 팔다리를 생성하지 못할 수 있습니다.
  • 모델은 LAION-5B 데이터 세트, 성인용 콘텐츠가 포함되어 있으며 추가 고려 없이는 제품 사용에 적합하지 않을 수 있습니다.
  • 모델이 영어 텍스트에 대해 학습되었기 때문에 모델이 영어가 아닌 언어에서 제대로 작동하지 않을 수 있습니다.
  • 모델은 이미지 내에서 좋은 텍스트를 생성할 수 없습니다.

제한 및 편향에 대한 자세한 내용은 다음을 참조하십시오. 안정적인 확산 v2-1 기반 모델 카드. 사전 훈련된 모델에 대한 이러한 제한 사항은 미세 조정된 모델에도 적용될 수 있습니다.

정리

노트북 실행을 마친 후에는 청구가 중지되도록 프로세스에서 생성된 모든 리소스를 삭제해야 합니다. 끝점을 정리하는 코드는 연결된 JumpStart 소개 – 텍스트를 이미지로 예시 노트북.

JumpStart에서 공개적으로 사용 가능한 미세 조정 모델

에서 출시한 Stable Diffusion 모델임에도 불구하고 안정성AI 인상적인 성능을 가지고 있지만 훈련된 언어나 도메인 측면에서 제한이 있습니다. 예를 들어 Stable Diffusion 모델은 영어 텍스트에 대해 학습되었지만 영어가 아닌 텍스트에서 이미지를 생성해야 할 수 있습니다. 또는 Stable Diffusion 모델은 사실적인 이미지를 생성하도록 훈련되었지만 애니메이션 또는 예술적인 이미지를 생성해야 할 수도 있습니다.

JumpStart는 다양한 언어와 테마로 공개적으로 사용 가능한 80개 이상의 모델을 제공합니다. 이러한 모델은 종종 StabilityAI에서 출시한 Stable Diffusion 모델에서 미세 조정된 버전입니다. 사용 사례가 미세 조정된 모델 중 하나와 일치하는 경우 자체 데이터 세트를 수집하고 미세 조정할 필요가 없습니다. Studio UI를 통해 또는 사용하기 쉬운 JumpStart API를 사용하여 이러한 모델 중 하나를 간단히 배포할 수 있습니다. 사전 훈련된 Stable Diffusion 모델을 JumpStart에 배포하려면 다음을 참조하십시오. Amazon SageMaker JumpStart에서 안정적인 확산 모델을 사용하여 텍스트에서 이미지 생성.

다음은 JumpStart에서 사용할 수 있는 다양한 모델에서 생성된 이미지의 일부 예입니다.

이러한 모델은 JumpStart 스크립트 또는 DreamBooth 스크립트를 사용하여 미세 조정되지 않습니다. 다음에서 예제 프롬프트와 함께 공개적으로 사용 가능한 미세 조정 모델의 전체 목록을 다운로드할 수 있습니다. 여기에서 지금 확인해 보세요..

이러한 모델에서 생성된 이미지의 예를 더 보려면 섹션을 참조하십시오. 오픈 소스 미세 조정 모델 부록에서.

결론

이 게시물에서는 텍스트에서 이미지로의 안정적인 확산 모델을 미세 조정한 다음 JumpStart를 사용하여 배포하는 방법을 보여 주었습니다. 또한 모델을 미세 조정하는 동안 고려해야 할 몇 가지 사항과 이것이 미세 조정된 모델의 성능에 어떤 영향을 미칠 수 있는지에 대해 논의했습니다. 또한 JumpStart에서 사용할 수 있는 바로 사용할 수 있는 미세 조정 모델 80개 이상에 대해서도 논의했습니다. 이 게시물에서 코드 스니펫을 보여 드렸습니다. 이 데모의 모든 단계가 포함된 전체 코드는 다음을 참조하세요. JumpStart 소개 – 텍스트를 이미지로 예시 노트북. 직접 솔루션을 시도하고 의견을 보내주십시오.

모델 및 DreamBooth 미세 조정에 대한 자세한 내용은 다음 리소스를 참조하십시오.

JumpStart에 대해 자세히 알아보려면 다음 블로그 게시물을 확인하십시오.


저자에 관하여

비벡 마단 박사 Amazon SageMaker JumpStart 팀의 응용 과학자입니다. 그는 일리노이 대학교 어바나 샴페인에서 박사 학위를 받았고 조지아 공대에서 박사후 연구원이었습니다. 그는 기계 학습 및 알고리즘 설계 분야에서 활발한 연구원이며 EMNLP, ICLR, COLT, FOCS 및 SODA 컨퍼런스에 논문을 발표했습니다.

하이코 핫츠 자연어 처리(NLP), 대규모 언어 모델(LLM) 및 생성 AI에 특히 중점을 둔 AI 및 기계 학습을 위한 선임 솔루션 설계자입니다. 이 직책을 맡기 전에는 Amazon EU 고객 서비스의 데이터 과학 책임자였습니다. Heiko는 고객이 AWS에서 AI/ML 여정을 성공적으로 수행할 수 있도록 돕고 보험, 금융 서비스, 미디어 및 엔터테인먼트, 의료, 유틸리티 및 제조를 비롯한 많은 산업 분야의 조직과 협력했습니다. 여가 시간에 Heiko는 가능한 한 많이 여행합니다.


부록: 실험 데이터 세트

이 섹션에는 이 게시물의 실험에 사용된 데이터 세트가 포함되어 있습니다.

도그1-8

도그1-16

도그2-4

도그3-8

부록: 오픈 소스 미세 조정 모델

다음은 JumpStart에서 사용할 수 있는 다양한 모델에서 생성된 이미지의 일부 예입니다. 각 이미지에는 model_id 접두사로 시작 huggingface-txt2img- 다음 줄에 이미지를 생성하는 데 사용되는 프롬프트가 이어집니다.

타임 스탬프 :

더보기 AWS 기계 학습