През последните няколко години, развитието на хардуер технологиите и еволюцията на теорията зад изкуствения интелект (ИИ), невронните мрежи от тип Long Short-Term Memory (LSTM) [1], се превърнаха в неизбежно средство за моделиране на последователни и серийни сигнали от различен тип. Известни и добре наложили се примери могат да бъдат дадени от различни аспекти на ИИ; например, обработката на звук [2], текст [3], превод [4] и т.н. В частност, идеята зад LSTM мрежите е, че имат способността да “научат” приблизително добре скритата динамика, която диктува последователността на дадена поредица от обекти.

Цялостната структура на подобен тип мрежи (много добра интродукция може да бъде намерена в небезизвестния блог на Крис Oла и глава 10 от книгата “Deep Learning”) позволява на сигнала във всяка една стъпка да вземе предвид релевантна репрезентация на срещнатите в близкото минало подобни сигнали. В примерите с текст, тези сигнали могат да бъдат самите думи в дадено изречение; всяка една стъпка се състои в обработката на дадена дума, която зависи от думите, използвани преди това. Така LSTM мрежите могат да изградят достатъчно добра репрезентация на дадено словосъчетание, което само по себе си прави такъв тип мрежи добри в решаването на проблеми като предвиждането на следващите няколко думи. Директен пример за решението на подобен проблем биха били предложенията, които Гугъл показва по време на търсене.

По подобен начин можем да моделираме динамиката зад предвиждането във видеа на хора, агенти в различни игри, движещи се автомобили и т.н. Тогава задачата би била да предвидим къде ще се намира даден агент след избран от нас период от време. Тази статия представлява въведение в употребата на LSTM, именно в този тип проблеми. За целта ще се съсредоточим върху предвиждане на следващите няколко позиции на движещи се хора, записани на видео, чийто стъпки са предварително записани от експерти (или така нареченият supervised проблем). Предполага се сравнително добро познание върху идеята и теорията зад LSTM мрежите, трудностите в моделирането на отличителни белези (така наречените features в света на невронните мрежи), основи на компютърното зрение (КЗ), основи на алгебрата и смятането, както и едно сравнително базово ниво за употреба на Tensorflow и идеята зад този фреймуърк.

Към края на статията се надяваме да изясним предимствата и недостатъците на подобен тип подход и ще загатнем потенциални начини да отговорим на последвалите въпроси. В следващия урок ще се фокусираме върху практическото разрешаване на този проблем, а именно ще разгледаме идеята и имплементацията на така наречения Социален тензор [6], и предимството му в моделирането на интеракции между движещи се хора, както и кратка дискусия върху алтернативни подходи.

Предвиждането на следващата позиция на един човек в дадено видео понякога е трудна задача дори за човек. Движението обикновено е диктувано от редица неписани правила, които се различават в различните култури и също така са индивидуално интерпретирани от всички нас. Например, когато ходим в среда с много други хора, може да целим да избегнем сблъсък с останалите около нас, но може и да искаме да стигнем до определен човек, след което да спрем и останем на място, и да започнем разговор. В такива случаи често е трудно да предположим каква точно ще е целта на някого след 5–10 минути просто чрез наблюдение, въпреки че хората сме сравнително добри в предположенията, които правим за близкото (до няколко секунди напред) бъдеще. Подобен тип предвиждане обаче е трудно да бъде моделирано с детерминистични похвати заради голямото си разнообразие. В такъв случай употребата на стандартен LSTM, от типа често ползван в предвиждането на текст, не е достатъчна. Едно потенциално добро решение би било да научим невронна мрежа да предвижда нужната статистика за моделирането на дистрибуция, от която желаният от нас резултат произхожда. След което решението е просто да семплираме от въпросната дистрибуция и да сравним предположението ни с това на истинския краен резултат.

Зареждане на информацията нужна за трениране

Преди да влезем в детайли как може да моделираме подобни дистрибуции, ще разгледаме няколко дейта сета, които са съставени с цел моделиране на движението на хора в така наречените динамични среди. Днес ще използваме четири различни източника на информация, а именно ETH University, ETH Hotel [5] (вижте следващите две снимки за примери от двете колекции), и Zara1 и Zara2 [7] (оригиналните репрезентации можете да свалите от този линк за първите два, и този линк за останалите два дейта сета).


ETH University

ETH Hotel

Формулировка на проблема

