Inpaint gambar dengan Difusi Stabil menggunakan Amazon SageMaker JumpStart

Inpaint gambar dengan Difusi Stabil menggunakan Amazon SageMaker JumpStart

Pada November 2022, kami mengumumkan yang dapat digunakan pelanggan AWS untuk menghasilkan gambar dari teks Difusi Stabil model menggunakan Mulai Lompatan Amazon SageMaker. Hari ini, kami dengan senang hati memperkenalkan fitur baru yang memungkinkan pengguna mewarnai gambar dengan model Difusi Stabil. Inpainting mengacu pada proses mengganti sebagian gambar dengan gambar lain berdasarkan prompt tekstual. Dengan menyediakan gambar asli, gambar topeng yang menguraikan bagian yang akan diganti, dan perintah tekstual, model Difusi Stabil dapat menghasilkan gambar baru yang menggantikan area yang disamarkan dengan objek, subjek, atau lingkungan yang dijelaskan dalam perintah tekstual.

Anda dapat menggunakan inpainting untuk memulihkan gambar yang rusak atau membuat gambar baru dengan subjek atau gaya baru di bagian tertentu. Dalam bidang desain arsitektur, pengecatan Difusi Stabil dapat diterapkan untuk memperbaiki area cetak biru bangunan yang tidak lengkap atau rusak, memberikan informasi yang tepat untuk kru konstruksi. Dalam kasus pencitraan MRI klinis, kepala pasien harus ditahan, yang dapat menyebabkan hasil di bawah standar karena artefak pemotongan yang menyebabkan hilangnya data atau berkurangnya akurasi diagnostik. Pengecatan gambar dapat secara efektif membantu mengurangi hasil yang kurang optimal ini.

Dalam posting ini, kami menyajikan panduan komprehensif tentang penerapan dan menjalankan inferensi menggunakan model inpainting Difusi Stabil dalam dua metode: melalui antarmuka pengguna (UI) JumpStart di Studio Amazon SageMaker, dan secara terprogram melalui API JumpStart tersedia di SDK Python SageMaker.

Ikhtisar solusi

Gambar berikut adalah contoh lukisan. Gambar asli ada di kiri, gambar topeng ada di tengah, dan gambar bercat yang dihasilkan oleh model ada di kanan. Untuk contoh pertama, model diberikan gambar asli, gambar topeng, dan prompt tekstual "kucing putih, mata biru, mengenakan sweter, berbaring di taman", serta prompt negatif "kaki yang ditarik dengan buruk". โ€ Untuk contoh kedua, prompt tekstualnya adalah "Seorang model wanita dengan anggun menampilkan gaun panjang kasual yang menampilkan perpaduan warna pink dan biru,"

Melukis gambar dengan Difusi Stabil menggunakan Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menjalankan model besar seperti Stable Diffusion memerlukan skrip inferensi khusus. Anda harus menjalankan pengujian end-to-end untuk memastikan bahwa skrip, model, dan instance yang diinginkan bekerja sama secara efisien. JumpStart menyederhanakan proses ini dengan menyediakan skrip siap pakai yang telah diuji dengan kuat. Anda dapat mengakses skrip ini dengan satu klik melalui Studio UI atau dengan sangat sedikit baris kode melalui API JumpStart.

Bagian berikut memandu Anda menerapkan model dan menjalankan inferensi menggunakan Studio UI atau JumpStart API.

Perhatikan bahwa dengan menggunakan model ini, Anda menyetujui Lisensi CreativeML Open RAIL++-M.

Akses JumpStart melalui UI Studio

Di bagian ini, kami mengilustrasikan penerapan model JumpStart menggunakan UI Studio. Video yang menyertai mendemonstrasikan menemukan model pewarnaan Stable Diffusion inpainting yang telah dilatih sebelumnya di JumpStart dan menerapkannya. Halaman model menawarkan detail penting tentang model dan penggunaannya. Untuk melakukan inferensi, kami menggunakan jenis instans ml.p3.2xlarge, yang memberikan akselerasi GPU yang diperlukan untuk inferensi latensi rendah dengan harga yang terjangkau. Setelah instans hosting SageMaker dikonfigurasi, pilih Menyebarkan. Titik akhir akan beroperasi dan disiapkan untuk menangani permintaan inferensi dalam waktu kurang lebih 10 menit.

