Inpaint hình ảnh với khuếch tán ổn định bằng cách sử dụng Amazon SageMaker JumpStart

Inpaint hình ảnh với khuếch tán ổn định bằng cách sử dụng Amazon SageMaker JumpStart

Vào tháng 2022 năm XNUMX, chúng tôi công bố rằng khách hàng AWS có thể tạo hình ảnh từ văn bản với Khuếch tán ổn định mô hình sử dụng Khởi động Amazon SageMaker. Hôm nay, chúng tôi rất vui mừng được giới thiệu một tính năng mới cho phép người dùng tô màu hình ảnh bằng các mô hình Khuếch tán ổn định. Inpainting đề cập đến quá trình thay thế một phần của hình ảnh bằng một hình ảnh khác dựa trên lời nhắc văn bản. Bằng cách cung cấp hình ảnh gốc, hình ảnh mặt nạ phác thảo phần được thay thế và lời nhắc bằng văn bản, mô hình Khuếch tán ổn định có thể tạo ra một hình ảnh mới thay thế vùng bị che bằng đối tượng, chủ thể hoặc môi trường được mô tả trong lời nhắc bằng văn bản.

Bạn có thể sử dụng inpainting để khôi phục hình ảnh đã xuống cấp hoặc tạo hình ảnh mới với các chủ đề hoặc phong cách mới lạ trong một số phần nhất định. Trong lĩnh vực thiết kế kiến ​​trúc, sơn Khuếch tán Ổn định có thể được áp dụng để sửa chữa các khu vực chưa hoàn thiện hoặc bị hư hỏng của bản thiết kế tòa nhà, cung cấp thông tin chính xác cho đội xây dựng. Trong trường hợp chụp ảnh MRI lâm sàng, đầu của bệnh nhân phải được cố định, điều này có thể dẫn đến kết quả dưới trung bình do tạo tác cắt xén gây mất dữ liệu hoặc giảm độ chính xác chẩn đoán. Hình ảnh inpainting có thể giúp giảm thiểu những kết quả dưới mức tối ưu này một cách hiệu quả.

Trong bài đăng này, chúng tôi trình bày một hướng dẫn toàn diện về triển khai và chạy suy luận bằng cách sử dụng mô hình inpainting Khuếch tán ổn định theo hai phương pháp: thông qua giao diện người dùng (UI) của JumpStart trong Xưởng sản xuất Amazon SageMakervà được lập trình thông qua API JumpStart có sẵn trong SDK Python của SageMaker.

Tổng quan về giải pháp

Những hình ảnh sau đây là ví dụ về inpainting. Hình ảnh gốc ở bên trái, hình ảnh mặt nạ ở giữa và hình ảnh không sơn do mô hình tạo ra ở bên phải. Đối với ví dụ đầu tiên, mô hình được cung cấp hình ảnh gốc, hình ảnh mặt nạ và lời nhắc bằng văn bản “một con mèo trắng, mắt xanh, mặc áo len, đang nằm trong công viên,” cũng như lời nhắc tiêu cực “đôi chân vẽ xấu. ” Đối với ví dụ thứ hai, lời nhắc bằng văn bản là “Một người mẫu nữ duyên dáng trình diễn chiếc áo dài giản dị có sự pha trộn giữa màu hồng và màu xanh lam,”

Vẽ hình ảnh bằng Khuếch tán ổn định bằng cách sử dụng Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chạy các mô hình lớn như Khuếch tán ổn định yêu cầu tập lệnh suy luận tùy chỉnh. Bạn phải chạy thử nghiệm từ đầu đến cuối để đảm bảo rằng tập lệnh, mô hình và phiên bản mong muốn hoạt động hiệu quả cùng nhau. JumpStart đơn giản hóa quy trình này bằng cách cung cấp các tập lệnh sẵn sàng sử dụng đã được thử nghiệm mạnh mẽ. Bạn có thể truy cập các tập lệnh này bằng một cú nhấp chuột thông qua Giao diện người dùng Studio hoặc với rất ít dòng mã thông qua API JumpStart.

