Anifusion-SD

Dec 23 2022
TL;DR Ini adalah model baru seperti Stable-Diffusion (disetel dari SD2) untuk gambar anime, mendukung resolusi 768x768, dan secara signifikan mengungguli beberapa model anime populer menurut evaluasi kami. Pos pemeriksaan bersifat publik (instruksi pemasangan), demo tersedia untuk beberapa waktu.

TL;DR

Ini adalah model baru seperti Stable-Diffusion (disempurnakan dari SD2) untuk gambar anime, mendukung resolusi 768x768, dan secara signifikan mengungguli beberapa model anime populer menurut evaluasi kami. Pos pemeriksaan bersifat publik ( petunjuk instalasi ), demo tersedia untuk beberapa waktu.

  • Pendahuluan
  • Latar Belakang
    - Model Difusi
    - Difusi Laten
    - Difusi Stabil
    - Difusi Waifu
    - Difusi Stabil 2
  • Model kami: pelatihan
    - Kondisioner
    - Masalah teknis dan pengoptimalan
    - Pembaruan set pelatihan
    - Pelatihan dengan resolusi lebih tinggi
    - Perubahan pengambilan sampel
  • Hasil
  • Bandingkan dengan model anime lainnya
  • Diskusi
  • Referensi
  • Pointer

Setelah percobaan saya dengan melatih model difusi dari awal, beberapa orang menunjukkan bahwa ada banyak versi Difusi Stabil yang disetel dengan baik pada kumpulan data yang sama/serupa. Khususnya:

  • Waifu Diffusion : ini menggunakan subset data yang relatif kecil, dan hanya memasukkan prompt tag ke CLIP untuk pengkondisian), tanpa modifikasi kode apa pun ke Difusi Stabil asli (ini bermasalah IMO). Namun demikian, ini tampaknya menjadi model difusi anime paling populer saat ini. Itu merilis pos pemeriksaan untuk umum, tidak seperti model berikutnya;
  • NovelAI : ini dilakukan oleh perusahaan nyata, bukan oleh peneliti/insinyur independen. Mereka tidak merilis modelnya, tetapi menyediakan antarmuka berbayar untuk itu. Rupanya, ada juga beberapa drama dengan pos pemeriksaan dan kode mereka bocor, dari mana tampaknya mereka memiliki beberapa modifikasi kecil pada Stable Diffusion yang asli;
  • Anything-v3 : yang ini muncul beberapa saat kemudian, tidak banyak informasi tentang modelnya, tetapi diduga disempurnakan dari WaifuDiffusion (setidaknya, ia menggunakan transformasi cepat yang serupa sebelum mengumpankannya ke CLIP). Ini menghasilkan gambar yang sangat detail dan tampak bagus, tetapi tidak terlalu sesuai dengan perintahnya. Ruang keluarannya sangat kecil (kurang beragam, semua gambar memiliki gaya yang sama dan mirip satu sama lain), dan mengingatkan pada model GAN ​​pra-difusi. Tidak seperti model lainnya, yang satu ini juga tidak mampu menghasilkan NSFW — jadi mungkin model ini diperoleh dengan menyempurnakan kumpulan data kecil gambar berkualitas tinggi oleh satu artis.

Namun, mengingat banyaknya model di bidang ini, pada awalnya saya memutuskan untuk tidak repot-repot terlibat dan membiarkan kemajuan berjalan dengan sendirinya. Tapi sekarang, Difusi Stabil 2 dirilis, dan masih belum ada kemajuan yang terlihat dalam model anime. Jadi saya memutuskan untuk mencobanya — dalam posting ini, saya menjelaskan bagaimana saya menyempurnakan Stable Diffusion 2 dengan kondisioner cepat khusus, dan menunjukkan hasilnya. Tentu saja, saya juga memublikasikan modelnya — dari beberapa petunjuk yang saya coba, ternyata lebih baik daripada model yang tercantum di atas. Beberapa bagian selanjutnya berfokus pada detail teknis, jika Anda tidak tertarik, Anda dapat langsung melompat ke Hasil .

