Proses pembelajaran penguatan yang digunakan OpenAI untuk meningkatkan model secara implisit mengurangi perilaku negatif dari interaksi manusia yang positif.
Dalam makalah ini, penulis mengambil pendekatan praktis baru: menggunakan interaksi negatif manusia (yaitu dengan sengaja memilih gambar berkualitas rendah) untuk secara implisit meningkatkan perilaku positif.
Dengan Dreambooth LoRA, pada dasarnya tidak perlu menyiapkan data masukan sebanyak melatih model bahasa besar untuk mencapai tujuan ini.
"Burger berbentuk alien ()" dengan tingkat optimasi berbeda
Penulis memperkenalkan dua fitur inti yang dirilis oleh Stable Diffusion XL 1.0: pembobotan kata yang cepat dan pelatihan dan penalaran Dreambooth LoRA, serta menggabungkan metode Pembalikan Tekstual (inversi teks) untuk melatih Lora, menjadikan Lora lebih pintar dan lebih mudah digunakan.
Tentang penulis: Max Woolf (@minimaxir) adalah ilmuwan data di BuzzFeed, yang mengerjakan alat AI/ML dan berbagai proyek sumber terbuka.
Tautan asli:
Berikut isi artikel yang diedit oleh Founder Park.
Pengenalan singkat SDXL
Bulan lalu, Stability AI merilis Stable Diffusion XL 1.0 (SDXL) dan menjadikannya open source, memungkinkan pengguna untuk mengaksesnya tanpa izin khusus apa pun.
Contoh keluaran SDXL 1.0
SDXL sebenarnya terdiri dari dua model: model dasar dan model penyempurnaan opsional yang dapat secara signifikan meningkatkan representasi detail tanpa kecepatan tambahan.
Perbandingan kualitas relatif antara model berbagai versi Difusi Stabil
Perhatikan peningkatan kualitas yang signifikan setelah menggunakan model yang diperkecil
Fitur SDXL 1.0
Perlu dicatat bahwa versi ini (SDXL 1.0) adalah salah satu model sumber terbuka pertama yang secara asli dapat menghasilkan gambar beresolusi 1024x1024 tanpa tindakan khusus, dan gambar yang dihasilkan lebih detail.
Pustaka Python diffuser Hugging Face kini sepenuhnya mendukung model ini, dengan beberapa optimalisasi kinerja.
Pada saat yang sama, diffuser juga menerapkan dukungan untuk dua fitur baru: pembobotan kata yang cepat serta pelatihan dan inferensi Dreambooth LoRA. Jadi saya berencana untuk mencobanya (kode demo SDXL di diffuser dapat dilihat di akhir artikel).
Dukungan pembobotan kata yang cepat untuk diffuser memanfaatkan pustaka Python yang disebut memaksa untuk memberi bobot pada istilah dengan cara yang lebih matematis. Anda dapat menambahkan sejumlah + atau - ke kata tertentu untuk menambah atau mengurangi "pentingnya" dalam penyematan teks posisi yang dihasilkan dan dengan demikian mempengaruhi hasil akhir.
Dengan prinsip yang sama, Anda juga dapat menggabungkan frasa: misalnya, jika Anda membuat "lanskap San Francisco oleh Salvador Dali, minyak di atas kanvas" dan menghasilkan foto San Francisco yang realistis, maka Anda dapat membingkai bentuk seni tersebut dan menjadi Masukkan "Pemandangan San Francisco oleh Salvador Dali, (minyak di atas kanvas)+++", biarkan Difusi Stabil menghasilkan efek yang diharapkan.
Persiapan lingkungan
Saya menjalankan VM cloud, menyediakannya dengan GPU Nvidia L4 kelas menengah baru ($0,24/jam untuk instance Spot di Google Cloud Platform), dan mulai bekerja.
Dengan satu GPU L4, dibutuhkan waktu sekitar 22 detik untuk menghasilkan setiap gambar 1024x1024; dan tidak seperti mode Difusi Stabil sebelumnya, kini GPU kelas menengah hanya dapat menghasilkan satu gambar dalam satu waktu karena pemanfaatan GPU-nya sudah penuh, jadi Anda tinggal punya untuk lebih bersabar. Menurunkan resolusi dapat mempercepat pembangunan, tapi saya sangat menyarankan untuk tidak melakukannya, karena hasilnya akan buruk.
** Sedikit konfigurasi yang dipersonalisasi **
Dalam pengujian saya, ini memperbaiki sebagian besar masalah kata cepat yang muncul setelah Stable Diffusion 2.0, terutama dengan nilai panduan tanpa pengklasifikasi yang lebih tinggi yang ditetapkan (guiding_scale defaultnya adalah 7.5; saya ingin mengubahnya menjadi 13 )
Panduan_skalanya adalah 13 untuk semua contoh yang dihasilkan oleh model LoRA dalam artikel ini.
Memulai丨Jelajahi LoRA
Pembaruan paling penting dari SDXL 1.0 sebenarnya adalah dukungan Dreambooth LoRA, yang memungkinkan kita untuk menyesuaikan model Difusi Stabil.
Dreambooth adalah teknik untuk menyempurnakan Difusi Stabil berdasarkan kumpulan gambar sumber yang sangat kecil dan kata kunci pemicu, sehingga "konsep" dalam gambar tersebut dapat digunakan dalam konteks lain berdasarkan kata kunci tersebut.
Diagram Skema Prinsip Kerja Dreambooth
Keunggulan LoRA: "model kecil" khusus domain
Saat melatih Difusi Stabil itu sendiri, bahkan model kecil pun memerlukan pelatihan berjam-jam pada banyak GPU yang mahal.
Di sinilah LoRA berguna: ia melatih sebagian kecil model visi sehingga hanya memerlukan GPU murah untuk mengeluarkan hasil dalam 10 menit, dan kualitas model akhir + LoRA sebanding dengan model yang sepenuhnya disetel dengan baik. (Secara umum, ketika orang merujuk pada penyempurnaan Difusi Stabil, mereka sering merujuk pada pembuatan LoRA).
LoRA terlatih adalah biner kecil dan mandiri yang dapat dengan mudah dibagikan kepada orang lain, atau diunggah ke repositori seperti Civitai.
Kelemahan kecil LoRA adalah hanya satu yang dapat aktif dalam satu waktu: kita dapat menggabungkan beberapa LoRA untuk menggabungkan keunggulannya, namun dalam praktiknya tidak sesederhana itu.
Pertempuran Aktual Inversi Tekstual: Inversi Tekstual
Sebelum LoRA Difusi Stabil menjadi sangat populer, ada metode yang disebut inversi tekstual, yang memungkinkan pembuat enkode teks mempelajari konsep, namun perlu waktu berjam-jam untuk melatihnya dan hasilnya bisa jadi jelek.
Saya melatih inversi teks di postingan blog sebelumnya: Ugly Sonic (Sonic), dan karena tidak ada dalam kumpulan data sumber untuk Difusi Stabil, hasilnya unik. Hasil yang dihasilkan adalah sebagai berikut, dengan hasil yang beragam.
(Jelek) Sonic, tapi jelek sekali
Kali ini, menurut saya menggunakan Ugly Sonic untuk melatih LoRA akan menjadi contoh yang baik untuk menguji potensi SDXL.
Kebetulan Hugging Face menyediakan skrip train_dreambooth_lora_sdxl.py, yang dapat menggunakan model dasar SDXL untuk melatih LoRA; skrip ini masih out of the box, tetapi saya sedikit menyesuaikan parameternya.
Tidaklah berlebihan untuk mengatakan bahwa gambar Sonic Jelek yang dihasilkan oleh LoRA terlatih dengan berbagai kata cepat terlihat lebih baik dan lebih terorganisir.
Sonic, tapi kali ini dengan gigi
Tingkat Lanjut 丨 Inversi Tekstual Mendalam
Setelah eksperimen ini berhasil, saya memutuskan untuk mengulangi eksperimen lain yang saya lakukan sebelumnya dengan inversi teks: dengan menambahkan kata isyarat yang salah untuk menghasilkan gambar yang lebih baik.
Metode kali ini adalah melatih LoRA dengan beberapa gambar berkualitas rendah yang sangat terdistorsi, dan kata cepat yang diberikan salah. Saya harap LoRA dapat memperlakukan kesalahan sebagai "perintah negatif" dan menghindari situasi ini, menghasilkan gambar dengan distorsi yang lebih sedikit.
Saya menulis Notebook Jupyter dan menggunakan SDXL untuk membuat sendiri banyak gambar komposit yang "salah", kali ini juga menggunakan berbagai bobot petunjuk untuk menghasilkan contoh gambar gagal yang lebih jelas seperti tangan buram (buram) dan tangan buruk (gambar salah) .
Ironisnya, kita perlu menggunakan SDXL untuk menghasilkan gambar gagal beresolusi tinggi.
Di atas adalah beberapa contoh gambar salah sintetik
Ini secara tidak sengaja memasukkan unsur sampul album punk rock dari tahun 2000-an
Saya melatih LoRA ini dan memuatnya ke dalam model dasar Stable Diffusion XL (LoRA tidak diperlukan untuk menyempurnakan model), dan menulis Notebook Jupyter untuk membandingkan keluaran berikut untuk kata-kata cepat yang diberikan:
Model dasar + saluran pipa tanpa LoRA. (dasar)
Tidak ada pipeline LoRA, gunakan salah sebagai petunjuk negatif (tambahkan petunjuk negatif)
Gunakan saluran LoRA, gunakan kesalahan sebagai petunjuk negatif (tujuan ideal)
Benih dari setiap hasil yang dihasilkan adalah sama, sehingga komposisi ketiga foto keluaran harus serupa, dan perbedaan antara efek petunjuk negatif yang salah dan LoRA, serta pipeline model dasar harus sangat jelas.
Kasus Uji SDXL 0.9
Mari gunakan SDXL 0.9 untuk mendemonstrasikan perintah sederhana untuk memulai pengujian:
「Serigala di Taman Nasional Yosemite, fotografi film dokumenter alam yang dingin」
Melihat gambar di atas dengan cermat, tidak sulit untuk menemukan bahwa petunjuk yang salah pada model dasar menambahkan beberapa dedaunan dan kedalaman pada hutan latar belakang, namun LoRA menambahkan lebih banyak hal: pencahayaan dan bayangan yang lebih kuat, dedaunan yang lebih detail, dan perubahan pada tampilan serigala. Sudut kamera terlihat lebih menarik.
Kemudian saya menambahkan "closeup ekstrim (sangat dekat)" ke kata cepat, dan setelah menggunakan kembali benih sebelumnya, saya mendapatkan perspektif close-up serigala yang berbeda dalam komposisi foto yang serupa.
* 「Foto serigala dari jarak dekat yang ekstrem di Taman Nasional Yosemite, fotografi film dokumenter alam yang dingin」*
Saat ini, tekstur dan kejernihan LoRA jauh lebih baik dibandingkan model lainnya, dan gambarnya lebih jelas. Namun perlu diperhatikan bahwa menambahkan satu kata isyarat yang salah saja akan mengubah perspektif.
Contoh uji bagus lainnya adalah fotografi makanan, dan bidikan makanan aneh yang saya hasilkan dengan DALL-E 2 khususnya sangat bagus. Bisakah SDXL + LoRA yang salah menghasilkan burger non-Euclidean yang tampak aneh dengan beberapa petunjuk bobot?
* 「hamburger besar yang lezat (dalam bentuk geometri alien lima dimensi)++++, fotografi makanan profesional」*
"Burger besar yang lezat (geometri alien 5D)++++, fotografi makanan profesional"
Jawabannya tidak bisa, padahal kata promptnya disesuaikan berkali-kali. Namun, hasilnya tetap menarik: base SDXL tampaknya mengambil bagian "alien" dari prompt lebih harfiah daripada yang saya kira (dan memberinya topi bowler yang lucu!), tetapi LoRA bekerja lebih baik. Dia memahami arti dari petunjuk tersebut dengan jelas, dan membuat burger "alien" yang sulit dimakan manusia, dan gaya gambarnya lebih bersinar.
Apa yang akan terjadi pada si pelukis? Bisakah LoRA dengan cara yang salah memecahkan masalah kecerdasan buatan yang terkenal buruk? Dan kami juga menyertakan banyak contoh serupa dalam data pelatihan LoRA. Mari kita ubah perintah yang saya gunakan saat pertama kali mencoba Stable Diffusion 2.0 untuk menggambar Presiden Taylor Swift:
* 「Presiden AS Taylor Swift (menandatangani surat)++++, foto diambil oleh Associated Press」*
"Presiden AS Taylor Swift (penandatanganan dokumen)++++, foto oleh AP"
Lihatlah lengan kanan Taylor: model SDXL default menghasilkan hasil yang luar biasa, dan jika salah hasilnya justru lebih buruk, tetapi di LoRA sudah diperbaiki! Pelapisan warna LoRA jauh lebih baik, dengan jaketnya menjadi putih lebih menonjol daripada kuning-putih. Namun tangannya masih belum bisa dilihat dengan cermat: menggambar karakter dengan SDXL 1.0 masih rumit dan tidak bisa diandalkan!
Sekarang kesimpulannya sudah jelas, keluaran dari salah + LoRA dalam setiap kasus lebih menarik daripada keluaran yang hanya menambahkan isyarat negatif yang salah, jadi kami hanya membandingkan keluaran dasar dan keluaran LoRA di bawah ini. Berikut ini contoh model dasar dibandingkan dengan LoRA yang salah:
* 「Blog Shrek manusia yang realistis di stasiun kerja komputer, foto pemenang penghargaan yang hiperrealistis untuk pameran kesombongan」 *
*(Shrek manusia realistis yang menulis blog di stasiun kerja komputer, foto surealis pemenang penghargaan dari Vanity Fair) - Tangan LoRA digambar dan menyala dengan lebih baik. Kostumnya lebih detail dan backgroundnya lebih menarik. *
* 「Pizza pepperoni berbentuk hati, fotografi makanan profesional pemenang penghargaan yang hiperrealistis」*
(pizza pepperoni berbentuk hati, fotografi makanan profesional pemenang penghargaan yang sangat realistis) - pepperoni lebih detail, gelembung panas, lebih sedikit pepperoni di tepi pizza, kerak terlihat lebih keras
LoRA dengan kesalahan tersedia di sini, tetapi saya tidak dapat menjamin kinerjanya pada antarmuka selain diffuser.
Semua Notebook yang digunakan untuk menghasilkan gambar-gambar ini ada di repositori GitHub ini, termasuk SDXL 1.0 + model fine-tuning standar + Notebook LoRA Colab yang salah, Anda dapat menjalankan Notebook ini pada GPU T4 gratis. Jika Anda ingin melihat versi resolusi lebih tinggi dari gambar yang dihasilkan yang digunakan dalam artikel ini, Anda dapat mengunjungi kode sumber artikel.
Salah Apa yang terjadi?
LoRA dengan salah Trik ini hanya meningkatkan kualitas dan kejelasan gambar yang dihasilkan, namun LoRA sepertinya membuat SDXL berperilaku lebih cerdas dan lebih mencerminkan semangat kata-kata cepat.
Pada tingkat teknis, isyarat negatif ini menetapkan wilayah ruang laten tempat difusi menghasilkan gambar; wilayah ini sama untuk model dasar yang salah dan LoRA.
Intuisi saya adalah LoRA membentuk kembali wilayah yang tidak diinginkan ini dalam ruang laten berdimensi tinggi yang sangat besar agar lebih mirip dengan wilayah awal, sehingga kemungkinan hasil pembangkitan normal mengenai wilayah ini menjadi lebih kecil dan kualitasnya lebih rendah. (Lihat proses perubahan Alien Burger di atas)
Melatih SDXL dengan gambar berkualitas rendah untuk memperbaikinya secara teknis merupakan bentuk pembelajaran penguatan dengan umpan balik manusia (RLHF): pendekatan ini juga merupakan jalan menuju kesuksesan ChatGPT. Proses pembelajaran penguatan yang digunakan OpenAI untuk menyempurnakan model adalah secara implisit mengurangi perilaku negatif dari interaksi pengguna yang positif, sedangkan di sini saya menggunakan interaksi pengguna yang negatif (yaitu dengan sengaja memilih gambar berkualitas rendah) untuk secara implisit meningkatkan perilaku positif.
Namun dengan Dreambooth LoRA, pada dasarnya Anda tidak perlu menyiapkan data input sebanyak melatih model bahasa yang besar.
Potensi "LoRA Negatif" masih besar: parameter pembuatan kumpulan data sintetik saya masih memiliki banyak ruang untuk perbaikan, dan LoRA juga dapat dilatih untuk jangka waktu yang lebih lama. Tapi saya sangat senang dengan hasilnya sejauh ini dan ingin melakukan lebih banyak pengujian dengan LoRA negatif, seperti menggabungkan dengan LoRA lain untuk melihat apakah LoRA lain dapat meningkatkan LoRA tersebut (terutama LoRA yang salah + LoRA Sonic Jelek!)
Lampiran: Demo SDXL di diffuser
impor obor
dari diffuser impor DiffusionPipeline, AutoencoderKL
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Gambar buruk yang dihasilkan oleh AI sebenarnya dapat "menyempurnakan model" secara terbalik?
Asli: Max Woolf
**Sumber:**Founder Park
Proses pembelajaran penguatan yang digunakan OpenAI untuk meningkatkan model secara implisit mengurangi perilaku negatif dari interaksi manusia yang positif.
Dalam makalah ini, penulis mengambil pendekatan praktis baru: menggunakan interaksi negatif manusia (yaitu dengan sengaja memilih gambar berkualitas rendah) untuk secara implisit meningkatkan perilaku positif.
Dengan Dreambooth LoRA, pada dasarnya tidak perlu menyiapkan data masukan sebanyak melatih model bahasa besar untuk mencapai tujuan ini.
Penulis memperkenalkan dua fitur inti yang dirilis oleh Stable Diffusion XL 1.0: pembobotan kata yang cepat dan pelatihan dan penalaran Dreambooth LoRA, serta menggabungkan metode Pembalikan Tekstual (inversi teks) untuk melatih Lora, menjadikan Lora lebih pintar dan lebih mudah digunakan.
Tentang penulis: Max Woolf (@minimaxir) adalah ilmuwan data di BuzzFeed, yang mengerjakan alat AI/ML dan berbagai proyek sumber terbuka.
Tautan asli:
Berikut isi artikel yang diedit oleh Founder Park.
Pengenalan singkat SDXL
Bulan lalu, Stability AI merilis Stable Diffusion XL 1.0 (SDXL) dan menjadikannya open source, memungkinkan pengguna untuk mengaksesnya tanpa izin khusus apa pun.
SDXL sebenarnya terdiri dari dua model: model dasar dan model penyempurnaan opsional yang dapat secara signifikan meningkatkan representasi detail tanpa kecepatan tambahan.
Perhatikan peningkatan kualitas yang signifikan setelah menggunakan model yang diperkecil
Fitur SDXL 1.0
Perlu dicatat bahwa versi ini (SDXL 1.0) adalah salah satu model sumber terbuka pertama yang secara asli dapat menghasilkan gambar beresolusi 1024x1024 tanpa tindakan khusus, dan gambar yang dihasilkan lebih detail.
Pustaka Python diffuser Hugging Face kini sepenuhnya mendukung model ini, dengan beberapa optimalisasi kinerja.
Pada saat yang sama, diffuser juga menerapkan dukungan untuk dua fitur baru: pembobotan kata yang cepat serta pelatihan dan inferensi Dreambooth LoRA. Jadi saya berencana untuk mencobanya (kode demo SDXL di diffuser dapat dilihat di akhir artikel).
Dukungan pembobotan kata yang cepat untuk diffuser memanfaatkan pustaka Python yang disebut memaksa untuk memberi bobot pada istilah dengan cara yang lebih matematis. Anda dapat menambahkan sejumlah + atau - ke kata tertentu untuk menambah atau mengurangi "pentingnya" dalam penyematan teks posisi yang dihasilkan dan dengan demikian mempengaruhi hasil akhir.
Dengan prinsip yang sama, Anda juga dapat menggabungkan frasa: misalnya, jika Anda membuat "lanskap San Francisco oleh Salvador Dali, minyak di atas kanvas" dan menghasilkan foto San Francisco yang realistis, maka Anda dapat membingkai bentuk seni tersebut dan menjadi Masukkan "Pemandangan San Francisco oleh Salvador Dali, (minyak di atas kanvas)+++", biarkan Difusi Stabil menghasilkan efek yang diharapkan.
Persiapan lingkungan
Saya menjalankan VM cloud, menyediakannya dengan GPU Nvidia L4 kelas menengah baru ($0,24/jam untuk instance Spot di Google Cloud Platform), dan mulai bekerja.
Dengan satu GPU L4, dibutuhkan waktu sekitar 22 detik untuk menghasilkan setiap gambar 1024x1024; dan tidak seperti mode Difusi Stabil sebelumnya, kini GPU kelas menengah hanya dapat menghasilkan satu gambar dalam satu waktu karena pemanfaatan GPU-nya sudah penuh, jadi Anda tinggal punya untuk lebih bersabar. Menurunkan resolusi dapat mempercepat pembangunan, tapi saya sangat menyarankan untuk tidak melakukannya, karena hasilnya akan buruk.
** Sedikit konfigurasi yang dipersonalisasi **
Dalam pengujian saya, ini memperbaiki sebagian besar masalah kata cepat yang muncul setelah Stable Diffusion 2.0, terutama dengan nilai panduan tanpa pengklasifikasi yang lebih tinggi yang ditetapkan (guiding_scale defaultnya adalah 7.5; saya ingin mengubahnya menjadi 13 )
Panduan_skalanya adalah 13 untuk semua contoh yang dihasilkan oleh model LoRA dalam artikel ini.
Memulai丨Jelajahi LoRA
Pembaruan paling penting dari SDXL 1.0 sebenarnya adalah dukungan Dreambooth LoRA, yang memungkinkan kita untuk menyesuaikan model Difusi Stabil.
Dreambooth adalah teknik untuk menyempurnakan Difusi Stabil berdasarkan kumpulan gambar sumber yang sangat kecil dan kata kunci pemicu, sehingga "konsep" dalam gambar tersebut dapat digunakan dalam konteks lain berdasarkan kata kunci tersebut.
Keunggulan LoRA: "model kecil" khusus domain
Saat melatih Difusi Stabil itu sendiri, bahkan model kecil pun memerlukan pelatihan berjam-jam pada banyak GPU yang mahal.
Di sinilah LoRA berguna: ia melatih sebagian kecil model visi sehingga hanya memerlukan GPU murah untuk mengeluarkan hasil dalam 10 menit, dan kualitas model akhir + LoRA sebanding dengan model yang sepenuhnya disetel dengan baik. (Secara umum, ketika orang merujuk pada penyempurnaan Difusi Stabil, mereka sering merujuk pada pembuatan LoRA).
LoRA terlatih adalah biner kecil dan mandiri yang dapat dengan mudah dibagikan kepada orang lain, atau diunggah ke repositori seperti Civitai.
Kelemahan kecil LoRA adalah hanya satu yang dapat aktif dalam satu waktu: kita dapat menggabungkan beberapa LoRA untuk menggabungkan keunggulannya, namun dalam praktiknya tidak sesederhana itu.
Pertempuran Aktual Inversi Tekstual: Inversi Tekstual
Sebelum LoRA Difusi Stabil menjadi sangat populer, ada metode yang disebut inversi tekstual, yang memungkinkan pembuat enkode teks mempelajari konsep, namun perlu waktu berjam-jam untuk melatihnya dan hasilnya bisa jadi jelek.
Saya melatih inversi teks di postingan blog sebelumnya: Ugly Sonic (Sonic), dan karena tidak ada dalam kumpulan data sumber untuk Difusi Stabil, hasilnya unik. Hasil yang dihasilkan adalah sebagai berikut, dengan hasil yang beragam.
Kali ini, menurut saya menggunakan Ugly Sonic untuk melatih LoRA akan menjadi contoh yang baik untuk menguji potensi SDXL.
Kebetulan Hugging Face menyediakan skrip train_dreambooth_lora_sdxl.py, yang dapat menggunakan model dasar SDXL untuk melatih LoRA; skrip ini masih out of the box, tetapi saya sedikit menyesuaikan parameternya.
Tidaklah berlebihan untuk mengatakan bahwa gambar Sonic Jelek yang dihasilkan oleh LoRA terlatih dengan berbagai kata cepat terlihat lebih baik dan lebih terorganisir.
Tingkat Lanjut 丨 Inversi Tekstual Mendalam
Setelah eksperimen ini berhasil, saya memutuskan untuk mengulangi eksperimen lain yang saya lakukan sebelumnya dengan inversi teks: dengan menambahkan kata isyarat yang salah untuk menghasilkan gambar yang lebih baik.
Metode kali ini adalah melatih LoRA dengan beberapa gambar berkualitas rendah yang sangat terdistorsi, dan kata cepat yang diberikan salah. Saya harap LoRA dapat memperlakukan kesalahan sebagai "perintah negatif" dan menghindari situasi ini, menghasilkan gambar dengan distorsi yang lebih sedikit.
Saya menulis Notebook Jupyter dan menggunakan SDXL untuk membuat sendiri banyak gambar komposit yang "salah", kali ini juga menggunakan berbagai bobot petunjuk untuk menghasilkan contoh gambar gagal yang lebih jelas seperti tangan buram (buram) dan tangan buruk (gambar salah) .
Ironisnya, kita perlu menggunakan SDXL untuk menghasilkan gambar gagal beresolusi tinggi.
Di atas adalah beberapa contoh gambar salah sintetik
Ini secara tidak sengaja memasukkan unsur sampul album punk rock dari tahun 2000-an
Saya melatih LoRA ini dan memuatnya ke dalam model dasar Stable Diffusion XL (LoRA tidak diperlukan untuk menyempurnakan model), dan menulis Notebook Jupyter untuk membandingkan keluaran berikut untuk kata-kata cepat yang diberikan:
Model dasar + saluran pipa tanpa LoRA. (dasar)
Tidak ada pipeline LoRA, gunakan salah sebagai petunjuk negatif (tambahkan petunjuk negatif)
Gunakan saluran LoRA, gunakan kesalahan sebagai petunjuk negatif (tujuan ideal)
Benih dari setiap hasil yang dihasilkan adalah sama, sehingga komposisi ketiga foto keluaran harus serupa, dan perbedaan antara efek petunjuk negatif yang salah dan LoRA, serta pipeline model dasar harus sangat jelas.
Kasus Uji SDXL 0.9
Mari gunakan SDXL 0.9 untuk mendemonstrasikan perintah sederhana untuk memulai pengujian:
「Serigala di Taman Nasional Yosemite, fotografi film dokumenter alam yang dingin」
Melihat gambar di atas dengan cermat, tidak sulit untuk menemukan bahwa petunjuk yang salah pada model dasar menambahkan beberapa dedaunan dan kedalaman pada hutan latar belakang, namun LoRA menambahkan lebih banyak hal: pencahayaan dan bayangan yang lebih kuat, dedaunan yang lebih detail, dan perubahan pada tampilan serigala. Sudut kamera terlihat lebih menarik.
Kemudian saya menambahkan "closeup ekstrim (sangat dekat)" ke kata cepat, dan setelah menggunakan kembali benih sebelumnya, saya mendapatkan perspektif close-up serigala yang berbeda dalam komposisi foto yang serupa.
Saat ini, tekstur dan kejernihan LoRA jauh lebih baik dibandingkan model lainnya, dan gambarnya lebih jelas. Namun perlu diperhatikan bahwa menambahkan satu kata isyarat yang salah saja akan mengubah perspektif.
Contoh uji bagus lainnya adalah fotografi makanan, dan bidikan makanan aneh yang saya hasilkan dengan DALL-E 2 khususnya sangat bagus. Bisakah SDXL + LoRA yang salah menghasilkan burger non-Euclidean yang tampak aneh dengan beberapa petunjuk bobot?
"Burger besar yang lezat (geometri alien 5D)++++, fotografi makanan profesional"
Jawabannya tidak bisa, padahal kata promptnya disesuaikan berkali-kali. Namun, hasilnya tetap menarik: base SDXL tampaknya mengambil bagian "alien" dari prompt lebih harfiah daripada yang saya kira (dan memberinya topi bowler yang lucu!), tetapi LoRA bekerja lebih baik. Dia memahami arti dari petunjuk tersebut dengan jelas, dan membuat burger "alien" yang sulit dimakan manusia, dan gaya gambarnya lebih bersinar.
Apa yang akan terjadi pada si pelukis? Bisakah LoRA dengan cara yang salah memecahkan masalah kecerdasan buatan yang terkenal buruk? Dan kami juga menyertakan banyak contoh serupa dalam data pelatihan LoRA. Mari kita ubah perintah yang saya gunakan saat pertama kali mencoba Stable Diffusion 2.0 untuk menggambar Presiden Taylor Swift:
"Presiden AS Taylor Swift (penandatanganan dokumen)++++, foto oleh AP"
Lihatlah lengan kanan Taylor: model SDXL default menghasilkan hasil yang luar biasa, dan jika salah hasilnya justru lebih buruk, tetapi di LoRA sudah diperbaiki! Pelapisan warna LoRA jauh lebih baik, dengan jaketnya menjadi putih lebih menonjol daripada kuning-putih. Namun tangannya masih belum bisa dilihat dengan cermat: menggambar karakter dengan SDXL 1.0 masih rumit dan tidak bisa diandalkan!
Sekarang kesimpulannya sudah jelas, keluaran dari salah + LoRA dalam setiap kasus lebih menarik daripada keluaran yang hanya menambahkan isyarat negatif yang salah, jadi kami hanya membandingkan keluaran dasar dan keluaran LoRA di bawah ini. Berikut ini contoh model dasar dibandingkan dengan LoRA yang salah:
*(Shrek manusia realistis yang menulis blog di stasiun kerja komputer, foto surealis pemenang penghargaan dari Vanity Fair) - Tangan LoRA digambar dan menyala dengan lebih baik. Kostumnya lebih detail dan backgroundnya lebih menarik. *
(pizza pepperoni berbentuk hati, fotografi makanan profesional pemenang penghargaan yang sangat realistis) - pepperoni lebih detail, gelembung panas, lebih sedikit pepperoni di tepi pizza, kerak terlihat lebih keras
LoRA dengan kesalahan tersedia di sini, tetapi saya tidak dapat menjamin kinerjanya pada antarmuka selain diffuser.
Semua Notebook yang digunakan untuk menghasilkan gambar-gambar ini ada di repositori GitHub ini, termasuk SDXL 1.0 + model fine-tuning standar + Notebook LoRA Colab yang salah, Anda dapat menjalankan Notebook ini pada GPU T4 gratis. Jika Anda ingin melihat versi resolusi lebih tinggi dari gambar yang dihasilkan yang digunakan dalam artikel ini, Anda dapat mengunjungi kode sumber artikel.
Salah Apa yang terjadi?
LoRA dengan salah Trik ini hanya meningkatkan kualitas dan kejelasan gambar yang dihasilkan, namun LoRA sepertinya membuat SDXL berperilaku lebih cerdas dan lebih mencerminkan semangat kata-kata cepat.
Pada tingkat teknis, isyarat negatif ini menetapkan wilayah ruang laten tempat difusi menghasilkan gambar; wilayah ini sama untuk model dasar yang salah dan LoRA.
Intuisi saya adalah LoRA membentuk kembali wilayah yang tidak diinginkan ini dalam ruang laten berdimensi tinggi yang sangat besar agar lebih mirip dengan wilayah awal, sehingga kemungkinan hasil pembangkitan normal mengenai wilayah ini menjadi lebih kecil dan kualitasnya lebih rendah. (Lihat proses perubahan Alien Burger di atas)
Melatih SDXL dengan gambar berkualitas rendah untuk memperbaikinya secara teknis merupakan bentuk pembelajaran penguatan dengan umpan balik manusia (RLHF): pendekatan ini juga merupakan jalan menuju kesuksesan ChatGPT. Proses pembelajaran penguatan yang digunakan OpenAI untuk menyempurnakan model adalah secara implisit mengurangi perilaku negatif dari interaksi pengguna yang positif, sedangkan di sini saya menggunakan interaksi pengguna yang negatif (yaitu dengan sengaja memilih gambar berkualitas rendah) untuk secara implisit meningkatkan perilaku positif.
Namun dengan Dreambooth LoRA, pada dasarnya Anda tidak perlu menyiapkan data input sebanyak melatih model bahasa yang besar.
Potensi "LoRA Negatif" masih besar: parameter pembuatan kumpulan data sintetik saya masih memiliki banyak ruang untuk perbaikan, dan LoRA juga dapat dilatih untuk jangka waktu yang lebih lama. Tapi saya sangat senang dengan hasilnya sejauh ini dan ingin melakukan lebih banyak pengujian dengan LoRA negatif, seperti menggabungkan dengan LoRA lain untuk melihat apakah LoRA lain dapat meningkatkan LoRA tersebut (terutama LoRA yang salah + LoRA Sonic Jelek!)
Lampiran: Demo SDXL di diffuser
impor obor
dari diffuser impor DiffusionPipeline, AutoencoderKL
memuat basis SDXL dan pemurnian
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix",
obor_dtype=obor.float16)
base = DiffusionPipeline.from_pretrained(
"stabilitasai/difusi-stabil-xl-base-1.0",
kaki = kaki,
obor_dtype=obor.float16,
iant="fp16",
gunakan_safetensors=Benar,
)
_ = base.to("cuda")
penyuling = DiffusionPipeline.from_pretrained(
"stabilitasai/difusi-stabil-xl-refiner-1.0",
teks_encoder_2=base.teks_encoder_2,
kaki=alas.kaki,
obor_dtype=obor.float16,
iant="fp16",
gunakan_safetensors=Benar,
)
_ = pemurni.ke("cuda")
generasi menggunakan kedua model (campuran ahli)
tinggi_noise_frac = 0,8
= "seorang astronot menunggang kuda"
negative_ = "buram, tangan jelek"
gambar = dasar(
=,
negatif_=negatif_,
denoising_end=tinggi_noise_frac,
keluaran_type="laten",
).gambar-gambar
gambar = pemurni(
=,
negatif_=negatif_,
denoising_start=tinggi_noise_frac,
gambar=gambar,
).gambar-gambar [0]