За да улесним задачата си, може да формулираме проблема по следния начин. Ще предположим, че всяка една сцена е преработена предварително и позиционирането на съответните агенти е универсално спрямо останалите сцени по време на тренировка и тест. Преработката се състои в намирането на пространствените координати на всеки един агент в пиксел пространството, нормализирано между 0 и 1, детайли, за което можете да намерите по-надолу в статията. Във всяка една времева инстанция t, човек i в сцената е изразен чрез (х,у) позицията си в нормализирана пиксел координата. Ще наблюдаваме позициите на хора от време 1 до Т–обз, и ще предвиждаме техните позиции между време Т–обз и Т–предв. Този проблем може още да бъде разглеждан и като генериране на серия от последователни стойности.

Описание на използваната информация

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

След като всички данни са записвани от различни хора и са били част от различни проекти, запазването на съответните позиции не е универсално. Всички колекции са заснети със скорост 25 фрейма на секунда, като са записани средно по около 3000 фрейма на видео. ЕТН дейта сетовете включват по 750 агента всеки, докато Зара има две сцени със 786 човека. Видеата включват както хора, които се движат индивидуално, така и малки групи от хора, които ходят заедно или се разминават един с друг. Като комплект ни предоставят хиляди различни, нелинейни траектории. В някои случаи, обаче, позициите на агентите са записани в милиметри, а други в пиксел координати, където 0,0 координата е в средата на снимката. Нашата цел е да преобразуваме всички тях в пиксел позиции, където най-долния ляв ъгъл е (0, 0) координата. Също така е важно да ги нормализираме между 0 и 1, така че свойства като големина на снимката, размер на площа за ходене и т.н. не влияят на модела ни. Така можем да постигнем максимално добро поведение от днешната невронна мрежа и да постигнем универсално позициониране на въпросните данни.

За улеснение сме преобразували три от четирите колекции от данни и сме оставили само ETH Hotel. Целта е да поясним за по-заинтересованите към процесите, през които често трябва да преминем преди да се заемем със същинската част, а именно моделирането на решение на въпросния проблем. Въпросните 4 дейта сета могат да бъдат намерени в GitHub директорията на днешния урок.

Преобразуване на ETH Hotel

Преди да започнем преобразуването е важно да вземем предвид, че ETH Hotel се състои от позиции в световна координатна система, като заедно с това ни е предоставена хомографията нужна за преобразуването на позициите в координати на въпросното видео.

От световни към фрейм координати

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

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

Подфункцията между редове 8 и 20 намира минималната и максималната срещната стойност в записаните локации във въпросния дейта сет.

Документът, който съдържа запазената анотация (наименован obsmat в примера по-горе) се състои от; фрейм, номер на пешеходец, позиция по Х, позиция по У, позиция по Z и съответните 3 скорости, с които пешеходецът се движи по всяка една координата. Повече информация можете да прочетете в README.txt файла, който се намира в папката на seq_hotel от GitHub директорията на статията . Както вече споменахме се интересуваме от фрейма, номера на съответния пешеходец, също както и Х и У позициите му.

Редове 34–41 са отговорни за събирането по фреймове на номерата на съответните агенти, заедно с нормализираните им Х и У позиции.

Ред 29 от горепоказания код извиква функция parse_annotations(), чиято цел е да анализира всеки един от редовете по части и усвои съответната информация, оповавайки се на to_image_frame функцията дефинирана по-горе, и превръщайки позициите на всички агенти от позиция в милиметри, в такава в пиксели.

Събиране на последователно свързани партиди

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

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

Стокастични похвати за моделиране с LSTM

За експеримента днес ще ползваме гореспоменатите (Х, У) координати, като input за невронната мрежа. Тъй като всеки един от въпросните координати е асоцииран с агент е важно да разделим цялостните траектории на отделните агенти и подсигурим, че предвиждането на дадени позиции е базирано изцяло на предните такива, на които въпросният агент се е намирал.

Детайли, свързани с имплементацията

Както вече споменахме, предполагаме добро познание на теорията за LSTM. За вход на невронната мрежа ще използваме серия от позиции на даден агент, като всяка стъпка ще бъде преобразуванa в 128-измерен вектор. Преобразуванието става чрез линейна операция прекарана през ReLU (Rectified Linear Output) активация.

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

След като вече имаме достатъчно добра репрезентация на данните, сме готови да я прекараме през LSTM модела. Ще използваме 128-измерен скрит вектор за изход. Имайте предвид, че двете цифри не са свързани една с друга. Това можем да постигнем като умножим всяка една от позициите по съответните тежести с размер [2, 128]. Хиперпараметрите са взаимствани от [6], където са избрани с крос-валидация приложена на синтентичен дейта сет. Използваме learning rate 0.003 с норма на разпадане от 0.95 и RMS-Prop [5] заедно с L2 регуларизация с λ=0.5 и градиенти между -10 и 10.

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

