Страници: [1]   Надолу
  Изпечатай  
Автор Тема: Оцветяване на стари снимки  (Прочетена 3358 пъти)
0 Членове и 1 Гост преглежда(т) тази тема.
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« -: юни 03, 2017, 12:38:43 »


От известно време си играя с нещо което намирам за интересно (и вероятно резултатите ще бъдат интересни и за някои от вас).

Мразя да пиша дълги и скучни глупости, затова ще се опитам да обясня накратко и без излишни технически детайли за какво става дума. Сигурно сте виждали оцветени стари черно-бели снимки или дори филми (по канали като Дискавъри и History Channel примерно много обичат да се заиграват с цветни филми от втората световна). Понякога не се получава добре, но в други случаи е толкова фотореалистично, че човек би могъл дори да повярва че са останали истински цветни филми от тези времена. Което разбира се е илюзия. Поради липсата на хубава снимачна техника, цветната информация е безвъзвратно загубена. Допълнително, качеството на лентите, стареенето с годините, недобрата дигитализация води до още безвъзвратно загубена информация. И на практика ние не знаем как наистина е изглеждал света тогава. Старите архивни снимки....ами те са черно-бели, оттам нататък работи фантазията, а човешкият мозък е чудна работа.

Та тогава как се оцветяват въпросния стар фотоматериал? Едно време това е било изцяло ръчна (а в началото - примитивна) работа. След като компютрите са започнали да стават все по-мощни, това става все повече "полу-автоматична" задача. Image processing-а е хубаво нещо. Но въпреки всичко, основният елемент си остава човешката фантазия, човек трябва да укаже - тази ябълка е жълта, тази завеса е червена и т.н. Софтуерът може да прави чудеса, но не може да го прави сам, трябва да му се помага. Естествено, въпросната помощ е пречупена също през човешкия ум, а различни хора виждат различни неща. Аз примерно на много оцветени архивни материали се дразня как се акцентира на някои цветове - примерно на нацистките ленти колко ярки са знамената със свастиките и колко бездушна сиво-кафява е масата от маршируващи фашаги под тях, това е идеята ни за тези времена - да - но силно ме съмнява тогава да е изглеждало така - би било потискащо, дори за нацистите. И въпреки това, софтуерът става все по-добър, съответно и резултатите. Но винаги си остава нуждата от човешката намеса.

Това допреди 2-3 години. В последно време изгря една нова мода. Благодарение на deep learning-а това вече може да стане абсолютно автономно (самото оцветяване де, целият процес - не). Тлъстите невронни мрежи с много слоеве, конволюции и всякакви хитри номера могат да се "научат" стига човек им изсипе голямо количество изображения с които да се "тренират" - да оцветяват черно-бели снимки. Звучи малко претенциозно като rocket science едва ли не, но всъщност не е. Невронните мрежи са си просто един хубав начин за апроксимиране на функции. Да, тези функции може да са много сложни, нелинейни, но няма математическо преобразувание (функция), която да не може да се апроксимира с невронна мрежа (има дори теорема по този въпрос). Друг е въпроса въпросната невронна мрежа колко "тежка" би била и дали е по силите на хардуера. А още по-важен е въпроса дали може да й се осигури достатъчно входни данни, за да се тренира и да стане "добър" апроксиматор.

Та следвайки това, реализирах идеята, описана в този paper от миналата година: https://arxiv.org/pdf/1603.08511.pdf 

Беше известна борба в последните 2-3 седмици, понеже така е с имплементирането на глупости от paper-и, все нещо си недоразбрал, но е радостно че най-накрая започна да работи както се очаква (след много кратко трениране на мрежата вече небето става небесно-синьо, асфалта става сив, дърветата леко зеленеят, абе детска радост). На границите на хардуерните ми възможности е (dataset-а в момента ми е 86 хиляди градски сцени предимно от европейски градове плюс 200-300 снимки на Русе). Тези 86000 изображения трансформирани във вида на матриците за входа на мрежата заемат......540 гигабайта дисково пространство, май трябва да се ъпгрейдвам. Тренирането е ужасно бавно, понеже част от алгоритъма (loss функцията, която е малко специална и на която се дължат качествата на алгоритъма до голяма степен) е реализиран върху CPU а не върху GPU и това е много бавно Sad Понастоящем, тренирането на мрежата върви с "бясната" скорост от около 2 секунди на картинка....с тази скорост, една епоха минава за 2 денонощия, а на мен ми трябват поне 2-3 епохи, за да започне да оцветява добре исторически снимки, та първите по-качествени резултати ще излязат след около седмица поне....естествено ако все пак не съм оплескал нещо пак, но мисля че го направих този път да работи като хората. Също входа е лимитиран до резолюции максимум 512x512, по-големите снимки се мащабират надолу....имам идеи как да го подобря това с други средства, но тренирането на невронна мрежа за изображения примерно до 1024x1024 би било убийствено за хардуера....това означава над 2 терабайта входни матрици, над 8 секунди на картинка при тренирането и вероятно поне още 32GB RAM ще ми трябват колкото да държа временните данни без да убия производителността лошо. Самото оцветяване на изображението става буквално за секунда....съпоставено с часове ръчен труд със софтуера....и си има и предимства и недостатъци, които ще са интересни за изследване.


Критично важно е невронната мрежа да бъде "тренирана" с релевантни снимки, за да може "предсказаните" цветове да са максимално фотореалистични. Тези 200-300 снимки от Русе подозирам са много недостатъчни, вероятно ще трябват в пъти повече, но това ще се разбере по първите резултати. Та за това пуснах темата - като задобрее мрежата, можем да я тестваме с архивни снимки на Русе. Все още не съм силно убеден в крайния успех, но ще е интересно. Ако се окаже че има смисъл в начинанието (предвид хардуерните ограничения), може да се пробвам след това да тренирам нов модел, но този път с доста повече снимки от Русе. Резултатите от оцветяването ще бъдат още по-добри. Само ще трябва да се намери фотоматериал (за което се надявам да ударите едно рамо).

Към момента съм "тренирал" мрежата само с около 3000 снимки....или грубо на около 3.5% от първата епоха Smiley Като тренирането започна преди няколко часа, все нещо трябваше да се бута, да се проверяват разни неща и така. Със сигурност много неща може да се оптимизират и да се направят по-бързи и по-добри, но аз се радвам че поне това взе да дава някакви очаквани резултати. Та първите по-качествени резултати (не на архивни снимки, а на днешни, grayscale такива) очаквам до 2-3 дни. Първите по-качествени резултати срещу исторически снимки (да се разбира върху гадна стара лента, деградирала с времето) - вероятно след седмица. Разбира се - нищо не пречи да гледаме междинните резултати и преди това. Ако сте заинтересовани, можем да направим даже - някой поства стара снимка, аз я минавам през алгоритъма и гледаме прогреса Smiley

Share this topic on DiggShare this topic on FacebookShare this topic on GoogleShare this topic on Twitter

Активен
Русенец
Hero Member
*****
Неактивен Неактивен

Публикации: 1391


Профил Ел. поща
« Отговор #1 -: юни 03, 2017, 01:54:05 »

Нищо не ти разбрах, но да - ще е интересно да се видят оцветени снимки на Русе. Cheesy
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #2 -: юни 03, 2017, 02:00:35 »

Накратко, ако ПАК не съм осрал нещо лошо, след няколко дни, вероятно седмица, ще мога да оцветявам стари снимки за секунди време без да си давам никакъв зор, та ще ви замоля за стари снимки за тестове, интересът надявам се ще е взаимен. Не мога отсега да гарантирам за резултатите, а е възможно и тотално да съм осрал нещата. Ама ще е забавно. А ако резултатът, дори не особено добър визуално, надмине неоптимистичните ми очаквания, почвам работа по версия 2.0 - същото нещо, но далеч по-ориентирано към да речем "русенски снимки". Тренирането е ключовия момент, ако се тренира с подходящ материал, ще може да генерира далеч по-качествени цветни снимки. И ще е забавно. Ама да не се превъзбуждам отсега, че има още няколко условности, които ако се окаже че греша....мех, няма да има забава Smiley
Активен
svetlin74
Sr. Member
****
Неактивен Неактивен

Публикации: 335



Профил
« Отговор #3 -: юни 06, 2017, 04:10:40 »

Снимките ор http://roustchouk.bg/ ще свършат ли работа за тестове? Предполагам, че хората зад проекта няма да се разсърдят.
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #4 -: юни 06, 2017, 04:36:36 »

Преди ден-два го видях този сайт и си мислех за това. Мисля че ще свършат добра работа.

А иначе за съжаление, оказа се че все пак съм оплескал нещата и установих причината чак на 2/3 от първата епоха Sad Проблемите бяха няколко - три от слоевете на мрежата ми имаха некоректни параметри (което водеше до едни много специфични грозни цветни линии в оцветените изображения), learning rate-а беше прекалено висок и мрежата макар и да "учеше" бързо, също и "забравяше" бързо, типичния пример със снимката с градския стадион - понеже тествам с нея през 20 итерации, на единия тест тревата зелена, на следващия - кафява, на следващия - пак зелена и те така. И накрая, бях разменил реда на relu активациите и batch нормализациите, не че това според мен е фатално, ама не допринася при всички случаи за по-добри резултати.

Та сега съм го пуснал да се тренира наново. С новите корекции, тренирането е чувствително по-бавно и отива към 3.5 секунди на картинка...но пък засега изглежда като да се държи правилно. Като минат малко повече итерации, ще пусна няколко снимки с междинни резултати Smiley
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #5 -: юни 07, 2017, 02:18:30 »

ОК, междинни снимки (тези са от самото начало, бебешки снимки да го кажем). Тези са направени след 30 итерации (всяка итерация е обучение на 200 снимки, а целият dataset е около 86000 снимки, 86000/200 итерации се водят епоха - трениране на мрежата с всички изображения, всяка следваща епоха прави мрежата все по-точна и по-точна)

Часовника, след 30 итерации по 200 снимки = 6000 тренирани изображения, небето започва да изглежда синьо...на места.




Градския стадион, очевидно са минали няколко снимки със стадиони през тренировката и тревата започва да има зелен цвят...макар не особено изявен...



Александровска отново, тук невронната мрежа сериозно се е оплескала, понеже още нищо не е видяла...и настилката изглежда като трева....



Като цяло сме в самото начало, както казах бебешкия период. На грубо около 7% от първата епоха. Имайте търпение. Следващите примери ще са от итерация 100 като стигнем дотам Smiley
Активен
Русенец
Hero Member
*****
Неактивен Неактивен

Публикации: 1391


Профил Ел. поща
« Отговор #6 -: юни 07, 2017, 11:23:47 »

Имаме търпение и ни е интересно. Smiley
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #7 -: юни 08, 2017, 12:34:50 »

Добре, това са междинните тестове от итерация 100....имаме подобрения и очевидно мрежата се обучава. Но има и известни разочарования според мен.

Часовника. Синьото небе се изяснява, зеленикавата пътна настилка вече не е зеленикава, за сметка на което сградата на Теленор е много зле...трябваше повече снимки на стари сгради и особено такива от Русе да му сложа в dataset-а да му се не види Sad




Градския....и тук небето започва да прилича на небе, но за съжаление бебето-мрежа още не знае как да оцветява трибуните (и пистата ако трябва да сме точни):



Хм а тук от зелено та на червено...напредъкът тук е много малък, като изключим металния покрив на сградата, който изглежда метален, което всъщност ме радва...




Очаквах да почне да оцветява по-добре, но може би все пак му е още рано. На няма и 25% от първата епоха.

Loss стойността вече падна стабилно под 4....върти се между 3.3 и 3.9 средно на итерация (в началото беше към 5). Уффф за loss функцията друг път че не ми се пишат скучни глупости сега.
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #8 -: юни 11, 2017, 01:42:47 »

Такам....мина първата епоха накрая....и съм разочарован до голяма степен. Много турбулентна беше тренировката, с loss стойности между 2.9 и 4.1 и сговнени междинни резултати, надявам се това да е от детските болести, защото започна малко по малко да се нормализира вече и да слиза надолу плавно....но все още ги има тези резки колебания. Очаквах много повече към този етап, но може би трябва все пак повече търпение. В оригиналния paper инициализираха първата половина от слоевете с теглата от готова тренирана мрежа, но аз не мога да си го позволя това, та може би просто ще трябва да чакам повече време за да се научи нещото....както и да е, ще видим какво ще стане. Та след края на първата епоха, нещата стоят така с тестовите снимки:







А сега малко повече технически глупости, понеже съм в настроение този път. Невронната мрежа е тип "encoder-decoder" - първата й половина грубо казано "кодира" черно-бели изображения в някаква нейна си вътрешна интерпретация, която има значение само за нея си, за човек това няма смисъл, дори размерността е различна и би било трудно да се визуализира, но най-близкото което човек би могъл да го сравни е картинка 64x64 която вместо да има 3 цветови канала, има 512 Smiley Втората част, декодера, ги "декодира" обратно от вътрешната интерпретация до нормална за хората 512x512 картинка с три цветови канала, демек цветна картинка.

Различното е че не работим със снимките в RGB colorspace, демек по 3 байта които да кодират червената/зелената/синята компонента, вместо това обръщаме картинката от RGB в LAB формат, където L канала кодира яркостта (от черно до бяло), останалите 2 байта кодират възможните цветове (общо 65536). Когато тренираме мрежата, за всяка картинка с която тренираме, обръщаме във LAB формат и подаваме само L канала. Това минава през encoder-а, после през decoder-а и оттам ни се вади LAB картинка, която сравняваме с оригиналната такава. За всеки пиксел смятаме разликата между генерираните A и B стойности и оригиналните и на база това се генерира loss стойност на всеки пиксел. Общата loss стойност за която говорих по-нагоре е просто усреднения loss за всички пиксели. С тази loss стойност "коригираме" теглата на мрежата така че да апроксимират по-добре, по добре познатия backpropagation алгоритъм. Ако картинката се оцвети по-успешно съответно loss-а е по-нисък, ако има по-големи разминавания, ще е по-висок и така теглата се нагаждат. А, да, цялата мрежа има около 33 милиона тегла - не е ужасно много в интерес на истината, но дават достатъчно много степени на свобода, така че да може да генерализира върху множество съвсем различни сцени.

Но loss функцията е малко по-забавна, ако работеше така както го описах, генерираните снимки щяха да се стремят да кафеникави, понеже това е "средната" AB стойност и така loss-а се минимизира. Вместо това обаче авторите на paper-а са измислили един хитър номер, който е дълъг и скучен за описване, но накратко идеята е да не се наказват прекалено разлики в цветовете, които статистически са "по-вероятни". Например една ябълка би могла да бъде жълта или червена, но трудно ще стане синя. Това понеже е статистика, работи добре в много случаи, но в конкретни случаи се издънва лошо....но като цяло работи добре.

А защо мрежата като че ли не се занимава с детайлите, а избира "големи петна" от картината и се опитва да ги докара в сходна цветова гама и какви са тези линии по снимките? Това са много интересни въпроси, като за част от отговора бих изпаднал в мои интерпретации, понеже реално е "не знам, но предполагам че...". Тоест това за големите петна си има просто обяснение и колкото повече итерации минаваме, толкова по-малко валидно ще е. Но за линиите нямам много добро обяснение, имам теории, но не съм 100% сигурен че съм прав Smiley Затова ми е много интересно как ще се тренира впоследствие и как ще оцветява колкото по-добре се тренира, това ще обясни много неща.
« Последна редакция: юни 11, 2017, 02:48:22 от n00b » Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #9 -: юни 17, 2017, 12:42:15 »

За съжаление, имам една лоша новина: не са ми били точни сметките и няма да мога да продължа с резолюция 512x512. В смисъл бих могъл, но за статистическата част с цветовете (ябълката дали е жълта или червена) ако трябва да стане като хората, ще ми трябва доста повече РАМ памет, времето за трениране на мрежата е прекалено голямо, а не съм и убеден че dataset-а ми е достатъчно голям без да се появи проблема с overfit-ването.

Та минах на 256x256, както впрочем е и оригиналната имплементация от paper-а. От една страна, има шансове да доживея скоро тренирана мрежа с тези параметри (сега се тренира грубо 4 пъти по-бързо), от друга страна статистическата част е далеч по-добра защото работи върху повече входни изображения. Това става на цената на "кофти" оцветяване. Сега, изходните снимки не задължително са 256x256, аз мога да ги скалирам, дори мога да го правя с оригиналния размер, без да се губят "детайли". Но "оцветяването" като качество страда.

Гадно ми е за това, но не ми се купуват 64GB RAM и още една хубава видеокарта, скъпо е. А и скоро вече очаквам истински резултати (за които след ревизия на разни предварителни сметки щяха да ми трябват месеци при 512x512).


Дотогава - една занимавка. Авторите на алгоритъма са го реализирали под формата на онлайн услуга - http://demos.algorithmia.com/colorize-photos/

В момента, чисто алгоритмично би трябвало да използвам 1:1 същия подход, почти де. Можете да си поиграете с черно-бели снимки през това. Може би някои снимки трябва да им се оправи контраста и т.н. преди да се минат през това за по-добри резултати. Тяхната мрежа е тренирана срещу imagenet - демек снимки на разни предмети и животни предимно. Моята я тренирам с градски сцени, откъдето очаквам по-добри резултати. Ще видим...
« Последна редакция: юни 17, 2017, 12:44:20 от n00b » Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #10 -: юни 23, 2017, 01:15:10 »

Такам....с новите параметри и след седмата епоха (тренирането както казах е доста по-бързо сега)....пак сме до кривата круша. Очевидно трябва да се разнообрази dataset-а с повече снимки от Русе....както и да е, прогресът засега:

Градския....тук започва да се получава, само да се сети че пистата не е зелена...



И тук да се сети че не е зелено...



А тук е пълен провал, макар че все пак е започнало да осмисля че сградата с часовника е жълта...




Реших да го пробвам и как се държи с исторически снимки...ми засега не е прекрасно още, снимка на Парка при изграждането му, 60-те:



На ЖП гарата, 30-те:



Немски войски на придунавски:

Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #11 -: октомври 07, 2017, 12:56:13 »

Отказах се от този подход и избрах тотално различен. Причините са много, но да кажем че не е възможно автоматично да се оцветяват фотореалистично снимки правени отдавна, има много фактори - лентата е била различна, дефектите с времето по снимката много съсипват всичко, чисто алгоритмично има проблеми, които не мисля че може да се разрешат с този подход.


Затова избрах друг, по-артистичен да го наречем (защото е и semi-supervised, освен тренираната невронна мрежа се изисква и второ, цветно изображение което трябва да има сходни геометрични форми с черно-бялото). Резултатите не са фотореалистични, но на мен това ми се вижда по-забавно (а и с разни подобрения става все по-добре). Хубавото е че много старите снимки изглеждат доста по-прилично така, а машината понякога проявява странна фантазия...

Например това:



Което е забавно - за въстановяването на цвета са ползвани снимки.....от Братислава.


Забелязват се и дефекти (оранжевото петно на автобуса), които изискват все пак малко творчество при подбора на цветните снимки, за да се разрешат.

А това е забавно, освен че го оцветяваме, му прилагаме и style трансфер, демек снимката я правим....ммммм нощна. За жалост, днешните начини за екстериорно осветление са доста по-различни от тогавашните....и тази ярка бяла светлина като от LED лампа изглежда нереално като за нещо отпреди 100 години....и все пак ми се вижда доста забавно Smiley

 
« Последна редакция: октомври 07, 2017, 12:58:02 от n00b » Активен
Русчуклия
Hero Member
*****
Неактивен Неактивен

Публикации: 1242



Профил
« Отговор #12 -: октомври 07, 2017, 12:43:10 »

Последната се е получила много добре. Задобряваш Smiley
Активен
n00b
Hero Member
*****
Неактивен Неактивен

Публикации: 1794


Профил WWW
« Отговор #13 -: октомври 07, 2017, 01:19:26 »

Те резултатите могат да станат много впечатляващи....ако се вложи повече човешки труд, което държа да избягвам, защото по начало исках това да не е фотошопаджийска работа. Това с подбора на втора снимка е компромис, ако продължа с компромисите примерно може да го направя човек да очертава маски върху входното изображение спрямо които да работим с различни "втори снимки" - примерно маска върху автобуса - снимка на сходни автобуси, маска върху сградите - снимка на сходни сгради и т.н. Ама засега не мисля да правя това. Всъщност дори това може да се автоматизира със семантична сегментация, но трябва тепърва да се тренира добър модел за сегментация на "стари снимки" което ще е много сложна и пипкава работа. Да не говорим че това лесно ще вдигне времето за генериране на резултата в пъти, в момента целият процес отнема около 15 минути и то на доста приличен хардуер, с такива "подобрения" лесно ще скочи до часове. Нямам търпение да чакам часове за да стигна накрая до резултат дето примерно не ми харесва особено Smiley

От друга страна, провали като това по-долу ме карат да се замислям дали все пак да не го наруша това и да оставя да се очертават маски. Вярно не беше това първоначалната идея, ама се нервирам като резултатите са прилични и някъде вземе да се изсере отгоре по толкова досаден начин Sad

« Последна редакция: октомври 08, 2017, 01:20:42 от n00b » Активен
Страници: [1]   Нагоре
  Изпечатай  
 
Отиди на:  

Страницата е създадена за 0.072 секунди с 25 запитвания. (Pretty URLs adds 0.01s, 2q)

Google e прегледал тази страница октомври 15, 2017, 12:36:03