Amazon SageMaker JumpStart를 사용하여 안정적인 확산으로 이미지 인페인트

Amazon SageMaker JumpStart를 사용하여 안정적인 확산으로 이미지 인페인트

2022년 XNUMX월, 우리는 발표 AWS 고객이 텍스트에서 이미지를 생성할 수 있는 안정적인 확산 사용하는 모델 Amazon SageMaker 점프스타트. 오늘 우리는 사용자가 Stable Diffusion 모델로 이미지를 인페인팅할 수 있는 새로운 기능을 소개하게 되어 기쁩니다. 인페인팅은 텍스트 프롬프트를 기반으로 이미지의 일부를 다른 이미지로 대체하는 프로세스를 말합니다. 원본 이미지, 대체할 부분의 윤곽을 나타내는 마스크 이미지 및 텍스트 프롬프트를 제공함으로써 Stable Diffusion 모델은 마스크 영역을 텍스트 프롬프트에 설명된 개체, 주제 또는 환경으로 대체하는 새 이미지를 생성할 수 있습니다.

인페인팅을 사용하여 저하된 이미지를 복원하거나 특정 섹션에서 새로운 주제 또는 스타일로 새 이미지를 만들 수 있습니다. 건축 설계 영역 내에서 Stable Diffusion 인페인팅은 건물 청사진의 불완전하거나 손상된 부분을 수리하는 데 적용할 수 있어 건설 직원에게 정확한 정보를 제공할 수 있습니다. 임상 MRI 촬영의 경우 환자의 머리를 고정해야 하며, 이로 인해 자르기 아티팩트로 인해 데이터 손실이 발생하거나 진단 정확도가 낮아질 수 있습니다. 이미지 인페인팅은 이러한 최적이 아닌 결과를 완화하는 데 효과적으로 도움이 될 수 있습니다.

이 게시물에서는 두 가지 방법으로 Stable Diffusion 인페인팅 모델을 사용하여 추론을 배포하고 실행하는 방법에 대한 포괄적인 가이드를 제공합니다. 아마존 세이지 메이커 스튜디오, 그리고 프로그래밍 방식으로 점프스타트 API 사용할 수있는 SageMaker Python SDK.

솔루션 개요

다음 이미지는 인페인팅의 예입니다. 왼쪽이 원본 이미지, 중앙이 마스크 이미지, 오른쪽이 모델이 생성한 인페인팅 이미지입니다. 첫 번째 예의 경우, 모델에 원본 이미지, 마스크 이미지, 텍스트 프롬프트 "하얀 고양이, 파란 눈, 스웨터를 입고 공원에 누워" 및 부정적인 프롬프트 "잘못 그린 발"이 제공되었습니다. ” 두 번째 예의 텍스트 프롬프트는 "분홍색과 파란색이 혼합된 캐주얼한 롱 드레스를 우아하게 선보인 여성 모델"이었습니다.

Amazon SageMaker JumpStart PlatoBlockchain 데이터 인텔리전스를 사용하여 Stable Diffusion으로 이미지를 페인팅합니다. 수직 검색. 일체 포함.

Stable Diffusion과 같은 대형 모델을 실행하려면 사용자 지정 추론 스크립트가 필요합니다. 스크립트, 모델 및 원하는 인스턴스가 효율적으로 함께 작동하는지 확인하려면 엔드 투 엔드 테스트를 실행해야 합니다. JumpStart는 견고하게 테스트된 즉시 사용 가능한 스크립트를 제공하여 이 프로세스를 단순화합니다. Studio UI를 통해 클릭 한 번으로 스크립트에 액세스하거나 점프스타트 API.

다음 섹션에서는 Studio UI 또는 JumpStart API를 사용하여 모델을 배포하고 추론을 실행하는 과정을 안내합니다.

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

Studio UI를 통해 JumpStart에 액세스

이 섹션에서는 Studio UI를 사용하여 JumpStart 모델을 배포하는 방법을 설명합니다. 함께 제공되는 비디오는 사전 훈련된 Stable Diffusion 인페인팅 모델을 JumpStart에서 찾아 배포하는 방법을 보여줍니다. 모델 페이지는 모델 및 해당 사용법에 대한 필수 세부 정보를 제공합니다. 추론을 수행하기 위해 합리적인 가격으로 짧은 지연 시간 추론에 필요한 GPU 가속을 제공하는 ml.p3.2xlarge 인스턴스 유형을 사용합니다. SageMaker 호스팅 인스턴스가 구성된 후 다음을 선택합니다. 배포. 엔드포인트가 작동하고 약 10분 이내에 추론 요청을 처리할 준비가 됩니다.

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

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