Сега вече сме готови да преобразим изходящата информация (outputs) в 5-измерен вектор. Това може да стане по подобен начин на предпоследната стъпка.

В допълнение ще използваме 2-измерен Гаусиан за предвиждането на всяка една индивидуална стъпка. Всеки един от изходните вектори ŷ_t съответно ще се състои от две средни стойности μ, две стандартни девиации σ и една корелация ρ. Този похват е описан в детайли в [8].

x is input, y is output

Обърнете внимание, че x и у от фигурата горе са различни от (х,у) координатите. Тук, х и у репрезентират вход и изход на невронната мрежа, а μ и σ са двуизмерни, по едно измерение за (х, у) координатите. Векторите y_t се определят от резултатите от мрежата ŷ_t, където:

Тук b е така нареченият bias, W са параметрите на feedforward layer прикачен след изхода на LSTM, докато h са скритите параметри, изкарани от функцията на LSTM. Прилагайки експоненция на стандартната девиация се подсигуряваме, че изходът ще бъде винаги положително число; по същия начин, прилагайки хиперболична тангент функция на корелацията подсигуряваме изход, който е между -1 и 1.

Вероятностният масив P(x_{t+1}|y_t) от следващия input x_{t+1}, вземайки предвид y_t можем да дефинираме като:

Където,

и

Тогава, получаваме loss функция която е точна до константа, зависеща изцяло от квантуването на самата информация и по никакъв начин не влияе на тренирането на мрежата ни.

След това частичните деривативи спрямо петте стойности могат да бъдат лесно изведени, което ще доведе до:

Като код, можем да опишем съответната loss функция с помощта на 2 функции, а именно след като вече сме преобразували σ и ρ:

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

Тъй като изходната информация не е разредена и имаме само един верен отговор (а именно позицията, в която се намира агентът в дадена стъпка) можем да ползваме L2 регуларизация, която ни позволява да ограничим точността при тренировка за сметка на по-голяма генерализация, постигнато по ефикасен от компютърна гледна точка начин. В допълнение, ще ограничим големината, до която искаме въпросните градиенти да растат, до 10. Така се подсигуряваме, че няма да достигнем до ситуации, в които въпросните градиенти могат да експлодират и придобият изключително високи стойности. Това е трик, който е добре известен в сферата на невронните мрежи и е често прилаган при тренирането на LSTMs.

След като сме добавили въпросната регуларизация към cost функцията на алгоритъма ни, използваме RMS-Prop за оптимизацията [5]- непубликуван алгоритъм посочен в лекция на Г. Хинтън. Алгоритъмът е известен с това, че използва втория моментум, представящ вариацията на предния градиент на квадрат. Като алтернатива, може да използваме Adam [9], алгоритъм, който нормализира градиентите като прилага термини (първи и втори моментум), които коригират bias стойностите по време на тренировка. Повече можете да научите в блог поста на С. Рудер.

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

Inference

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

Когато се опитваме да предвидим траектории от подобен тип, трябва да вземем предвид, че всеки един от агентите, които наблюдаваме е ходил някога, някъде преди момента, в който е заснет и походката му е записана. По подобен начин трябва да намерим някакъв начин да “заредим” походката и поведението на въпросния агент в динамичния модел, който сме изградили. Така, когато правим предвиждане за следващата стъпка знаем, че предвиждането ни е присъщо точно за конкретния агент, от който се интересуваме. Един подходящ начин, използван често в индустрията е да “загреем” LSTM клетката като прекараме няколко стъпки през мрежата преди да започнем да предвиждаме. В нашия пример се интересуваме от предвиждането на следващите пет стъпки. Съответно, ще прекараме през клетката първите пет стъпки на агента, от който се интересуваме като обновяваме статуса на клетката с всяка стъпка и след това ще предвидим следващите пет. Така моделът ще предвижда по-коректни позиции.

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

Семплирането от предвидените стойности за 2-измерната Гаусиан дистрибуция става чрез дефинирането на матрица на ковариация и съответен вектор със средни стойности.

Експериментални резултати

Определяме колко добре работи модела ни по два начина; първият е като пресметнем средната Евклидова дистанция между предвидените точки и истинските такива в дадена траектория, а вторият е визуално, с помоща на OpenCV и Matplotlib.

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

След като предвидим 5 стъпки напред (Т–предв=5), позовавайки се на 5 стъпки (Т–обз=5) получаваме общо 351 траектории с грешка от около 0.1.

