Tasvirlarni siqish uchun AIdan foydalanish

Tasvirlarni siqish uchun AIdan foydalanish
Neyron tarmoqlar kabi ma'lumotlarga asoslangan algoritmlar dunyoni bo'ron bilan qamrab oldi. Ularning rivojlanishi bir necha sabablarga ko'ra, jumladan arzon va kuchli uskunalar va katta hajmdagi ma'lumotlar bilan bog'liq. Neyron tarmoqlar hozirda tasvirni aniqlash, tabiiy tilni tushunish va hokazo kabi "kognitiv" vazifalar bilan bog'liq bo'lgan hamma narsada birinchi o'rinda turadi. Lekin ular bunday vazifalar bilan cheklanib qolmasligi kerak. Ushbu maqola qoldiq o'rganishdan foydalangan holda neyron tarmoqlar yordamida tasvirlarni qanday siqish haqida gapiradi. Maqolada keltirilgan yondashuv standart kodeklarga qaraganda tezroq va yaxshiroq. Sxemalar, tenglamalar va, albatta, kesma ostidagi testlar bilan jadval.

Ushbu maqolaga asoslanadi bu ish. Siz neyron tarmoqlar va ularning tushunchalari bilan tanishsiz deb taxmin qilinadi. konvolyutsiya и yo'qotish funktsiyasi.

Tasvirni siqish nima va u qanday ishlaydi?

Rasmni siqish - bu tasvirni kamroq joy egallashi uchun aylantirish jarayoni. Tasvirlarni shunchaki saqlash juda ko'p joy egallaydi, shuning uchun JPEG va PNG kabi asl tasvir hajmini kamaytirishga qaratilgan kodeklar mavjud.

Ma'lumki, tasvirni siqishning ikki turi mavjud: yo'qotish yo'q и yo'qotishlar bilan. Nomlardan ko'rinib turibdiki, yo'qotishsiz siqish asl tasvir ma'lumotlarini saqlab qolishi mumkin, yo'qolgan siqish esa siqish paytida ba'zi ma'lumotlarni yo'qotadi. Masalan, JPG yo'qolgan algoritmlardir [taxminan. tarjima. - asosan, yo'qotishsiz JPEG haqida ham unutmaylik], va PNG yo'qotishsiz algoritmdir.

Tasvirlarni siqish uchun AIdan foydalanish
Yo'qotishsiz va yo'qolgan siqishni solishtirish

E'tibor bering, o'ngdagi rasmda juda ko'p blokli artefaktlar mavjud. Bu yo'qolgan ma'lumot. O'xshash rangdagi qo'shni piksellar joyni tejash uchun yagona maydon sifatida siqiladi, ammo haqiqiy piksellar haqidagi ma'lumotlar yo'qoladi. Albatta, JPEG, PNG va boshqalar kodeklarida ishlatiladigan algoritmlar ancha murakkab, ammo bu yo'qotishli siqishni yaxshi intuitiv misoldir. Yo'qotmasdan siqish yaxshi, lekin yo'qotishsiz siqilgan fayllar diskda juda ko'p joy egallaydi. Ko'p ma'lumotni yo'qotmasdan tasvirlarni siqishning yaxshiroq usullari mavjud, ammo ular juda sekin va ko'pchilik iterativ yondashuvlardan foydalanadi. Bu shuni anglatadiki, ularni bir nechta CPU yoki GPU yadrolarida parallel ravishda ishga tushirish mumkin emas. Ushbu cheklov ularni kundalik foydalanishda mutlaqo amaliy bo'lmaydi.

Konvolyutsion neyron tarmoq kiritish

Agar biror narsani hisoblash kerak bo'lsa va hisob-kitoblar taxminiy bo'lishi mumkin bo'lsa, qo'shing neyron tarmoq. Mualliflar tasvirni siqishni yaxshilash uchun juda standart konvolyutsion neyron tarmog'idan foydalanganlar. Taqdim etilgan usul nafaqat eng yaxshi echimlar bilan teng ishlaydi (agar yaxshiroq bo'lmasa), u parallel hisoblashdan ham foydalanishi mumkin, bu esa tezlikni keskin oshirishga olib keladi. Sababi shundaki, konvolyutsion neyron tarmoqlari (CNN) tasvirlardan fazoviy ma'lumotni olishda juda yaxshi, ular keyinchalik ixchamroq shaklda taqdim etiladi (masalan, tasvirning faqat "muhim" bitlari saqlanadi). Mualliflar tasvirlarni yaxshiroq aks ettirish uchun ushbu CNN qobiliyatidan foydalanishni xohlashdi.

arxitektura

Mualliflar ikki tomonlama tarmoqni taklif qilishdi. Birinchi tarmoq kirish sifatida tasvirni oladi va ixcham vakillikni yaratadi (ComCNN). Ushbu tarmoqning chiqishi standart kodek (masalan, JPEG) tomonidan qayta ishlanadi. Kodek tomonidan qayta ishlanganidan so'ng, tasvir ikkinchi tarmoqqa uzatiladi, u asl tasvirni qaytarish uchun kodekdan tasvirni "tuzatadi". Mualliflar ushbu tarmoqni Rekonstruktiv CNN (RecCNN) deb nomladilar. GANlar singari, ikkala tarmoq ham iterativ tarzda o'qitiladi.

Tasvirlarni siqish uchun AIdan foydalanish
ComCNN Compact taqdimoti standart kodekga uzatiladi

Tasvirlarni siqish uchun AIdan foydalanish
RecCNN. ComCNN chiqishi kengaytiriladi va qolgan qismini o'rganishga harakat qiladigan RecCNN-ga beriladi

Kodek chiqishi kattalashtiriladi va keyin RecCNN ga uzatiladi. RecCNN tasvirni iloji boricha asliga yaqinroq ko‘rsatishga harakat qiladi.

Tasvirlarni siqish uchun AIdan foydalanish
Tasvirni oxirigacha siqish ramkasi. Co(.) tasvirni siqish algoritmidir. Mualliflar JPEG, JPEG2000 va BPG dan foydalanganlar

Qolgan narsa nima?

Qolganlarini kodek tomonidan dekodlanayotgan tasvirni "yaxshilash" uchun qayta ishlashdan keyingi qadam sifatida qarash mumkin. Dunyo haqida juda ko'p "ma'lumotlarga" ega bo'lgan neyron tarmoq nimani tuzatish kerakligi haqida kognitiv qarorlar qabul qilishi mumkin. Bu fikrga asoslanadi qoldiq o'rganish, mumkin bo'lgan tafsilotlarni o'qing shu yerda.

Yo'qotish funktsiyalari

Ikki yo'qotish funktsiyasidan foydalaniladi, chunki bizda ikkita neyron tarmoq mavjud. Ulardan birinchisi, ComCNN, L1 deb etiketlanadi va quyidagicha aniqlanadi:

Tasvirlarni siqish uchun AIdan foydalanish
ComCNN uchun yo'qotish funktsiyasi

Izoh

Bu tenglama murakkab ko'rinishi mumkin, lekin bu aslida standart (o'rtacha kvadrat xatosi) MSE. ||² ular qamrab olgan vektor normasini bildiradi.

Tasvirlarni siqish uchun AIdan foydalanish
Tenglama 1.1

Cr ComCNN chiqishini bildiradi. th ComCNN parametrlarining o'rganilishini bildiradi, XK - kirish tasviri

Tasvirlarni siqish uchun AIdan foydalanish
Tenglama 1.2

Re() RecCNN uchun qisqartma. Bu tenglama oddiygina 1.1 tenglamaning ma'nosini RecCNN ga etkazadi. th RecCNN o'rgatiladigan parametrlarini bildiradi (yuqoridagi shlyapa parametrlar o'rnatilganligini bildiradi).

Intuitiv ta'rif

Tenglama 1.0 ComCNN o'z vaznlarini o'zgartirishga olib keladi, shunda RecCNN bilan qayta yaratilganda yakuniy tasvir kirish tasviriga imkon qadar o'xshash ko'rinadi. Ikkinchi RecCNN yo'qotish funktsiyasi quyidagicha aniqlanadi:

Tasvirlarni siqish uchun AIdan foydalanish
Tenglama 2.0

Izoh

Shunga qaramay, funktsiya murakkab ko'rinishi mumkin, ammo bu ko'pincha standart neyron tarmog'ini yo'qotish funktsiyasi (MSE).

Tasvirlarni siqish uchun AIdan foydalanish
Tenglama 2.1

Co() kodek chiqishini bildiradi, tepada shlyapa bilan x ComCNN chiqishini bildiradi. th2 - RecCNN o'rgatiladigan parametrlar, res() faqat RecCNN ning qoldiq chiqishi. Shuni ta'kidlash kerakki, RecCNN Co() va kirish tasviri o'rtasidagi farqni o'rganadi, lekin kirish tasvirida emas.

Intuitiv ta'rif

Tenglama 2.0 RecCNN o'z vaznlarini o'zgartirishga olib keladi, shunda chiqish kirish tasviriga imkon qadar o'xshash ko'rinadi.

Trening sxemasi

Modellar iterativ tarzda o'qitiladi, masalan GAN. Birinchi modelning og'irliklari ikkinchi modelning og'irliklari yangilanayotganda, so'ngra ikkinchi modelning og'irliklari birinchi modelni o'rgatish paytida o'rnatiladi.

Sinovlar

Mualliflar o'z usullarini mavjud usullar, jumladan, oddiy kodeklar bilan solishtirgan. Tegishli uskunada yuqori tezlikni saqlab, ularning usuli boshqalarga qaraganda yaxshiroq ishlaydi. Bundan tashqari, mualliflar ikkita tarmoqdan faqat bittasini ishlatishga harakat qilishdi va ishlashning pasayishini qayd etdilar.

Tasvirlarni siqish uchun AIdan foydalanish
Strukturaviy o'xshashlik indeksini taqqoslash (SSIM). Yuqori qiymatlar asl nusxaga yaxshiroq o'xshashlikni ko'rsatadi. Qalin shrift mualliflar ishining natijasini bildiradi

xulosa

Biz tasvirni siqishda chuqur o‘rganishni qo‘llashning yangi usulini ko‘rib chiqdik va tasvirlarni tasniflash va tilni qayta ishlash kabi “umumiy” vazifalardan tashqari vazifalarda neyron tarmoqlardan foydalanish imkoniyatlari haqida gaplashdik. Bu usul nafaqat zamonaviy talablardan kam emas, balki tasvirlarni ancha tezroq qayta ishlash imkonini beradi.

Neyron tarmoqlarni o'rganish osonroq bo'ldi, chunki biz ayniqsa Habravchan uchun promo-kod yaratdik HABR, bannerda ko'rsatilgan chegirmaga qo'shimcha 10% chegirma berish.

Tasvirlarni siqish uchun AIdan foydalanish

Ko'proq kurslar

Tavsiya etilgan maqolalar

Manba: www.habr.com

a Izoh qo'shish