JumpStart UI를 활용하면 몇 번의 클릭만으로 사전 학습된 모델을 대화식으로 배포할 수 있습니다. 또는 SageMaker Python SDK 내에 통합된 API를 사용하여 프로그래밍 방식으로 JumpStart 모델을 사용할 수 있습니다.

이 섹션에서는 SageMaker Python SDK를 사용하여 JumpStart에서 적절한 사전 훈련된 모델을 선택하고 이 모델을 SageMaker 엔드포인트에 배포하고 배포된 엔드포인트에서 추론을 수행합니다. 다음 예제에는 코드 스니펫이 포함되어 있습니다. 이 데모에 포함된 모든 단계가 포함된 전체 코드에 액세스하려면 다음을 참조하십시오. JumpStart 이미지 편집 소개 – 안정적인 확산 인페인팅 예시 노트북.

선행 학습된 모델 배포

SageMaker는 다양한 빌드 및 런타임 작업에 Docker 컨테이너를 활용합니다. JumpStart는 SageMaker 딥 러닝 컨테이너 (DLC)는 프레임워크에 따라 다릅니다. 먼저 추가 패키지와 선택한 작업에 대한 학습 및 추론을 처리하는 스크립트를 가져옵니다. 그런 다음 사전 훈련된 모델 아티팩트를 별도로 가져옵니다. model_uris, 플랫폼에 유연성을 제공합니다. 이를 통해 여러 사전 훈련된 모델을 단일 추론 스크립트와 함께 사용할 수 있습니다. 다음 코드는 이 프로세스를 보여줍니다.

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# 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=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

다음으로 이러한 리소스를 세이지메이커 모델 인스턴스를 만들고 엔드포인트를 배포합니다.

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

모델이 배포된 후 실시간 예측을 얻을 수 있습니다!

입력

입력은 기본 이미지, 마스크 이미지 및 마스크 아웃 부분에서 대체할 주제, 개체 또는 환경을 설명하는 프롬프트입니다. 인페인팅 효과를 위한 완벽한 마스크 이미지를 생성하려면 몇 가지 모범 사례가 필요합니다. 특정 프롬프트로 시작하고 주저하지 말고 다양한 Stable Diffusion 설정을 실험하여 원하는 결과를 얻으십시오. 인페인팅하려는 이미지와 매우 유사한 마스크 이미지를 활용합니다. 이 접근 방식은 인페인팅 알고리즘이 이미지의 누락된 부분을 완성하는 데 도움을 주어 보다 자연스러운 모양을 만듭니다. 고품질 이미지는 일반적으로 더 나은 결과를 제공하므로 기본 및 마스크 이미지의 품질이 좋고 서로 유사해야 합니다. 또한 디테일을 보존하고 아티팩트를 최소화하려면 크고 부드러운 마스크 이미지를 선택하십시오.

끝점은 기본 이미지와 마스크를 원시 RGB 값 또는 base64 인코딩 이미지로 허용합니다. 추론 처리기는 다음을 기반으로 이미지를 디코딩합니다. content_type:

  • 럭셔리 content_type = “application/json”, 입력 페이로드는 원시 RGB 값, 텍스트 프롬프트 및 기타 선택적 매개변수가 있는 JSON 사전이어야 합니다.
  • 럭셔리 content_type = “application/json;jpeg”, 입력 페이로드는 base64로 인코딩된 이미지, 텍스트 프롬프트 및 기타 선택적 매개변수가 있는 JSON 사전이어야 합니다.

산출

엔드포인트는 두 가지 유형의 출력, 즉 Base64 인코딩 RGB 이미지 또는 생성된 이미지의 JSON 사전을 생성할 수 있습니다. 다음을 설정하여 원하는 출력 형식을 지정할 수 있습니다. accept 헤더 "application/json" or "application/json;jpeg" JPEG 이미지 또는 base64의 경우 각각.

  • 럭셔리 accept = “application/json”, 끝점은 이미지에 대한 RGB 값이 있는 JSON 사전을 반환합니다.
  • 럭셔리 accept = “application/json;jpeg”, 엔드포인트는 JPEG 이미지가 있는 JSON 사전을 base64.b64 인코딩으로 인코딩된 바이트로 반환합니다.