JumpStart menyediakan contoh notebook yang dapat membantu mempercepat waktu yang diperlukan untuk menjalankan inferensi pada titik akhir yang baru dibuat. Untuk mengakses buku catatan di Studio, pilih Buka Buku Catatan dalam Gunakan Endpoint dari Studio bagian dari halaman titik akhir model.

Gunakan JumpStart secara terprogram dengan SageMaker SDK

Memanfaatkan UI JumpStart memungkinkan Anda menerapkan model terlatih secara interaktif hanya dengan beberapa klik. Sebagai alternatif, Anda dapat menggunakan model JumpStart secara terprogram dengan menggunakan API yang terintegrasi dalam SageMaker Python SDK.

Di bagian ini, kami memilih model terlatih yang sesuai di JumpStart, menerapkan model ini ke titik akhir SageMaker, dan melakukan inferensi pada titik akhir yang diterapkan, semuanya menggunakan SageMaker Python SDK. Contoh berikut berisi cuplikan kode. Untuk mengakses kode lengkap dengan semua langkah yang disertakan dalam demonstrasi ini, lihat Pengantar untuk pengeditan Gambar JumpStart โ€“ Pengecatan Difusi Stabil contoh buku catatan.

Deploy model yang telah dilatih sebelumnya

SageMaker menggunakan kontainer Docker untuk berbagai tugas build dan runtime. JumpStart menggunakan Wadah Pembelajaran Mendalam SageMaker (DLC) yang spesifik kerangka kerja. Kami pertama-tama mengambil paket tambahan apa pun, serta skrip untuk menangani pelatihan dan inferensi untuk tugas yang dipilih. Kemudian artefak model pra-pelatihan diambil secara terpisah model_uris, yang memberikan fleksibilitas pada platform. Hal ini memungkinkan beberapa model terlatih untuk digunakan dengan satu skrip inferensi. Kode berikut mengilustrasikan proses ini:

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

Selanjutnya, kami menyediakan sumber daya tersebut untuk a Model SageMaker contoh dan gunakan titik akhir:

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

Setelah model diterapkan, kami dapat memperoleh prediksi real-time darinya!

Memasukkan

Inputnya adalah gambar dasar, gambar topeng, dan prompt yang menjelaskan subjek, objek, atau lingkungan yang akan diganti di bagian yang disamarkan. Membuat gambar topeng yang sempurna untuk efek lukisan melibatkan beberapa praktik terbaik. Mulailah dengan prompt tertentu, dan jangan ragu untuk bereksperimen dengan berbagai pengaturan Difusi Stabil untuk mencapai hasil yang diinginkan. Gunakan gambar topeng yang sangat mirip dengan gambar yang ingin Anda lukis. Pendekatan ini membantu algoritme pengecatan dalam melengkapi bagian gambar yang hilang, menghasilkan tampilan yang lebih alami. Gambar berkualitas tinggi umumnya memberikan hasil yang lebih baik, jadi pastikan gambar dasar dan topeng Anda memiliki kualitas yang baik dan mirip satu sama lain. Selain itu, pilih gambar topeng yang besar dan halus untuk mempertahankan detail dan meminimalkan artefak.

Titik akhir menerima gambar dasar dan topeng sebagai nilai RGB mentah atau gambar yang disandikan base64. Penangan inferensi menerjemahkan gambar berdasarkan content_type:

  • Untuk content_type = โ€œapplication/jsonโ€, payload input harus berupa kamus JSON dengan nilai RGB mentah, perintah tekstual, dan parameter opsional lainnya
  • Untuk content_type = โ€œapplication/json;jpegโ€, muatan input harus berupa kamus JSON dengan gambar berenkode base64, perintah tekstual, dan parameter opsional lainnya

Keluaran

Titik akhir dapat menghasilkan dua jenis keluaran: gambar RGB berenkode Base64 atau kamus JSON dari gambar yang dihasilkan. Anda dapat menentukan format keluaran mana yang Anda inginkan dengan menyetel accept sundulan ke "application/json" or "application/json;jpeg" masing-masing untuk gambar JPEG atau base64.

  • Untuk accept = โ€œapplication/jsonโ€, titik akhir mengembalikan kamus JSON dengan nilai RGB untuk gambar
  • Untuk accept = โ€œapplication/json;jpegโ€, titik akhir mengembalikan kamus JSON dengan gambar JPEG sebagai byte yang dikodekan dengan pengkodean base64.b64

Perhatikan bahwa mengirim atau menerima muatan dengan nilai RGB mentah mungkin mencapai batas default untuk muatan input dan ukuran respons. Oleh karena itu, sebaiknya gunakan gambar yang disandikan base64 dengan pengaturan content_type = โ€œapplication/json;jpegโ€ dan terima = "application/json;jpeg".

Kode berikut adalah contoh permintaan inferensi:

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)

Parameter yang didukung

Model lukisan Difusi Stabil mendukung banyak parameter untuk pembuatan gambar:

  • gambar โ€“ Gambar asli.
  • masker โ€“ Gambar di mana bagian yang dihitamkan tetap tidak berubah selama pembuatan gambar dan bagian putih diganti.
  • cepat โ€“ Perintah untuk memandu pembuatan gambar. Itu bisa berupa string atau daftar string.
  • num_inference_steps (opsional) โ€“ Jumlah langkah denoising selama pembuatan gambar. Lebih banyak langkah menghasilkan gambar berkualitas lebih tinggi. Jika ditentukan, itu harus berupa bilangan bulat positif. Perhatikan bahwa lebih banyak langkah inferensi akan menghasilkan waktu respons yang lebih lama.
  • skala_panduan (opsional) โ€“ Skala panduan yang lebih tinggi menghasilkan gambar yang lebih dekat hubungannya dengan prompt, dengan mengorbankan kualitas gambar. Jika ditentukan, itu harus pelampung. guidance_scale<=1 diabaikan.
  • negatif_prompt (opsional) โ€“ Ini memandu pembuatan gambar melawan prompt ini. Jika ditentukan, itu harus berupa string atau daftar string dan digunakan dengan guidance_scale. Jika guidance_scale dinonaktifkan, ini juga dinonaktifkan. Selain itu, jika prompt adalah daftar string, maka negative_prompt juga harus daftar string.
  • benih (opsional) โ€“ Ini memperbaiki keadaan acak untuk reproduktifitas. Jika ditentukan, itu harus bilangan bulat. Setiap kali Anda menggunakan prompt yang sama dengan seed yang sama, gambar yang dihasilkan akan selalu sama.
  • batch_size (opsional) โ€“ Jumlah gambar yang dihasilkan dalam satu lintasan maju. Jika menggunakan instans yang lebih kecil atau menghasilkan banyak gambar, kurangi batch_size menjadi angka kecil (1-2). Jumlah gambar = jumlah prompt*num_images_per_prompt.

Keterbatasan dan bias

Meskipun Stable Diffusion memiliki kinerja yang mengesankan dalam pengecatan, ia mengalami beberapa keterbatasan dan bias. Ini termasuk tetapi tidak terbatas pada:

  • Model mungkin tidak menghasilkan wajah atau anggota tubuh yang akurat karena data pelatihan tidak menyertakan gambar yang memadai dengan fitur ini.
  • Model dilatih di Kumpulan data LAION-5B, yang memiliki konten khusus dewasa dan mungkin tidak sesuai untuk penggunaan produk tanpa pertimbangan lebih lanjut.
  • Model mungkin tidak bekerja dengan baik dengan bahasa non-Inggris karena model dilatih pada teks bahasa Inggris.
  • Model tidak dapat menghasilkan teks yang bagus di dalam gambar.
  • Pengecatan Difusi Stabil biasanya bekerja paling baik dengan gambar dengan resolusi lebih rendah, seperti 256ร—256 atau 512ร—512 piksel. Saat bekerja dengan gambar beresolusi tinggi (768ร—768 atau lebih tinggi), metode ini mungkin kesulitan mempertahankan tingkat kualitas dan detail yang diinginkan.
  • Meskipun penggunaan benih dapat membantu mengontrol reproduktifitas, pewarnaan Difusi Stabil masih dapat menghasilkan hasil yang bervariasi dengan sedikit perubahan pada masukan atau parameter. Ini mungkin menyulitkan untuk menyempurnakan output untuk persyaratan tertentu.
  • Metode ini mungkin mengalami kesulitan dalam menghasilkan tekstur dan pola yang rumit, terutama ketika mereka menjangkau area yang luas di dalam gambar atau sangat penting untuk menjaga keseluruhan koherensi dan kualitas wilayah yang dicat.