Latar belakang

Untuk memahami apa yang sedang terjadi dan apa yang telah berubah, mari kita ikhtisar singkat tentang model yang ada terlebih dahulu.

Model difusi

Saya tidak akan membahas detail model difusi, sudah ada banyak ulasan bagus tentangnya di internet. Untuk tujuan kita, cukup mengetahui bahwa idenya adalah menguraikan proses pembuatan citra menjadi urutan langkah-langkah "denoising". Selama pelatihan, tulang punggung model (dalam hal gambar — biasanya UNet) diberi gambar rusak dan langkah denoising, dan sedang mencoba membatalkan satu langkah korupsi. Selama inferensi, kami memulai dari noise acak, dan menerapkan backbone berulang kali untuk "membatalkan" semua langkah kerusakan imajiner. Matematika yang tepat di balik ini harus tepat. Pada waktu inferensi, sebagian besar model difusi modern memodifikasi proses untuk mengurangi jumlah langkah pengambilan sampel (ini dimungkinkan oleh seseorang yang memperhatikan bahwa prosesnya mirip dengan menyelesaikan persamaan diferensial stokastik dengan metode numerik, dan menerapkan pemecah DE yang lebih cerdas alih-alih).

Difusi laten

Ini bisa dibilang ide yang paling penting, digunakan di sebagian besar model difusi terbuka. Perusahaan seperti Google atau OpenAI mampu melatih dan menggunakan model difusi dalam ruang piksel asli, karena mereka memiliki banyak perangkat keras. Namun bagi orang awam, melatih (atau bahkan menjalankan) UNet dalam ruang 512x512 piksel sangatlah mahal. Idenya adalah untuk melatih autoencoder yang memampatkan gambar dari ruang asli 512x512x3 ke ruang laten (dalam kasus Difusi Stabil — 64x64x4). Autoencoder dilatih sebagai VAE dengan regularisasi berbasis KL, untuk menjaga ruang laten tetap "bagus".

Kemudian, model melakukan difusi dalam ruang 64x64x4 ini, yang jelas jauh lebih efisien. Kelemahannya adalah, VAE tidak sempurna, dan beberapa informasi hilang saat mengompresi gambar. Namun dalam praktiknya, ini bekerja dengan sangat baik.

FWIW, pendekatan alternatif dimungkinkan, misalnya Imagen menghasilkan gambar berdimensi rendah dalam ruang piksel, dan kemudian meningkatkannya secara progresif. Namun, ini tidak relevan untuk model yang kami jelaskan di artikel ini.

Difusi Stabil

Ini lebih merupakan terobosan sosial daripada terobosan teknis. Modelnya adalah model difusi laten "vanila", dilatih di LAION , dan tidak seperti kebanyakan model pembuatan gambar sebelumnya, model ini dirilis ke publik. Hal ini membuat teknologi tersedia untuk khalayak luas yang tidak terbiasa dengan Pembelajaran Mesin, memicu banyak kreativitas, diskusi, dan orang-orang menyempurnakannya di berbagai kumpulan data (misalnya model anime yang disebutkan di atas).

Salah satu pilihan menarik dalam arsitektur yang sangat relevan bagi kita adalah bagaimana model tersebut melakukan conditioning. Biasanya model dilatih dalam mode "unconditional" ( UNet(corrupted image) ~ image ) dan conditional ( UNet(corrupted image, condition) ~ image ), dan panduan bebas pengklasifikasi digunakan saat pengambilan sampel: alih-alih menggunakan UNet ( gambar rusak , kondisi ) saat membuat gambar, menggunakan C * UNet ( gambar rusak, kondisi ) ( C — 1) * UNet ( gambar rusak ), dan Csecara signifikan lebih tinggi dari 1 (misalnya 7). Ini tidak terlalu intuitif, tetapi sangat meningkatkan kualitas gambar dan ketepatan cepat dari gambar yang dihasilkan.