원시 RGB 값으로 페이로드를 보내거나 받으면 입력 페이로드 및 응답 크기에 대한 기본 제한에 도달할 수 있습니다. 따라서 base64로 인코딩된 이미지를 설정하여 사용하는 것을 권장합니다. content_type = “application/json;jpeg” 및 수락 = "응용 프로그램/json;jpeg".

다음 코드는 추론 요청의 예입니다.

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

지원되는 매개변수

안정적인 확산 인페인팅 모델은 이미지 생성을 위한 많은 매개변수를 지원합니다.

  • 영상 – 원본 이미지.
  • 마스크 – 이미지 생성 중에 검게 칠해진 부분이 그대로 유지되고 흰색 부분이 교체된 이미지.
  • 신속한 – 이미지 생성을 안내하는 프롬프트. 문자열 또는 문자열 목록일 수 있습니다.
  • num_inference_steps(선택 사항) – 이미지 생성 중 노이즈 제거 단계의 수. 더 많은 단계가 더 높은 품질의 이미지로 이어집니다. 지정된 경우 양의 정수여야 합니다. 추론 단계가 많을수록 응답 시간이 길어집니다.
  • guidance_scale(선택사항) – 안내 척도가 높을수록 이미지 품질이 저하되는 대신 프롬프트와 더 밀접하게 관련된 이미지가 생성됩니다. 지정된 경우 부동 소수점이어야 합니다. guidance_scale<=1 무시됩니다.
  • negative_prompt(선택 사항) – 이것은 이 프롬프트에 대한 이미지 생성을 안내합니다. 지정된 경우 문자열 또는 문자열 목록이어야 하며 다음과 함께 사용됩니다. guidance_scale. 면 guidance_scale 비활성화되면 이것도 비활성화됩니다. 또한 프롬프트가 문자열 목록인 경우 negative_prompt 또한 문자열 목록이어야 합니다.
  • 시드(선택사항) – 이것은 재현성을 위해 무작위 상태를 수정합니다. 지정된 경우 정수여야 합니다. 동일한 시드로 동일한 프롬프트를 사용할 때마다 결과 이미지는 항상 동일합니다.
  • batch_size(선택사항) – 단일 순방향 패스에서 생성할 이미지 수입니다. 더 작은 인스턴스를 사용하거나 많은 이미지를 생성하는 경우 batch_size 작은 숫자(1–2)가 됩니다. 이미지 수 = 프롬프트 수*num_images_per_prompt.

한계와 편견

Stable Diffusion은 인페인팅에서 인상적인 성능을 보여주지만 몇 가지 한계와 편향이 있습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • 교육 데이터에 이러한 기능이 있는 충분한 이미지가 포함되어 있지 않기 때문에 모델이 정확한 얼굴이나 팔다리를 생성하지 못할 수 있습니다.
  • 모델은 LAION-5B 데이터 세트, 성인 콘텐츠가 포함되어 있으며 추가 고려 없이는 제품 사용에 적합하지 않을 수 있습니다.
  • 모델이 영어 텍스트에 대해 학습되었기 때문에 모델이 영어가 아닌 언어에서는 제대로 작동하지 않을 수 있습니다.
  • 모델은 이미지 내에서 좋은 텍스트를 생성할 수 없습니다.
  • 안정적인 확산 인페인팅은 일반적으로 256×256 또는 512×512 픽셀과 같은 저해상도 이미지에서 가장 잘 작동합니다. 고해상도 이미지(768×768 이상)로 작업할 때 원하는 수준의 품질과 디테일을 유지하기 어려울 수 있습니다.
  • 시드를 사용하면 재현성을 제어하는 ​​데 도움이 될 수 있지만 안정적인 확산 인페인팅은 여전히 ​​입력 또는 매개변수를 약간 변경하여 다양한 결과를 생성할 수 있습니다. 이로 인해 특정 요구 사항에 대한 출력을 미세 조정하는 것이 어려울 수 있습니다.
  • 이 방법은 복잡한 텍스처와 패턴을 생성하는 데 어려움을 겪을 수 있습니다. 특히 이미지 내의 넓은 영역에 걸쳐 있거나 인페인팅 영역의 전반적인 일관성과 품질을 유지하는 데 필수적일 때 그렇습니다.

