Приложение на невронни мрежи в незаменим токен NFT

   Хората създават художествени произведения почти откакто съществуваме. С развитието на технологиите се е развил и начинът, по който артистите се изразяват. През 20-ти век изобретяването на компютрите отключи почти неограничени потенциални нови пътища за изследване на художниците. През 21 век начинът, по който изкуството се притежава, гледа и споделя, също се развива. Нашият проект ще прилага невронни мрежи за иновации на нови начини за генериране на изкуство, докато изследва променящите се форми на собственост върху изкуството.

NFT

Иновациите върху основата, създадена от биткойните на Сатоши Накамото, блокчейните бяха разработени да бъдат повече от просто алтернативна валута. През 2010 г. незаменимите токени (NFT) се появиха като уникални и невзаимозаменяеми единици от данни, съхранявани в цифров регистър (блокчейн). NFT се съхраняват в блокчейн, така че да има споделена публична книга, която предоставя доказателство за собственост. Блокчейнът също така предоставя функционалността за лесно прехвърляне на собственост върху NFT. NFT са важни, защото за разлика от повечето цифрови снимки, които могат да се възпроизвеждат безкрайно, NFT предоставят начин за лесно идентифициране на собствеността върху произведение на цифровото изкуство.

CryptoPunks

Дигиталното изкуство е един от първоначалните случаи на използване на NFT, тъй като те могат лесно да бъдат вградени в блокчейна. Една от най-популярните и високо ценени NFT колекции е CryptoPunks. CryptoPunks са вдъхновени от лондонските пънк сцени и киберпънк движението. Има 10 000 уникални токена CryptoPunk, като някои се продават за много милиони долари. CryptoPunks варират по стойност въз основа на някои от техните уникални атрибути, които се смесват и съпоставят, за да се създаде всеки CryptoPunk. Например, типът тяло „Извънземно“ се счита за един от най-редките, като само 9/10 000 от изображенията съдържат този тип тяло. Използвайки невронни мрежи и задълбочено обучение, нашият проект ще изследва начини за генериране на ново изкуство. По-конкретно, ние ще използваме General Adversarial Networks (GANs), за да генерираме изкуство в стил CryptoPunk. Освен това ще използваме трансфер на стил, за да създадем снимки на хора в стил CryptoPunk.

Данни

За да започнем нашия проект, ни трябваше достъп до цялата библиотека от CryptoPunk NFT. OpenSea е един от най-популярните сайтове за търг на NFT колекции. Използвахме техния отворен API, за да изтеглим всичките 10 000 изображения в NFT колекцията. За да бъде ясно, изтеглянето на изображение на NFT не означава, че вече го притежавате, понеже това би изисквало прехвърляне на актива в блокчейна. Това, което направихме, е по-скоро като снимане на произведение на изкуството. Изтриването на данните беше сравнително лесно, като OpenSea API беше невероятно лесен за работа. Кодът за скрепера може да бъде намерен в хранилището на GitHub под името download_images.py

Какво е генеративна състезателна мрежа

GAN са рамка за машинно обучение, която се състои от две невронни мрежи, наричани генеративна мрежа и дискриминативна мрежа, които по същество играят игра с нулева сума. Генеративната мрежа се научава да картографира от латентно пространство към разпространение на данни - в този случай изображение - опитвайки се да имитира конкретни точки от данни. Преди моделът да бъде обучен, генериращата мрежа произвежда изображения на шум. Дискриминаторът взема изображението от генеративния модел и от набора от данни и се опитва да различи кое е реално и кое идва от генератора. Загубата при обучение се изчислява въз основа на способността на дискриминатора да определи точно кои изображения са реални и след това се използва в последователност на обратно разпространение през двете мрежи.

Предварителна обработка на данни

След това трябваше да форматираме данните, за да можем да ги приложим към нашия GAN. По-долу взехме директорията с изображения и използвахме Keras, за да създадем обекти на TensorFlow BatchDatset, които могат да се използват за валидиране и обучение. Ние също така нормализирахме стойностите на пикселите на нашите CryptoPunk изображения да бъдат между -1 и 1, за да съответстват на модела на генератора.'

Модел на генератора

Генеративният модел или генераторът има уникална архитектура, като основно започва с изображения с ниска разделителна способност и бавно ги увеличава (в този случай с коефициент 2), като същевременно прилага научените тегла и отклонения. Нашият генератор извежда 32x32 RGB изображение, оттук и формата на крайния Conv2D слой (32x32x3). Нашият генератор се състоеше от следната архитектура.

Архитектура на генератора

Потвърдихме, че генераторът работи чрез преминаване през вектор от шум с дезактивирано обучение, за да получим тази картина, което се очакваше (т.е. 32x32 RGB изображение с шум).

Модел на дискриминатор

Дискриминаторният модел е архитектурно по-опростен от генеративния модел. Моделът на дискриминатора работи, като прекарва изображението през два Conv2D конволюционни слоя и завършва на 1 невронен плътен слой, който извежда вероятността изображението да е истинско изображение. Дискриминаторът се състоеше от следната архитектура:

Обучение на модела

Обучението на модела е доста лесно. За всяка епоха преминаваме през всички изображения в набора от данни за обучение на партиди. За всяко изображение от всяка партида предаваме на генератора шумов вектор, който той използва, за да създаде изображение. След това сравняваме изхода на генератора с реалното изображение в дискриминатора. След това загубата от дискриминатора се добавя към GradientTape, който се прилага както към дискриминатора, така и към генератора (и двата използват кръстосана ентропия, макар и в различни форми) след всяка партида. Ние обучихме модела три различни пъти, използвайки различен брой епохи. Първо тренирахме 60, след това 150 и накрая 200 епохи. Общото време за обучение на модела беше съответно приблизително 30, 85 и 160 минути.

CryptoGIF файлове

След всяка епоха запазвахме партида изображения от модела, за да се използва за създаване на GIF на представянето на модела, докато се обучаваше. GIF беше завладяващ, тъй като ни позволи да видим напредъка на модела от шум към много разпознаваеми изображения. Едно интересно нещо, което трябва да се отбележи за GIF файловете, е, че докато генераторът бързо научи формите на лицата на CryptoPunks, които всички са много сходни, аксесоарите и другите атрибути, като пура или различни прически, станаха по-скоро замъглени, защото те характеристиките се различават толкова много по форма и цвят. Следователно в GIF файловете понякога можете да видите как пурите избледняват и избледняват през редица епохи. Може също да видите мътни цветни облаци около главите на CryptoPunks, които изглежда идват от голямото разнообразие от прически, използвани в CryptoPunks.

Трансфер на невронен стил

За следващата част от нашия проект внедрихме трансфер на невронни стилове, където можем да правим изображения на реални хора и след това да създаваме тяхна версия в стил CryptoPunk. Трансферът на невронен стил взема две изображения — изображение на съдържание и референтно изображение на стил — и ги смесва заедно, така че изходното изображение да е изображението на съдържанието в стила на референтното изображение.

Данни

В случай на Neural Style Transfer, имате нужда от два различни набора от данни, както беше споменато по-горе. В този проект използвахме библиотеката CryptoPunk, която вече бяхме създали, в допълнение към набора от данни TensorFlow „aflw2k3d“, който включваше голям брой човешки лица и е публично достъпен.

Предварителна обработка

Първата ни цел, когато се стигна до обработката на тези набори от данни, беше да ги постигнем в еднакъв размер. Имахме няколко проблема с това през цялото време, но в крайна сметка се спряхме на мащабиране на първоначалните 450x450 пиксела лица до 50x50 и след това грабване на 32x32 изрязване на случаен принцип от това. Това съответства на оптималната разделителна способност за CryptoPunk при 32x32. Наборът от данни за лица също премина през произволна предварителна обработка, като произволни обръщания и гореспоменатите култури за промяна на набора от данни. По отношение на предварителната обработка и за двата набора от данни, ние първо нормализирахме стойностите на RGB каналите да бъдат между -1 и 1. Ние също преоразмерихме изображенията на CryptoPunk от 336x336x3 на 32x32x3, което поради пикселизираната природа на CryptoPunks доведе до почти никаква загуба в разделителна способност, като същевременно драстично подобрява ефективността на изпълнение. Ние също изтеглихме предварително двата набора от данни, за да ускорим обучението, като запазихме буфери на данните в RAM. В крайна сметка визуализирахме и двата ни набора от данни с помощта на matplotlib. Въпреки че наборите от данни може да изглеждат с различни размери, стъпките за предварителна обработка се извършват след визуализацията и преди обучението на модела.

Модел CycleGAN

CycleGAN е модел, който се използва за постигане на превод от изображение към изображение. Проблемът с това е, че обикновено изучаването на картографирането между входно изображение и изходно изображение се извършва с помощта на обучителен набор от „подравнени двойки изображения“. За съжаление, намирането на сдвоени примери не винаги е лесно. Добрата новина е, че CycleGAN може да научи това картографиране, без да изисква сдвоени входно-изходни изображения, използвайки последователни на цикъла състезателни мрежи.

Модели на генератор и дискриминатор

По същество моделът CycleGAN работи като такъв. GAN взема реално изображение (в този случай на лица) и се опитва да го пресъздаде, но в стила на набора от стилови данни (в този случай CryptoPunks). След това генерираното изображение се предава през друг GAN, но този път „в обратна посока“, за да се опита да пресъздаде оригиналното изображение. Тази стъпка се изпълнява, за да се гарантира, че детайлите от оригиналното изображение (т.е. лицата) не се отклоняват твърде много. Генерираното изображение също се предава през дискриминатор с изображение в набора от стилови данни (т.е. CryptoPunks), за да се гарантира, че работи към този стил. По този начин, по същество, CycleGAN се опитва да върви по тънката линия между това да остане достатъчно близо до детайлите на оригиналното изображение, докато се приближава все по-близо и по-близо до стиловите изображения.

Моделите на генератора и дискриминатора са подобни на тези в обикновения GAN, описан по-горе, с изключение на много по-сложни архитектури. Докато генераторът в обикновения GAN съдържа само слоеве Dense, Conv2D, Batch_normalization, LeakyReLU и Reshape, моделът на генератор CycleGAN също съдържа слоеве add, instance_normalization, activation_padding и ReflectionPadding. Генераторът също така съдържа повече Conv2D слоеве от типичния GAN. На подобен токен моделът на дискриминатор CycleGAN добавя слоеве instance_normalization, както и друг слой Conv2D. В крайна сметка генераторите и дискриминаторите работят подобно на тези в нормалния GAN, описан по-горе, и играят „игра с нулева сума“ помежду си, за да подмамят дискриминатора да повярва, че генерираното изображение е реално.

Обучение на модела

За CycleGAN е необходимо да се изчислят различни категории загуби за генераторите и дискриминаторите. В нашите модели първото нещо, което направихме, беше да прекараме реални изображения през нашите генераторни мрежи, за да произведем генерираните изображения. След това предадохме генерираните изображения обратно на генераторите, за да проверим дали сме в състояние да предвидим оригиналното изображение от генерираното изображение.

След това трябваше да създадем картографиране на идентичността на реалните изображения с помощта на генераторите. Следващата стъпка беше да предадем нашите генерирани изображения в дискриминаторите. След това изчислихме общата загуба на генератора (противопоставяне + цикъл + идентичност), както и загубата на дискриминатора, и използвахме това, за да актуализираме теглата на генераторите и теглата на дискриминаторите. Накрая връщаме загубите в речник.

Заключение

Като цяло открихме, че нашият проект CycleGAN е много по-успешен, отколкото първоначално си представяхме. Изображенията от двата набора от данни не могат да бъдат по-различни: наборът от данни за лица е пикселизирани битове от реални човешки лица, а CryptoPunks са хипер-карикатурни пикселизирани изображения на хуманоиди. Въпреки това открихме някои изненадващи резултати. Например, един от гореспоменатите атрибути, които CryptoPunk може да има, е превръзка на окото. Когато моделът видя жена, чиято коса частично покриваше окото й, това даде на съответния генериран CryptoPunk превръзка върху същото око. Забелязахме и фантастично подобрение между епохите на обучение. Докато генерираните CryptoPunks в първата епоха бяха основно размазани, само от епоха трета там ясно имаше CryptoPunk, въпреки че беше сравнително аморфен и изглежда не знаеше какво да прави с характеристиките на човешкия образ.

В същия край открихме, че на много от генерираните CryptoPunk изображения просто им беше трудно да намерят щастливата среда между двата домейна, от които са генерирани. В крайна сметка успяхме да създадем някои много интересни, макар и понякога страшни изображения, като същевременно научихме много за AI и блокчейн.

Кодът за скрепера може да бъде намерен в хранилището на GitHub под името download_images.py.

 

Източници:

https://cointelegraph.com/bitcoin-for-beginners/who-is-satoshi-nakamoto-the-creator-of-bitcoin

https://www.christies.com/features/10-things-to-know-about-CryptoPunks-11569-1.aspx

https://machinelearningmastery.com/what-are-generative-adversarial-networks-gans/

https://blog.paperspace.com/super-resolution-generative-adversarial-networks/

https://towardsdatascience.com/applied-deep-learning-part-4-convolutional-neural-networks-584bc134c1e2

https://subscription.packtpub.com/book/data/9781788996839/11/ch11lvl1sec80/defining-the-discriminator-model

https://www.oreilly.com/library/view/generative-deep-learning/9781492041931/ch04.html

https://news.bitcoin.com/cryptocurrency-gifs-animations-that-capture-the-mood-of-the-markets/

https://www.v7labs.com/blog/neural-style-transfer

https://machinelearningmastery.com/what-is-cyclegan/

https://medium.com/analytics-vidhya/building-and-training-a-convolution-gan-with-keras-9e88cd348243

 

 

Автор: инж. Евгени Нончев

Препоръчваме още:

Как работят алгоритмите на Facebook, Instagram и TikTok Как работят алгоритмите на Facebook, Instagram и TikTok Прочети повече
Интервю в списание Forbes Интервю в списание Forbes Прочети повече
Най-добрите стратегии за ефективно SEO на онлайн магазин Най-добрите стратегии за ефективно SEO на онлайн магазин Прочети повече
нагоре