Yang relevan bagi kita adalah bagaimana kondisi diperoleh. Dalam Stable Diffusion, mereka menggunakan lapisan tersembunyi terakhir dari encoder teks model CLIP . Itu dibekukan, yaitu gradien tidak di-backpropagated ke sana selama pelatihan. Ini dapat dianggap sebagai model penyandi bahasa, dengan beberapa rasa sekunder dari gambar yang membiaskan pemahaman bahasa terhadap pemahaman visual.

Difusi Waifu

Ini adalah Difusi Stabil yang disesuaikan dengan gambar anime. Tampaknya mereka menggunakan subset Danbooru2021 (atau yang serupa) sebagai set pelatihan mereka. Mereka menggunakan Difusi Stabil apa adanya, tanpa modifikasi kode apa pun (meskipun mereka menyempurnakan bagian dekoder VAE, untuk membuatnya bekerja sedikit lebih baik dengan gambar anime).

Akibatnya, mereka juga menggunakan CLIP sebagai kondisioner, memberinya string dengan tag sebagai prompt. Saya kira itu bekerja sangat buruk, karena mereka juga memproses tag (misalnya mengganti garis bawah dengan spasi). Tetapi bahkan dengan itu, tampaknya pemahaman CLIP tentang perintah itu kurang optimal.

Difusi Stabil 2

Ini adalah rilis inkremental yang melatih ulang model (dengan ukuran yang sama) dari awal, dan juga mengganti kondisioner dengan OpenCLIP . Ini juga memiliki beberapa fitur tambahan yang menarik, seperti img2img berbasis kedalaman, dan model resolusi lebih tinggi (768x768 piksel).

Model kami: pelatihan

Tujuannya adalah menyempurnakan Stable Diffusion 2 pada gambar anime, menggantikan pembuat enkode dengan model khusus yang dikhususkan untuk serangkaian tag sebagai input, berlawanan dengan bahasa alami CLIP. Selain pengondisian yang lebih baik, ini juga akan memungkinkan teknik augmentasi cepat dari Anifusion , yang sangat membantu kualitas dan keragaman di sana.

Kondisioner

Kami menggunakan pendekatan yang sama seperti di Anifusion: model pengkondisian adalah transformator berukuran BERT tanpa penyematan posisi (untuk menangkap simetri perintah tag: urutan tag seharusnya tidak menjadi masalah). Kami hanya mengganti kondisioner, menjaga bagian perhatian silang dari tulang punggung difusi tetap sama.

Pertanyaan penting di sini adalah bagaimana menginisialisasi trafo bobot. Mulai dari kondisioner yang tidak terlatih dan UNet yang terlatih dan melatih mereka secara bersama-sama dapat menyebabkan proses pelatihan menghancurkan atau menurunkan bobot UNet secara signifikan. Untungnya, tidak sulit untuk memperbaikinya: kita dapat membekukan UNet dan menjalankan pelatihan hanya untuk bagian trafo untuk sementara waktu.

Masalah teknis dan pengoptimalan

Untuk membuat pelatihan menjadi efisien, penting untuk memeras ukuran batch setinggi mungkin ke RAM video (misalnya karena biaya penerapan logika pengoptimal hanya dibayarkan sekali per batch). Pada dasarnya ada dua arah di sini.

Perubahan jalur pipa

Kode pelatihan SD kanonis menjalankan encoder VAE secara online, mengurai gambar mentah dan mengodekannya. Ini adalah buah gantung terendah yang harus dihilangkan: Bobot VAE mengonsumsi VRAM, variabel perantara dari penerapan pembuat enkode ini juga mengonsumsi VRAM, proses pengkodean membutuhkan waktu. Secara khusus, jika kami membuat beberapa kali melewati data, tidak masuk akal untuk membayar biaya penyandian gambar yang sama beberapa kali.

Untungnya, bagian ini mudah untuk dioptimalkan: kami hanya melakukan pra-enkode semua gambar di set pelatihan. Manfaat tambahannya adalah set pelatihan yang dihasilkan jauh lebih kecil (dalam hal ukuran disk) daripada gambar asli 512x512 dalam ruang piksel.

Salah satu cara lain untuk menghemat sedikit VRAM adalah dengan menonaktifkan EMA. Exponential Moving Average adalah trik untuk sedikit meningkatkan kualitas model dengan (kira-kira) rata-rata bobot dari sekelompok pos pemeriksaan terakhir, dan tidak menyimpan EMA adalah cara mudah untuk menggunakan lebih sedikit VRAM tanpa banyak merusak model yang dihasilkan.

Perubahan pelatihan

Cara populer untuk mempercepat pelatihan dan menghemat VRAM adalah dengan menggunakan presisi yang lebih rendah: daripada fp32 biasa (angka floating point 32-bit), gunakan fp16 atau bf16 (variasi angka floating point 16-bit), atau presisi campuran (melakukan beberapa operasi di fp16).

Saya mencobanya, dan memang membantu kinerja, tetapi terlalu berbahaya. Secara khusus, pada satu titik, saya menambahkan "dengan torch.autocast():" (presisi campuran) untuk perhatian, dan kemudian membuang banyak waktu untuk mencari tahu mengapa model perlahan menyimpang dari waktu ke waktu.

Akibatnya, saya memutuskan bahwa akan lebih aman untuk tidak menerapkan pengoptimalan seperti ini pada model, mengingat pelatihannya sudah cukup efisien.

Pembaruan set pelatihan

Di Anifusion, versi lama dari kumpulan data Danbooru digunakan, jadi saya memutuskan bahwa ini saat yang tepat untuk memperbaruinya, sekaligus memperluas ukuran kumpulan pelatihan dan kumpulan tag yang didukung di prompt. Namun ada beberapa komplikasi: (1) versi baru kumpulan data bukanlah superset sederhana dari yang sebelumnya, dan (2) saya memutuskan untuk melakukannya saat model sudah dilatih, jadi beberapa pekerjaan tambahan untuk mentransisikan yang sudah ada pos pemeriksaan itu perlu.

Perbedaan set data

Ini agak kecil, tetapi setelah mengunduh metadata untuk versi kumpulan data baru, saya perhatikan bahwa banyak gambar (beberapa persen) menghilang. Beberapa tag yang berhasil masuk ke top-2.5k sebelumnya juga menghilang (termasuk beberapa yang paling populer), apalagi gambar yang dihapus cocok dengan tag yang dihapus.

Pemeriksaan lebih lanjut mengungkapkan bahwa tag yang hilang semuanya cocok dengan pola "NSFW fringy" (beberapa di antaranya sangat fringy sehingga saya bahkan tidak tahu hal seperti itu ada…). Itu agak tidak konsisten, karena tag dan gambar serupa lainnya disimpan di tempatnya. Saya menduga pengelola kumpulan data atau situs hosting gambar sumber menerapkannya sebagai peretasan cepat untuk mengatasi beberapa masalah PR. Bagaimanapun, saya baru saja menggabungkan kumpulan data lama & baru, mendapatkan sekitar 2 juta gambar untuk dilatih. Selain itu, saya mengambil sampel gambar 800k dengan resolusi ≥ 786x768, untuk menyempurnakan model resolusi lebih tinggi nanti.

Memperluas kumpulan tag

Bagian ini sebenarnya agak non-trivial. Pada titik set data baru diproduksi, model dilatih untuk beberapa waktu, memiliki trafo kondisioner yang terkonvergensi dengan baik, mengambil petunjuk dari tag 2.5k teratas sebagai masukan. Untuk versi yang lebih baru, saya memutuskan untuk menggunakan tag top-12k sebagai gantinya. Bagaimana cara menambahkannya ke model?

Yang perlu ditingkatkan adalah tabel penyematan trafo (dari 2500x1024 menjadi 12000x1024). Pendekatan yang naif adalah menginisialisasi embeddings baru secara acak, dan melatih model untuk beberapa waktu dengan UNet yang dibekukan, hanya memperbarui trafo. Tapi ini (1) boros dalam hal waktu dan komputasi, (2) membosankan. Bisakah kita menginisialisasi mereka dengan lebih baik?

Mari kita lihat informasi apa yang tersedia bagi kita. Kami telah melatih 2,5k penyematan, dan penyematan untuk tag baru harus agak mirip dengannya. Tapi yang mana? Ide yang naif adalah menggunakan penyematan tag yang mirip secara semantik. Tapi bagaimana kita mendapatkan kesamaan semantik? Word2vec yang bagus sangat bagus dalam hal itu, jadi kita bisa mengambil set tag dan melatih penyematan word2vec pada mereka. Di bawah ini adalah visualisasi t-SNE dari hasil (titik gelap sesuai dengan tag NSFW, sehingga mudah untuk dilewati oleh orang yang tidak ingin melihatnya): tautan interaktif .

Mari kita lihat visualisasi yang sama untuk penyematan terlatih 2,5k dari transformator: tautan interaktif .

Jadi sebenarnya tidak sama, dan lebih fokus pada tampilan visual daripada semantik. Namun, itu harus cukup dekat, sehingga kita dapat menghitung penyematan awal untuk tag baru sebagai berikut: ambil tetangga terdekat di ruang word2vec dari yang top-2.5k, dan kumpulkan penyematan trafo mereka. Bahkan, kita bahkan dapat memperbaikinya sedikit: latih NN kecil yang mengubah word2vec sehingga agregasi tetangga terdekat cocok dengan embedding sebenarnya pada 2.5k yang pertama, dan menerapkannya ke tag lainnya.

Dengan ini, kami memperoleh inisialisasi yang masuk akal untuk penyematan baru, memodifikasi pos pemeriksaan terbaru, dan melanjutkan pelatihan pada data baru apa adanya.

Pelatihan dengan resolusi lebih tinggi

Stable Diffusion 2 memiliki versinya yang menghasilkan gambar berukuran 768x768 (yaitu 2,25 kali lebih besar dari 512x512), yang memiliki beberapa properti menarik (mis. tampaknya menangani gambar jari lebih baik daripada versi resolusi rendah). Jadi kami memutuskan untuk melakukan hal yang sama dengan model kami. Secara khusus, kami memiliki dua tahap pelatihan:

  • Resolusi rendah: pelatihan pada gambar 512x512 (ruang laten 64x64x4), dengan ukuran batch 11, kecepatan pembelajaran 5e-6, untuk 1 juta langkah;
  • Resolusi tinggi: melanjutkan dari fase sebelumnya, melatih gambar 768x768 (ruang laten 96x96x4), dengan ukuran batch 5, kecepatan pembelajaran 5e-6, langkah 80k.

Perubahan sampel

Di Anifusion , augmenting prompt dengan model terpisah meningkatkan hasil secara drastis. Secara intuitif, lebih mudah untuk mengambil sampel barang di ruang konsep diskrit, dibandingkan dengan ruang kontinyu implisit di dalam proses difusi.

Di sini, kami menerapkan teknik yang sama, melatih ulang trafo augmentasi cepat pada set pelatihan baru. Kami mengamati efek yang sama — kualitas dan keragaman sampel meningkat secara drastis dengan augmentasi prompt, terutama untuk prompt pendek.

Hasil

Tampaknya model 768x768 menghasilkan gambar yang lebih baik daripada model 512x512, dan bukan hanya karena resolusinya: konsistensi keseluruhan gambar dan (terutama) detail anatomi karakter lebih baik. Namun, tampaknya kesetiaan yang cepat sedikit lebih buruk (saya tidak memiliki pengukuran yang tepat, hanya kesan saya).

Satu hal yang perlu diperhatikan adalah bahwa dibandingkan dengan Anifusion, model tersebut tampaknya lebih condong ke gambar NSFW/cabul. Beberapa di antaranya dapat dikaitkan dengan augmentasi cepat, tetapi bagian UNet juga bertanggung jawab. Saya tidak yakin mengapa ini terjadi (perubahan set pelatihan agak kecil; mungkin ukuran/mulai dari Difusi Stabil menyebabkan ini?).

Mari kita bahas berbagai jenis gambar selangkah demi selangkah.

Potret

Ini adalah kasus penggunaan paling sederhana, dan potret anime berhasil dibuat bahkan di era GAN. Jadi tidak mengherankan, model tidak memiliki masalah dengan ini (beberapa contoh di bawah).

Karakter tunggal, tag populer

Ini adalah ujian yang lebih sulit, dan seperti yang diharapkan, seseorang bisa mendapatkan gambar yang buruk dari waktu ke waktu (jarang). Mode kegagalan yang umum adalah anatomi yang buruk — lengan atau kaki tambahan. Dan tentunya, jari-jari cukup menantang bagi para model.

Karakter tunggal, tag ekor

Di sini kami menguji tag yang kurang populer, khususnya tag yang ditambahkan pada tahap pelatihan selanjutnya (lihat di atas untuk detail lebih lanjut). Mereka tampaknya bekerja dengan cukup baik, meskipun tidak sempurna. Beberapa contoh ada di bawah ini. Secara umum, tampaknya tag karakter lebih mudah untuk model daripada tag konsep.

Tag yang baru ditambahkan, dari kiri ke kanan: “singa” (tidak jelas, mungkin dia mengendarainya), “facepalm” (tidak berfungsi), “venti_(genshin_impact)” (berfungsi)

Interaksi karakter

Akhirnya, kita sampai pada sesuatu yang menarik. Anifusion Asli tidak berfungsi dengan baik saat karakter berinteraksi. Apakah model baru lebih baik?

Beberapa karakter yang berdiri berdampingan tampaknya baik-baik saja:

Tindakan sederhana juga agak berhasil:

Kiri-ke-kanan: "ciuman", "pegangan_tangan", "pelukan"

Interaksi dengan objek juga kurang lebih baik:

Kiri ke kanan: “memegang_senjata”, “mengendarai”, “memegang_makanan”

Namun, jika kami mencoba untuk menentukan interaksi yang rumit, itu menghasilkan horor tubuh lebih sering daripada tidak (saya tidak akan memposting gambar-gambar ini di sini, karena dapat mengganggu). Mengapa ini terjadi? Saya berspekulasi bahwa ini karena petunjuknya hanyalah kumpulan tag, dan tidak menentukan interaksi dengan cukup tepat. Apa yang membuat model difusi menghasilkan gambar yang baik pada awalnya adalah panduan bebas pengklasifikasi: terlalu menekankan permintaan secara drastis meningkatkan kualitas dibandingkan dengan pengambilan sampel tanpa waktu, karena pengambilan sampel konsep rumit di dalam difusi itu sulit. Jadi kita dapat berharap bahwa apa pun yang ditentukan dengan jelas di prompt akan dihasilkan dengan baik, tetapi ambiguitas akan diselesaikan dengan cara yang tidak terlalu baik. Dorongan bahasa alami bisa lebih baik dalam pengertian ini.

FWIW, dalam komentar pada postingan Anifusion asli di reddit, Gwern menyarankan untuk menggunakan BLIP untuk menghasilkan petunjuk bahasa alami dari gambar; Saya benar-benar mencobanya, dan kualitas petunjuknya sangat rendah, jadi tidak semudah itu.

Gaya

Di Difusi Stabil asli, orang menemukan banyak cara untuk menentukan gaya pada model, kebanyakan dengan menambahkan nama beberapa artis. Apakah hal yang sama berlaku untuk model anime?

Mencobanya — ini bekerja dengan sangat baik (ini merupakan keuntungan dibandingkan dengan AnythingV3). Di bawah ini adalah contoh dalam berbagai gaya acak.

Bandingkan dengan model anime lainnya

Kami tidak melakukan perbandingan dengan AnythingV3, karena itu tidak benar-benar menghargai permintaan, menghasilkan gambar serupa untuk apa pun yang cantik (seperti namanya). Ini menyisakan WaifuDiffusion dan NovelAI. Kami memutuskan untuk tidak membandingkan dengan NovelAI, karena itu akan membutuhkan penggunaan pos pemeriksaan yang bocor, dan lebih baik menjauh dari drama itu. Ini meninggalkan kita dengan WaifuDiffusion.

Satu hal yang perlu diperhatikan adalah bahwa perbandingan pada prompt singkat akan terlalu tidak adil untuk WaifuDiffusion: itu tidak termasuk augmentasi prompt (tidak seperti Anifusion), menghasilkan hasil yang sangat buruk pada prompt singkat. Jadi kami melakukan dua perbandingan yang berbeda. Di satu, kami mengambil sampel kumpulan tag dari kumpulan data asli, secara efektif menghapus augmentasi cepat dari pertimbangan, dan hanya membandingkan bagian difusi. Yang kedua, kami secara manual membuat beberapa prompt berukuran sedang dan mengevaluasi kedua model pada mereka (ini termasuk efek augmentasi prompt).

Kumpulan tag dari kumpulan data

Kami mengambil sampel 97 kumpulan tag dari kumpulan data (secara seragam, memfilter ke gambar dengan peringkat "aman"). Untuk Anifusion, kami memprosesnya terlebih dahulu dengan menambahkan “rating_s, score_perc_100, adjusted_score_perc_100” ke prompt. Untuk WaifuDiffusion, kami memprosesnya terlebih dahulu dengan mengganti garis bawah dengan spasi. Dalam kedua kasus, kami menggunakan pengambilan sampel DDIM dengan 50 langkah dan skala panduan bebas pengklasifikasi 9.

Setelah mendapatkan beberapa peringkat manusia (dengan membalik sisi secara acak untuk perbandingan), kami mendapatkan hasil berikut vs Waifu:

  • Anifusion lebih baik: 30%
  • Waifu lebih baik: 24%
  • Hampir sama: 46%

Satu pola kegagalan yang saya perhatikan di Waifu: sering menghasilkan beberapa sub-gambar alih-alih gambar penuh, memotong kepala karakter. Pola kegagalan Anifusion adalah NSFW yang tidak diminta (dan terkait — anatomi yang buruk; untuk beberapa alasan, semakin dekat gambar dengan NSFW, semakin buruk anatomi modelnya).

Catatan tambahan: di sini Anda dapat menemukan hasil AnythingV3 untuk petunjuk yang sama. Hasilnya memang terlihat bagus, tetapi orang dapat melihat mengapa saya ragu-ragu memasukkannya ke dalam perbandingan: semua gambar terlihat dengan gaya yang persis sama, sangat kurang keragaman, yang berarti bahwa model tersebut memiliki ruang keluaran yang jauh lebih kecil.

Jadi dengan pengambilan sampel dalam distribusi, itu tidak jauh lebih baik. Tetapi bagaimana jika kita menggunakan versi model yang beresolusi lebih tinggi?

  • Anifusion lebih baik: 41%
  • Waifu lebih baik: 13%
  • Hampir sama: 46%

Orang dapat memperhatikan bahwa ada jumlah yang tidak sepele dari "hampir sama". Sebagian besar contoh ini adalah kedua model sama-sama baik, tetapi ada beberapa di mana kedua model sangat buruk (entah bagaimana mereka berkorelasi dalam hal ini).

Perintah manual berukuran sedang

Kami menggunakan preprocessing prompt yang sama seperti yang dijelaskan di bagian sebelumnya. Kami secara manual menyiapkan 33 petunjuk berukuran sedang yang masuk akal (tentu saja karena disiapkan oleh satu orang, mungkin tidak mewakili distribusi keseluruhan).

Di sini, hasilnya sangat berbeda:

  • Anifusion lebih baik: 73%
  • Waifu lebih baik: 9%
  • Hampir sama: 18%

Seperti yang bisa kita lihat, augmentasi cepat membuat perbedaan. Apa yang terjadi jika kita menggunakan model resolusi tinggi? Hasilnya sangat mirip ( data mentah ):

  • Anifusion lebih baik: 73%
  • Waifu lebih baik: 3%
  • Hampir sama: 24%

Aksesibilitas untuk orang awam

Satu pengamatan yang menarik adalah bahwa bahkan setelah satu juta minibatch pelatihan, modelnya terus meningkat. Tidak jelas apakah model mengingat sesuatu dari pos pemeriksaan Stable Diffusion asli setelah begitu banyak langkah. Mungkin dataset anime cukup mudah sehingga seseorang dapat melatih model difusi berukuran SD dari awal pada perangkat keras komoditas, tanpa hot start dari SD yang ada? Ini adalah arah yang akan menjadi sesuatu untuk diselidiki: jika demikian, mencoba arsitektur baru untuk individu akan menjadi lebih mudah, tanpa perlu menghabiskan jutaan dolar untuk komputasi, seperti halnya dengan pelatihan berbasis LAION.

Peningkatan kualitas lebih lanjut

Sangat menarik untuk melihat seberapa jauh yang bisa dicapai dengan model saat ini, jadi saya ingin menyempurnakannya sedikit lagi, mungkin menggunakan kumpulan data lengkap, daripada subset 2M. Tapi saya curiga bahwa faktor pembatasnya adalah kualitas dataset, bukan jumlah finetuning (yaitu untuk meningkatkan kualitas model, seseorang hanya perlu memberi makan gambar berkualitas lebih tinggi, atau menambahkan pengenal khusus ke kondisioner yang membantu model untuk membedakan gambar yang lebih baik vs lebih buruk). Setahu saya, tidak ada model yang dapat diandalkan seperti ini untuk anime (untuk gambar umum, orang menggunakan subset "estetika" LAION). Meskipun ada beberapa model yang menghasilkan hasil bagus yang terlihat berbeda dari model ini atau WaifuDiffusion (misalnya model anime Midjorney, yang hanya tersedia dalam bentuk gambar pilihan mereka), jadi ini mungkin saja.

Penting untuk dicatat bahwa pembuatan dengan resolusi lebih tinggi meningkatkan kualitas dalam aspek selain resolusi — misalnya "tangan AI" yang terkenal menjadi lebih baik. Saya ingin tahu apakah meningkatkannya lebih lanjut menjadi 1024x1024 akan menghasilkan lebih banyak peningkatan. Sesuatu untuk dicoba dapat menggunakan difusi bertingkat (mis . Imagen ) di ruang laten (mis. 64x64 -> 128x128 -> 256x256 di ruang laten, menghasilkan 2048x2048 di ruang aslinya).

Kegunaan

Satu kekhawatiran dengan apa yang saya rilis adalah bahwa ini adalah pembuktian konsep. Kode untuk model berbeda dari SD, sehingga tidak benar-benar kompatibel dengan sebagian besar alat (terutama bagian tokenizer cepat). Jadi meskipun model ini terlihat lebih baik daripada model anime lain yang tersedia, kemudahan penggunaannya tidak terlalu bagus. Solusi potensial untuk itu adalah komunitas (atau saya, jika saya punya waktu untuk itu) mengintegrasikannya dengan benar dengan alat yang ada, atau membuatnya kompatibel dengan SD pada tingkat antarmuka.

Referensi

  • Difusi Stabil 2
  • Difusi Laten
  • Kumpulan data Danbooru2021
  • Petunjuk untuk menampilkan UI web
  • Model checkpoint (huggingface): 512x512 , 768x768 , prompt augmenter
  • Repo SD Github diadaptasi untuk model
  • Demo 768x768 —dibatasi untuk "peringkat: Aman", saya akan tetap menjalankannya untuk beberapa waktu, tetapi pada akhirnya saya tidak akan mempertahankannya