Sempurnakan model Difusi Stabil teks-ke-gambar dengan Amazon SageMaker JumpStart

Sempurnakan model Difusi Stabil teks-ke-gambar dengan Amazon SageMaker JumpStart

Node Sumber: 1968900

Pada November 2022, kami mengumumkan yang dapat digunakan pelanggan AWS untuk menghasilkan gambar dari teks Difusi Stabil model dalam Mulai Lompatan Amazon SageMaker. Difusi Stabil adalah model pembelajaran mendalam yang memungkinkan Anda menghasilkan gambar yang realistis, berkualitas tinggi, dan karya seni yang memukau hanya dalam beberapa detik. Meskipun membuat gambar yang mengesankan dapat digunakan dalam industri mulai dari seni hingga NFT dan seterusnya, hari ini kami juga berharap AI dapat dipersonalisasi. Hari ini, kami mengumumkan bahwa Anda dapat mempersonalisasi model pembuatan gambar untuk kasus penggunaan Anda dengan menyempurnakannya pada kumpulan data khusus di Mulai Lompatan Amazon SageMaker. Ini dapat berguna saat membuat karya seni, logo, desain khusus, NFT, dan sebagainya, atau hal-hal menyenangkan seperti membuat gambar AI khusus untuk hewan peliharaan atau avatar Anda sendiri.

Dalam posting ini, kami memberikan ikhtisar tentang cara menyempurnakan model Difusi Stabil dengan dua cara: secara terprogram melalui API JumpStart tersedia di SDK Python SageMaker, dan antarmuka pengguna (UI) JumpStart di Studio Amazon SageMaker. Kami juga membahas cara membuat pilihan desain termasuk kualitas set data, ukuran set data pelatihan, pilihan nilai hyperparameter, dan penerapan ke beberapa set data. Terakhir, kami membahas lebih dari 80 model fine-tuned yang tersedia untuk umum dengan berbagai bahasa input dan gaya yang baru saja ditambahkan di JumpStart.

Difusi Stabil dan pembelajaran transfer

Difusi Stabil adalah model teks-ke-gambar yang memungkinkan Anda membuat gambar fotorealistik hanya dari perintah teks. Model difusi berlatih dengan belajar menghilangkan noise yang ditambahkan ke gambar nyata. Proses de-noise ini menghasilkan gambar yang realistis. Model ini juga dapat menghasilkan gambar dari teks saja dengan mengkondisikan proses pembangkitan pada teks. Misalnya, Difusi Stabil adalah difusi laten di mana model belajar mengenali bentuk dalam gambar noise murni dan secara bertahap memfokuskan bentuk ini jika bentuknya cocok dengan kata-kata dalam teks input. Teks pertama-tama harus disematkan ke dalam ruang laten menggunakan model bahasa. Kemudian, serangkaian operasi penambahan derau dan penghilangan derau dilakukan di ruang laten dengan arsitektur U-Net. Akhirnya, output de-noise didekodekan ke dalam ruang piksel.

Dalam pembelajaran mesin (ML), kemampuan untuk mentransfer pengetahuan yang dipelajari dalam satu domain ke domain lain disebut belajar transfer. Anda dapat menggunakan pembelajaran transfer untuk menghasilkan model yang akurat pada kumpulan data Anda yang lebih kecil, dengan biaya pelatihan yang jauh lebih rendah daripada biaya pelatihan model aslinya. Dengan pembelajaran transfer, Anda dapat menyempurnakan model difusi stabil pada kumpulan data Anda sendiri hanya dengan lima gambar. Misalnya, di sebelah kiri adalah gambar latih seekor anjing bernama Doppler yang digunakan untuk menyempurnakan model, di tengah dan kanan adalah gambar yang dihasilkan oleh model yang disetel halus ketika diminta untuk memprediksi gambar Doppler di pantai dan sketsa pensil.

Di sebelah kiri adalah gambar kursi putih yang digunakan untuk menyempurnakan model dan gambar kursi berwarna merah yang dihasilkan oleh model yang telah disempurnakan. Di sebelah kanan adalah gambar ottoman yang digunakan untuk menyempurnakan model dan gambar kucing duduk di ottoman.

Menyempurnakan model besar seperti Stable Diffusion biasanya mengharuskan Anda menyediakan skrip pelatihan. Ada sejumlah masalah, termasuk masalah kehabisan memori, masalah ukuran muatan, dan banyak lagi. Selain itu, 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. Skrip fine-tuning JumpStart untuk model Difusi Stabil dibuat berdasarkan skrip fine-tuning dari bilik mimpi. Anda dapat mengakses skrip ini dengan satu klik melalui Studio UI atau dengan sangat sedikit baris kode melalui API JumpStart.

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

Gunakan JumpStart secara terprogram dengan SageMaker SDK

Bagian ini menjelaskan cara melatih dan menerapkan model dengan SDK Python SageMaker. Kami memilih model terlatih yang sesuai di JumpStart, melatih model ini dengan tugas pelatihan SageMaker, dan menerapkan model terlatih ke titik akhir SageMaker. Selain itu, kami menjalankan inferensi pada titik akhir yang diterapkan, semuanya menggunakan SageMaker Python SDK. Contoh berikut berisi cuplikan kode. Untuk kode lengkap dengan semua langkah dalam demo ini, lihat Pengantar JumpStart โ€“ Teks ke Gambar contoh buku catatan.

Latih dan sempurnakan model Difusi Stabil

Setiap model diidentifikasi oleh yang unik model_id. Kode berikut menunjukkan cara menyempurnakan model dasar Difusi Stabil 2.1 yang diidentifikasi oleh model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base pada set data pelatihan khusus. Untuk daftar lengkap model_id nilai-nilai dan model mana yang dapat disesuaikan, lihat Algoritma bawaan dengan Tabel Model yang telah dilatih sebelumnya. Untuk setiap model_id, untuk meluncurkan pekerjaan pelatihan SageMaker melalui Penilai kelas SageMaker Python SDK, Anda perlu mengambil URI gambar Docker, URI skrip pelatihan, dan URI model terlatih melalui fungsi utilitas yang disediakan di SageMaker. URI skrip pelatihan berisi semua kode yang diperlukan untuk pemrosesan data, memuat model yang telah dilatih sebelumnya, pelatihan model, dan menyimpan model yang dilatih untuk inferensi. URI model terlatih berisi definisi arsitektur model terlatih dan parameter model. URI model terlatih khusus untuk model tertentu. Tarbal model pra-terlatih telah diunduh sebelumnya dari Hugging Face dan disimpan dengan tanda tangan model yang sesuai Layanan Penyimpanan Sederhana Amazon (Amazon S3), sehingga tugas pelatihan berjalan dalam isolasi jaringan. Lihat kode berikut:

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
)

Dengan artefak pelatihan khusus model ini, Anda dapat membuat objek dari Penilai kelas:

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

Kumpulan data pelatihan

Berikut ini adalah instruksi untuk bagaimana data pelatihan harus diformat:

  • Memasukkan โ€“ Direktori yang berisi gambar instance, dataset_info.json, dengan konfigurasi sebagai berikut:
    • Gambar mungkin dalam format .png, .jpg, atau .jpeg
    • Grafik dataset_info.json file harus dalam format {'instance_prompt':<<instance_prompt>>}
  • Keluaran โ€“ Model terlatih yang dapat digunakan untuk inferensi

Jalur S3 akan terlihat seperti s3://bucket_name/input_directory/. Perhatikan jejaknya / Dibutuhkan.

Berikut adalah contoh format data pelatihan:

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

Untuk petunjuk tentang cara memformat data saat menggunakan preservasi sebelumnya, lihat bagian ini Preservasi Sebelumnya di posting ini.

Kami menyediakan kumpulan data gambar kucing default. Ini terdiri dari delapan gambar (gambar contoh yang sesuai dengan permintaan contoh) dari satu kucing tanpa gambar kelas. Itu dapat diunduh dari GitHub. Jika menggunakan dataset default, coba prompt "foto kucing riobugger" sambil melakukan inferensi di notebook demo.

Lisensi: MIT.

Hyperparameter

Selanjutnya, untuk mentransfer pembelajaran pada kumpulan data khusus Anda, Anda mungkin perlu mengubah nilai default dari hyperparameter pelatihan. Anda dapat mengambil kamus Python dari hyperparameter ini dengan nilai defaultnya dengan memanggil hyperparameters.retrieve_default, perbarui sesuai kebutuhan, lalu teruskan ke kelas Estimator. Lihat kode berikut:

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"

Hyperparameter berikut didukung oleh algoritme penyempurnaan:

  • dengan_prior_preservation โ€“ Tandai untuk menambahkan kerugian pelestarian sebelumnya. Pelestarian sebelumnya adalah pengatur yang menghindari overfitting. (Pilihan: [โ€œTrueโ€,โ€œFalseโ€], bawaan: โ€œFalseโ€.)
  • nomor_kelas_gambar โ€“ Gambar kelas minimum untuk kehilangan preservasi sebelumnya. Jika with_prior_preservation = True dan tidak ada cukup gambar yang sudah ada class_data_dir, gambar tambahan akan diambil sampelnya class_prompt. (Nilai: bilangan bulat positif, default: 100.)
  • Zaman โ€“ Jumlah lintasan yang diambil algoritme fine-tuning melalui dataset pelatihan. (Nilai: bilangan bulat positif, default: 20.)
  • Langkah_maks โ€“ Jumlah total langkah-langkah pelatihan yang harus dilakukan. Jika tidak None, menimpa zaman. (Nilai: โ€œNoneโ€ atau string integer, default: โ€œNoneโ€.)
  • Ukuran batch โ€“: Jumlah contoh pelatihan yang dikerjakan sebelum bobot model diperbarui. Sama dengan ukuran batch selama pembuatan gambar kelas jika with_prior_preservation = True. (Nilai: bilangan bulat positif, default: 1.)
  • tingkat_belajar โ€“ Tingkat di mana bobot model diperbarui setelah mengerjakan setiap kumpulan contoh pelatihan. (Nilai: float positif, default: 2e-06.)
  • berat_kerugian_sebelumnya โ€“ Berat kehilangan preservasi sebelumnya. (Nilai: float positif, default: 1.0.)
  • center_crop โ€“ Apakah akan memotong gambar sebelum mengubah ukuran ke resolusi yang diinginkan. (Pilihan: [โ€œTrueโ€/โ€œFalseโ€], bawaan: โ€œFalseโ€.)
  • lr_penjadwal โ€“ Jenis penjadwal laju pembelajaran. (Pilihan: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], bawaan: "constant".) Untuk informasi lebih lanjut, lihat Penjadwal Tingkat Pembelajaran.
  • adam_weight_decay โ€“ Peluruhan bobot untuk diterapkan (jika bukan nol) ke semua lapisan kecuali semua bias dan LayerNorm bobot masuk AdamW pengoptimal. (Nilai: float, default: 1e-2.)
  • adam_beta1 โ€“ Hyperparameter beta1 (tingkat peluruhan eksponensial untuk perkiraan momen pertama) untuk AdamW pengoptimal. (Nilai: float, default: 0.9.)
  • adam_beta2 โ€“ Hyperparameter beta2 (tingkat peluruhan eksponensial untuk perkiraan momen pertama) untuk AdamW pengoptimal. (Nilai: float, default: 0.999.)
  • adam_epsilon - The epsilon hiperparameter untuk AdamW pengoptimal. Biasanya diatur ke nilai kecil untuk menghindari pembagian dengan 0. (Nilai: float, default: 1e-8.)
  • gradien_akumulasi_langkah โ€“ Jumlah langkah pembaruan untuk diakumulasikan sebelum melakukan langkah mundur/perbarui. (Nilai: bilangan bulat, default: 1.)
  • max_grad_norm โ€“ Norma gradien maksimum (untuk kliping gradien). (Nilai: float, default: 1.0.)
  • benih โ€“ Perbaiki keadaan acak untuk mencapai hasil yang dapat direproduksi dalam pelatihan. (Nilai: bilangan bulat, default: 0.)

Terapkan model yang terlatih dengan baik

Setelah pelatihan model selesai, Anda dapat langsung men-deploy model ke endpoint real-time yang persisten. Kami mengambil URI Gambar Docker dan URI skrip yang diperlukan dan menerapkan modelnya. Lihat kode berikut:

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

Di sebelah kiri adalah gambar pelatihan kucing bernama riobugger yang digunakan untuk menyempurnakan model (kecuali parameter default max_steps = 400). Di tengah dan kanan adalah gambar yang dihasilkan oleh model yang telah disempurnakan saat diminta memprediksi gambar riobugger di pantai dan sketsa pensil.

Untuk detail selengkapnya tentang inferensi, termasuk parameter yang didukung, format respons, dan sebagainya, lihat Hasilkan gambar dari teks dengan model difusi stabil di Amazon SageMaker JumpStart.

Akses JumpStart melalui UI Studio

Di bagian ini, kami mendemonstrasikan cara melatih dan menerapkan model JumpStart melalui UI Studio. Video berikut menunjukkan cara menemukan model Difusi Stabil pra-pelatihan di JumpStart, melatihnya, lalu menerapkannya. Halaman model berisi informasi berharga tentang model dan cara menggunakannya. Setelah mengonfigurasi instans pelatihan SageMaker, pilih Pelatihan VE. Setelah model dilatih, Anda dapat menerapkan model yang dilatih dengan memilih Menyebarkan. Setelah titik akhir dalam tahap "in service", siap untuk menanggapi permintaan inferensi.

Untuk mempercepat waktu inferensi, JumpStart menyediakan contoh notebook yang menunjukkan cara 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.

JumpStart juga menyediakan notebook sederhana yang dapat Anda gunakan untuk menyempurnakan model difusi stabil dan menerapkan model penyempurnaan yang dihasilkan. Anda dapat menggunakannya untuk menghasilkan gambar menyenangkan dari anjing Anda. Untuk mengakses buku catatan, cari "Hasilkan gambar Anjing Anda yang Menyenangkan" di bilah pencarian JumpStart. Untuk menjalankan notebook, Anda dapat menggunakan sedikitnya lima gambar pelatihan dan mengunggahnya ke folder studio lokal. Jika Anda memiliki lebih dari lima gambar, Anda juga dapat mengunggahnya. Notebook mengunggah gambar pelatihan ke S3, melatih model pada set data Anda, dan menerapkan model yang dihasilkan. Pelatihan mungkin memakan waktu 20 menit untuk selesai. Anda dapat mengubah jumlah langkah untuk mempercepat pelatihan. Notebook menyediakan beberapa contoh perintah untuk mencoba dengan model yang diterapkan, tetapi Anda dapat mencoba perintah apa pun yang Anda suka. Anda juga dapat mengadaptasi notebook untuk membuat avatar diri Anda atau hewan peliharaan Anda. Misalnya, alih-alih anjing Anda, Anda dapat mengunggah gambar kucing Anda pada langkah pertama dan kemudian mengubah perintah dari anjing menjadi kucing dan model tersebut akan menghasilkan gambar kucing Anda.

Pertimbangan penyesuaian

Model Training Stable Diffusion cenderung overfit dengan cepat. Untuk mendapatkan gambar berkualitas baik, kita harus menemukan keseimbangan yang baik antara hyperparameter pelatihan yang tersedia seperti jumlah langkah pelatihan dan kecepatan pembelajaran. Pada bagian ini, kami menunjukkan beberapa hasil eksperimen dan memberikan panduan tentang cara mengatur parameter tersebut.

Rekomendasi

Pertimbangkan rekomendasi berikut:

  • Mulailah dengan kualitas gambar pelatihan yang baik (4โ€“20). Jika melatih wajah manusia, Anda mungkin memerlukan lebih banyak gambar.
  • Latih 200โ€“400 langkah saat melatih anjing atau kucing dan subjek non-manusia lainnya. Jika berlatih dengan wajah manusia, Anda mungkin memerlukan lebih banyak langkah. Jika overfitting terjadi, kurangi njumlah langkah. Jika terjadi ketidaksesuaian (model yang disetel halus tidak dapat menghasilkan gambar subjek target), tingkatkan jumlah langkah.
  • Jika berlatih pada wajah non-manusia, Anda dapat mengaturnya with_prior_preservation = False karena tidak terlalu mempengaruhi kinerja. Di wajah manusia, Anda mungkin perlu mengatur with_prior_preservation=True.
  • Jika pengaturan with_prior_preservation=True, gunakan jenis instans ml.g5.2xlarge.
  • Saat melatih beberapa subjek secara berurutan, jika subjeknya sangat mirip (misalnya, semua anjing), model mempertahankan subjek terakhir dan melupakan subjek sebelumnya. Jika subjeknya berbeda (misalnya, pertama seekor kucing kemudian seekor anjing), model mempertahankan kedua subjek tersebut.
  • Sebaiknya gunakan laju pembelajaran rendah dan tingkatkan jumlah langkah secara bertahap hingga hasilnya memuaskan.

Kumpulan data pelatihan

Kualitas model yang disempurnakan secara langsung dipengaruhi oleh kualitas gambar pelatihan. Karena itu, Anda perlu mengumpulkan gambar berkualitas tinggi untuk mendapatkan hasil yang bagus. Gambar buram atau beresolusi rendah akan memengaruhi kualitas model yang disetel dengan baik. Perhatikan parameter tambahan berikut:

  • Jumlah gambar pelatihan โ€“ Anda dapat menyempurnakan model hanya pada empat gambar pelatihan. Kami bereksperimen dengan kumpulan data pelatihan berukuran paling sedikit 4 gambar dan sebanyak 16 gambar. Dalam kedua kasus tersebut, fine-tuning dapat mengadaptasi model ke subjek.
  • Format kumpulan data โ€“ Kami menguji algoritme penyempurnaan pada gambar dengan format .png, .jpg, dan .jpeg. Format lain juga dapat berfungsi.
  • Resolusi gambar โ€“ Gambar pelatihan dapat berupa resolusi apa pun. Algoritme fine-tuning akan mengubah ukuran semua gambar latihan sebelum memulai fine-tuning. Karena itu, jika Anda ingin memiliki kontrol lebih atas pemangkasan dan pengubahan ukuran gambar pelatihan, sebaiknya ubah sendiri ukuran gambar ke resolusi dasar model (dalam contoh ini, 512ร—512 piksel).

Pengaturan percobaan

Dalam percobaan di posting ini, saat menyempurnakan kami menggunakan nilai default dari hyperparameter kecuali ditentukan. Selanjutnya, kami menggunakan salah satu dari empat kumpulan data:

  • Anjing1-8 โ€“ Anjing 1 dengan 8 gambar
  • Anjing1-16 โ€“ Anjing 1 dengan 16 gambar
  • Anjing2-4 โ€“ Anjing 2 dengan empat gambar
  • Kucing-8 โ€“ Kucing dengan 8 gambar

Untuk mengurangi kekacauan, kami hanya menampilkan satu gambar representatif dari kumpulan data di setiap bagian bersama dengan nama kumpulan data. Anda dapat menemukan set pelatihan lengkap di bagian ini Kumpulan Data Eksperimen di posting ini.

overfitting

Model Difusi Stabil cenderung overfit saat menyempurnakan beberapa gambar. Oleh karena itu, Anda perlu memilih parameter seperti epochs, max_epochs, dan kecepatan belajar dengan hati-hati. Pada bagian ini, kami menggunakan dataset Dog1-16.

Untuk mengevaluasi kinerja model, kami mengevaluasi model yang disesuaikan untuk empat tugas:

  • Bisakah model yang disetel dengan baik menghasilkan gambar subjek (anjing Doppler) dalam pengaturan yang sama seperti yang dilatih?
    • Observasi โ€“ Ya itu bisa. Perlu diperhatikan bahwa performa model meningkat dengan jumlah langkah pelatihan.
  • Bisakah model yang disetel dengan baik menghasilkan gambar subjek dalam pengaturan yang berbeda dari yang dilatih? Misalnya, dapatkah menghasilkan gambar Doppler di pantai?
    • Observasi โ€“ Ya itu bisa. Perlu diperhatikan bahwa performa model meningkat dengan jumlah langkah pelatihan hingga titik tertentu. Namun, jika model dilatih terlalu lama, kinerja model menurun karena model cenderung overfit.
  • Bisakah model yang disetel dengan baik menghasilkan gambar kelas yang dimiliki oleh subjek pelatihan? Misalnya, dapatkah ini menghasilkan gambar anjing generik?
    • Observasi โ€“ Saat kami menambah jumlah langkah pelatihan, model mulai menyesuaikan diri. Akibatnya, ia melupakan kelas generik seekor anjing dan hanya akan menghasilkan gambar yang terkait dengan subjeknya.
  • Bisakah model yang disetel dengan baik menghasilkan gambar kelas atau subjek yang tidak ada dalam dataset pelatihan? Misalnya, dapatkah ini menghasilkan gambar kucing?
    • Observasi โ€“ Saat kami menambah jumlah langkah pelatihan, model mulai menyesuaikan diri. Akibatnya, itu hanya akan menghasilkan gambar yang terkait dengan subjek, terlepas dari kelas yang ditentukan.

Kami menyempurnakan model untuk sejumlah langkah yang berbeda (dengan menyetel max_steps hyperparameters) dan untuk setiap model yang disempurnakan, kami menghasilkan gambar pada masing-masing dari empat petunjuk berikut (ditunjukkan dalam contoh berikut dari kiri ke kanan:

  • โ€œFoto anjing Dopplerโ€
  • โ€œFoto anjing Doppler di pantaiโ€
  • โ€œFoto anjingโ€
  • โ€œFoto kucingโ€

Gambar berikut berasal dari model yang dilatih dengan 50 langkah.

Model berikut dilatih dengan 100 langkah.

Kami melatih model berikut dengan 200 langkah.

Gambar berikut berasal dari model yang dilatih dengan 400 langkah.

Terakhir, gambar berikut adalah hasil dari 800 langkah.

Latih beberapa set data

Saat menyempurnakan, Anda mungkin ingin menyempurnakan beberapa subjek dan membuat model yang telah disempurnakan dapat menghasilkan gambar dari semua subjek. Sayangnya, JumpStart saat ini terbatas pada pelatihan satu subjek. Anda tidak dapat menyempurnakan model pada beberapa subjek sekaligus. Selanjutnya, menyempurnakan model untuk subjek yang berbeda secara berurutan menghasilkan model yang melupakan subjek pertama jika subjeknya serupa.

Kami mempertimbangkan eksperimen berikut di bagian ini:

  1. Sempurnakan model untuk Subjek A.
  2. Sempurnakan model yang dihasilkan dari Langkah 1 untuk Subjek B.
  3. Hasilkan gambar Subjek A dan Subjek B menggunakan model output dari Langkah 2.

Dalam percobaan berikut, kami mengamati bahwa:

  • Jika A adalah anjing 1 dan B adalah anjing 2, maka semua gambar yang dihasilkan pada Langkah 3 menyerupai anjing 2
  • Jika A adalah anjing 2 dan B adalah anjing 1, maka semua gambar yang dihasilkan pada Langkah 3 menyerupai anjing 1
  • Jika A adalah anjing 1 dan B adalah kucing, maka gambar yang dihasilkan dengan prompt anjing akan menyerupai anjing 1 dan gambar yang dihasilkan dengan prompt kucing akan menyerupai kucing

Latih anjing 1 dan kemudian anjing 2

Pada Langkah 1, kami menyempurnakan model untuk 200 langkah pada delapan gambar anjing 1. Pada Langkah 2, kami menyempurnakan model lebih lanjut untuk 200 langkah pada empat gambar anjing 2.

Berikut ini adalah gambar yang dihasilkan oleh model yang disempurnakan di akhir Langkah 2 untuk petunjuk yang berbeda.

Latih anjing 2 dan kemudian anjing 1

Pada Langkah 1, kami menyempurnakan model untuk 200 langkah pada empat gambar anjing 2. Pada Langkah 2, kami menyempurnakan model lebih lanjut untuk 200 langkah pada delapan gambar anjing 1.

Berikut ini adalah gambar yang dihasilkan oleh model yang disempurnakan pada akhir Langkah 2 dengan petunjuk yang berbeda.

Latih anjing dan kucing

Pada Langkah 1, kami menyempurnakan model untuk 200 langkah pada delapan gambar kucing. Kemudian kami menyempurnakan model lebih lanjut untuk 200 langkah pada delapan gambar anjing 1.

Berikut ini adalah gambar yang dihasilkan oleh model fine-tuning di akhir Langkah 2. Gambar dengan prompt terkait kucing terlihat seperti kucing di Langkah 1 fine-tuning, dan gambar dengan prompt terkait anjing terlihat seperti anjing di Langkah 2 dari fine-tuning.

Preservasi sebelumnya

Pelestarian sebelumnya adalah teknik yang menggunakan gambar tambahan dari kelas yang sama yang kami coba latih. Misalnya, jika data pelatihan terdiri dari gambar anjing tertentu, dengan preservasi sebelumnya, kami menggabungkan gambar kelas anjing generik. Mencoba untuk menghindari overfitting dengan menampilkan gambar anjing yang berbeda saat melatih anjing tertentu. Tag yang menunjukkan anjing tertentu yang ada di prompt instance tidak ada di prompt kelas. Misalnya, prompt contoh mungkin "foto kucing riobugger" dan prompt kelas mungkin "foto kucing". Anda dapat mengaktifkan preservasi sebelumnya dengan menyetel hyperparameter with_prior_preservation = True. Jika pengaturan with_prior_preservation = True, Anda harus menyertakan class_prompt in dataset_info.json dan dapat menyertakan gambar kelas apa pun yang tersedia untuk Anda. Berikut format dataset training saat setting with_prior_preservation = True:

  • Memasukkan โ€“ Direktori yang berisi gambar instance, dataset_info.json dan (opsional) direktori class_data_dir. Perhatikan hal berikut:
    • Gambar boleh dalam format .png, .jpg, .jpeg.
    • Grafik dataset_info.json file harus dalam format {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • Grafik class_data_dir direktori harus memiliki gambar kelas. Jika class_data_dir tidak ada atau tidak ada cukup gambar yang sudah ada class_data_dir, gambar tambahan akan diambil sampelnya class_prompt.

Untuk kumpulan data seperti kucing dan anjing, preservasi sebelumnya tidak berdampak signifikan pada performa model yang disetel dengan baik dan oleh karena itu dapat dihindari. Namun, saat melatih wajah, ini perlu. Untuk informasi lebih lanjut, lihat Melatih Difusi Stabil dengan Dreambooth menggunakan Diffuser.

Jenis instance

Penyempurnaan model Difusi Stabil memerlukan komputasi yang dipercepat yang disediakan oleh instans yang didukung GPU. Kami melakukan percobaan penyempurnaan dengan instans ml.g4dn.2xlarge (memori CUDA 16 GB, 1 GPU) dan ml.g5.2xlarge (memori CUDA 24 GB, 1 GPU). Persyaratan memori lebih tinggi saat membuat gambar kelas. Oleh karena itu, jika pengaturan with_prior_preservation=True, gunakan jenis instans ml.g5.2xlarge, karena pelatihan mengalami masalah CUDA kehabisan memori pada instans ml.g4dn.2xlarge. Skrip fine-tuning JumpStart saat ini menggunakan GPU tunggal dan karenanya, fine-tuning pada instans multi-GPU tidak akan menghasilkan peningkatan performa. Untuk informasi selengkapnya tentang berbagai jenis instans, lihat Jenis Instans Amazon EC2.

Keterbatasan dan bias

Meskipun Stable Diffusion memiliki kinerja yang mengesankan dalam menghasilkan gambar, 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

Untuk informasi lebih lanjut tentang keterbatasan dan bias, lihat Kartu Model Difusi Stabil v2-1-base. Keterbatasan untuk model pra-pelatihan ini juga dapat diterapkan pada model yang disetel dengan baik.

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 disediakan di terkait Pengantar JumpStart โ€“ Teks ke Gambar contoh buku catatan.

Model fine-tuned tersedia untuk umum di JumpStart

Meskipun model Difusi Stabil dirilis oleh StabilitasAI memiliki kinerja yang mengesankan, mereka memiliki keterbatasan dalam hal bahasa atau domain yang dilatihnya. Misalnya, model Difusi Stabil dilatih pada teks bahasa Inggris, tetapi Anda mungkin perlu membuat gambar dari teks non-Inggris. Alternatifnya, model Difusi Stabil dilatih untuk menghasilkan gambar fotorealistik, tetapi Anda mungkin perlu membuat gambar animasi atau artistik.

JumpStart menyediakan lebih dari 80 model yang tersedia untuk umum dengan berbagai bahasa dan tema. Model ini sering kali merupakan versi yang disempurnakan dari model Difusi Stabil yang dirilis oleh StabilityAI. Jika kasus penggunaan Anda cocok dengan salah satu model yang telah disempurnakan, Anda tidak perlu mengumpulkan set data Anda sendiri dan menyempurnakannya. Anda cukup menerapkan salah satu model ini melalui UI Studio atau menggunakan API JumpStart yang mudah digunakan. Untuk menerapkan model Difusi Stabil pra-pelatihan di JumpStart, lihat Hasilkan gambar dari teks dengan model difusi stabil di Amazon SageMaker JumpStart.

Berikut adalah beberapa contoh gambar yang dihasilkan oleh berbagai model yang tersedia di JumpStart.

Perhatikan bahwa model ini tidak disetel dengan baik menggunakan skrip JumpStart atau skrip DreamBooth. Anda dapat mengunduh daftar lengkap model fine-tuned yang tersedia untuk umum dengan petunjuk contoh dari di sini.

Untuk lebih banyak contoh gambar yang dihasilkan dari model ini, silakan lihat bagian Open Sourced Model yang disempurnakan di Lampiran.

Kesimpulan

Dalam posting ini, kami menunjukkan cara menyempurnakan model Difusi Stabil untuk teks-ke-gambar dan kemudian menerapkannya menggunakan JumpStart. Selain itu, kami membahas beberapa pertimbangan yang harus Anda buat saat menyempurnakan model dan bagaimana hal itu dapat memengaruhi performa model yang disempurnakan. Kami juga membahas lebih dari 80 model fine-tuned siap pakai yang tersedia di JumpStart. Kami menunjukkan cuplikan kode di pos iniโ€”untuk kode lengkap dengan semua langkah dalam demo ini, lihat Pengantar JumpStart โ€“ Teks ke Gambar contoh buku catatan. Cobalah solusinya sendiri dan kirimkan komentar Anda kepada kami.

Untuk mempelajari lebih lanjut tentang model dan penyempurnaan DreamBooth, lihat sumber daya berikut:

Untuk mempelajari lebih lanjut tentang JumpStart, lihat posting blog berikut:


Tentang Penulis

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.

Heiko Hotzo adalah Arsitek Solusi Senior untuk AI & Pembelajaran Mesin dengan fokus khusus pada pemrosesan bahasa alami (NLP), model bahasa besar (LLM), dan AI generatif. Sebelum peran ini, dia adalah Kepala Ilmu Data untuk Layanan Pelanggan UE Amazon. Heiko membantu pelanggan kami sukses dalam perjalanan AI/ML mereka di AWS dan telah bekerja dengan organisasi di banyak industri, termasuk asuransi, layanan keuangan, media dan hiburan, perawatan kesehatan, utilitas, dan manufaktur. Di waktu senggangnya, Heiko sering bepergian.


Lampiran: Kumpulan data percobaan

Bagian ini berisi dataset yang digunakan dalam percobaan di posting ini.

Anjing1-8

Anjing1-16

Anjing2-4

Anjing3-8

Lampiran: Model yang Disempurnakan Bersumber Terbuka

Berikut adalah beberapa contoh gambar yang dihasilkan oleh berbagai model yang tersedia di JumpStart. Setiap gambar diberi judul a model_id dimulai dengan awalan huggingface-txt2img- diikuti dengan prompt yang digunakan untuk menghasilkan gambar di baris berikutnya.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS