Kirish

2023 yil aprel.

ChatGPT va Barqaror diffuziya juda mashhur. Mutaxassislar innovatsiyalarning sun'iy intellekt to'lqini haqida gapirishmoqda. Har hafta yangi startaplar paydo bo'lmoqda.

Ayni paytda siz ushbu yangi texnologiyalar bilan o'ynash imkoniga ega emassiz. Siz o'z ishingiz bilan band bo'ldingiz va Generativ AI maydoni siz uchun qo'rqinchli. Qayerdan boshlashni bilmayapsiz.

Bir kuni YouTube-ni ko'rib chiqayotib, siz qiziq narsaga duch kelasiz. Ko'ryapsizmi, fast.ai endigina barqaror diffuziya kursi bilan chiqdi.

Siz birinchi darsni tomosha qilasiz. Bu toza oltin. Siz yana tomosha qiling. Siz hayajondasiz. Siz eslatma olasiz va uni maqolaga aylantirasiz. Siz uni o'zingiz o'qiysiz.

Maqola

Tasavvur qiling-a, sizda kiritilgan rasmning qo'lda yozilgan raqam bo'lish ehtimolini beradigan modelingiz bor edi.

Siz ushbu modeldan kirishni o'zgartirish orqali qo'lda yozilgan raqamlarni yaratish uchun foydalanishingiz mumkin. Siz har bir pikselni biroz engilroq yoki biroz quyuqroq qilishingiz mumkin va bu chiqish ehtimoliga qanday ta'sir qilishini ko'rishingiz mumkin.

Qiziqarli! 🤔

Shunday qilib, sizga kerak bo'lgan yagona narsa yaxshi chiqishni yaratish uchun kirishni qanday o'zgartirish kerakligini aytadi. Biroq, bunday modelni qanday tayyorlash mumkin?

Siz MNIST ga shovqin qo'shish orqali sintetik ma'lumotlarni yaratishingiz mumkin, ammohar bir rasmga ehtimollik belgilash qiyin va o'zboshimchalik bo'ladi.

Agar boshqa narsa qilsangiz nima bo'ladi?

Agar siz neyron tarmog'ini qancha shovqin qo'shilganini taxmin qilish uchun o'rgatsangiz nima bo'ladi? Keyin tasvirdan shovqinni olib tashlashingiz va qo'lda yozilgan raqamni olishingiz mumkin.

Buning uchun foydalaniladigan neyron tarmoq U-Net deb ataladi va barqaror diffuziyaning birinchi komponentidir.

Samarali trening

Aslida, biz 28 * 28 raqam bilan ishlamaymiz. Biz kattaroq RGB tasvirlar ustida mashq qilamiz. Agar biz 512 * 512 * 3 rasm o'lchamini hisobga olsak, bu 786 432 piksel.

Millionlab bunday RGB tasvirlari bilan mashq qilish juda ko'p resurslarni talab qiladi. Buni qanday qilib samaraliroq qilishimiz mumkin?

Bu erda VAE (variatsion avtokodlovchi) kiradi.

VAElar kirish va chiqish bilan bir xil tasvirni oladi va tasvirning siqilgan tasvirini o'rganishga harakat qiladi. O'qitilgan VAE kodlovchi va dekoderga bo'linishi mumkin.

Endi biz kiritilgan barcha tasvirlarni latents ga kodlashimiz mumkin. U-Net tarmog'imizni o'rgatish uchun biz ushbu latentlarga shovqin qo'shishimiz mumkin. Nihoyat, biz shovqinli latentlardan shovqinni olib tashlashimiz va chiqish tasvirini olish uchun ularni dekoder bilan dekodlashimiz mumkin.

Ko'rsatma qo'shish

Hozirgacha biz U-Net qanday tasvirlarni yaratishi mumkinligini ko'rdik. Keyinchalik, qaysi tasvirni yaratish kerakligini aytishimiz kerak.

To'g'ri tasvirni yaratish bo'yicha ko'rsatmalar berishimiz kerak.

MNIST misolimiz uchun biz “3” raqamini bir marta kodlashimiz, uni “3” tasviri bilan birlashtirishimiz va uni U-Net-ga uzatishimiz mumkin.

Umumiy maqsadli yechim uchun bizga tasvirni aks ettiruvchi taklifimiz uchun o'rnatish kerak.

Buning uchun "taglavhalar bilan tasvirlar" ma'lumotlar to'plami va yangi model kerak.

Biz rasmlarni internetdan yuklab olishimiz va ularning alt tegidan ushbu rasmga sarlavha sifatida foydalanishimiz mumkin. Masalan,

<img src="img.jpg" alt="Cat wearing sunglasses" width="500" height="600">

Tegishli o'rnatishlarni olish uchun biz har bir caption kombinatsiyasini har bir image bilan matn va tasvir kodlovchilarimiz orqali o'tkazamiz.

Keyin biz ushbu o'rnatishlarning nuqta mahsulotini olishimiz, ularni jamlashimiz va matritsada saqlashimiz mumkin.

Bizning yo'qotish funktsiyamiz diagonalni maksimal darajada oshirish va qolgan hamma narsani, ya'ni tasvirni minimallashtirishdan iborat bo'ladi va unga mos keladigan sarlavha shunga o'xshash joylashtirishlarga ega bo'lishi kerak.

Ushbu yo'qotish funktsiyasi kontrastli yo'qotish (CL) deb nomlanadi va model CLIP (kontrastiv til-tasvirdan oldingi trening) sifatida tanilgan.

O'qitilgandan so'ng, biz barqaror diffuziya modelimiz uchun text_encoder dan foydalanishimiz mumkin.

Rejalashtiruvchi

Barqaror diffuziyaning yakuniy komponenti rejalashtiruvchi deb nomlanadi.

Biz mini-to'plamlarimizga turli darajadagi shovqinlarni qo'shganimiz sababli, buning uchun shovqin jadvalini yaratishimiz mumkin.

Xulosa qilishda biz tasodifiy shovqindan boshlaymiz va model yakuniy natijani yaratishga ishonch hosil qilmaguncha kiritilgan ma'lumotlarni yangilash uchun kichik qadamlar qo'yamiz.

Hammasini bir joyga qo'yish

Bo'ldi shu. Bu barqaror diffuziya quvur liniyasi.

Quvur liniyasi haqiqatan ham ko'p qirrali bo'lib, siz tanlagan mahsulotni yaratish uchun juda ko'p parametrlarni beradi.

  • Shovqin o'rniga siz tanlagan dastlabki tasvirdan boshlashingiz mumkin.
  • Tasvirdan narsalarni olib tashlash uchun salbiy taklif qo'shishingiz mumkin.
  • Modelga ko'rsatmaga qanchalik e'tibor qaratish kerakligini aytish uchun guidance_scale dan o'tishingiz mumkin
  • Siz uni o'zingizning rasmingiz belgisi bilan yaxshi sozlashingiz mumkin
  • ... va yana ko'p

Maqolaning oxiri

Bu ajoyib maqola. Nashr etish tugmasini bosing. Siz yengil nafas olasiz. Keyingi bir necha oy qiziqarli bo'ladi :)

~ baxtli o'rganish

Adabiyotlar:

  • "9-dars: Barqaror tarqalish uchun chuqur o'rganish asoslari, 2022"