Резултатът от втория подход е показан в снимката по-долу.

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

Кратко заключение и дискусия

Проблемът за моделиране на движението на хора е сравнително стар. Известни похвати преди употребата на невронни мрежи включват линейни модели, използващи Калман филтри, социални сили [10] и факторизирани, интерактивни Гаусиан процеси [11]. Въпреки точността на някои от тези похвати, всички те предполагат повече известна информация за моделирането на въпросните траектории. Проблемите на подхода, с който се запознахме днес включват изискването на голямо количество информация, която е предварително анотирана от експерти, също така и достатъчна вариация на записаните траектории с цел да покрият възможно най-голям брой потенциални поведения. В допълнение, моделът не предполага никаква структура зад поведението на хората и не гарантира знание за заобикалящия ни свят.

Един потенциално добър начин да подобрим резултата си, е да вземем предвид движещите се около нас агенти. Обикновено, това е естествен подход спрямо поведението на всеки един човек, когато ходи в среда с натоварено движение. Един начин да постигнем това е да използваме изходните вектори от LSTM-ите моделиращи хората около нас, образувайки така нареченият социялен тензор [6]. Именно този подход ще разгледаме в следващия пост от серията.

Междувременно можете да намерите кода, свързан с днешния пост в GitHub на https://github.com/yadrimz/stochastic_futures_prediction.

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

В заключение, бих искал да благодаря на Христо Велев и Мартин Асенов за съветите и корекциите нанесени върху тази статия.

References

[1] Hochreiter, S. and Schmidhuber, J., 1997. Long short-term memory. Neural computation, 9(8), pp.1735–1780.

[2] Graves, A., Mohamed, A.R. and Hinton, G., 2013, May. Speech recognition with deep recurrent neural networks. In Acoustics, speech and signal processing (icassp), 2013 ieee international conference on (pp. 6645–6649). IEEE.

[3] Bowman, S.R., Gauthier, J., Rastogi, A., Gupta, R., Manning, C.D. and Potts, C., 2016. A fast unified model for parsing and sentence understanding. arXiv preprint arXiv:1603.06021.

[4] Sutskever, I., Vinyals, O. and Le, Q.V., 2014. Sequence to sequence learning with neural networks. In Advances in neural information processing systems (pp. 3104–3112).

[5] Yücel, Z., Zanlungo, F., Ikeda, T., Miyashita, T. and Hagita, N., 2013. Deciphering the crowd: Modeling and identification of pedestrian group motion. Sensors, 13(1), pp.875–897.

[6] Alahi, A., Goel, K., Ramanathan, V., Robicquet, A., Fei-Fei, L. and Savarese, S., 2016. Social lstm: Human trajectory prediction in crowded spaces. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 961–971).

[7] Lerner, A., Chrysanthou, Y. and Lischinski, D., 2007, September. Crowds by example. In Computer Graphics Forum (Vol. 26, №3, pp. 655–664). Oxford, UK: Blackwell Publishing Ltd.

[8] Graves, A., 2013. Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850.

[9] Kingma, D. P., & Ba, J. L. (2015). Adam: a Method for Stochastic Optimization. International Conference on Learning Representations, 1–13.

[10] Yamaguchi, K., Berg, A.C., Ortiz, L.E. and Berg, T.L., 2011, June. Who are you with and where are you going?. In Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on(pp. 1345–1352). IEEE.

[11] Trautman, P. and Krause, A., 2010, October. Unfreezing the robot: Navigation in dense, interacting crowds. In Intelligent Robots and Systems (IROS), 2010 IEEE/RSJ International Conference on (pp. 797–803).


Автор:
Тодор Давчев


>>> Докторант по Изкуствен Интелект и Самоучещи машини в Единбургския университет, където завършва и Магистър по Самоучещи Машини;
>>> Тодор се занимава и с най-популярния курс по Deep Learning в
университета, където участва като помощник-асистент, демонстратор и
оценяващ.
>>> Тодор е работил и във финансовия сектор като
full-stack developer, изкарва бакалвър по Изкуствен Интелект и
Компютърни Науки в Абърдийнския университет и няколко стажа в различни индустрии;
>>>В свободното си време се занимава със различни стартъпи като по-успешните са ResearchSpace, където работи с професор Nigel Goddard и Chillchaser от бакалавърските му години.


Стани част от потребителските групи на DEV.BG. Абонирай се и ще ти изпращаме информация за всичко, което предстои в групата.

Прочети още:
Обучение с Утвърждение (Част 1)
Обучение с Утвърждение (Част 2)

Share This