Untuk informasi lebih lanjut tentang keterbatasan dan bias, lihat Kartu model Pengecatan Difusi Stabil.

Solusi pengecatan dengan topeng dihasilkan melalui prompt

CLIPSeq adalah teknik pembelajaran mendalam lanjutan yang memanfaatkan kekuatan model CLIP (Contrastive Language-Image Pretraining) pra-pelatihan untuk menghasilkan topeng dari gambar masukan. Pendekatan ini memberikan cara yang efisien untuk membuat topeng untuk tugas-tugas seperti segmentasi gambar, inpainting, dan manipulasi. CLIPSeq menggunakan CLIP untuk menghasilkan deskripsi teks dari gambar masukan. Deskripsi teks kemudian digunakan untuk menghasilkan topeng yang mengidentifikasi piksel dalam gambar yang relevan dengan deskripsi teks. Topeng kemudian dapat digunakan untuk mengisolasi bagian gambar yang relevan untuk diproses lebih lanjut.

CLIPSeq memiliki beberapa keunggulan dibandingkan metode lain untuk menghasilkan topeng dari gambar masukan. Pertama, ini adalah metode yang lebih efisien, karena tidak memerlukan citra untuk diproses oleh algoritme segmentasi citra terpisah. Kedua, lebih akurat, karena dapat menghasilkan topeng yang lebih selaras dengan teks deskripsi gambar. Ketiga, ini lebih serbaguna, karena Anda dapat menggunakannya untuk membuat topeng dari berbagai macam gambar.

Namun, CLIPSeq juga memiliki beberapa kekurangan. Pertama, teknik ini mungkin memiliki keterbatasan dalam hal materi pelajaran, karena bergantung pada model CLIP pra-pelatihan yang mungkin tidak mencakup domain atau bidang keahlian tertentu. Kedua, ini bisa menjadi metode yang sensitif, karena rentan terhadap kesalahan dalam teks deskripsi gambar.

Untuk informasi lebih lanjut, lihat Penataan busana virtual dengan AI generatif menggunakan Amazon SageMaker.

Membersihkan

Setelah Anda selesai menjalankan notebook, pastikan untuk menghapus semua sumber daya yang dibuat dalam proses untuk memastikan penagihan dihentikan. Kode untuk membersihkan titik akhir tersedia di terkait buku catatan.

Kesimpulan

Dalam postingan ini, kami menunjukkan cara menerapkan model pewarnaan Stable Diffusion pra-pelatihan menggunakan JumpStart. Kami menunjukkan cuplikan kode di pos iniโ€”kode lengkap dengan semua langkah dalam demo ini tersedia di Pengantar JumpStart โ€“ Tingkatkan kualitas gambar yang dipandu oleh prompt contoh buku catatan. Cobalah solusinya sendiri dan kirimkan komentar Anda kepada kami.

Untuk mempelajari lebih lanjut tentang model dan cara kerjanya, lihat sumber daya berikut:

Untuk mempelajari lebih lanjut tentang JumpStart, lihat posting berikut:


Tentang Penulis

Melukis gambar dengan Difusi Stabil menggunakan Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Dr Vivek Madan adalah Ilmuwan Terapan dengan tim JumpStart Amazon SageMaker. Dia mendapatkan gelar PhD dari University of Illinois di Urbana-Champaign dan merupakan Peneliti Pasca Doktoral di Georgia Tech. Dia adalah peneliti aktif dalam pembelajaran mesin dan desain algoritma dan telah menerbitkan makalah di konferensi EMNLP, ICLR, COLT, FOCS, dan SODA.

Melukis gambar dengan Difusi Stabil menggunakan Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Alfred Shen adalah Spesialis AI/ML Senior di AWS. Dia telah bekerja di Silicon Valley, memegang posisi teknis dan manajerial di berbagai sektor termasuk kesehatan, keuangan, dan teknologi tinggi. Dia adalah peneliti AI/ML terapan yang berdedikasi, berkonsentrasi pada CV, NLP, dan multimodalitas. Karyanya telah dipamerkan dalam publikasi seperti EMNLP, ICLR, dan Kesehatan Masyarakat.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS