Установка и использование нейронок Real-ESRGAN и GFPGAN

Real-ESRGAN GFPGAN установка использование

Для того чтобы не очень удачное фото могло заиграть новыми яркими красками, приходится долго редактировать его в Photoshop или использовать возможности нейронных сетей. Сегодня мы создадим виртуальную машину VirtualBox с ОС Lubuntu 16.04, установим и запустим на ней нейронки Real-ESRGAN и GFPGAN и с их помощью дадим вторую жизнь старым фотографиям.

Установка и использование Real-ESRGAN и GFPGAN

В новых версиях Real-ESRGAN и GFPGAN нет особых требований к видеокартам ( однако поддержка Nvidia CUDA не помешает), и они могут работать на вполне обычном «железе». Для обработки фотографий с помощью этих инструментов ваш компьютер должен соответствовать перечисленным ниже требованиям:

  • он должен работать под управлением 64-разрядной версии Linux не ниже Ubuntu 16.04;
  • иметь не менее 768 МБ реально свободной оперативы, не используемой ни видеоадаптером, ни ОС;
  • свободное дисковое пространство не менее 15 ГБ.

Операционная система

У вас 32-разрядная Windows? Ничего страшного, безвыходных ситуаций нет! Кто сказал, что компьютер нельзя виртуализировать? Установите гипервизор VirtualBox, создайте в нем виртуальную машину и не забудьте указать в ее настройках следующие параметры:

  • ОС: Linux/Ubuntu (64 бит);
  • Объем оперативной памяти: 1024 Мбайт (не менее, лучше больше);
  • Дисковое пространство: 20 Гбайт
  • Настройка сетевого адаптера: NAT (с выходом в Интернет).

Последнюю версию VirtualBox для 32-разрядной Windows можно скачать по этой ссылке.

Следует помнить, что для того чтобы установить 64-разрядную гостевую операционную систему, нужно, чтобы процессор на вашем компьютере был 64-разрядным и поддерживал аппаратную виртуализацию Intel VT-x или AMD-V.

РЕКОМЕНДУЕМ:
Как обмануть нейронную сеть

Не каждый дистрибутив Linux подойдет для виртуальной машины с достаточно скромными параметрами. Так, версия Ubuntu с 1 ГБ ОЗУ не сможет запустить даже программу установки. Кроме того, мы не можем тратить оперативную память на украшение рабочего стола, каждый мегабайт ОЗУ нужен для выполнения основной задачи. Мне по производительности больше всего понравился Bodhi Linux 4.5, дистрибутив на базе Ubuntu 16.04, с облегченным рабочим столом Moksha. Но у него есть свои заморочки с установкой и настройкой, поэтому, возможно, вам будет проще использовать Lubuntu 16.04, вариант Ubuntu с рабочим столом LXDE. Я его тоже опробовал, он вполне подходит для решения наших задач.

По этой ссылке можно скачать образ диска с 64-битным дистрибутивом Lubuntu 16.04.

Уверен, что с установкой вы справитесь самостоятельно. После установки не забудьте обновить содержимое репозитория:

Если вы планируете использовать машину не только в качестве увеличителя фотографий, то можно обновить установленное ПО:

Но для реализации наших целей данный этап не обязателен.

Итак, теперь у вас есть 64-разрядная ОС Linux. Давайте начнем устанавливать на нее прикладные программы. Чтобы вам было легче в последующих шагах, я в общих чертах описал, что должно получиться в итоге.

GFPGAN Real-ESRGAN установка использование

На этом рисунке черным цветом выделены каталоги, зеленым — главные исполняемые файлы и сценарии, голубым — символические ссылки, синим — файлы данных. Серым выделены рабочие каталоги, которые, вообще говоря, можно создавать по своему усмотрению. Обратите внимание, что вся структура файлов находится в каталоге пользователя, поэтому для ее создания не требуется специальных привилегий.

Среда выполнения

Для работы Real-ESRGAN и GFPGAN требуется версия Python не ниже 3.7. Если ваш компьютер удовлетворяет этому требованию, то данный раздел можно пропустить. Но если вы хотите собрать целый программный комплекс, чтобы потом быстро развернуть его на различных дистрибутивах Linux, то я предлагаю не отвлекаться и следовать описанным здесь шагам.

К примеру, Ubuntu 16.04 идет с Python 3.5, который в значительной степени интегрирован с ОС, и изменение версии может привести к неприятным последствиям. Поэтому давайте соберем Python 3.8 и установим его в качестве отдельного пользовательского интерпретатора, не затрагивающего системный интерпретатор.

Сна­чала уста­новите из репози­тори­ев допол­нитель­ные пакеты, которые нуж­ны для сбор­ки интер­пре­тато­ра и его допол­нений, в соот­ветс­твии с ре­комен­даци­ями раз­работ­чиков для тво­ей вер­сии опе­раци­онной сис­темы. Для Ubuntu 16.04 это мож­но выпол­нить сле­дующей коман­дой:

Из сети будет заг­ружено 63,5 Мбайт архи­вов. В более новых вер­сиях в этот спи­сок надо добавить пакет libgdbm-compat-dev.

За­тем заг­рузи с офи­циаль­ного сай­та исходные тек­сты интер­пре­тато­ра (26 Мбайт) и рас­пакуй их:

По­том скон­фигури­руй их для уста­нов­ки интер­пре­тато­ра в поль­зователь­ский каталог ~/.local, ском­пилируй и выпол­ни уста­нов­ку:

Про­верь, как прош­ла уста­нов­ка:

Ес­ли всё в поряд­ке, можешь уда­лить исходные тек­сты интер­пре­тато­ра и рабочие фай­лы:

В дис­три­бути­вах Ubuntu путь ~/.local/bin при­сутс­тву­ет в перемен­ной окру­жения PATH и явля­ется при­ори­тет­ным. Поэто­му запус­кать интер­пре­татор мож­но без ука­зания путево­го пре­фик­са. В иных слу­чаях мож­но либо добавить ука­зан­ный путь в начало зна­чения перемен­ной PATH, либо запус­кать исполня­емые фай­лы по пол­ному име­ни: ~/.local/bin/python3.8, ~/.local/bin/pip3.8. В даль­нейшем изло­жении будет исполь­зовать­ся сок­ращен­ный вари­ант, а ты раз­берись, какой тре­бует­ся в тво­ей опе­раци­онной сис­теме, и дей­ствуй соот­ветс­твен­но.

Нуж­ная вер­сия Python теперь тоже в наличии. Но преж­де чем перехо­дить к уста­нов­ке основных прог­рамм «фото­уве­личи­теля», надо убе­дить­ся, что рабочей памяти компь­юте­ра для это­го дос­таточ­но. Узнать име­ющиеся ресур­сы мож­но с помощью такой коман­ды:

Сло­жи зна­чение в пос­ледней колон­ке стро­ки Mem (available) со зна­чени­ем в пос­ледней колон­ке стро­ки Swap (free). Если получи­лось боль­ше 2560 Мбайт (2,5 Гбайт), то сле­дующий раз­дел можешь про­пус­тить. В про­тив­ном слу­чае при­дет­ся уве­личить вир­туаль­ную память опе­раци­онной сис­темы.

Увеличение виртуальной памяти

Как ты зна­ешь, вир­туаль­ная память Linux пред­став­лена физичес­кой опе­ратив­ной памятью и памятью стра­нич­ной под­качки на внеш­нем носите­ле — выделен­ном раз­деле жес­тко­го дис­ка или в спе­циаль­ном swap-фай­ле. Если во вре­мя работы при­ложе­ния опе­ратив­ная память исчерпы­вает­ся, опе­раци­онная сис­тема задей­ству­ет механизм под­качки, переме­щая неис­поль­зуемые стра­ницы на внеш­ний носитель и заг­ружая с него стра­ницы c дан­ными, которым тре­бует­ся обра­бот­ка. Про­дол­житель­ную активную работу в таком режиме хорошо харак­теризу­ют сло­ва из пес­ни В. С. Высоц­кого: «это не езда, а ерзанье».

Но в нашем слу­чае уве­личе­ние и исполь­зование вир­туаль­ной памяти — оправдан­ный спо­соб решения пос­тавлен­ной задачи, и вот почему. При нас­трой­ке «фото­уве­личи­теля» я обна­ружил, что исчерпа­ние памяти воз­ника­ет в сле­дующих ситу­ациях:

  • при уста­нов­ке допол­нитель­ных модулей Python (о них речь пой­дет ниже), ког­да прог­рамма pip исполь­зует опе­ратив­ную память в качес­тве буфера и нет никаких проб­лем в том, что­бы поз­волить опе­раци­онной сис­теме
  • кеширо­вать заг­ружа­емые из сети дан­ные на диск;
  • при ини­циали­зации ней­рон­ных сетей и фор­мирова­нии фай­лов с резуль­татами работы, что явля­ется нез­начитель­ным фраг­ментом обще­го объ­ема работы.

Для основно­го про­цес­са обра­бот­ки изоб­ражений заяв­ленных 768 Мбайт сво­бод­ной опе­ратив­ной памяти впол­не дос­таточ­но.

При уста­нов­ке на вир­туаль­ную машину с 1024 Мбайт ОЗУ опе­раци­онной сис­темы Lubuntu 16.04 авто­мати­чес­ки соз­дает­ся раз­дел под­качки раз­мером око­ло гигабай­та. Для работы «фото­уве­личи­теля» это­го мало. Поэто­му соз­дадим swap-файл раз­мером 2048 Мбайт (2 Гбайт) и добавим его к име­ющей­ся вир­туаль­ной памяти (все коман­ды запус­каем от рута):

При­веден­ная выше пос­ледова­тель­ность команд начина­ется с отклю­чения памяти под­качки (swapoff), что­бы ее мож­но было без изме­нений выпол­нять на опе­раци­онных сис­темах, исполь­зующих не раз­дел, а файл под­качки /swapfile. Кста­ти, в этом слу­чае пос­ледняя коман­да сооб­щит об ошиб­ке swapon failed: Device or resource busy, пос­коль­ку файл под­качки уже будет задей­ство­ван пре­дыду­щей коман­дой. Про­кон­тро­лиро­вать, какие имен­но хра­нили­ща под­качки исполь­зуют­ся, мож­но с помощью коман­ды swapon без парамет­ров.

Нейросети «фотоувеличителя»

Про­екты GFPGAN и Real-ESRGAN исполь­зуют вспо­мога­тель­ные ресур­сы:

  • BasicSR, Basic Surer-resolution — прог­рам­мное обес­печение для вос­ста­нов­ления качес­тва фото- и виде­ома­тери­алов;
  • FaceXLib — реали­зации алго­рит­мов для работы с лицами людей на фотог­рафи­ях (обна­руже­ние, вырав­нивание, выделе­ние основных эле­мен­тов и про­чее).

За реали­зацию всей скуч­ной матема­тики ней­рон­ных сетей на цен­траль­ных и гра­фичес­ких про­цес­сорах отве­чает пакет PyTorch. Уста­новим эти вспо­мога­тель­ные пакеты Python:

Кеш исполь­зует­ся для того, что­бы заг­рузка пакетов не начина­лась заново, если по каким‑то при­чинам она будет прер­вана, а про­дол­жалась с мес­та оста­нов­ки.

Имей в виду, что BasicSR со все­ми сво­ими зависи­мос­тями занима­ет боль­ше 4 Гбайт и заг­рузка этих дан­ных из сети даже в сжа­том виде может пот­ребовать зна­читель­ного вре­мени.

Не исклю­чено пре­рыва­ние про­цес­са с сооб­щени­ем об ошиб­ке:

Это зна­чит, что надо вер­нуть­ся к пре­дыду­щему раз­делу и про­верить исполь­зование памяти. Воз­можно, ты перезаг­ружал компь­ютер и забыл сно­ва под­клю­чить файл под­качки.

По завер­шении уста­нов­ки вспо­мога­тель­ных пакетов содер­жимое катало­га ~/.local уве­личит­ся до 5 Гбайт, а в кеше ~/pipecache будет находить­ся 2,4 Гбайт дан­ных, которые теперь мож­но уда­лить:

Ус­тановим основное прог­рам­мное обес­печение GFPGAN и Real-ESRGAN пря­мо из Git-репози­тори­ев:

Это не зай­мет мно­го вре­мени, а пос­ле завер­шения уста­нов­ки в катало­ге ~/GAN появят­ся под­катало­ги GFPGAN и Real-ESRGAN, занима­ющие 25 и 24 Мбайт соот­ветс­твен­но.

Что­бы пре­дот­вра­тить в даль­нейшем уста­нов­ку допол­нитель­ного модуля Python и исполь­зовать уже име­ющиеся фай­лы, соз­дадим ссыл­ку на рабочий каталог gfpgan.

Те­перь давай нас­тро­им уста­нов­ленное прог­рам­мное обес­печение:

Пос­ледняя коман­да соз­дает в катало­ге Real-ESRGAN ссыл­ку, что­бы избе­жать дуб­лирова­ния весов моделей GFPGAN.

На этом уста­нов­ка и нас­трой­ка прог­рам­мно­го обес­печения «фото­уве­личи­теля» завер­шена. Оста­лось выпол­нить пос­ледний шаг под­готови­тель­ного эта­па — заг­рузить «модели», то есть веса ней­рон­ных сетей, заранее вычис­ленные в ходе их обу­чения. Если это­го не сде­лать, то при пер­вом исполь­зовании прог­рамм GFPGAN и Real-ESRGAN они будут заг­ружены авто­мати­чес­ки. Но мож­но сох­ранить кон­троль над про­цес­сом и вруч­ную выпол­нить сле­дующие коман­ды:

Будь вни­мате­лен при ука­зании пути к целево­му катало­гу. Если допус­тишь опе­чат­ку, wget без пре­дуп­режде­ния соз­даст новый под­каталог и выпол­нит заг­рузку дан­ных в него. Естес­твен­но, потом прог­рам­мное обес­печение «фото­уве­личи­теля» не смо­жет обна­ружить такой файл.

Фай­лы с весами для ней­рон­ных сетей GFPGAN и Real-ESRGAN име­ют сле­дующие раз­меры:

GFPGANv1.3.pth — 332 Мбайт;
detection_Resnet50_Final.pth — 104 Мбайт;
parsing_parsenet.pth — 81 Мбайт;
RealESRGAN_x4plus.pth — 64 Мбайт.

Борьба с прогрессом

Ка­залось бы, теперь‑то все готово к тому, что­бы занять­ся обра­бот­кой фотог­рафий. Дей­стви­тель­но, у меня нас­тро­енный по опи­сан­ной методи­ке «фото­уве­личи­тель» сра­зу же зарабо­тал. Но ког­да я через нес­коль­ко дней про­верял инс­трук­цию при работе над этой стать­ей, пов­торно выпол­няя все дей­ствия, меня под­жидал сюр­приз. Прог­рам­мное обес­печение GFPGAN отка­зыва­лось работать, сооб­щая об ошиб­ке:

Вот тебе на! Ока­залось, что, при­няв решение об исполь­зовании уста­рев­шей опе­раци­онной сис­темы, мы всту­пили на сколь­зкую дорож­ку. За эти нес­коль­ко дней Python-модуль google-auth, по какой‑то при­чине вхо­дящий в сос­тав зависи­мос­тей прог­рам­мно­го обес­печения «фото­уве­личи­теля», обно­вил­ся до вер­сии 2.0.5 и решил зап­ретить исполь­зование уста­рев­ших крип­тогра­фичес­ких про­токо­лов, под­няв тре­бова­ния к сис­темной биб­лиоте­ке OpenSSL. Но для Ubuntu 16.04 ожи­дать обновле­ний уже не при­ходит­ся.

Со­бирать эту биб­лиоте­ку из исходни­ков, как мы сде­лали с Python 3.8? Это, конеч­но, один из вари­антов. Но, если хорошень­ко подумать, зачем нам google-auth и сетевая безопас­ность на вир­туаль­ной машине, которая соз­давалась спе­циаль­но для локаль­ной обра­бот­ки фотог­рафий? Луч­ше пой­дем дру­гим путем и уста­новим уста­рев­ший модуль google-auth вер­сии 1.26.6:

Не будет работать google-auth? Не очень‑то и хотелось! Глав­ное, что сам «фото­уве­личи­тель» пос­ле это­го запус­кает­ся. Одна­ко как быть в даль­нейшем? Прог­ресс ведь не оста­новишь, и поезд с модуля­ми Python будет все даль­ше ухо­дить от Ubuntu 16.04. Поэто­му рекомен­дую тебе сох­ранить уста­нов­ленный набор прог­рамм в архи­ве GAN_U1604.tgz:

Имея сни­мок работа­юще­го вари­анта «фото­уве­личи­теля», тебе не сос­тавит тру­да при необ­ходимос­ти раз­вернуть его на све­жеус­танов­ленной вир­туаль­ной машине. Тем самым ты сбе­режешь себе не толь­ко нер­вы, но и вре­мя, необ­ходимое для заг­рузки дан­ных из сети и пос­леду­ющей нас­трой­куи

Обмен файлами с виртуалкой

Воз­можно, у тебя воз­ник воп­рос, как нас­тро­ить обмен фай­лов меж­ду вир­туаль­ной машиной и компь­юте­ром с гипер­визором. VirtualBox пред­лага­ет исполь­зовать допол­нение, проб­расыва­ющее пап­ки фай­ловой сис­темы компь­юте­ра в вир­туаль­ную машину. Но я пред­почитаю более уни­вер­саль­ный спо­соб — сетевой обмен по про­токо­лу FTP. Поч­ти любая опе­раци­онная сис­тема, уста­нов­ленная на вир­туаль­ной машине, содер­жит в сво­ем сос­таве тот или иной FTP-кли­ент, а под­нять на компь­юте­ре FTP-сер­вер и нас­тро­ить бран­дма­уэр — задача, которую нуж­но решить один раз. Кста­ти, я исполь­зую сер­вер, который реали­зует ути­лита «Швей­цар­ский фай­ловый нож», запус­кая его при необ­ходимос­ти:

В таком вари­анте исполь­зования сер­вер откры­вает пол­ный дос­туп к катало­гу D:\FTP при вво­де любого име­ни поль­зовате­ля и пароля, поэто­му пос­ле переда­чи фай­лов его работу нуж­но завер­шить ком­бинаци­ей кла­виш [Ctrl] + [C].

РЕКОМЕНДУЕМ:
DAN джейлбрейк ChatGPT

Кста­ти, не забудь перед переда­чей фай­лов перек­лючить в нас­трой­ках вир­туаль­ной машины сетевой адап­тер из режима «NAT» в режим «Вир­туаль­ный адап­тер хос­та».

Редактирование фотографий

Итак, все ингре­диен­ты соб­раны и сме­шаны, мож­но прис­тупать к вол­шебс­тву. Не откла­дывая дела в дол­гий ящик, сра­зу выпол­ним уве­личе­ние фотог­рафии с отсти­рыва­нием и раз­гла­жива­нием одеж­ды при­сутс­тву­ющих на ней пер­сонажей, а заод­но про­рабо­таем детали их лиц. В этом нам поможет Real-ESRGAN, который сам обра­тит­ся за допол­нитель­ными услу­гами худож­ника к GFPGAN. Исходные фотог­рафии (фай­лы в фор­мате JPEG или PNG) помес­тим в каталог ~/GAN/in, а резуль­тат пусть сох­раня­ется в катало­ге ~/GAN/out. Обра­бот­ка запус­кает­ся сле­дующим обра­зом:

В ходе ини­циали­зации «уве­личи­теля» появит­ся серия сооб­щений с пре­дуп­режде­ниями, а при неболь­шом объ­еме опе­ратив­ной памяти нач­нется активный стра­нич­ный обмен с фай­лом под­качки. Но через минуту‑дру­гую ситу­ация дол­жна ста­били­зиро­вать­ся, а на экра­не по­бегут попол­зут отсче­ты обра­ботан­ных бло­ков:

На пре­дуп­режде­ние, что ини­циали­зиро­вать NNPACK невоз­можно, не сто­ит обра­щать вни­мания, мы ведь зна­ем, что у нас нет под­ходяще­го гра­фичес­кого уско­рите­ля. На компь­юте­ре без Nvidia CUDA обра­бот­ка одной фотог­рафии может затянуть­ся на нес­коль­ко десят­ков минут. Но ведь работа­ет!

Вер­немся к коман­дной стро­ке, запус­кающей обра­бот­ку. Пер­вые два парамет­ра прог­раммы inference_realesrgan.py ука­зыва­ют на исходные матери­алы и резуль­тат. С помощью парамет­ра -t зада­ется раз­мер окна обра­бот­ки фраг­мента изоб­ражения. Если это­го не сде­лать, то начала обра­бот­ки мож­но и не дож­дать­ся, потому что пос­ле дли­тель­ного обме­на с фай­лом под­качки прог­рамма сооб­щит об ошиб­ке. Еще один обя­затель­ный в спар­тан­ских усло­виях параметр —fp32 зас­тавля­ет исполь­зовать 32-бит­ные, а не 16-бит­ные дан­ные, потому что под­дер­жка дан­ных половин­ной дли­ны на CPU не реали­зова­на. Если его не ука­зать, то появит­ся сооб­щение об ошиб­ке:

Пос­ледний параметр —face_enhance, как ты, навер­ное, догадал­ся, при­зыва­ет Real-ESRGAN вос­поль­зовать­ся GFPGAN для улуч­шения про­работ­ки обна­ружен­ных на фотог­рафи­ях лиц. Если хочешь, ты можешь обра­ботать фотог­рафию толь­ко при­ложе­нием GFPGAN. Оно най­дет на фотог­рафии лица людей, вырежет их отту­да и поп­робу­ет сде­лать более реалис­тичны­ми. Коман­дная стро­ка в этом слу­чае будет выг­лядеть так:

В выход­ном катало­ге, помимо фай­лов с улуч­шенны­ми лицами, будут соз­даны фай­лы, содер­жащие рядом исходный матери­ал и резуль­тат, что­бы мож­но было наг­лядно оце­нить про­делан­ную прог­раммой работу.

Ес­ли тебе лень набирать коман­ды вруч­ную, можешь взять сце­нарии обо­лоч­ки gfpgan.sh и resrgan.sh. Помес­ти их в каталог ~/GAN и исполь­зуй так:

Заключение

Итак, мы пос­тро­или нас­тоящий локаль­ный ней­росете­вой фото­уве­личи­тель. Он ни в коей мере не зависит от внеш­них сетевых ресур­сов и может работать на самом обыч­ном компь­юте­ре. Прог­рам­мное обес­печение Real-ESRGAN и GFPGAN вмес­те со сре­дой исполне­ния Python 3.8 мож­но упа­ковать и сох­ранить на тот слу­чай, если понадо­бит­ся занять­ся фотог­рафи­ями, а прог­ресс вмес­те с биб­лиоте­ками Python ушел впе­ред и тре­бует новых вычис­литель­ных мощ­ностей.

Что мож­но ска­зать о резуль­татах работы «фото­уве­личи­теля»? Как ты сам теперь можешь убе­дить­ся, качес­тво выдава­емых им резуль­татов в боль­шинс­тве слу­чаев вызыва­ет лишь удив­ление и вос­хищение. Но ког­да информа­ции недос­таточ­но (исходные матери­алы низ­кого качес­тва), ней­рон­ные сети начина­ют додумы­вать отсутс­тву­ющие эле­мен­ты, и это при­водит к неожи­дан­ным или даже шокиру­ющим эффектам. В таких слу­чаях спас­ти ситу­ацию может пред­варитель­ная ретушь исходно­го образца, выпол­ненная тра­дици­онны­ми метода­ми в обыч­ных гра­фичес­ких редак­торах. Таким обра­зом, новые тех­нологии удач­но допол­няют хорошо извес­тные средс­тва и рас­ширя­ют их воз­можнос­ти.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий