Основната идея зад тази статия е да се проучи възможността за класификация на изображения с ниска разделителна способност.

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

Ако се интересувате от малко разказване на истории, можете да продължите от тук, в противен случай преминете към частта „решение“.

Въведение

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

И може би си мислите, че може би има начин да го улесните, като използвате проста (или не) конволюционна мрежа, за да свършите работата. След минута може да си помислите: „Знам, че е възможно конволюционните невронни мрежи да разпознават хората много точно, но все пак говорим за случаи, в които статистически човек може ясно да идентифицира какво има в изображението на първо място.“

Така че започвате да мислите за добавяне на повече данни (характеристики) към картината: В този хакатон тя е дадена широко - физическата оценка на позата на човека в изображенията, която е точна.

Сега, какво бихте опитали? Мислех за един вид комбинация от RNN и базирана на конволюция архитектура: чрез използване на CNN за разпознаване на картината и за съвет към RNN, който от своя страна е обучен да предсказва следващите пози (движения) въз основа на дадения етикет (тъй като това са видео поредици. Вдъхновението за този RNN метод е взето от тук).

Например: Ако имаме видео поредица на Чък Норис във филм и имаме оценка на неговата поза във всеки кадър, можем да накараме нашия RNN модел да научи какви ще бъдат следващите му ходове. Така че CNN дава етикета на Чък за първия кадър на RNN, сега изготвя своята оценка за следващия му ход в следващия кадър. Ако тези ходове са достатъчно добре свързани със следващия (видим) ъперкът на Чък Норис — тогава сме добри (или не). Или нещо такова.

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

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

Решение

Красотата на GAN е в идеята: направете два модела — Генератор и Дискриминатор, оставете ги да се конкурират и получете най-добрите резултати, получени от Gгенератора. Тази идея се доказа като добър фалшификатор за различни творения, особено визуални.

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

След като изображението приеме новата си форма, процесът на класификация ще пристигне под формата на CNN.

Красотата на дълбоките конволюционни невронни мрежи е в тяхната способност да разпознават характеристики, които в замяна могат да доведат до по-добри резултати при прогнозиране.

Следователно интуицията:

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

Могат ли GAN да генерират този набор от функции? Решихме да разберем.

Хипотезата е:

SRGAN + CNN = по-добра класификация на изображения с ниска разделителна способност (сега висока).

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

Общият набор от данни е ~ 500 000 изображения на форма (64, 64, 3), разделени неравномерно между 100 видеоклипа и последователности на знаменитости.

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

от цялата популация на знаменитостите разберете:

min(max(num_samples в последователности)) =› 24.

min(max(num_sequences in videos)) =› 2.

min(max(num_videos)) =› 2.

96 проби на човек, общо 9600 за влака.

Направихме това, за да сме сигурни, че независимо от всичко, винаги ще можем да генерираме случаен, еднакво разпределен набор от данни и да предотвратим пренастройване.

Тестовият набор се състои от:

12 кадъра на последователност, 2 последователности на видеоклип, 2 видеоклипа,

48 проби на човек, общо 4800.

Модели

Входното изображение към SRGAN е (64, 64, 3) изображение, а изходът е (256, 256, 3) изображение, както се вижда в раздела „Решение“.

Новопроизведените и сортирани комплекти изображения се подават към Deep CNN за обучение, валидиране и тестване.

Резултати и код

Целият код и подробности са достъпни тук

Постигнахме 80 и повече процента точност и по-малко от 0,15 загуба на данните от теста. Успяхме да постигнем нашата цел за класифициране на изображения с ниска разделителна способност. Това дойде с цената на времето, изразходвано от подобряването на изображенията за нашия модел на CNN, но отне по-малко време на модела да се обучи и да произведе такива резултати в крайна сметка.

Това е съвместна работа с моя колега Inbal Weiss за това как да се справяме с изображения с ниска разделителна способност за класифициране като част от предизвикателство на хакатон.

Ние все още работим по този проект и ще се радваме да получим всякаква ценна информация за нашата работа.