제한 및 편향에 대한 자세한 내용은 다음을 참조하십시오. 안정적인 확산 인페인팅 모델 카드.

프롬프트를 통해 마스크가 생성된 인페인팅 솔루션

CLIPSeq는 사전 훈련된 CLIP(Contrastive Language-Image Pretraining) 모델의 힘을 활용하여 입력 이미지에서 마스크를 생성하는 고급 딥 러닝 기술입니다. 이 접근 방식은 이미지 분할, 인페인팅 및 조작과 같은 작업을 위한 마스크를 만드는 효율적인 방법을 제공합니다. CLIPSeq는 CLIP을 사용하여 입력 이미지의 텍스트 설명을 생성합니다. 텍스트 설명은 텍스트 설명과 관련된 이미지의 픽셀을 식별하는 마스크를 생성하는 데 사용됩니다. 그런 다음 마스크를 사용하여 추가 처리를 위해 이미지의 관련 부분을 분리할 수 있습니다.

CLIPSeq는 입력 이미지에서 마스크를 생성하는 다른 방법에 비해 몇 가지 장점이 있습니다. 첫째, 별도의 이미지 분할 알고리즘으로 이미지를 처리할 필요가 없기 때문에 보다 효율적인 방법입니다. 둘째, 이미지의 텍스트 설명과 더 밀접하게 정렬된 마스크를 생성할 수 있기 때문에 더 정확합니다. 셋째, 다양한 이미지에서 마스크를 생성하는 데 사용할 수 있기 때문에 더 다재다능합니다.

그러나 CLIPSeq에는 몇 가지 단점도 있습니다. 첫째, 이 기술은 특정 도메인이나 전문 분야를 포함하지 않을 수 있는 사전 훈련된 CLIP 모델에 의존하기 때문에 주제 측면에서 제한이 있을 수 있습니다. 둘째, 이미지의 텍스트 설명 오류에 취약하기 때문에 민감한 방법일 수 있습니다.

자세한 내용은 Amazon SageMaker를 사용하여 생성 AI로 가상 패션 스타일링.

정리

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

결론

이 게시물에서는 JumpStart를 사용하여 사전 훈련된 Stable Diffusion 인페인팅 모델을 배포하는 방법을 보여주었습니다. 이 게시물에서 코드 스니펫을 보여 드렸습니다. 이 데모의 모든 단계가 포함된 전체 코드는 다음에서 사용할 수 있습니다. JumpStart 소개 – 프롬프트에 따라 이미지 품질 향상 예시 노트북. 직접 솔루션을 시도하고 의견을 보내주십시오.

모델 및 작동 방식에 대해 자세히 알아보려면 다음 리소스를 참조하세요.

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


저자에 관하여

Amazon SageMaker JumpStart PlatoBlockchain 데이터 인텔리전스를 사용하여 Stable Diffusion으로 이미지를 페인팅합니다. 수직 검색. 일체 포함.비벡 마단 박사 Amazon SageMaker JumpStart 팀의 응용 과학자입니다. 그는 일리노이 대학교 어바나 샴페인에서 박사 학위를 받았고 조지아 공대에서 박사후 연구원이었습니다. 그는 기계 학습 및 알고리즘 설계 분야에서 활발한 연구원이며 EMNLP, ICLR, COLT, FOCS 및 SODA 컨퍼런스에 논문을 발표했습니다.

Amazon SageMaker JumpStart PlatoBlockchain 데이터 인텔리전스를 사용하여 Stable Diffusion으로 이미지를 페인팅합니다. 수직 검색. 일체 포함.알프레드 쉔 AWS의 선임 AI/ML 전문가입니다. 그는 실리콘 밸리에서 일하면서 의료, 금융, 첨단 기술을 포함한 다양한 분야에서 기술 및 관리 직책을 맡았습니다. 그는 CV, NLP 및 다중 양식에 집중하는 응용 AI/ML 전담 연구원입니다. 그의 작업은 EMNLP, ICLR 및 공중 보건과 같은 간행물에 소개되었습니다.

타임 스탬프 :

더보기 AWS 기계 학습