Các phần sau đây hướng dẫn bạn triển khai mô hình và chạy suy luận bằng cách sử dụng Giao diện người dùng Studio hoặc API JumpStart.

Lưu ý rằng bằng cách sử dụng mô hình này, bạn đồng ý với Giấy phép CreativeML Open RAIL++-M.

Truy cập JumpStart thông qua giao diện người dùng Studio

Trong phần này, chúng tôi minh họa việc triển khai các mô hình JumpStart bằng Studio UI. Video đi kèm minh họa việc định vị mô hình vẽ Khuếch tán Ổn định đã được đào tạo trước trên JumpStart và triển khai mô hình đó. Trang mô hình cung cấp các chi tiết cần thiết về mô hình và cách sử dụng mô hình. Để thực hiện suy luận, chúng tôi sử dụng loại phiên bản ml.p3.2xlarge, mang lại khả năng tăng tốc GPU cần thiết để suy luận có độ trễ thấp với mức giá phải chăng. Sau khi phiên bản lưu trữ SageMaker được định cấu hình, hãy chọn Triển khai. Điểm cuối sẽ hoạt động và sẵn sàng xử lý các yêu cầu suy luận trong khoảng 10 phút.

JumpStart cung cấp một sổ ghi chép mẫu có thể giúp tăng tốc thời gian chạy suy luận trên điểm cuối mới được tạo. Để truy cập sổ ghi chép trong Studio, hãy chọn Mở Notebook trong Sử dụng Điểm cuối từ Studio phần của trang điểm cuối mô hình.

Sử dụng JumpStart theo lập trình với SageMaker SDK

Việc sử dụng giao diện người dùng JumpStart cho phép bạn triển khai một mô hình được đào tạo trước một cách tương tác chỉ với một vài cú nhấp chuột. Ngoài ra, bạn có thể sử dụng các mô hình JumpStart theo chương trình bằng cách sử dụng các API được tích hợp trong SageMaker Python SDK.

Trong phần này, chúng tôi chọn một mô hình được đào tạo trước thích hợp trong JumpStart, triển khai mô hình này đến điểm cuối SageMaker và thực hiện suy luận trên điểm cuối đã triển khai, tất cả đều sử dụng SageMaker Python SDK. Các ví dụ sau đây chứa các đoạn mã. Để truy cập mã hoàn chỉnh với tất cả các bước có trong phần minh họa này, hãy tham khảo Giới thiệu về Chỉnh sửa hình ảnh JumpStart – Inpaint khuếch tán ổn định sổ tay ví dụ.

Triển khai mô hình được đào tạo trước

SageMaker sử dụng các thùng chứa Docker cho các tác vụ thời gian chạy và xây dựng khác nhau. JumpStart sử dụng Bộ chứa học sâu SageMaker (DLC) dành riêng cho khung. Trước tiên, chúng tôi tìm nạp bất kỳ gói bổ sung nào, cũng như các tập lệnh để xử lý quá trình đào tạo và suy luận cho tác vụ đã chọn. Sau đó, các tạo phẩm mô hình được đào tạo trước được tìm nạp riêng với model_uris, cung cấp tính linh hoạt cho nền tảng. Điều này cho phép sử dụng nhiều mô hình được đào tạo trước với một tập lệnh suy luận duy nhất. Đoạn mã sau minh họa quá trình này:

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")

Tiếp theo, chúng tôi cung cấp các tài nguyên đó cho một Mô hình SageMaker ví dụ và triển khai một điểm cuối:

# 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,
)

Sau khi mô hình được triển khai, chúng tôi có thể nhận được các dự đoán theo thời gian thực từ mô hình đó!

Đầu vào

Đầu vào là hình ảnh cơ sở, hình ảnh mặt nạ và lời nhắc mô tả chủ thể, đối tượng hoặc môi trường sẽ được thay thế trong phần bị che khuất. Tạo hình ảnh mặt nạ hoàn hảo cho các hiệu ứng trong tranh liên quan đến một số phương pháp hay nhất. Bắt đầu với một lời nhắc cụ thể và đừng ngần ngại thử nghiệm các cài đặt Khuếch tán ổn định khác nhau để đạt được kết quả mong muốn. Sử dụng một hình ảnh mặt nạ gần giống với hình ảnh bạn muốn vẽ trong bức tranh. Cách tiếp cận này hỗ trợ thuật toán inpainting hoàn thành các phần còn thiếu của hình ảnh, dẫn đến hình thức tự nhiên hơn. Hình ảnh chất lượng cao thường mang lại kết quả tốt hơn, vì vậy hãy đảm bảo rằng hình ảnh nền và hình ảnh mặt nạ của bạn có chất lượng tốt và giống nhau. Ngoài ra, hãy chọn hình ảnh mặt nạ lớn và mịn để giữ chi tiết và giảm thiểu hiện vật.

Điểm cuối chấp nhận hình ảnh cơ sở và mặt nạ dưới dạng giá trị RGB thô hoặc hình ảnh được mã hóa base64. Trình xử lý suy luận giải mã hình ảnh dựa trên content_type:

  • Trong content_type = “application/json”, tải trọng đầu vào phải là một từ điển JSON với các giá trị RGB thô, lời nhắc văn bản và các tham số tùy chọn khác
  • Trong content_type = “application/json;jpeg”, tải trọng đầu vào phải là từ điển JSON với hình ảnh được mã hóa base64, lời nhắc văn bản và các tham số tùy chọn khác

Đầu ra

Điểm cuối có thể tạo hai loại đầu ra: hình ảnh RGB được mã hóa Base64 hoặc từ điển JSON của các hình ảnh được tạo. Bạn có thể chỉ định định dạng đầu ra nào bạn muốn bằng cách đặt accept tiêu đề tới "application/json" or "application/json;jpeg" đối với hình ảnh JPEG hoặc base64, tương ứng.

  • Trong accept = “application/json”, điểm cuối trả về từ điển JSON có giá trị RGB cho hình ảnh
  • Trong accept = “application/json;jpeg”, điểm cuối trả về từ điển JSON có hình ảnh JPEG dưới dạng byte được mã hóa bằng mã hóa base64.b64

Lưu ý rằng việc gửi hoặc nhận tải trọng với các giá trị RGB thô có thể đạt đến giới hạn mặc định cho tải trọng đầu vào và kích thước phản hồi. Do đó, chúng tôi khuyên bạn nên sử dụng hình ảnh được mã hóa base64 bằng cách đặt content_type = “application/json;jpeg” và chấp nhận = “application/json;jpeg”.

Đoạn mã sau là một ví dụ về yêu cầu suy luận:

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)

thông số được hỗ trợ

Các mô hình inkhuếch tán ổn định hỗ trợ nhiều thông số để tạo hình ảnh:

  • hình ảnh - Ảnh gốc.
  • mặt nạ – Một hình ảnh trong đó phần bôi đen không thay đổi trong quá trình tạo ảnh và phần màu trắng được thay thế.
  • nhanh chóng – Lời nhắc hướng dẫn tạo hình ảnh. Nó có thể là một chuỗi hoặc một danh sách các chuỗi.
  • num_inference_steps (tùy chọn) – Số bước khử nhiễu trong quá trình tạo ảnh. Nhiều bước hơn dẫn đến hình ảnh chất lượng cao hơn. Nếu được chỉ định, nó phải là một số nguyên dương. Lưu ý rằng nhiều bước suy luận hơn sẽ dẫn đến thời gian phản hồi lâu hơn.
  • hướng dẫn_scale (tùy chọn) – Thang hướng dẫn cao hơn dẫn đến hình ảnh có liên quan chặt chẽ hơn với lời nhắc, nhưng chất lượng hình ảnh phải trả giá đắt. Nếu được chỉ định, nó phải là một số float. guidance_scale<=1 bị bỏ qua.
  • negative_prompt (tùy chọn) – Điều này hướng dẫn việc tạo hình ảnh theo lời nhắc này. Nếu được chỉ định, nó phải là một chuỗi hoặc một danh sách các chuỗi và được sử dụng với guidance_scale. Nếu guidance_scale bị vô hiệu hóa, điều này cũng bị vô hiệu hóa. Hơn nữa, nếu lời nhắc là một danh sách các chuỗi, thì negative_prompt cũng phải là một danh sách các chuỗi.
  • hạt giống (tùy chọn) – Điều này khắc phục trạng thái ngẫu nhiên cho khả năng tái tạo. Nếu được chỉ định, nó phải là một số nguyên. Bất cứ khi nào bạn sử dụng cùng một lời nhắc với cùng một hạt giống, hình ảnh thu được sẽ luôn giống nhau.
  • batch_size (tùy chọn) – Số lượng hình ảnh để tạo trong một lần chuyển tiếp. Nếu sử dụng phiên bản nhỏ hơn hoặc tạo nhiều hình ảnh, hãy giảm batch_size là một số nhỏ (1–2). Số lượng hình ảnh = số lượng nhắc nhở*num_images_per_prompt.

Hạn chế và thành kiến

Mặc dù Stable Diffusion có hiệu suất ấn tượng trong inpaint, nhưng nó có một số hạn chế và sai lệch. Chúng bao gồm nhưng không giới hạn ở:

  • Mô hình có thể không tạo ra khuôn mặt hoặc chân tay chính xác vì dữ liệu đào tạo không bao gồm đủ hình ảnh với các tính năng này.
  • Người mẫu được huấn luyện trên Bộ dữ liệu LAION-5B, có nội dung người lớn và có thể không phù hợp để sử dụng sản phẩm mà không cần xem xét thêm.
  • Mô hình này có thể không hoạt động tốt với các ngôn ngữ không phải tiếng Anh vì mô hình đã được đào tạo về văn bản tiếng Anh.
  • Mô hình không thể tạo văn bản tốt trong hình ảnh.
  • Vẽ khuếch tán ổn định thường hoạt động tốt nhất với hình ảnh có độ phân giải thấp hơn, chẳng hạn như 256×256 hoặc 512×512 pixel. Khi làm việc với hình ảnh có độ phân giải cao (768×768 trở lên), phương pháp này có thể gặp khó khăn trong việc duy trì mức chất lượng và chi tiết mong muốn.
  • Mặc dù việc sử dụng hạt giống có thể giúp kiểm soát khả năng tái tạo, nhưng việc in màu Khuếch tán Ổn định vẫn có thể tạo ra các kết quả khác nhau với những thay đổi nhỏ đối với đầu vào hoặc thông số. Điều này có thể gây khó khăn cho việc tinh chỉnh đầu ra cho các yêu cầu cụ thể.
  • Phương pháp này có thể gặp khó khăn với việc tạo ra các họa tiết và hoa văn phức tạp, đặc biệt là khi chúng trải rộng trên các khu vực rộng lớn trong ảnh hoặc cần thiết để duy trì sự gắn kết tổng thể và chất lượng của khu vực không được sơn.

Để biết thêm thông tin về các hạn chế và sai lệch, hãy tham khảo Thẻ mô hình Inpainting khuếch tán ổn định.

Giải pháp inpainting với mặt nạ được tạo thông qua lời nhắc

CLIPSeq là một kỹ thuật học sâu tiên tiến sử dụng sức mạnh của các mô hình CLIP (Đào tạo trước hình ảnh-ngôn ngữ tương phản) được đào tạo trước để tạo mặt nạ từ hình ảnh đầu vào. Cách tiếp cận này cung cấp một cách hiệu quả để tạo mặt nạ cho các tác vụ như phân đoạn ảnh, inpainting và thao tác. CLIPSeq sử dụng CLIP để tạo mô tả văn bản của hình ảnh đầu vào. Mô tả văn bản sau đó được sử dụng để tạo mặt nạ xác định các pixel trong hình ảnh có liên quan đến mô tả văn bản. Sau đó, mặt nạ có thể được sử dụng để cô lập các phần có liên quan của hình ảnh để xử lý thêm.

CLIPSeq có một số ưu điểm so với các phương pháp khác để tạo mặt nạ từ hình ảnh đầu vào. Đầu tiên, đó là một phương pháp hiệu quả hơn vì nó không yêu cầu hình ảnh phải được xử lý bằng thuật toán phân đoạn hình ảnh riêng biệt. Thứ hai, nó chính xác hơn, bởi vì nó có thể tạo ra các mặt nạ phù hợp hơn với mô tả văn bản của hình ảnh. Thứ ba, nó linh hoạt hơn vì bạn có thể sử dụng nó để tạo mặt nạ từ nhiều hình ảnh khác nhau.

Tuy nhiên, CLIPSeq cũng có một số nhược điểm. Đầu tiên, kỹ thuật này có thể có những hạn chế về chủ đề, bởi vì nó dựa trên các mô hình CLIP được đào tạo trước mà có thể không bao gồm các lĩnh vực hoặc lĩnh vực chuyên môn cụ thể. Thứ hai, nó có thể là một phương pháp nhạy cảm, bởi vì nó dễ bị lỗi trong phần mô tả văn bản của hình ảnh.

Để biết thêm thông tin, tham khảo Phong cách thời trang ảo với AI tổng quát sử dụng Amazon SageMaker.

Làm sạch

Sau khi bạn chạy xong sổ ghi chép, hãy đảm bảo xóa tất cả các tài nguyên được tạo trong quy trình để đảm bảo rằng quá trình lập hóa đơn được dừng lại. Mã để dọn sạch điểm cuối có sẵn trong liên kết máy tính xách tay.

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách triển khai mô hình inpainting Khuếch tán ổn định được đào tạo trước bằng cách sử dụng JumpStart. Chúng tôi đã hiển thị các đoạn mã trong bài đăng này—mã đầy đủ với tất cả các bước trong bản trình diễn này có sẵn trong Giới thiệu về JumpStart – Nâng cao chất lượng hình ảnh được hướng dẫn bằng lời nhắc sổ ví dụ. Hãy thử giải pháp của riêng bạn và gửi cho chúng tôi ý kiến ​​​​của bạn.

Để tìm hiểu thêm về mô hình và cách thức hoạt động của mô hình, hãy xem các tài nguyên sau:

Để tìm hiểu thêm về JumpStart, hãy xem các bài đăng sau:


Về các tác giả

Vẽ hình ảnh bằng Khuếch tán ổn định bằng cách sử dụng Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Tiến sĩ Vivek Madan là một Nhà Khoa học Ứng dụng của nhóm Amazon SageMaker JumpStart. Ông lấy bằng Tiến sĩ tại Đại học Illinois tại Urbana-Champaign và là Nhà nghiên cứu Sau Tiến sĩ tại Georgia Tech. Anh ấy là một nhà nghiên cứu tích cực về học máy và thiết kế thuật toán và đã xuất bản các bài báo trong các hội nghị EMNLP, ICLR, COLT, FOCS và SODA.

Vẽ hình ảnh bằng Khuếch tán ổn định bằng cách sử dụng Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Alfred Shen là Chuyên gia cao cấp về AI/ML tại AWS. Ông đã và đang làm việc tại Thung lũng Silicon, giữ các vị trí quản lý và kỹ thuật trong nhiều lĩnh vực khác nhau bao gồm chăm sóc sức khỏe, tài chính và công nghệ cao. Anh ấy là một nhà nghiên cứu AI/ML ứng dụng chuyên dụng, tập trung vào CV, NLP và đa phương thức. Tác phẩm của ông đã được giới thiệu trong các ấn phẩm như EMNLP, ICLR và Public Health.

Dấu thời gian:

Thêm từ Học máy AWS