[{"data":1,"prerenderedAt":9702},["ShallowReactive",2],{"article-id-ru-ml-in-animation-overview":3},{"id":4,"title":5,"body":6,"description":81,"extension":9683,"meta":9684,"navigation":21,"path":9696,"seo":9697,"stem":9700,"__hash__":9701},"content/ru/blog/ml-in-animation-overview.mdx","Ml In Animation Overview",{"type":7,"value":8,"toc":9674},"minimark",[9],[10,11,12,16,28,33,36,39,42,45,48,51,54,73,76,83,86,94,98,101,112,115,118,122,125,128,134,137,140,218,224,227,342,639,663,680,683,830,1203,1206,1303,1387,1425,1483,1569,1665,1710,1774,1824,1926,2033,2036,2112,2223,2266,2270,2273,2276,2279,2282,2285,2406,2768,2771,2773,2909,3294,3297,3303,3376,3438,3482,3485,3630,3700,3718,3937,3964,3995,4079,4082,4086,4089,4095,4098,4168,4323,4326,4407,4619,4740,4783,4786,5032,5035,5040,5158,5161,6765,6782,6894,8174,8344,9464,9467,9487,9490,9493,9498,9501,9615,9618,9622,9625,9628,9631],"section-md",{},[13,14,15],"p",{},"Мы реализовали Learned Motion Matching, разработали плагин для Unreal Engine 5 и интегрировали обученные модели в пайплайн анимации в режиме реального времени. Далее проведем обзор существующих решений анимации персонажей на базе нейросетей.",[17,18,22,23],"video",{"className":19,"controls":21},[20],"col-span-full",true,"\n  ",[24,25],"source",{"src":26,"type":27},"/video/blog/ml-in-animation-overview/demonstration.mp4","video/mp4",[29,30,32],"h2",{"id":31},"введение","Введение",[13,34,35],{},"Еще совсем недавно в анимации персонажей за стандарт были приняты такие системы, как, например, анимация на основе ключевых кадров (keyframe) или процедурная анимация, подразумевающая под собой целое семейство совершенно различных подходов — на основе обратной кинематики, ragdoll, или более комплексных разработок (GTA IV — Euphoria). Однако, несмотря на широкое применение, они не лишены существенных недостатков — нереалистичность, дороговизна, ограниченная выразительность, потребность в ручном труде, сложность с выдерживанием единого художественного стиля. Затем пришел motion matching, обеспечивающий совершенно иной уровень качества анимации, но и позволить себе такие системы могут только разработчики проектов ААА уровня. К тому же такая система чрезвычайно требовательна к оперативной памяти ввиду необходимости хранить в ней всю библиотеку анимаций.",[13,37,38],{},"Некоторые из перечисленных недостатков естественным образом решаются посредством применения машинного обучения благодаря низкому потреблению памяти, масштабируемости в контексте данных и способности к обобщению. Сегодня можно наблюдать новый сдвиг: все больше задач, связанных с движением, мимикой и поведением персонажей, передаётся моделям машинного обучения. Причина проста — игры, VR/AR‑системы, виртуальные актёры, интерактивные симуляции — требуют не просто красивой анимации, а реалистичного поведения в реальном времени, адаптирующегося к окружению и действиям пользователя, чего традиционные системы не могут обеспечить.",[13,40,41],{},"Нейросети способны учиться на больших наборах данных захвата движения, предсказывать движение для следующих кадров, синтезировать переходы между позами, управлять походкой, балансом, реакциями на препятствия и даже мимикой, синхронизированной с голосом. В результате мы получаем анимацию, которая выглядит естественно, но при этом генерируется на лету — без заранее подготовленных клипов. Тем не менее вместе с новыми возможностями приходят и новые вызовы: производительность, стабильность, контроль над результатом, требования к качеству данных и интеграция в существующие пайплайны.",[13,43,44],{},"В этой статье я приведу некоторые решения для анимации персонажей, основанные на машинном обучении, которые имеются на данный момент. Поскольку рассматриваемые далее решения довольно тесно связаны с технологией motion matching, то в начале приведу по ней небольшую справку.",[46,47],"hr",{},[13,49,50],{},"Motion matching является алгоритмом поиска и выбора в базе данных анимаций той позы, которая наилучшим образом подходит для данного контекста. На данный момент эта технология позволяет получать наиболее отзывчивые и правдоподобные анимации. Использовалась в следующих проектах: The Last of Us, For Honor, Fortnite.",[13,52,53],{},"Вместо того, чтобы описывать анимацию через граф состояний, motion matching позволяет аниматорам задавать параметры позы (features — фичи), которая должна быть получена, и она автоматически будет выбрана методом ближайшего соседа. Из этого следует, что качество и разнообразие анимаций напрямую зависят от размера базы данных. Благодаря тому, что сам по себе алгоритм берет позу из базы данных как есть, применяя только смешивание и добавляя постобработку, сохраняется качество исходной анимации, и аниматоры сохраняют контроль над результатом. Поэтапно процесс работы motion matching можно представить так:",[55,56,57,61,64,67,70],"ol",{},[58,59,60],"li",{},"вычисляется желаемая траектория движения",[58,62,63],{},"выполняется поиск в базе данных наиболее подходящей позы, учитывая параметры позы и траекторию движения",[58,65,66],{},"поза, наиболее близкая к найденной, назначается персонажу",[58,68,69],{},"постобработка",[58,71,72],{},"повторить пункты 1-4",[13,74,75],{},"Процесс насыщения базы данных анимаций новым материалом прост, может выполняться и отлаживаться в режиме реального времени. Получается, что потребление памяти растет линейно с количеством данных и параметров для поиска позы. В итоге задача сводится к поиску баланса между качеством результата, потреблением памяти и вычислительной производительности.",[13,77,78],{},[79,80],"img",{"alt":81,"src":82},"","/img/blog/article-ml-in-animation-overview/7.png",[13,84,85],{},"Таким образом, можно выделить следующие ключевые недостатки motion matching:",[55,87,88,91],{},[58,89,90],{},"необходимость огромного датасета, например, в TLOU 2 только для Элли и Эбби суммарно 2627 анимационных клипов — 2 часа 17 минут анимаций",[58,92,93],{},"отсутствие генеративности",[29,95,97],{"id":96},"типичный-пайплайн","Типичный пайплайн",[13,99,100],{},"Пайплайн концептуально для всех трех архитектур не отличается и выглядит следующим образом:",[55,102,103,106,109],{},[58,104,105],{},"Предобработка: на этом этапе подготавливаются тренировочные данные и автоматически извлекаются параметры контроллера, а также сопоставляется рельеф с передвижением, используя отдельную карту высот",[58,107,108],{},"Тренировка: выполняется так, что нейросеть учится выдавать движение персонажа на каждом кадре, используя параметры контроллера",[58,110,111],{},"Инференс в режиме реального времени: собираются данные для входа в нейросеть (контроллер и окружающая среда), подаются в систему, которая определяет движение персонажа",[13,113,114],{},"Исходными тренировочными данными является обычный захват движений, записанный в длинную последовательность, описывающую различные походки и направления движений. На этапе предобработки в целях насыщения набора данных выполняется зеркалирование всей последовательности.",[13,116,117],{},"Данные, относящиеся к позиции и скорости костей используются авторегрессивным способом — подсчитанный результат с прошлого кадра используется как входные данные для следующего.",[29,119,121],{"id":120},"phase-functioned-neural-networks-for-character-control-pfnn","Phase-functioned neural networks for character control (PFNN)",[13,123,124],{},"PFNN представляет из себя архитектуру нейросети, работающую посредством генерации весов регрессионной нейросети на каждом кадре анимации как функцию от фазы — переменной, отражающей время цикла движения. Далее эти веса используются для выполнения регрессии от параметров контроллера на текущем кадре к соответствующей позе персонажа. Предложенная архитектура благодаря своей скорости вычислений и легковесности в контексте потребляемой оперативной памяти подходит для работы в режиме реального времени, и, вдобавок к этому, жертвуя компактностью, можно дополнительно ускорить работу посредством предварительного расчета фазовой функции.",[13,126,127],{},"Значительное улучшение выразительности анимации достигается за счет динамического изменения весов нейросети в зависимости от фазовой функции — такой подход позволяет нейросети обучаться на основе большого набора данных с высокой размерностью, где геометрия окружающей среды и данные о движении человека взаимосвязаны. Архитектура PFNN позволяет избегать смешивания данных с разных фаз, и функция регрессии плавно изменяется со временем в зависимости от фазы. После обучения система может автоматически генерировать подходящие и выразительные движения для персонажа, передвигающегося по пересеченной местности, прыгающего и избегающего препятствий — как в естественной, так и в городской среде.",[13,129,130],{},[79,131],{"alt":132,"src":133},"Архитектура PFNN","/img/blog/article-ml-in-animation-overview/1.png",[13,135,136],{},"Входными данными для нейросети являются предыдущая поза и вход с контроллера, а выходные данные включают в себя изменение фазы, текущую позу персонажа и некоторые дополнительные параметры.",[13,138,139],{},"В качестве данных для тренировки вместе с анимацией подаются параметры контроллера, состоящие из фазы движения, семантических лейблов походки, траектории движения персонажа и карты высот вдоль траектории.",[141,142,143,212,215],"ul",{},[58,144,145,146,170,171,211],{},"Разметка фаз: выполняется в полуавтоматическом режиме. Контакт ног с поверхностью вычисляется автоматически через скорость, после чего вручную корректируются. После получения данных о контакте назначаются фазы: когда правая нога контактирует с поверхностью, фаза = 0, далее левая = ",[147,148,151],"span",{"className":149},[150],"katex",[152,153,155],"math",{"xmlns":154},"http://www.w3.org/1998/Math/MathML",[156,157,158,165],"semantics",{},[159,160,161],"mrow",{},[162,163,164],"mi",{},"π",[166,167,169],"annotation",{"encoding":168},"application/x-tex","\\pi",", снова правая = ",[147,172,174],{"className":173},[150],[152,175,176],{"xmlns":154},[156,177,178,208],{},[159,179,180,184,186,191,194,197,199,201,203,205],{},[181,182,183],"mn",{},"2",[162,185,164],{},[187,188,190],"mo",{"stretchy":189},"false","(",[181,192,193],{},"0",[187,195,196],{},"≤",[162,198,13],{},[187,200,196],{},[181,202,183],{},[162,204,164],{},[187,206,207],{"stretchy":189},")",[166,209,210],{"encoding":168},"2\\pi(0 \\leq p \\leq 2\\pi)",". Между кадрами выполняется интерполяция",[58,213,214],{},"Разметка походки: выполняется вручную, представляется в виде бинарного вектора, чтобы устранить неоднозначность близких по типу движений и описать специфические сценарии движения",[58,216,217],{},"Траектория и карта высот: извлекается root transformation персонажа, описывающая траекторию движения. Далее, вдоль всей траектории движения и перпендикулярно по бокам от нее вычисляется высота поверхности.",[13,219,220],{},[79,221],{"alt":222,"src":223},"Параметризация системы","/img/blog/article-ml-in-animation-overview/2.png",[13,225,226],{},"Для описания состояния персонажа берутся локальные по отношению к root transformation позиции и скорости костей на текущем кадре анимации, а для построении траектории выполняется семплирование 5 кадров из будущего и 6 из прошлого, суммарно покрывающих 1 секунду движения в прошлом и 0.9 секунд в будущем. Для каждого семпла извлекается позиция и направление траектории относительно root transformation, бинарный вектор, описывающий походку, и высота поверхности под траекторией и по бокам от нее на удалении в 25 см. Таким образом, полный вектор входных данных для нейросети для одного кадра анимации выглядит так:",[147,228,230],{"className":229},[150],[152,231,233],{"xmlns":154,"display":232},"block",[156,234,235,339],{},[159,236,237,246,249,327,330],{},[238,239,240,243],"msub",{},[162,241,242],{},"x",[162,244,245],{},"i",[187,247,248],{},"=",[159,250,251,255,265,274,283,292,309,324],{},[187,252,254],{"fence":253},"true","{",[256,257,258,261,263],"msubsup",{},[162,259,260],{},"t",[162,262,245],{},[162,264,13],{},[256,266,267,269,271],{},[162,268,260],{},[162,270,245],{},[162,272,273],{},"d",[256,275,276,278,280],{},[162,277,260],{},[162,279,245],{},[162,281,282],{},"h",[256,284,285,287,289],{},[162,286,260],{},[162,288,245],{},[162,290,291],{},"g",[256,293,294,297,307],{},[162,295,296],{},"j",[159,298,299,301,304],{},[162,300,245],{},[187,302,303],{},"−",[181,305,306],{},"1",[162,308,13],{},[256,310,311,313,321],{},[162,312,296],{},[159,314,315,317,319],{},[162,316,245],{},[187,318,303],{},[181,320,306],{},[162,322,323],{},"v",[187,325,326],{"fence":253},"}",[187,328,329],{},"∈",[331,332,333,336],"msup",{},[162,334,335],{},"R",[162,337,338],{},"n",[166,340,341],{"encoding":168},"x_i= \\left\\{ t_i^p t_i^d t_i^h t_i^g j_{i-1}^p j_{i-1}^v \\right\\} \\in R^n",[141,343,344,360,381,398,415,450,485,521,557,598],{},[58,345,346,359],{},[147,347,349],{"className":348},[150],[152,350,351],{"xmlns":154},[156,352,353,357],{},[159,354,355],{},[162,356,245],{},[166,358,245],{"encoding":168}," – текущий кадр",[58,361,362,380],{},[147,363,365],{"className":364},[150],[152,366,367],{"xmlns":154},[156,368,369,377],{},[159,370,371,373,375],{},[162,372,245],{},[187,374,303],{},[181,376,306],{},[166,378,379],{"encoding":168},"i-1"," – предыдущий кадр",[58,382,383,397],{},[147,384,386],{"className":385},[150],[152,387,388],{"xmlns":154},[156,389,390,395],{},[159,391,392],{},[162,393,394],{},"s",[166,396,394],{"encoding":168}," – количество семплированных кадров (12 штук)",[58,399,400,414],{},[147,401,403],{"className":402},[150],[152,404,405],{"xmlns":154},[156,406,407,412],{},[159,408,409],{},[162,410,411],{},"b",[166,413,411],{"encoding":168}," – количество костей в скелете",[58,416,417,449],{},[147,418,420],{"className":419},[150],[152,421,422],{"xmlns":154},[156,423,424,446],{},[159,425,426,434,436],{},[256,427,428,430,432],{},[162,429,260],{},[162,431,245],{},[162,433,13],{},[187,435,329],{},[331,437,438,440],{},[162,439,335],{},[159,441,442,444],{},[181,443,183],{},[162,445,394],{},[166,447,448],{"encoding":168},"t_i^p \\in R^{2s}"," – позиции траектории движения в 2D горизонтальной плоскости",[58,451,452,484],{},[147,453,455],{"className":454},[150],[152,456,457],{"xmlns":154},[156,458,459,481],{},[159,460,461,469,471],{},[256,462,463,465,467],{},[162,464,260],{},[162,466,245],{},[162,468,273],{},[187,470,329],{},[331,472,473,475],{},[162,474,335],{},[159,476,477,479],{},[181,478,183],{},[162,480,394],{},[166,482,483],{"encoding":168},"t_i^d \\in R^{2s}"," – направления траектории движения в 2D горизонтальной плоскости",[58,486,487,520],{},[147,488,490],{"className":489},[150],[152,491,492],{"xmlns":154},[156,493,494,517],{},[159,495,496,504,506],{},[256,497,498,500,502],{},[162,499,260],{},[162,501,245],{},[162,503,282],{},[187,505,329],{},[331,507,508,510],{},[162,509,335],{},[159,511,512,515],{},[181,513,514],{},"3",[162,516,394],{},[166,518,519],{"encoding":168},"t_i^h \\in R^{3s}"," – высоты в точках слева, справа и посередине траектории движения",[58,522,523,556],{},[147,524,526],{"className":525},[150],[152,527,528],{"xmlns":154},[156,529,530,553],{},[159,531,532,540,542],{},[256,533,534,536,538],{},[162,535,260],{},[162,537,245],{},[162,539,291],{},[187,541,329],{},[331,543,544,546],{},[162,545,335],{},[159,547,548,551],{},[181,549,550],{},"5",[162,552,394],{},[166,554,555],{"encoding":168},"t_i^g \\in R^{5s}"," – семантические лейблы, описывающие походку персонажа и другую информацию",[58,558,559,597],{},[147,560,562],{"className":561},[150],[152,563,564],{"xmlns":154},[156,565,566,594],{},[159,567,568,582,584],{},[256,569,570,572,580],{},[162,571,296],{},[159,573,574,576,578],{},[162,575,245],{},[187,577,303],{},[181,579,306],{},[162,581,13],{},[187,583,329],{},[331,585,586,588],{},[162,587,335],{},[159,589,590,592],{},[181,591,514],{},[162,593,411],{},[166,595,596],{"encoding":168},"j_{i-1}^p \\in R^{3b}"," – локальные позиции костей",[58,599,600,638],{},[147,601,603],{"className":602},[150],[152,604,605],{"xmlns":154},[156,606,607,635],{},[159,608,609,623,625],{},[256,610,611,613,621],{},[162,612,296],{},[159,614,615,617,619],{},[162,616,245],{},[187,618,303],{},[181,620,306],{},[162,622,323],{},[187,624,329],{},[331,626,627,629],{},[162,628,335],{},[159,630,631,633],{},[181,632,514],{},[162,634,411],{},[166,636,637],{"encoding":168},"j_{i-1}^v \\in R^{3b}"," – локальные скорости костей",[13,640,641,642,662],{},"В оригинальной статье в качестве лейблов ",[147,643,645],{"className":644},[150],[152,646,647],{"xmlns":154},[156,648,649,659],{},[159,650,651],{},[256,652,653,655,657],{},[162,654,260],{},[162,656,245],{},[162,658,291],{},[166,660,661],{"encoding":168},"t_i^g"," использовались следующие:",[55,664,665,668,671,674,677],{},[58,666,667],{},"состояние покоя",[58,669,670],{},"ходьба",[58,672,673],{},"бег",[58,675,676],{},"прыжок",[58,678,679],{},"приседание",[13,681,682],{},"Результатом инференса нейросети является вектор:",[147,684,686],{"className":685},[150],[152,687,688],{"xmlns":154,"display":232},[156,689,690,827],{},[159,691,692,699,701,818,820],{},[238,693,694,697],{},[162,695,696],{},"y",[162,698,245],{},[187,700,248],{},[159,702,703,705,720,734,742,750,759,774,787,799,809,816],{},[187,704,254],{"fence":253},[256,706,707,709,718],{},[162,708,260],{},[159,710,711,713,716],{},[162,712,245],{},[187,714,715],{},"+",[181,717,306],{},[162,719,13],{},[256,721,722,724,732],{},[162,723,260],{},[159,725,726,728,730],{},[162,727,245],{},[187,729,715],{},[181,731,306],{},[162,733,273],{},[256,735,736,738,740],{},[162,737,296],{},[162,739,245],{},[162,741,13],{},[256,743,744,746,748],{},[162,745,296],{},[162,747,245],{},[162,749,323],{},[256,751,752,754,756],{},[162,753,296],{},[162,755,245],{},[162,757,758],{},"a",[760,761,762,771],"mover",{"accent":253},[256,763,764,767,769],{},[162,765,766],{},"r",[162,768,245],{},[162,770,242],{},[187,772,773],{},"˙",[760,775,776,785],{"accent":253},[256,777,778,780,782],{},[162,779,766],{},[162,781,245],{},[162,783,784],{},"z",[187,786,773],{},[760,788,789,797],{"accent":253},[256,790,791,793,795],{},[162,792,766],{},[162,794,245],{},[162,796,758],{},[187,798,773],{},[760,800,801,807],{"accent":253},[238,802,803,805],{},[162,804,13],{},[162,806,245],{},[187,808,773],{},[238,810,811,814],{},[162,812,813],{},"c",[162,815,245],{},[187,817,326],{"fence":253},[187,819,329],{},[331,821,822,824],{},[162,823,335],{},[162,825,826],{},"m",[166,828,829],{"encoding":168},"y_i = \\left\\{ t_{i+1}^p t_{i+1}^d j_i^p j_i^v j_i^a \\dot{r_i^x} \\dot{r_i^z} \\dot{r_i^a} \\dot{p_i} c_i \\right\\} \\in R^m",[141,831,832,848,864,905,946,981,1016,1051,1082,1113,1144,1173],{},[58,833,834,847],{},[147,835,837],{"className":836},[150],[152,838,839],{"xmlns":154},[156,840,841,845],{},[159,842,843],{},[162,844,394],{},[166,846,394],{"encoding":168}," — количество семплированных кадров (12 штук)",[58,849,850,863],{},[147,851,853],{"className":852},[150],[152,854,855],{"xmlns":154},[156,856,857,861],{},[159,858,859],{},[162,860,411],{},[166,862,411],{"encoding":168}," — количество костей в скелете",[58,865,866,904],{},[147,867,869],{"className":868},[150],[152,870,871],{"xmlns":154},[156,872,873,901],{},[159,874,875,889,891],{},[256,876,877,879,887],{},[162,878,260],{},[159,880,881,883,885],{},[162,882,245],{},[187,884,715],{},[181,886,306],{},[162,888,13],{},[187,890,329],{},[331,892,893,895],{},[162,894,335],{},[159,896,897,899],{},[181,898,183],{},[162,900,394],{},[166,902,903],{"encoding":168},"t_{i+1}^p \\in R^{2s}"," — предсказанные позиции таректории на следующем кадре",[58,906,907,945],{},[147,908,910],{"className":909},[150],[152,911,912],{"xmlns":154},[156,913,914,942],{},[159,915,916,930,932],{},[256,917,918,920,928],{},[162,919,260],{},[159,921,922,924,926],{},[162,923,245],{},[187,925,715],{},[181,927,306],{},[162,929,273],{},[187,931,329],{},[331,933,934,936],{},[162,935,335],{},[159,937,938,940],{},[181,939,183],{},[162,941,394],{},[166,943,944],{"encoding":168},"t_{i+1}^d \\in R^{2s}"," — предсказанные направления траектории на следующем кадре",[58,947,948,980],{},[147,949,951],{"className":950},[150],[152,952,953],{"xmlns":154},[156,954,955,977],{},[159,956,957,965,967],{},[256,958,959,961,963],{},[162,960,296],{},[162,962,245],{},[162,964,13],{},[187,966,329],{},[331,968,969,971],{},[162,970,335],{},[159,972,973,975],{},[181,974,514],{},[162,976,411],{},[166,978,979],{"encoding":168},"j_i^p \\in R^{3b}"," — локальные позиции костей",[58,982,983,1015],{},[147,984,986],{"className":985},[150],[152,987,988],{"xmlns":154},[156,989,990,1012],{},[159,991,992,1000,1002],{},[256,993,994,996,998],{},[162,995,296],{},[162,997,245],{},[162,999,323],{},[187,1001,329],{},[331,1003,1004,1006],{},[162,1005,335],{},[159,1007,1008,1010],{},[181,1009,514],{},[162,1011,411],{},[166,1013,1014],{"encoding":168},"j_i^v \\in R^{3b}"," — локальные скорости костей",[58,1017,1018,1050],{},[147,1019,1021],{"className":1020},[150],[152,1022,1023],{"xmlns":154},[156,1024,1025,1047],{},[159,1026,1027,1035,1037],{},[256,1028,1029,1031,1033],{},[162,1030,296],{},[162,1032,245],{},[162,1034,758],{},[187,1036,329],{},[331,1038,1039,1041],{},[162,1040,335],{},[159,1042,1043,1045],{},[181,1044,514],{},[162,1046,411],{},[166,1048,1049],{"encoding":168},"j_i^a \\in R^{3b}"," — углы костей, выраженные в форме экспоненциальной карты",[58,1052,1053,1081],{},[147,1054,1056],{"className":1055},[150],[152,1057,1058],{"xmlns":154},[156,1059,1060,1078],{},[159,1061,1062,1074,1076],{},[760,1063,1064,1072],{"accent":253},[256,1065,1066,1068,1070],{},[162,1067,766],{},[162,1069,245],{},[162,1071,242],{},[187,1073,773],{},[187,1075,329],{},[162,1077,335],{},[166,1079,1080],{"encoding":168},"\\dot{r_i^x} \\in R"," — линейная скорость root transformation по оси X относительно направления движения «вперед»",[58,1083,1084,1112],{},[147,1085,1087],{"className":1086},[150],[152,1088,1089],{"xmlns":154},[156,1090,1091,1109],{},[159,1092,1093,1105,1107],{},[760,1094,1095,1103],{"accent":253},[256,1096,1097,1099,1101],{},[162,1098,766],{},[162,1100,245],{},[162,1102,784],{},[187,1104,773],{},[187,1106,329],{},[162,1108,335],{},[166,1110,1111],{"encoding":168},"\\dot{r_i^z} \\in R"," — линейная скорость root transformation по оси Z относительно направления движения «вперед»",[58,1114,1115,1143],{},[147,1116,1118],{"className":1117},[150],[152,1119,1120],{"xmlns":154},[156,1121,1122,1140],{},[159,1123,1124,1136,1138],{},[760,1125,1126,1134],{"accent":253},[256,1127,1128,1130,1132],{},[162,1129,766],{},[162,1131,245],{},[162,1133,758],{},[187,1135,773],{},[187,1137,329],{},[162,1139,335],{},[166,1141,1142],{"encoding":168},"\\dot{r_i^a} \\in R"," — угловая скорость root transformation вокруг вертикальной оси",[58,1145,1146,1172],{},[147,1147,1149],{"className":1148},[150],[152,1150,1151],{"xmlns":154},[156,1152,1153,1169],{},[159,1154,1155,1165,1167],{},[760,1156,1157,1163],{"accent":253},[238,1158,1159,1161],{},[162,1160,13],{},[162,1162,245],{},[187,1164,773],{},[187,1166,329],{},[162,1168,335],{},[166,1170,1171],{"encoding":168},"\\dot{p_i} \\in R"," — изменение фазы",[58,1174,1175,1202],{},[147,1176,1178],{"className":1177},[150],[152,1179,1180],{"xmlns":154},[156,1181,1182,1199],{},[159,1183,1184,1190,1192],{},[238,1185,1186,1188],{},[162,1187,813],{},[162,1189,245],{},[187,1191,329],{},[331,1193,1194,1196],{},[162,1195,335],{},[181,1197,1198],{},"4",[166,1200,1201],{"encoding":168},"c_i \\in R^4"," — информация о контакте ног (носка и пятки) с поверхностью",[13,1204,1205],{},"Нейросеть состоит из 3х слоев:",[147,1207,1209],{"className":1208},[150],[152,1210,1211],{"xmlns":154,"display":232},[156,1212,1213,1300],{},[159,1214,1215,1219,1221,1223,1226,1228,1230,1232,1239,1242,1245,1248,1250,1256,1258,1260,1262,1264,1270,1272,1274,1280,1282,1284,1290,1292,1294],{},[162,1216,1218],{"mathvariant":1217},"normal","Φ",[187,1220,190],{"stretchy":189},[162,1222,242],{},[187,1224,1225],{"separator":253},";",[162,1227,758],{},[187,1229,207],{"stretchy":189},[187,1231,248],{},[238,1233,1234,1237],{},[162,1235,1236],{},"W",[181,1238,183],{},[162,1240,1241],{},"E",[162,1243,1244],{},"L",[162,1246,1247],{},"U",[187,1249,190],{"stretchy":189},[238,1251,1252,1254],{},[162,1253,1236],{},[181,1255,306],{},[162,1257,1241],{},[162,1259,1244],{},[162,1261,1247],{},[187,1263,190],{"stretchy":189},[238,1265,1266,1268],{},[162,1267,1236],{},[181,1269,193],{},[162,1271,242],{},[187,1273,715],{},[238,1275,1276,1278],{},[162,1277,411],{},[181,1279,193],{},[187,1281,207],{"stretchy":189},[187,1283,715],{},[238,1285,1286,1288],{},[162,1287,411],{},[181,1289,306],{},[187,1291,207],{"stretchy":189},[187,1293,715],{},[238,1295,1296,1298],{},[162,1297,411],{},[181,1299,183],{},[166,1301,1302],{"encoding":168},"\\Phi(x; a) = W_2 ELU(W_1 ELU(W_0 x + b_0) + b_1) + b_2",[13,1304,1305,1306,1321,1322,1351,1352,1371,1372,1386],{},"Количество нейронов в каждом слое = 512. Веса нейросети a вычисляются в зависимости от параметров   ",[147,1307,1309],{"className":1308},[150],[152,1310,1311],{"xmlns":154},[156,1312,1313,1318],{},[159,1314,1315],{},[162,1316,1317],{},"β",[166,1319,1320],{"encoding":168},"\\beta"," на каждом кадре отдельной фазовой функцией ",[147,1323,1325],{"className":1324},[150],[152,1326,1327],{"xmlns":154},[156,1328,1329,1348],{},[159,1330,1331,1333,1335,1338,1340,1342,1344,1346],{},[162,1332,758],{},[187,1334,248],{},[162,1336,1337],{"mathvariant":1217},"Θ",[187,1339,190],{"stretchy":189},[162,1341,13],{},[187,1343,1225],{"separator":253},[162,1345,1317],{},[187,1347,207],{"stretchy":189},[166,1349,1350],{"encoding":168},"a=\\Theta(p;β)",". В качестве этой функции могут выступать еще одна нейросеть или гауссовский процесс, в самой же статье предлагается использовать циклический кубический сплайн Catmull-Rom c 4-мя контрольными точками. Такой подход означает, что каждая контрольная точка ",[147,1353,1355],{"className":1354},[150],[152,1356,1357],{"xmlns":154},[156,1358,1359,1368],{},[159,1360,1361],{},[238,1362,1363,1365],{},[162,1364,758],{},[162,1366,1367],{},"k",[166,1369,1370],{"encoding":168},"a_k"," отражает конкретную конфигурацию весов a нейросети, а функция ",[147,1373,1375],{"className":1374},[150],[152,1376,1377],{"xmlns":154},[156,1378,1379,1383],{},[159,1380,1381],{},[162,1382,1337],{"mathvariant":1217},[166,1384,1385],{"encoding":168},"\\Theta"," делает гладкую интерполяцию между этими конфигурациями.",[13,1388,1389],{},[147,1390,1392],{"className":1391},[150],[152,1393,1394],{"xmlns":154},[156,1395,1396,1422],{},[159,1397,1398,1400,1402,1404,1406,1408,1410,1412],{},[162,1399,1337],{"mathvariant":1217},[187,1401,190],{"stretchy":189},[162,1403,13],{},[187,1405,1225],{"separator":253},[162,1407,1317],{},[187,1409,207],{"stretchy":189},[187,1411,248],{},[238,1413,1414,1416],{},[162,1415,758],{},[238,1417,1418,1420],{},[162,1419,1367],{},[181,1421,306],{},[166,1423,1424],{"encoding":168},"\\Theta(p; \\beta) = a_{k_1}",[13,1426,1427],{},[147,1428,1430],{"className":1429},[150],[152,1431,1432],{"xmlns":154},[156,1433,1434,1480],{},[159,1435,1436,1438,1441,1443,1450,1460,1462,1468,1478],{},[187,1437,715],{},[162,1439,1440],{},"w",[187,1442,190],{"stretchy":189},[1444,1445,1446,1448],"mfrac",{},[181,1447,306],{},[181,1449,183],{},[238,1451,1452,1454],{},[162,1453,758],{},[238,1455,1456,1458],{},[162,1457,1367],{},[181,1459,183],{},[187,1461,303],{},[1444,1463,1464,1466],{},[181,1465,306],{},[181,1467,183],{},[238,1469,1470,1472],{},[162,1471,758],{},[238,1473,1474,1476],{},[162,1475,1367],{},[181,1477,193],{},[187,1479,207],{"stretchy":189},[166,1481,1482],{"encoding":168},"+w(\\frac{1}{2}a_{k_2} - \\frac{1}{2}a_{k_0})",[13,1484,1485],{},[147,1486,1488],{"className":1487},[150],[152,1489,1490],{"xmlns":154},[156,1491,1492,1566],{},[159,1493,1494,1496,1502,1504,1514,1516,1522,1532,1534,1536,1546,1548,1554,1564],{},[187,1495,715],{},[331,1497,1498,1500],{},[162,1499,1440],{},[181,1501,183],{},[187,1503,190],{"stretchy":189},[238,1505,1506,1508],{},[162,1507,758],{},[238,1509,1510,1512],{},[162,1511,1367],{},[181,1513,193],{},[187,1515,303],{},[1444,1517,1518,1520],{},[181,1519,550],{},[181,1521,183],{},[238,1523,1524,1526],{},[162,1525,758],{},[238,1527,1528,1530],{},[162,1529,1367],{},[181,1531,306],{},[187,1533,715],{},[181,1535,183],{},[238,1537,1538,1540],{},[162,1539,758],{},[238,1541,1542,1544],{},[162,1543,1367],{},[181,1545,183],{},[187,1547,303],{},[1444,1549,1550,1552],{},[181,1551,306],{},[181,1553,183],{},[238,1555,1556,1558],{},[162,1557,758],{},[238,1559,1560,1562],{},[162,1561,1367],{},[181,1563,514],{},[187,1565,207],{"stretchy":189},[166,1567,1568],{"encoding":168},"+w^2(a_{k_0} - \\frac{5}{2}a_{k_1} + 2a_{k_2} - \\frac{1}{2}a_{k_3})",[13,1570,1571],{},[147,1572,1574],{"className":1573},[150],[152,1575,1576],{"xmlns":154},[156,1577,1578,1662],{},[159,1579,1580,1582,1588,1590,1596,1606,1608,1614,1624,1626,1632,1642,1644,1650,1660],{},[187,1581,715],{},[331,1583,1584,1586],{},[162,1585,1440],{},[181,1587,514],{},[187,1589,190],{"stretchy":189},[1444,1591,1592,1594],{},[181,1593,514],{},[181,1595,183],{},[238,1597,1598,1600],{},[162,1599,758],{},[238,1601,1602,1604],{},[162,1603,1367],{},[181,1605,306],{},[187,1607,303],{},[1444,1609,1610,1612],{},[181,1611,514],{},[181,1613,183],{},[238,1615,1616,1618],{},[162,1617,758],{},[238,1619,1620,1622],{},[162,1621,1367],{},[181,1623,183],{},[187,1625,715],{},[1444,1627,1628,1630],{},[181,1629,306],{},[181,1631,183],{},[238,1633,1634,1636],{},[162,1635,758],{},[238,1637,1638,1640],{},[162,1639,1367],{},[181,1641,514],{},[187,1643,303],{},[1444,1645,1646,1648],{},[181,1647,306],{},[181,1649,183],{},[238,1651,1652,1654],{},[162,1653,758],{},[238,1655,1656,1658],{},[162,1657,1367],{},[181,1659,193],{},[187,1661,207],{"stretchy":189},[166,1663,1664],{"encoding":168},"+w^3(\\frac{3}{2}a_{k_1} - \\frac{3}{2}a_{k_2} + \\frac{1}{2}a_{k_3} - \\frac{1}{2}a_{k_0})",[13,1666,1667],{},[147,1668,1670],{"className":1669},[150],[152,1671,1672],{"xmlns":154},[156,1673,1674,1707],{},[159,1675,1676,1678,1680,1694,1696,1698,1701,1703,1705],{},[162,1677,1440],{},[187,1679,248],{},[1444,1681,1682,1688],{},[159,1683,1684,1686],{},[181,1685,1198],{},[162,1687,13],{},[159,1689,1690,1692],{},[181,1691,183],{},[162,1693,164],{},[187,1695,190],{"stretchy":189},[162,1697,826],{},[162,1699,1700],{},"o",[162,1702,273],{},[181,1704,306],{},[187,1706,207],{"stretchy":189},[166,1708,1709],{"encoding":168},"w = \\frac{4p}{2\\pi} (mod 1)",[13,1711,1712],{},[147,1713,1715],{"className":1714},[150],[152,1716,1717],{"xmlns":154},[156,1718,1719,1771],{},[159,1720,1721,1727,1729,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769],{},[238,1722,1723,1725],{},[162,1724,1367],{},[162,1726,338],{},[187,1728,248],{},[159,1730,1731,1734,1748],{},[187,1732,1733],{"fence":253},"[",[1444,1735,1736,1742],{},[159,1737,1738,1740],{},[181,1739,1198],{},[162,1741,13],{},[159,1743,1744,1746],{},[181,1745,183],{},[162,1747,164],{},[187,1749,1750],{"fence":253},"]",[187,1752,715],{},[162,1754,338],{},[187,1756,303],{},[181,1758,306],{},[187,1760,190],{"stretchy":189},[162,1762,826],{},[162,1764,1700],{},[162,1766,273],{},[181,1768,1198],{},[187,1770,207],{"stretchy":189},[166,1772,1773],{"encoding":168},"k_n = \\left[\\frac{4p}{2\\pi} \\right] + n - 1 (mod 4)",[13,1775,1776,1777,1823],{},"Тренировка нейросети сводится к решению задачи оптимизации параметров фазовой функции ",[147,1778,1780],{"className":1779},[150],[152,1781,1782],{"xmlns":154},[156,1783,1784,1820],{},[159,1785,1786,1788,1790],{},[162,1787,1317],{},[187,1789,248],{},[159,1791,1792,1794,1800,1806,1812,1818],{},[187,1793,254],{"fence":253},[238,1795,1796,1798],{},[162,1797,758],{},[181,1799,193],{},[238,1801,1802,1804],{},[162,1803,758],{},[181,1805,306],{},[238,1807,1808,1810],{},[162,1809,758],{},[181,1811,183],{},[238,1813,1814,1816],{},[162,1815,758],{},[181,1817,514],{},[187,1819,326],{"fence":253},[166,1821,1822],{"encoding":168},"\\beta = \\left\\{ a_0 a_1 a_2 a_3 \\right\\}",". Используется следующая функция потерь:",[147,1825,1827],{"className":1826},[150],[152,1828,1829],{"xmlns":154,"display":232},[156,1830,1831,1923],{},[159,1832,1833,1836,1838,1840,1842,1844,1847,1850,1853,1855,1858,1860,1862,1864,1866,1869,1871,1873,1875,1899,1907,1909,1912,1915,1917],{},[162,1834,1835],{},"C",[162,1837,1700],{},[162,1839,394],{},[162,1841,260],{},[187,1843,190],{"stretchy":189},[162,1845,1846],{},"X",[187,1848,1849],{"separator":253},",",[162,1851,1852],{},"Y",[187,1854,1849],{"separator":253},[162,1856,1857],{},"P",[187,1859,1849],{"separator":253},[162,1861,1317],{},[187,1863,207],{"stretchy":189},[187,1865,248],{},[187,1867,1868],{"stretchy":189},"∥",[162,1870,1852],{},[187,1872,303],{},[162,1874,1218],{"mathvariant":1217},[159,1876,1877,1879,1881,1883,1885,1897],{},[187,1878,190],{"fence":253},[162,1880,1846],{},[187,1882,1225],{"separator":253},[162,1884,1337],{"mathvariant":1217},[159,1886,1887,1889,1891,1893,1895],{},[187,1888,190],{"fence":253},[162,1890,1857],{},[187,1892,1225],{"separator":253},[162,1894,1317],{},[187,1896,207],{"fence":253},[187,1898,207],{"fence":253},[256,1900,1901,1903,1905],{},[187,1902,1868],{"stretchy":189},[181,1904,183],{},[181,1906,183],{},[187,1908,715],{},[162,1910,1911],{},"γ",[187,1913,1914],{"stretchy":189},"∣",[162,1916,1317],{},[238,1918,1919,1921],{},[187,1920,1914],{"stretchy":189},[181,1922,306],{},[166,1924,1925],{"encoding":168},"Cost(X, Y, P, \\beta) = \\lVert Y - \\Phi \\left(X; \\Theta\\left(P; \\beta\\right)\\right)  \\rVert_2^2 + \\gamma \\lvert \\beta \\rvert_1",[141,1927,1928,1983],{},[58,1929,1930,1982],{},[147,1931,1933],{"className":1932},[150],[152,1934,1935],{"xmlns":154},[156,1936,1937,1979],{},[159,1938,1939,1941,1943,1945,1947,1971],{},[187,1940,1868],{"stretchy":189},[162,1942,1852],{},[187,1944,303],{},[162,1946,1218],{"mathvariant":1217},[159,1948,1949,1951,1953,1955,1957,1969],{},[187,1950,190],{"fence":253},[162,1952,1846],{},[187,1954,1225],{"separator":253},[162,1956,1337],{"mathvariant":1217},[159,1958,1959,1961,1963,1965,1967],{},[187,1960,190],{"fence":253},[162,1962,1857],{},[187,1964,1225],{"separator":253},[162,1966,1317],{},[187,1968,207],{"fence":253},[187,1970,207],{"fence":253},[256,1972,1973,1975,1977],{},[187,1974,1868],{"stretchy":189},[181,1976,183],{},[181,1978,183],{},[166,1980,1981],{"encoding":168},"\\lVert Y - \\Phi \\left(X; \\Theta\\left(P; \\beta\\right)\\right)  \\rVert_2^2"," — среднее квадратическое отклонение",[58,1984,1985,2009,2010],{},[147,1986,1988],{"className":1987},[150],[152,1989,1990],{"xmlns":154},[156,1991,1992,2006],{},[159,1993,1994,1996,1998,2000],{},[162,1995,1911],{},[187,1997,1914],{"stretchy":189},[162,1999,1317],{},[238,2001,2002,2004],{},[187,2003,1914],{"stretchy":189},[181,2005,306],{},[166,2007,2008],{"encoding":168},"\\gamma \\lvert \\beta \\rvert_1"," — регуляризация, введеная, чтобы веса не были слишком большими ",[147,2011,2013],{"className":2012},[150],[152,2014,2015],{"xmlns":154},[156,2016,2017,2030],{},[159,2018,2019,2021,2023,2025,2028],{},[187,2020,190],{"stretchy":189},[162,2022,1911],{},[187,2024,248],{},[181,2026,2027],{},"0.01",[187,2029,207],{"stretchy":189},[166,2031,2032],{"encoding":168},"(\\gamma = 0.01)",[13,2034,2035],{},"В качестве оптимизатора выбран Adam",[13,2037,2038,2039,2052,2053,2066,2067,2111],{},"В режиме реального времени на каждый кадр анимации на вход нейросети подаются фаза ",[147,2040,2042],{"className":2041},[150],[152,2043,2044],{"xmlns":154},[156,2045,2046,2050],{},[159,2047,2048],{},[162,2049,13],{},[166,2051,13],{"encoding":168}," и вектор ",[147,2054,2056],{"className":2055},[150],[152,2057,2058],{"xmlns":154},[156,2059,2060,2064],{},[159,2061,2062],{},[162,2063,242],{},[166,2065,242],{"encoding":168},". Скорость и направление движения, полученное с контроллера по каждому будущему кадру, смешивается с данными, предсказанными нейросетью на предыдущем кадре ",[147,2068,2070],{"className":2069},[150],[152,2071,2072],{"xmlns":154},[156,2073,2074,2108],{},[159,2075,2076,2078,2092,2106],{},[187,2077,190],{"stretchy":189},[256,2079,2080,2082,2090],{},[162,2081,260],{},[159,2083,2084,2086,2088],{},[162,2085,245],{},[187,2087,715],{},[181,2089,306],{},[162,2091,13],{},[256,2093,2094,2096,2104],{},[162,2095,260],{},[159,2097,2098,2100,2102],{},[162,2099,245],{},[187,2101,715],{},[181,2103,306],{},[162,2105,273],{},[187,2107,207],{"stretchy":189},[166,2109,2110],{"encoding":168},"(t_{i+1}^p t_{i+1}^d)",", по следующей формуле:",[147,2113,2115],{"className":2114},[150],[152,2116,2117],{"xmlns":154,"display":232},[156,2118,2119,2220],{},[159,2120,2121,2124,2126,2128,2130,2133,2135,2137,2139,2141,2143,2146,2149,2151,2153,2155,2157,2163,2165,2171,2173,2175,2177,2180,2182,2184,2200,2206,2208,2214],{},[162,2122,2123],{},"T",[162,2125,766],{},[162,2127,758],{},[162,2129,296],{},[162,2131,2132],{},"e",[162,2134,813],{},[162,2136,260],{},[162,2138,1700],{},[162,2140,766],{},[162,2142,696],{},[162,2144,2145],{},"B",[162,2147,2148],{},"l",[162,2150,2132],{},[162,2152,338],{},[162,2154,273],{},[187,2156,190],{"stretchy":189},[238,2158,2159,2161],{},[162,2160,758],{},[181,2162,193],{},[187,2164,1849],{"separator":253},[238,2166,2167,2169],{},[162,2168,758],{},[181,2170,306],{},[187,2172,1849],{"separator":253},[162,2174,260],{},[187,2176,1849],{"separator":253},[162,2178,2179],{},"τ",[187,2181,207],{"stretchy":189},[187,2183,248],{},[159,2185,2186,2188,2190,2192,2198],{},[187,2187,190],{"fence":253},[181,2189,306],{},[187,2191,303],{},[331,2193,2194,2196],{},[162,2195,260],{},[162,2197,2179],{},[187,2199,207],{"fence":253},[238,2201,2202,2204],{},[162,2203,758],{},[181,2205,193],{},[187,2207,715],{},[331,2209,2210,2212],{},[162,2211,260],{},[162,2213,2179],{},[238,2215,2216,2218],{},[162,2217,758],{},[181,2219,306],{},[166,2221,2222],{"encoding":168},"TrajectoryBlend(a_0, a_1, t, \\tau) = \\left(1 - t^\\tau\\right) a_0 + t^\\tau a_1",[141,2224,2225,2249],{},[58,2226,2227],{},[147,2228,2230],{"className":2229},[150],[152,2231,2232],{"xmlns":154},[156,2233,2234,2246],{},[159,2235,2236,2238,2240,2242,2244],{},[181,2237,193],{},[187,2239,196],{},[162,2241,260],{},[187,2243,196],{},[181,2245,306],{},[166,2247,2248],{"encoding":168},"0 \\leq t \\leq 1",[58,2250,2251,2265],{},[147,2252,2254],{"className":2253},[150],[152,2255,2256],{"xmlns":154},[156,2257,2258,2262],{},[159,2259,2260],{},[162,2261,2179],{},[166,2263,2264],{"encoding":168},"\\tau"," — дополнительное смещение (bias), контролирующее отзывчивость персонажа",[29,2267,2269],{"id":2268},"mode-adaptive-neural-networks-for-quadruped-motion-control-mann","Mode-adaptive neural networks for quadruped motion control (MANN)",[13,2271,2272],{},"Данная работа посвящена развитию архитектуры PFNN с расширением до анимации четвероногих объектов. Ввиду принципиальных отличий в характере движений, невозможно определить одну фазу для всех четырех конечностей при смене походки. Ручная разметка неструктурированного набора данных также становится нецелесообразной. Поэтому фазовая функция заменяется дополнительной нейросетью. В итоге система включает в себя нейросеть предсказания движения и нейросеть выбора экспертов (gating network — аналогично архитектуре mixture of experts): если первая нейросеть предсказывает состояние персонажа, принимая на вход состояние персонажа с предыдущего кадра и данные с контроллера, то вторая нейросеть динамически обновляет веса первой нейросети посредством выбора и смешивания новой сущности под названием «экспертные веса», каждая из которых присуща конкретному шаблону движения. Такая архитектура позволяет нейросетям учиться на данных с неразмеченными походками, полностью исключая этап разметки фаз движения.",[13,2274,2275],{},"Классификация движений выполняется вручную с целью выделения 6-ти классов движения: передвижение, сидение, стояние, ожидание, лежание и прыжки. Делается это так, чтобы в режиме реального времени пользователь с помощью контроллера мог задавать класс движения.",[13,2277,2278],{},"В работе рассматриваются четыре вида походки: шаг, иноходь, рысь и галоп. Хотя для управления персонажем в реальном времени системе эти лейблы не требуются, выполняется анализ распределения этих видов в наборе данных, основываясь на расчетах скорости.",[13,2280,2281],{},"Входные и выходные данные в целом аналогичны PFNN: также семплируются 5 кадров из будущего и 6 из прошлого, вычисляется root transformation персонажа, направление движения.",[13,2283,2284],{},"Вектор входных данных:",[147,2286,2288],{"className":2287},[150],[152,2289,2290],{"xmlns":154,"display":232},[156,2291,2292,2403],{},[159,2293,2294,2300,2302,2395,2397],{},[238,2295,2296,2298],{},[162,2297,242],{},[162,2299,245],{},[187,2301,248],{},[159,2303,2304,2306,2314,2322,2330,2343,2351,2365,2379,2393],{},[187,2305,254],{"fence":253},[256,2307,2308,2310,2312],{},[162,2309,260],{},[162,2311,245],{},[162,2313,13],{},[256,2315,2316,2318,2320],{},[162,2317,260],{},[162,2319,245],{},[162,2321,273],{},[256,2323,2324,2326,2328],{},[162,2325,260],{},[162,2327,245],{},[162,2329,323],{},[256,2331,2332,2334,2336],{},[162,2333,260],{},[162,2335,245],{},[760,2337,2338,2340],{"accent":253},[162,2339,323],{},[187,2341,2342],{},"^",[256,2344,2345,2347,2349],{},[162,2346,260],{},[162,2348,245],{},[162,2350,758],{},[256,2352,2353,2355,2363],{},[162,2354,296],{},[159,2356,2357,2359,2361],{},[162,2358,245],{},[187,2360,303],{},[181,2362,306],{},[162,2364,13],{},[256,2366,2367,2369,2377],{},[162,2368,296],{},[159,2370,2371,2373,2375],{},[162,2372,245],{},[187,2374,303],{},[181,2376,306],{},[162,2378,766],{},[256,2380,2381,2383,2391],{},[162,2382,296],{},[159,2384,2385,2387,2389],{},[162,2386,245],{},[187,2388,303],{},[181,2390,306],{},[162,2392,323],{},[187,2394,326],{"fence":253},[187,2396,329],{},[331,2398,2399,2401],{},[162,2400,335],{},[162,2402,338],{},[166,2404,2405],{"encoding":168},"x_i = \\left\\{ t_i^p t_i^d t_i^v t_i^{\\hat v} t_i^a j_{i-1}^p j_{i-1}^r j_{i-1}^v \\right\\} \\in R^n",[141,2407,2408,2423,2442,2457,2473,2506,2539,2574,2613,2649,2688,2729],{},[58,2409,2410,359],{},[147,2411,2413],{"className":2412},[150],[152,2414,2415],{"xmlns":154},[156,2416,2417,2421],{},[159,2418,2419],{},[162,2420,245],{},[166,2422,245],{"encoding":168},[58,2424,2425,380],{},[147,2426,2428],{"className":2427},[150],[152,2429,2430],{"xmlns":154},[156,2431,2432,2440],{},[159,2433,2434,2436,2438],{},[162,2435,245],{},[187,2437,303],{},[181,2439,306],{},[166,2441,379],{"encoding":168},[58,2443,2444,397],{},[147,2445,2447],{"className":2446},[150],[152,2448,2449],{"xmlns":154},[156,2450,2451,2455],{},[159,2452,2453],{},[162,2454,394],{},[166,2456,394],{"encoding":168},[58,2458,2459,2472],{},[147,2460,2462],{"className":2461},[150],[152,2463,2464],{"xmlns":154},[156,2465,2466,2470],{},[159,2467,2468],{},[162,2469,411],{},[166,2471,411],{"encoding":168}," – количество костей",[58,2474,2475,449],{},[147,2476,2478],{"className":2477},[150],[152,2479,2480],{"xmlns":154},[156,2481,2482,2504],{},[159,2483,2484,2492,2494],{},[256,2485,2486,2488,2490],{},[162,2487,260],{},[162,2489,245],{},[162,2491,13],{},[187,2493,329],{},[331,2495,2496,2498],{},[162,2497,335],{},[159,2499,2500,2502],{},[181,2501,183],{},[162,2503,394],{},[166,2505,448],{"encoding":168},[58,2507,2508,484],{},[147,2509,2511],{"className":2510},[150],[152,2512,2513],{"xmlns":154},[156,2514,2515,2537],{},[159,2516,2517,2525,2527],{},[256,2518,2519,2521,2523],{},[162,2520,260],{},[162,2522,245],{},[162,2524,273],{},[187,2526,329],{},[331,2528,2529,2531],{},[162,2530,335],{},[159,2532,2533,2535],{},[181,2534,183],{},[162,2536,394],{},[166,2538,483],{"encoding":168},[58,2540,2541,2573],{},[147,2542,2544],{"className":2543},[150],[152,2545,2546],{"xmlns":154},[156,2547,2548,2570],{},[159,2549,2550,2558,2560],{},[256,2551,2552,2554,2556],{},[162,2553,260],{},[162,2555,245],{},[162,2557,323],{},[187,2559,329],{},[331,2561,2562,2564],{},[162,2563,335],{},[159,2565,2566,2568],{},[181,2567,183],{},[162,2569,394],{},[166,2571,2572],{"encoding":168},"t_i^v \\in R^{2s}"," – скорости в точках траектории движения в 2D горизонтальной плоскости",[58,2575,2576,2612],{},[147,2577,2579],{"className":2578},[150],[152,2580,2581],{"xmlns":154},[156,2582,2583,2609],{},[159,2584,2585,2597,2599],{},[256,2586,2587,2589,2591],{},[162,2588,260],{},[162,2590,245],{},[760,2592,2593,2595],{"accent":253},[162,2594,323],{},[187,2596,2342],{},[187,2598,329],{},[331,2600,2601,2603],{},[162,2602,335],{},[159,2604,2605,2607],{},[181,2606,306],{},[162,2608,394],{},[166,2610,2611],{"encoding":168},"t_i^{\\hat v} \\in R^{1s}"," – желаемая скорость в точках траектории движения",[58,2614,2615,2648],{},[147,2616,2618],{"className":2617},[150],[152,2619,2620],{"xmlns":154},[156,2621,2622,2645],{},[159,2623,2624,2632,2634],{},[256,2625,2626,2628,2630],{},[162,2627,260],{},[162,2629,245],{},[162,2631,758],{},[187,2633,329],{},[331,2635,2636,2638],{},[162,2637,335],{},[159,2639,2640,2643],{},[181,2641,2642],{},"6",[162,2644,394],{},[166,2646,2647],{"encoding":168},"t_i^a \\in R^{6s}"," – one-hot вектор классов движения в точках траектории движения",[58,2650,2651,597],{},[147,2652,2654],{"className":2653},[150],[152,2655,2656],{"xmlns":154},[156,2657,2658,2686],{},[159,2659,2660,2674,2676],{},[256,2661,2662,2664,2672],{},[162,2663,296],{},[159,2665,2666,2668,2670],{},[162,2667,245],{},[187,2669,303],{},[181,2671,306],{},[162,2673,13],{},[187,2675,329],{},[331,2677,2678,2680],{},[162,2679,335],{},[159,2681,2682,2684],{},[181,2683,514],{},[162,2685,411],{},[166,2687,596],{"encoding":168},[58,2689,2690,2728],{},[147,2691,2693],{"className":2692},[150],[152,2694,2695],{"xmlns":154},[156,2696,2697,2725],{},[159,2698,2699,2713,2715],{},[256,2700,2701,2703,2711],{},[162,2702,296],{},[159,2704,2705,2707,2709],{},[162,2706,245],{},[187,2708,303],{},[181,2710,306],{},[162,2712,766],{},[187,2714,329],{},[331,2716,2717,2719],{},[162,2718,335],{},[159,2720,2721,2723],{},[181,2722,2642],{},[162,2724,411],{},[166,2726,2727],{"encoding":168},"j_{i-1}^r \\in R^{6b}"," – локальные вращения костей",[58,2730,2731,638],{},[147,2732,2734],{"className":2733},[150],[152,2735,2736],{"xmlns":154},[156,2737,2738,2766],{},[159,2739,2740,2754,2756],{},[256,2741,2742,2744,2752],{},[162,2743,296],{},[159,2745,2746,2748,2750],{},[162,2747,245],{},[187,2749,303],{},[181,2751,306],{},[162,2753,323],{},[187,2755,329],{},[331,2757,2758,2760],{},[162,2759,335],{},[159,2761,2762,2764],{},[181,2763,514],{},[162,2765,411],{},[166,2767,637],{"encoding":168},[13,2769,2770],{},"Добавление вращения костей в вектор входных данных позволило получить более отзывчивую анимацию.",[13,2772,682],{},[147,2774,2776],{"className":2775},[150],[152,2777,2778],{"xmlns":154,"display":232},[156,2779,2780,2906],{},[159,2781,2782,2788,2790,2898,2900],{},[238,2783,2784,2786],{},[162,2785,696],{},[162,2787,245],{},[187,2789,248],{},[159,2791,2792,2794,2808,2822,2836,2844,2852,2860,2872,2884,2896],{},[187,2793,254],{"fence":253},[256,2795,2796,2798,2806],{},[162,2797,260],{},[159,2799,2800,2802,2804],{},[162,2801,245],{},[187,2803,715],{},[181,2805,306],{},[162,2807,13],{},[256,2809,2810,2812,2820],{},[162,2811,260],{},[159,2813,2814,2816,2818],{},[162,2815,245],{},[187,2817,715],{},[181,2819,306],{},[162,2821,273],{},[256,2823,2824,2826,2834],{},[162,2825,260],{},[159,2827,2828,2830,2832],{},[162,2829,245],{},[187,2831,715],{},[181,2833,306],{},[162,2835,323],{},[256,2837,2838,2840,2842],{},[162,2839,296],{},[162,2841,245],{},[162,2843,13],{},[256,2845,2846,2848,2850],{},[162,2847,296],{},[162,2849,245],{},[162,2851,766],{},[256,2853,2854,2856,2858],{},[162,2855,296],{},[162,2857,245],{},[162,2859,323],{},[256,2861,2862,2868,2870],{},[760,2863,2864,2866],{"accent":253},[162,2865,766],{},[187,2867,773],{},[162,2869,245],{},[162,2871,242],{},[256,2873,2874,2880,2882],{},[760,2875,2876,2878],{"accent":253},[162,2877,766],{},[187,2879,773],{},[162,2881,245],{},[162,2883,784],{},[256,2885,2886,2892,2894],{},[760,2887,2888,2890],{"accent":253},[162,2889,766],{},[187,2891,773],{},[162,2893,245],{},[162,2895,758],{},[187,2897,326],{"fence":253},[187,2899,329],{},[331,2901,2902,2904],{},[162,2903,335],{},[162,2905,826],{},[166,2907,2908],{"encoding":168},"y_i = \\left\\{ t_{i+1}^p t_{i+1}^d t_{i+1}^v j_i^p j_i^r j_i^v \\dot r_i^x \\dot r_i^z \\dot r_i^a  \\right\\} \\in R^m",[141,2910,2911,2927,2948,2963,2979,3019,3059,3100,3133,3168,3201,3232,3263],{},[58,2912,2913,2926],{},[147,2914,2916],{"className":2915},[150],[152,2917,2918],{"xmlns":154},[156,2919,2920,2924],{},[159,2921,2922],{},[162,2923,245],{},[166,2925,245],{"encoding":168}," — текущий кадр",[58,2928,2929,2947],{},[147,2930,2932],{"className":2931},[150],[152,2933,2934],{"xmlns":154},[156,2935,2936,2944],{},[159,2937,2938,2940,2942],{},[162,2939,245],{},[187,2941,715],{},[181,2943,306],{},[166,2945,2946],{"encoding":168},"i+1"," — следующий кадр",[58,2949,2950,847],{},[147,2951,2953],{"className":2952},[150],[152,2954,2955],{"xmlns":154},[156,2956,2957,2961],{},[159,2958,2959],{},[162,2960,394],{},[166,2962,394],{"encoding":168},[58,2964,2965,2978],{},[147,2966,2968],{"className":2967},[150],[152,2969,2970],{"xmlns":154},[156,2971,2972,2976],{},[159,2973,2974],{},[162,2975,411],{},[166,2977,411],{"encoding":168}," — количество костей",[58,2980,2981,3018],{},[147,2982,2984],{"className":2983},[150],[152,2985,2986],{"xmlns":154},[156,2987,2988,3016],{},[159,2989,2990,3004,3006],{},[256,2991,2992,2994,3002],{},[162,2993,260],{},[159,2995,2996,2998,3000],{},[162,2997,245],{},[187,2999,715],{},[181,3001,306],{},[162,3003,13],{},[187,3005,329],{},[331,3007,3008,3010],{},[162,3009,335],{},[159,3011,3012,3014],{},[181,3013,183],{},[162,3015,394],{},[166,3017,903],{"encoding":168}," — позиции траектории движения",[58,3020,3021,3058],{},[147,3022,3024],{"className":3023},[150],[152,3025,3026],{"xmlns":154},[156,3027,3028,3056],{},[159,3029,3030,3044,3046],{},[256,3031,3032,3034,3042],{},[162,3033,260],{},[159,3035,3036,3038,3040],{},[162,3037,245],{},[187,3039,715],{},[181,3041,306],{},[162,3043,273],{},[187,3045,329],{},[331,3047,3048,3050],{},[162,3049,335],{},[159,3051,3052,3054],{},[181,3053,183],{},[162,3055,394],{},[166,3057,944],{"encoding":168}," — направления траектории движения",[58,3060,3061,3099],{},[147,3062,3064],{"className":3063},[150],[152,3065,3066],{"xmlns":154},[156,3067,3068,3096],{},[159,3069,3070,3084,3086],{},[256,3071,3072,3074,3082],{},[162,3073,260],{},[159,3075,3076,3078,3080],{},[162,3077,245],{},[187,3079,715],{},[181,3081,306],{},[162,3083,323],{},[187,3085,329],{},[331,3087,3088,3090],{},[162,3089,335],{},[159,3091,3092,3094],{},[181,3093,183],{},[162,3095,394],{},[166,3097,3098],{"encoding":168},"t_{i+1}^v \\in R^{2s}"," — скорости в точках траектории движения",[58,3101,3102,980],{},[147,3103,3105],{"className":3104},[150],[152,3106,3107],{"xmlns":154},[156,3108,3109,3131],{},[159,3110,3111,3119,3121],{},[256,3112,3113,3115,3117],{},[162,3114,296],{},[162,3116,245],{},[162,3118,13],{},[187,3120,329],{},[331,3122,3123,3125],{},[162,3124,335],{},[159,3126,3127,3129],{},[181,3128,514],{},[162,3130,411],{},[166,3132,979],{"encoding":168},[58,3134,3135,3167],{},[147,3136,3138],{"className":3137},[150],[152,3139,3140],{"xmlns":154},[156,3141,3142,3164],{},[159,3143,3144,3152,3154],{},[256,3145,3146,3148,3150],{},[162,3147,296],{},[162,3149,245],{},[162,3151,766],{},[187,3153,329],{},[331,3155,3156,3158],{},[162,3157,335],{},[159,3159,3160,3162],{},[181,3161,2642],{},[162,3163,411],{},[166,3165,3166],{"encoding":168},"j_i^r \\in R^{6b}"," — локальные вращения костей",[58,3169,3170,1015],{},[147,3171,3173],{"className":3172},[150],[152,3174,3175],{"xmlns":154},[156,3176,3177,3199],{},[159,3178,3179,3187,3189],{},[256,3180,3181,3183,3185],{},[162,3182,296],{},[162,3184,245],{},[162,3186,323],{},[187,3188,329],{},[331,3190,3191,3193],{},[162,3192,335],{},[159,3194,3195,3197],{},[181,3196,514],{},[162,3198,411],{},[166,3200,1014],{"encoding":168},[58,3202,3203,3231],{},[147,3204,3206],{"className":3205},[150],[152,3207,3208],{"xmlns":154},[156,3209,3210,3228],{},[159,3211,3212,3224,3226],{},[256,3213,3214,3220,3222],{},[760,3215,3216,3218],{"accent":253},[162,3217,766],{},[187,3219,773],{},[162,3221,245],{},[162,3223,242],{},[187,3225,329],{},[162,3227,335],{},[166,3229,3230],{"encoding":168},"\\dot r_i^x \\in R"," — линейная скорость root transformation по оси X",[58,3233,3234,3262],{},[147,3235,3237],{"className":3236},[150],[152,3238,3239],{"xmlns":154},[156,3240,3241,3259],{},[159,3242,3243,3255,3257],{},[256,3244,3245,3251,3253],{},[760,3246,3247,3249],{"accent":253},[162,3248,766],{},[187,3250,773],{},[162,3252,245],{},[162,3254,784],{},[187,3256,329],{},[162,3258,335],{},[166,3260,3261],{"encoding":168},"\\dot r_i^z \\in R"," — линейная скорость root transformation по оси Z",[58,3264,3265,3293],{},[147,3266,3268],{"className":3267},[150],[152,3269,3270],{"xmlns":154},[156,3271,3272,3290],{},[159,3273,3274,3286,3288],{},[256,3275,3276,3282,3284],{},[760,3277,3278,3280],{"accent":253},[162,3279,766],{},[187,3281,773],{},[162,3283,245],{},[162,3285,758],{},[187,3287,329],{},[162,3289,335],{},[166,3291,3292],{"encoding":168},"\\dot r_i^a ∈ R"," — угловая скорость root transformation в 2D горизонтальной плоскости",[13,3295,3296],{},"Вращения костей представлены в виде относительных векторов «вверх» и «вперед» чтобы исключить проблемы с интерполяцией кватернионов в процессе обучения нейросети.",[13,3298,3299],{},[79,3300],{"alt":3301,"src":3302},"Архитектура MANN","/img/blog/article-ml-in-animation-overview/3.png",[13,3304,3305,3306,3319,3320,3334,3335,1849],{},"Архитектура нейросети предсказания движения аналогична PFNN, веса ",[147,3307,3309],{"className":3308},[150],[152,3310,3311],{"xmlns":154},[156,3312,3313,3317],{},[159,3314,3315],{},[162,3316,758],{},[166,3318,758],{"encoding":168}," же вычисляются посредством смешивания ",[147,3321,3323],{"className":3322},[150],[152,3324,3325],{"xmlns":154},[156,3326,3327,3332],{},[159,3328,3329],{},[162,3330,3331],{},"K",[166,3333,3331],{"encoding":168}," экспертных весов ",[147,3336,3338],{"className":3337},[150],[152,3339,3340],{"xmlns":154},[156,3341,3342,3373],{},[159,3343,3344,3346,3348],{},[162,3345,1317],{},[187,3347,248],{},[159,3349,3350,3352,3358,3360,3363,3365,3371],{},[187,3351,254],{"fence":253},[238,3353,3354,3356],{},[162,3355,758],{},[181,3357,306],{},[187,3359,1849],{"separator":253},[187,3361,3362],{},"…",[187,3364,1849],{"separator":253},[238,3366,3367,3369],{},[162,3368,758],{},[162,3370,1367],{},[187,3372,326],{"fence":253},[166,3374,3375],{"encoding":168},"\\beta = \\left\\{ a_1, \\dots, a_k \\right\\}",[13,3377,3378,3379,3423,3424,3437],{},"где ",[147,3380,3382],{"className":3381},[150],[152,3383,3384],{"xmlns":154},[156,3385,3386,3420],{},[159,3387,3388,3390,3392,3407,3414],{},[162,3389,758],{},[187,3391,248],{},[256,3393,3394,3397,3405],{},[187,3395,3396],{},"∑",[159,3398,3399,3401,3403],{},[162,3400,245],{},[187,3402,248],{},[181,3404,306],{},[162,3406,3331],{},[238,3408,3409,3412],{},[162,3410,3411],{},"ω",[162,3413,245],{},[238,3415,3416,3418],{},[162,3417,758],{},[162,3419,245],{},[166,3421,3422],{"encoding":168},"a = \\sum_{i=1}^K \\omega_i a_i",". ",[147,3425,3427],{"className":3426},[150],[152,3428,3429],{"xmlns":154},[156,3430,3431,3435],{},[159,3432,3433],{},[162,3434,3331],{},[166,3436,3331],{"encoding":168}," — настраиваемый мета параметр, зависимый от сложности и размера",[13,3439,3440,3441,3481],{},"тренировочных данных. ",[147,3442,3444],{"className":3443},[150],[152,3445,3446],{"xmlns":154},[156,3447,3448,3478],{},[159,3449,3450,3452,3454],{},[162,3451,3411],{},[187,3453,248],{},[159,3455,3456,3458,3464,3466,3468,3470,3476],{},[187,3457,254],{"fence":253},[238,3459,3460,3462],{},[162,3461,3411],{},[181,3463,306],{},[187,3465,1849],{"separator":253},[187,3467,3362],{},[187,3469,1849],{"separator":253},[238,3471,3472,3474],{},[162,3473,3411],{},[162,3475,3331],{},[187,3477,326],{"fence":253},[166,3479,3480],{"encoding":168},"\\omega = \\left\\{ \\omega_1, \\dots , \\omega_K \\right\\}"," — коэффициенты смешивания, которые вычисляет gating network.",[13,3483,3484],{},"Архитектура gating network состоит из 3-х слоев:",[147,3486,3488],{"className":3487},[150],[152,3489,3490],{"xmlns":154,"display":232},[156,3491,3492,3627],{},[159,3493,3494,3497,3499,3505,3507,3510,3512,3514,3517,3519,3533,3535,3537,3539,3541,3553,3555,3557,3559,3561,3573,3579,3581,3593,3595,3597,3609,3611,3613,3625],{},[162,3495,3496],{"mathvariant":1217},"Ω",[187,3498,190],{"stretchy":189},[760,3500,3501,3503],{"accent":253},[162,3502,242],{},[187,3504,2342],{},[187,3506,1225],{"separator":253},[162,3508,3509],{},"μ",[187,3511,207],{"stretchy":189},[187,3513,248],{},[162,3515,3516],{},"σ",[187,3518,190],{"stretchy":189},[256,3520,3521,3523,3525],{},[162,3522,1236],{},[181,3524,183],{},[331,3526,3527,3529],{},[159,3528],{},[187,3530,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},"0em","′",[162,3534,1241],{},[162,3536,1244],{},[162,3538,1247],{},[187,3540,190],{"stretchy":189},[256,3542,3543,3545,3547],{},[162,3544,1236],{},[181,3546,306],{},[331,3548,3549,3551],{},[159,3550],{},[187,3552,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[162,3554,1241],{},[162,3556,1244],{},[162,3558,1247],{},[187,3560,190],{"stretchy":189},[256,3562,3563,3565,3567],{},[162,3564,1236],{},[181,3566,193],{},[331,3568,3569,3571],{},[159,3570],{},[187,3572,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[760,3574,3575,3577],{"accent":253},[162,3576,242],{},[187,3578,2342],{},[187,3580,715],{},[256,3582,3583,3585,3587],{},[162,3584,411],{},[181,3586,193],{},[331,3588,3589,3591],{},[159,3590],{},[187,3592,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3594,207],{"stretchy":189},[187,3596,715],{},[256,3598,3599,3601,3603],{},[162,3600,411],{},[181,3602,306],{},[331,3604,3605,3607],{},[159,3606],{},[187,3608,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3610,207],{"stretchy":189},[187,3612,715],{},[256,3614,3615,3617,3619],{},[162,3616,411],{},[181,3618,183],{},[331,3620,3621,3623],{},[159,3622],{},[187,3624,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3626,207],{"stretchy":189},[166,3628,3629],{"encoding":168},"\\Omega(\\hat x; \\mu) = \\sigma(W_2^{'}ELU(W_1^{'} ELU(W_0^{'}\\hat x + b_0^{'}) + b_1^{'}) + b_2^{'})",[141,3631,3632,3676],{},[58,3633,3634,3661,3662,3675],{},[147,3635,3637],{"className":3636},[150],[152,3638,3639],{"xmlns":154},[156,3640,3641,3658],{},[159,3642,3643,3649,3651],{},[760,3644,3645,3647],{"accent":253},[162,3646,242],{},[187,3648,2342],{},[187,3650,329],{},[331,3652,3653,3655],{},[162,3654,335],{},[181,3656,3657],{},"19",[166,3659,3660],{"encoding":168},"\\hat x \\in R^{19}"," — подмножество ",[147,3663,3665],{"className":3664},[150],[152,3666,3667],{"xmlns":154},[156,3668,3669,3673],{},[159,3670,3671],{},[162,3672,242],{},[166,3674,242],{"encoding":168},", в которое входят скорости костей стоп, текущие классы движения и желаемая скорость персонажа.",[58,3677,3678,3699],{},[147,3679,3681],{"className":3680},[150],[152,3682,3683],{"xmlns":154},[156,3684,3685,3696],{},[159,3686,3687,3689,3691,3694],{},[162,3688,3516],{},[187,3690,190],{"stretchy":189},[187,3692,3693],{},"⋅",[187,3695,207],{"stretchy":189},[166,3697,3698],{"encoding":168},"\\sigma(\\cdot)"," — softmax функция для нормализации входных данных так, что их сумма становится = 1, что необходимо для дальнейшего линейного смешивания",[13,3701,3702,3703,3717],{},"Параметры нейросети ",[147,3704,3706],{"className":3705},[150],[152,3707,3708],{"xmlns":154},[156,3709,3710,3714],{},[159,3711,3712],{},[162,3713,3509],{},[166,3715,3716],{"encoding":168},"\\mu"," определяются следующим образом:",[147,3719,3721],{"className":3720},[150],[152,3722,3723],{"xmlns":154,"display":232},[156,3724,3725,3934],{},[159,3726,3727,3729,3731],{},[162,3728,3509],{},[187,3730,248],{},[159,3732,3733,3735,3747,3749,3770,3772,3784,3786,3814,3816,3828,3830,3850,3852,3864,3866,3880,3882,3894,3896,3910,3912,3924,3926,3932],{},[187,3734,254],{"fence":253},[256,3736,3737,3739,3741],{},[162,3738,1236],{},[181,3740,193],{},[331,3742,3743,3745],{},[159,3744],{},[187,3746,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3748,329],{},[331,3750,3751,3753],{},[162,3752,335],{},[159,3754,3755,3765,3768],{},[331,3756,3757,3759],{},[162,3758,282],{},[331,3760,3761,3763],{},[159,3762],{},[187,3764,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3766,3767],{},"×",[181,3769,3657],{},[187,3771,1849],{"separator":253},[256,3773,3774,3776,3778],{},[162,3775,1236],{},[181,3777,306],{},[331,3779,3780,3782],{},[159,3781],{},[187,3783,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3785,329],{},[331,3787,3788,3790],{},[162,3789,335],{},[159,3791,3792,3802,3804],{},[331,3793,3794,3796],{},[162,3795,282],{},[331,3797,3798,3800],{},[159,3799],{},[187,3801,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3803,3767],{},[331,3805,3806,3808],{},[162,3807,282],{},[331,3809,3810,3812],{},[159,3811],{},[187,3813,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3815,1849],{"separator":253},[256,3817,3818,3820,3822],{},[162,3819,1236],{},[181,3821,183],{},[331,3823,3824,3826],{},[159,3825],{},[187,3827,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3829,329],{},[331,3831,3832,3834],{},[162,3833,335],{},[159,3835,3836,3838,3840],{},[162,3837,3331],{},[187,3839,3767],{},[331,3841,3842,3844],{},[162,3843,282],{},[331,3845,3846,3848],{},[159,3847],{},[187,3849,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3851,1849],{"separator":253},[256,3853,3854,3856,3858],{},[162,3855,411],{},[181,3857,193],{},[331,3859,3860,3862],{},[159,3861],{},[187,3863,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3865,329],{},[331,3867,3868,3870],{},[162,3869,335],{},[331,3871,3872,3874],{},[162,3873,282],{},[331,3875,3876,3878],{},[159,3877],{},[187,3879,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3881,1849],{"separator":253},[256,3883,3884,3886,3888],{},[162,3885,411],{},[181,3887,306],{},[331,3889,3890,3892],{},[159,3891],{},[187,3893,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3895,329],{},[331,3897,3898,3900],{},[162,3899,335],{},[331,3901,3902,3904],{},[162,3903,282],{},[331,3905,3906,3908],{},[159,3907],{},[187,3909,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3911,1849],{"separator":253},[256,3913,3914,3916,3918],{},[162,3915,411],{},[181,3917,183],{},[331,3919,3920,3922],{},[159,3921],{},[187,3923,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[187,3925,329],{},[331,3927,3928,3930],{},[162,3929,335],{},[162,3931,3331],{},[187,3933,326],{"fence":253},[166,3935,3936],{"encoding":168},"\\mu = \\left\\{ W_0^{'} \\in R^{h^{'}\\times{19}}, W_1^{'} \\in R^{h^{'}\\times{h^{'}}}, W_2^{'} \\in R^{K\\times{h^{'}}}, b_0^{'} \\in R^{h^{'}}, b_1^{'} \\in R^{h^{'}}, b_2^{'} \\in R^K \\right\\}",[141,3938,3939],{},[58,3940,3941,3963],{},[147,3942,3944],{"className":3943},[150],[152,3945,3946],{"xmlns":154},[156,3947,3948,3960],{},[159,3949,3950],{},[331,3951,3952,3954],{},[162,3953,282],{},[331,3955,3956,3958],{},[159,3957],{},[187,3959,3532],{"mathvariant":1217,"lspace":3531,"rspace":3531},[166,3961,3962],{"encoding":168},"h^{'}"," — количество нейронов в скрытых слоях (32)",[13,3965,3966,3967,3980,3981,3994],{},"Тренировка нейросети сводится к нахождению ",[147,3968,3970],{"className":3969},[150],[152,3971,3972],{"xmlns":154},[156,3973,3974,3978],{},[159,3975,3976],{},[162,3977,1852],{},[166,3979,1852],{"encoding":168}," для соответствующего ",[147,3982,3984],{"className":3983},[150],[152,3985,3986],{"xmlns":154},[156,3987,3988,3992],{},[159,3989,3990],{},[162,3991,1846],{},[166,3993,1846],{"encoding":168},", что является типичный задачей регрессии. Используется следующая функция потерь (СКО между предсказанием и ground truth):",[147,3996,3998],{"className":3997},[150],[152,3999,4000],{"xmlns":154,"display":232},[156,4001,4002,4076],{},[159,4003,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4056,4058,4060,4062,4064,4066,4068],{},[162,4005,1835],{},[162,4007,1700],{},[162,4009,394],{},[162,4011,260],{},[187,4013,190],{"stretchy":189},[162,4015,1846],{},[187,4017,1849],{"separator":253},[162,4019,1852],{},[187,4021,1225],{"separator":253},[162,4023,1317],{},[187,4025,1849],{"separator":253},[162,4027,3509],{},[187,4029,207],{"stretchy":189},[187,4031,248],{},[187,4033,1868],{"stretchy":189},[162,4035,1852],{},[187,4037,303],{},[162,4039,1337],{"mathvariant":1217},[187,4041,190],{"stretchy":189},[162,4043,1846],{},[187,4045,1849],{"separator":253},[162,4047,3496],{"mathvariant":1217},[187,4049,190],{"stretchy":189},[760,4051,4052,4054],{"accent":253},[162,4053,1846],{},[187,4055,2342],{},[187,4057,1225],{"separator":253},[162,4059,3509],{},[187,4061,207],{"stretchy":189},[187,4063,1225],{"separator":253},[162,4065,1317],{},[187,4067,207],{"stretchy":189},[256,4069,4070,4072,4074],{},[187,4071,1868],{"stretchy":189},[181,4073,183],{},[181,4075,183],{},[166,4077,4078],{"encoding":168},"Cost(X, Y; \\beta, \\mu) = \\lVert Y - \\Theta(X, \\Omega(\\hat X; \\mu); \\beta) \\rVert_2^2",[13,4080,4081],{},"В качестве оптимизатора выбран AdamWR.",[29,4083,4085],{"id":4084},"learned-motion-matching-lmm","Learned motion matching (LMM)",[13,4087,4088],{},"LMM основан на собственной реализации motion matching, разработанной в стенах Ubisoft. Классический motion matching представлен 3-мя этапами: Projection, Stepping, Decompression - для каждого из которых предлагается альтернатива в виде обученной нейросети.",[13,4090,4091],{},[79,4092],{"alt":4093,"src":4094},"Motion matching в реализации Ubisoft","/img/blog/article-ml-in-animation-overview/4.png",[13,4096,4097],{},"В качестве параметров позы для сценария передвижения предлагается использовать вектор из 27-ми элементов на каждый кадр анимации:",[147,4099,4101],{"className":4100},[150],[152,4102,4103],{"xmlns":154,"display":232},[156,4104,4105,4165],{},[159,4106,4107,4109,4111,4156,4158],{},[162,4108,242],{},[187,4110,248],{},[159,4112,4113,4115,4121,4127,4134,4144,4154],{},[187,4114,254],{"fence":253},[331,4116,4117,4119],{},[162,4118,260],{},[162,4120,260],{},[331,4122,4123,4125],{},[162,4124,260],{},[162,4126,273],{},[331,4128,4129,4132],{},[162,4130,4131],{},"f",[162,4133,260],{},[760,4135,4136,4142],{"accent":253},[331,4137,4138,4140],{},[162,4139,4131],{},[162,4141,260],{},[187,4143,773],{},[760,4145,4146,4152],{"accent":253},[331,4147,4148,4150],{},[162,4149,282],{},[162,4151,260],{},[187,4153,773],{},[187,4155,326],{"fence":253},[187,4157,329],{},[331,4159,4160,4162],{},[162,4161,335],{},[181,4163,4164],{},"27",[166,4166,4167],{"encoding":168},"x= \\left\\{ t^t t^d f^t \\dot{f^t} \\dot{h^t} \\right\\} \\in R^{27}",[141,4169,4170,4199,4228,4257,4290],{},[58,4171,4172,4198],{},[147,4173,4175],{"className":4174},[150],[152,4176,4177],{"xmlns":154},[156,4178,4179,4195],{},[159,4180,4181,4187,4189],{},[331,4182,4183,4185],{},[162,4184,260],{},[162,4186,260],{},[187,4188,329],{},[331,4190,4191,4193],{},[162,4192,335],{},[181,4194,2642],{},[166,4196,4197],{"encoding":168},"t^t \\in R^6"," – позиции траектории движения в 2D спроецированные на поверхность 20, 40, 60 кадров в будущем (при 60 FPS)",[58,4200,4201,4227],{},[147,4202,4204],{"className":4203},[150],[152,4205,4206],{"xmlns":154},[156,4207,4208,4224],{},[159,4209,4210,4216,4218],{},[331,4211,4212,4214],{},[162,4213,260],{},[162,4215,273],{},[187,4217,329],{},[331,4219,4220,4222],{},[162,4221,335],{},[181,4223,2642],{},[166,4225,4226],{"encoding":168},"t^d \\in R^6"," – направление траектории движения 20, 40, 60 кадров в будущем",[58,4229,4230,4256],{},[147,4231,4233],{"className":4232},[150],[152,4234,4235],{"xmlns":154},[156,4236,4237,4253],{},[159,4238,4239,4245,4247],{},[331,4240,4241,4243],{},[162,4242,4131],{},[162,4244,260],{},[187,4246,329],{},[331,4248,4249,4251],{},[162,4250,335],{},[181,4252,2642],{},[166,4254,4255],{"encoding":168},"f^t \\in R^6"," – локальные позиции костей стоп",[58,4258,4259,4289],{},[147,4260,4262],{"className":4261},[150],[152,4263,4264],{"xmlns":154},[156,4265,4266,4286],{},[159,4267,4268,4278,4280],{},[760,4269,4270,4276],{"accent":253},[331,4271,4272,4274],{},[162,4273,4131],{},[162,4275,260],{},[187,4277,773],{},[187,4279,329],{},[331,4281,4282,4284],{},[162,4283,335],{},[181,4285,2642],{},[166,4287,4288],{"encoding":168},"\\dot{f^t} \\in R^6"," – линейные скорости костей стоп",[58,4291,4292,4322],{},[147,4293,4295],{"className":4294},[150],[152,4296,4297],{"xmlns":154},[156,4298,4299,4319],{},[159,4300,4301,4311,4313],{},[760,4302,4303,4309],{"accent":253},[331,4304,4305,4307],{},[162,4306,282],{},[162,4308,260],{},[187,4310,773],{},[187,4312,329],{},[331,4314,4315,4317],{},[162,4316,335],{},[181,4318,514],{},[166,4320,4321],{"encoding":168},"\\dot{h^t} \\in R^3"," – линейная скорости кости бедра",[13,4324,4325],{},"Далее определяется вектор, содержащий в себе всю информацию о позе для каждого кадра анимации:",[147,4327,4329],{"className":4328},[150],[152,4330,4331],{"xmlns":154,"display":232},[156,4332,4333,4404],{},[159,4334,4335,4337,4339],{},[162,4336,696],{},[187,4338,248],{},[159,4340,4341,4343,4349,4355,4365,4375,4385,4395,4402],{},[187,4342,254],{"fence":253},[331,4344,4345,4347],{},[162,4346,696],{},[162,4348,260],{},[331,4350,4351,4353],{},[162,4352,696],{},[162,4354,766],{},[760,4356,4357,4363],{"accent":253},[331,4358,4359,4361],{},[162,4360,696],{},[162,4362,260],{},[187,4364,773],{},[760,4366,4367,4373],{"accent":253},[331,4368,4369,4371],{},[162,4370,696],{},[162,4372,766],{},[187,4374,773],{},[760,4376,4377,4383],{"accent":253},[331,4378,4379,4381],{},[162,4380,766],{},[162,4382,260],{},[187,4384,773],{},[760,4386,4387,4393],{"accent":253},[331,4388,4389,4391],{},[162,4390,766],{},[162,4392,766],{},[187,4394,773],{},[331,4396,4397,4399],{},[162,4398,1700],{},[187,4400,4401],{},"∗",[187,4403,326],{"fence":253},[166,4405,4406],{"encoding":168},"y = \\left\\{ y^t y^r \\dot{y^t} \\dot{y^r} \\dot{r^t} \\dot{r^r} o^* \\right\\}",[141,4408,4409,4437,4466,4499,4532,4565,4598],{},[58,4410,4411,597],{},[147,4412,4414],{"className":4413},[150],[152,4415,4416],{"xmlns":154},[156,4417,4418,4434],{},[159,4419,4420,4426,4428],{},[331,4421,4422,4424],{},[162,4423,696],{},[162,4425,260],{},[187,4427,329],{},[331,4429,4430,4432],{},[162,4431,335],{},[181,4433,514],{},[166,4435,4436],{"encoding":168},"y^t \\in R^3",[58,4438,4439,4465],{},[147,4440,4442],{"className":4441},[150],[152,4443,4444],{"xmlns":154},[156,4445,4446,4462],{},[159,4447,4448,4454,4456],{},[331,4449,4450,4452],{},[162,4451,696],{},[162,4453,766],{},[187,4455,329],{},[331,4457,4458,4460],{},[162,4459,335],{},[181,4461,1198],{},[166,4463,4464],{"encoding":168},"y^r \\in R^4"," – локальные вращения костей в виде представления ось-угол",[58,4467,4468,4498],{},[147,4469,4471],{"className":4470},[150],[152,4472,4473],{"xmlns":154},[156,4474,4475,4495],{},[159,4476,4477,4487,4489],{},[760,4478,4479,4485],{"accent":253},[331,4480,4481,4483],{},[162,4482,696],{},[162,4484,260],{},[187,4486,773],{},[187,4488,329],{},[331,4490,4491,4493],{},[162,4492,335],{},[181,4494,514],{},[166,4496,4497],{"encoding":168},"\\dot{y^t} \\in R^3"," – линейные скорости костей",[58,4500,4501,4531],{},[147,4502,4504],{"className":4503},[150],[152,4505,4506],{"xmlns":154},[156,4507,4508,4528],{},[159,4509,4510,4520,4522],{},[760,4511,4512,4518],{"accent":253},[331,4513,4514,4516],{},[162,4515,696],{},[162,4517,766],{},[187,4519,773],{},[187,4521,329],{},[331,4523,4524,4526],{},[162,4525,335],{},[181,4527,514],{},[166,4529,4530],{"encoding":168},"\\dot{y^r} \\in R^3"," – угловые скорости костей",[58,4533,4534,4564],{},[147,4535,4537],{"className":4536},[150],[152,4538,4539],{"xmlns":154},[156,4540,4541,4561],{},[159,4542,4543,4553,4555],{},[760,4544,4545,4551],{"accent":253},[331,4546,4547,4549],{},[162,4548,766],{},[162,4550,260],{},[187,4552,773],{},[187,4554,329],{},[331,4556,4557,4559],{},[162,4558,335],{},[181,4560,514],{},[166,4562,4563],{"encoding":168},"\\dot{r^t} \\in R^3"," – линейные скорости root transformation",[58,4566,4567,4597],{},[147,4568,4570],{"className":4569},[150],[152,4571,4572],{"xmlns":154},[156,4573,4574,4594],{},[159,4575,4576,4586,4588],{},[760,4577,4578,4584],{"accent":253},[331,4579,4580,4582],{},[162,4581,766],{},[162,4583,766],{},[187,4585,773],{},[187,4587,329],{},[331,4589,4590,4592],{},[162,4591,335],{},[181,4593,514],{},[166,4595,4596],{"encoding":168},"\\dot{r^r} \\in R^3"," – угловые скорости root transformation",[58,4599,4600,4618],{},[147,4601,4603],{"className":4602},[150],[152,4604,4605],{"xmlns":154},[156,4606,4607,4615],{},[159,4608,4609],{},[331,4610,4611,4613],{},[162,4612,1700],{},[187,4614,4401],{},[166,4616,4617],{"encoding":168},"o^*"," – специфичные для задачи дополнительные данные (например, информация о контакте ног с поверхностью)",[13,4620,4621,4622,4720,4721,4739],{},"Эти вектора вычисляются для каждого кадра, объединяются в матрицы\n",[147,4623,4625],{"className":4624},[150],[152,4626,4627],{"xmlns":154},[156,4628,4629,4717],{},[159,4630,4631,4633,4635,4673,4675,4677,4679],{},[162,4632,1846],{},[187,4634,248],{},[159,4636,4637,4639,4645,4647,4653,4655,4657,4659,4671],{},[187,4638,1733],{"fence":253},[238,4640,4641,4643],{},[162,4642,242],{},[181,4644,193],{},[187,4646,1849],{"separator":253},[238,4648,4649,4651],{},[162,4650,242],{},[181,4652,306],{},[187,4654,1849],{"separator":253},[187,4656,3362],{},[187,4658,1849],{"separator":253},[238,4660,4661,4663],{},[162,4662,242],{},[159,4664,4665,4667,4669],{},[162,4666,338],{},[187,4668,303],{},[181,4670,306],{},[187,4672,1750],{"fence":253},[187,4674,1849],{"separator":253},[162,4676,1852],{},[187,4678,248],{},[159,4680,4681,4683,4689,4691,4697,4699,4701,4703,4715],{},[187,4682,1733],{"fence":253},[238,4684,4685,4687],{},[162,4686,696],{},[181,4688,193],{},[187,4690,1849],{"separator":253},[238,4692,4693,4695],{},[162,4694,696],{},[181,4696,306],{},[187,4698,1849],{"separator":253},[187,4700,3362],{},[187,4702,1849],{"separator":253},[238,4704,4705,4707],{},[162,4706,696],{},[159,4708,4709,4711,4713],{},[162,4710,338],{},[187,4712,303],{},[181,4714,306],{},[187,4716,1750],{"fence":253},[166,4718,4719],{"encoding":168},"X = \\left[ x_0, x_1, \\dots, x_{n-1} \\right], Y = \\left[ y_0, y_1, \\dots, y_{n-1} \\right]",",\nназываемые matching database и animation database соответственно, и используются в алгоритме тренировки. Далее в режиме реального времени каждые N кадров или когда сильно меняется ввод с контроллера, строится вектор запроса ",[147,4722,4724],{"className":4723},[150],[152,4725,4726],{"xmlns":154},[156,4727,4728,4736],{},[159,4729,4730],{},[760,4731,4732,4734],{"accent":253},[162,4733,242],{},[187,4735,2342],{},[166,4737,4738],{"encoding":168},"\\hat x",", аналогичный вектору параметров позы и подается в качестве входных данных в Projection. Как только найден новый кадр, воспроизведение анимации начинается с него и вставляется переход (transition).",[141,4741,4742,4777,4780],{},[58,4743,4744,4745,4758,4759,4776],{},"Projection: выполняется поиск методом ближайшего соседа для нахождения в ",[147,4746,4748],{"className":4747},[150],[152,4749,4750],{"xmlns":154},[156,4751,4752,4756],{},[159,4753,4754],{},[162,4755,1846],{},[166,4757,1846],{"encoding":168}," вектора параметров позы, наиболее подходящего для ",[147,4760,4762],{"className":4761},[150],[152,4763,4764],{"xmlns":154},[156,4765,4766,4774],{},[159,4767,4768],{},[760,4769,4770,4772],{"accent":253},[162,4771,242],{},[187,4773,2342],{},[166,4775,4738],{"encoding":168},".",[58,4778,4779],{},"Stepping: выполняется перемещение индекса в matching database.",[58,4781,4782],{},"Decompression: выполняется поиск позы в animation database, соответствующей текущему индексу в matching database.",[13,4784,4785],{},"Заменив каждый из этих этапов нейросетью, получится избавиться от необходимости хранения matching database и animation database в памяти. С этой целью вводятся 4 нейросети:",[141,4787,4788,4832,4863,4967],{},[58,4789,4790,4791,4804,4805,4818,4819],{},"Decompressor: устраняет необходимость хранить в памяти ",[147,4792,4794],{"className":4793},[150],[152,4795,4796],{"xmlns":154},[156,4797,4798,4802],{},[159,4799,4800],{},[162,4801,1852],{},[166,4803,1852],{"encoding":168},", принимает на вход ",[147,4806,4808],{"className":4807},[150],[152,4809,4810],{"xmlns":154},[156,4811,4812,4816],{},[159,4813,4814],{},[162,4815,242],{},[166,4817,242],{"encoding":168}," и латентный вектор ",[147,4820,4822],{"className":4821},[150],[152,4823,4824],{"xmlns":154},[156,4825,4826,4830],{},[159,4827,4828],{},[162,4829,784],{},[166,4831,784],{"encoding":168},[58,4833,4834,4835,4848,4849,4862],{},"Compressor: выступает в роле энкодера для нахождения ",[147,4836,4838],{"className":4837},[150],[152,4839,4840],{"xmlns":154},[156,4841,4842,4846],{},[159,4843,4844],{},[162,4845,784],{},[166,4847,784],{"encoding":168}," посредством сжатия ",[147,4850,4852],{"className":4851},[150],[152,4853,4854],{"xmlns":154},[156,4855,4856,4860],{},[159,4857,4858],{},[162,4859,696],{},[166,4861,696],{"encoding":168}," в более малоразмерный вектор",[58,4864,4865,4866,4879,4880,4898,4899,4917,4918,4898,4942,4966],{},"Stepper: совместно с projector устраняет необходимость хранить в памяти ",[147,4867,4869],{"className":4868},[150],[152,4870,4871],{"xmlns":154},[156,4872,4873,4877],{},[159,4874,4875],{},[162,4876,1846],{},[166,4878,1846],{"encoding":168},", обучается динамике системы, вычисляя изменения значений ",[147,4881,4883],{"className":4882},[150],[152,4884,4885],{"xmlns":154},[156,4886,4887,4895],{},[159,4888,4889],{},[238,4890,4891,4893],{},[162,4892,242],{},[162,4894,245],{},[166,4896,4897],{"encoding":168},"x_i"," и ",[147,4900,4902],{"className":4901},[150],[152,4903,4904],{"xmlns":154},[156,4905,4906,4914],{},[159,4907,4908],{},[238,4909,4910,4912],{},[162,4911,784],{},[162,4913,245],{},[166,4915,4916],{"encoding":168},"z_i"," для получения ",[147,4919,4921],{"className":4920},[150],[152,4922,4923],{"xmlns":154},[156,4924,4925,4939],{},[159,4926,4927],{},[238,4928,4929,4931],{},[162,4930,242],{},[159,4932,4933,4935,4937],{},[162,4934,245],{},[187,4936,715],{},[181,4938,306],{},[166,4940,4941],{"encoding":168},"x_{i+1}",[147,4943,4945],{"className":4944},[150],[152,4946,4947],{"xmlns":154},[156,4948,4949,4963],{},[159,4950,4951],{},[238,4952,4953,4955],{},[162,4954,784],{},[159,4956,4957,4959,4961],{},[162,4958,245],{},[187,4960,715],{},[181,4962,306],{},[166,4964,4965],{"encoding":168},"z_{i+1}"," на следующий кадр",[58,4968,4969,4970,4987,4988,4898,5010],{},"Projector: эмулирует поиск методом ближайшего соседа, принимает на вход ",[147,4971,4973],{"className":4972},[150],[152,4974,4975],{"xmlns":154},[156,4976,4977,4985],{},[159,4978,4979],{},[760,4980,4981,4983],{"accent":253},[162,4982,242],{},[187,4984,2342],{},[166,4986,4738],{"encoding":168}," и предсказывает ближайшие ",[147,4989,4991],{"className":4990},[150],[152,4992,4993],{"xmlns":154},[156,4994,4995,5007],{},[159,4996,4997],{},[238,4998,4999,5001],{},[162,5000,242],{},[331,5002,5003,5005],{},[162,5004,1367],{},[187,5006,4401],{},[166,5008,5009],{"encoding":168},"x_{k^*}",[147,5011,5013],{"className":5012},[150],[152,5014,5015],{"xmlns":154},[156,5016,5017,5029],{},[159,5018,5019],{},[238,5020,5021,5023],{},[162,5022,784],{},[331,5024,5025,5027],{},[162,5026,1367],{},[187,5028,4401],{},[166,5030,5031],{"encoding":168},"z_{k^*}",[13,5033,5034],{},"Объединив эти 4 нейросети, получается learned motion matching, представленный на изображении ниже.",[13,5036,5037],{},[79,5038],{"alt":81,"src":5039},"/img/blog/article-ml-in-animation-overview/5.png",[13,5041,5042,5043,5057,5058,5076,5077,5094,5095,5112,5113,5130,5131,5144,5145,4776],{},"Поскольку вектор параметров позы обычно не содержит достаточно информации, необходимой для выведения соответствующей позы, вводится латентное пространство ",[147,5044,5046],{"className":5045},[150],[152,5047,5048],{"xmlns":154},[156,5049,5050,5055],{},[159,5051,5052],{},[162,5053,5054],{},"Z",[166,5056,5054],{"encoding":168},". Его значения находятся посредством нейросети Compressor — выполняется маппинг ",[147,5059,5061],{"className":5060},[150],[152,5062,5063],{"xmlns":154},[156,5064,5065,5073],{},[159,5066,5067],{},[238,5068,5069,5071],{},[162,5070,696],{},[162,5072,245],{},[166,5074,5075],{"encoding":168},"y_i"," к соответствующему ",[147,5078,5080],{"className":5079},[150],[152,5081,5082],{"xmlns":154},[156,5083,5084,5092],{},[159,5085,5086],{},[238,5087,5088,5090],{},[162,5089,784],{},[162,5091,245],{},[166,5093,4916],{"encoding":168},". Далее этот вектор конкатенируется к ",[147,5096,5098],{"className":5097},[150],[152,5099,5100],{"xmlns":154},[156,5101,5102,5110],{},[159,5103,5104],{},[238,5105,5106,5108],{},[162,5107,242],{},[162,5109,245],{},[166,5111,4897],{"encoding":168}," и подается на вход в Decompressor, который пытается восстановить исходную позу ",[147,5114,5116],{"className":5115},[150],[152,5117,5118],{"xmlns":154},[156,5119,5120,5128],{},[159,5121,5122],{},[238,5123,5124,5126],{},[162,5125,696],{},[162,5127,245],{},[166,5129,5075],{"encoding":168},". Таким образом нейросеть находит какой информации не хватает в векторе параметров позы",[147,5132,5134],{"className":5133},[150],[152,5135,5136],{"xmlns":154},[156,5137,5138,5142],{},[159,5139,5140],{},[162,5141,242],{},[166,5143,242],{"encoding":168},"и кодирует ее в ",[147,5146,5148],{"className":5147},[150],[152,5149,5150],{"xmlns":154},[156,5151,5152,5156],{},[159,5153,5154],{},[162,5155,784],{},[166,5157,784],{"encoding":168},[13,5159,5160],{},"Ключевым аспектом тренировки Decompressor является функция потерь, разработанная для минимизации визуального восприятия ошибки, которая использует прямую кинематику для оценки ошибки в пространстве персонажа, также добавляются функции потерь, учитывающие скорость, чтобы результат гладко изменялся во времени.",[5162,5163,22,5164,5168,5268,5343,5405,5480,5528,5589,5641,5717,5785,5877,5934,5990,6071,6152,6213,6273,6371,6485,6599,6669,6745],"details",{},[5165,5166,5167],"summary",{},"Псевдокод алгоритма тренировки Compressor (C) + Decompressor (D)",[13,5169,5170],{},[147,5171,5173],{"className":5172},[150],[152,5174,5175],{"xmlns":154},[156,5176,5177,5265],{},[159,5178,5179,5182,5185,5187,5189,5191,5193,5195,5197,5201,5203,5205,5207,5209,5211,5214,5216,5218,5220,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246,5252,5254,5260,5262],{},[162,5180,5181],{},"F",[162,5183,5184],{},"u",[162,5186,338],{},[162,5188,813],{},[162,5190,260],{},[162,5192,245],{},[162,5194,1700],{},[162,5196,338],{},[5198,5199],"mspace",{"width":5200},"0.5691em",[162,5202,2123],{},[162,5204,766],{},[162,5206,758],{},[162,5208,245],{},[162,5210,338],{},[162,5212,5213],{},"D",[162,5215,2132],{},[162,5217,813],{},[162,5219,1700],{},[162,5221,826],{},[162,5223,13],{},[162,5225,766],{},[162,5227,2132],{},[162,5229,394],{},[162,5231,394],{},[162,5233,1700],{},[162,5235,766],{},[187,5237,190],{"stretchy":189},[162,5239,1846],{},[187,5241,1849],{"separator":253},[162,5243,1852],{},[187,5245,1849],{"separator":253},[238,5247,5248,5250],{},[162,5249,1337],{"mathvariant":1217},[162,5251,1835],{},[187,5253,1849],{"separator":253},[238,5255,5256,5258],{},[162,5257,1337],{"mathvariant":1217},[162,5259,5213],{},[187,5261,207],{"stretchy":189},[187,5263,5264],{},":",[166,5266,5267],{"encoding":168},"Function \\hspace{2mm} TrainDecompressor(X, Y, \\Theta_C, \\Theta_D):",[13,5269,5270],{},[147,5271,5273],{"className":5272},[150],[152,5274,5275],{"xmlns":154},[156,5276,5277,5340],{},[159,5278,5279,5282,5286,5288,5290,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338],{},[5198,5280],{"width":5281},"2.8453em",[5283,5284,5285],"mtext",{},"//",[5198,5287],{"width":5200},[162,5289,1835],{},[162,5291,1700],{},[162,5293,826],{},[162,5295,13],{},[162,5297,5184],{},[162,5299,260],{},[162,5301,2132],{},[5198,5303],{"width":5200},[162,5305,4131],{},[162,5307,1700],{},[162,5309,766],{},[162,5311,1440],{},[162,5313,758],{},[162,5315,766],{},[162,5317,273],{},[5198,5319],{"width":5200},[162,5321,1367],{},[162,5323,245],{},[162,5325,338],{},[162,5327,2132],{},[162,5329,826],{},[162,5331,758],{},[162,5333,260],{},[162,5335,245],{},[162,5337,813],{},[162,5339,394],{},[166,5341,5342],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Compute \\hspace{2mm} forward \\hspace{2mm} kinematics",[13,5344,5345],{},[147,5346,5348],{"className":5347},[150],[152,5349,5350],{"xmlns":154},[156,5351,5352,5402],{},[159,5353,5354,5356,5359,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382,5384,5386,5388,5390,5392,5394,5396,5398,5400],{},[5198,5355],{"width":5281},[162,5357,5358],{},"Q",[187,5360,5361],{},"←",[162,5363,5181],{},[162,5365,1700],{},[162,5367,766],{},[162,5369,1440],{},[162,5371,758],{},[162,5373,766],{},[162,5375,273],{},[162,5377,3331],{},[162,5379,245],{},[162,5381,338],{},[162,5383,2132],{},[162,5385,826],{},[162,5387,758],{},[162,5389,260],{},[162,5391,245],{},[162,5393,813],{},[162,5395,394],{},[187,5397,190],{"stretchy":189},[162,5399,1852],{},[187,5401,207],{"stretchy":189},[166,5403,5404],{"encoding":168},"\\hspace{1cm} Q \\leftarrow ForwardKinematics(Y)",[13,5406,5407],{},[147,5408,5410],{"className":5409},[150],[152,5411,5412],{"xmlns":154},[156,5413,5414,5477],{},[159,5415,5416,5418,5420,5422,5425,5427,5429,5431,5433,5435,5437,5439,5441,5443,5445,5447,5449,5451,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475],{},[5198,5417],{"width":5281},[5283,5419,5285],{},[5198,5421],{"width":5200},[162,5423,5424],{},"G",[162,5426,2132],{},[162,5428,338],{},[162,5430,2132],{},[162,5432,766],{},[162,5434,758],{},[162,5436,260],{},[162,5438,2132],{},[5198,5440],{"width":5200},[162,5442,2148],{},[162,5444,758],{},[162,5446,260],{},[162,5448,2132],{},[162,5450,338],{},[162,5452,260],{},[5198,5454],{"width":5200},[162,5456,323],{},[162,5458,758],{},[162,5460,766],{},[162,5462,245],{},[162,5464,758],{},[162,5466,411],{},[162,5468,2148],{},[162,5470,2132],{},[162,5472,394],{},[5198,5474],{"width":5200},[162,5476,5054],{},[166,5478,5479],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Generate \\hspace{2mm} latent \\hspace{2mm} variables \\hspace{2mm} Z",[13,5481,5482],{},[147,5483,5485],{"className":5484},[150],[152,5486,5487],{"xmlns":154},[156,5488,5489,5525],{},[159,5490,5491,5493,5495,5497,5499,5501,5515,5517,5523],{},[5198,5492],{"width":5281},[162,5494,5054],{},[187,5496,5361],{},[162,5498,1835],{},[187,5500,190],{"stretchy":189},[331,5502,5503,5513],{},[159,5504,5505,5507,5509,5511],{},[187,5506,1733],{"fence":253},[162,5508,1852],{},[162,5510,5358],{},[187,5512,1750],{"fence":253},[162,5514,2123],{},[187,5516,1225],{"separator":253},[238,5518,5519,5521],{},[162,5520,1337],{"mathvariant":1217},[162,5522,1835],{},[187,5524,207],{"stretchy":189},[166,5526,5527],{"encoding":168},"\\hspace{1cm} Z \\leftarrow C(\\left[ YQ \\right]^T; \\Theta_C)",[13,5529,5530],{},[147,5531,5533],{"className":5532},[150],[152,5534,5535],{"xmlns":154},[156,5536,5537,5586],{},[159,5538,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557,5559,5561,5563,5565,5567,5569,5571,5573,5575,5577,5579],{},[5198,5540],{"width":5281},[5283,5542,5285],{},[5198,5544],{"width":5200},[162,5546,335],{},[162,5548,2132],{},[162,5550,813],{},[162,5552,1700],{},[162,5554,338],{},[162,5556,394],{},[162,5558,260],{},[162,5560,766],{},[162,5562,5184],{},[162,5564,813],{},[162,5566,260],{},[5198,5568],{"width":5200},[162,5570,13],{},[162,5572,1700],{},[162,5574,394],{},[162,5576,2132],{},[5198,5578],{"width":5200},[760,5580,5581,5583],{"accent":253},[162,5582,1852],{},[187,5584,5585],{},"~",[166,5587,5588],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Reconstruct \\hspace{2mm} pose \\hspace{2mm} \\tilde Y",[13,5590,5591],{},[147,5592,5594],{"className":5593},[150],[152,5595,5596],{"xmlns":154},[156,5597,5598,5638],{},[159,5599,5600,5602,5608,5610,5612,5614,5628,5630,5636],{},[5198,5601],{"width":5281},[760,5603,5604,5606],{"accent":253},[162,5605,1852],{},[187,5607,5585],{},[187,5609,5361],{},[162,5611,5213],{},[187,5613,190],{"stretchy":189},[331,5615,5616,5626],{},[159,5617,5618,5620,5622,5624],{},[187,5619,1733],{"fence":253},[162,5621,1846],{},[162,5623,5054],{},[187,5625,1750],{"fence":253},[162,5627,2123],{},[187,5629,1225],{"separator":253},[238,5631,5632,5634],{},[162,5633,1337],{"mathvariant":1217},[162,5635,5213],{},[187,5637,207],{"stretchy":189},[166,5639,5640],{"encoding":168},"\\hspace{1cm} \\tilde Y \\leftarrow D (\\left[XZ \\right]^T; \\Theta_D)",[13,5642,5643],{},[147,5644,5646],{"className":5645},[150],[152,5647,5648],{"xmlns":154},[156,5649,5650,5714],{},[159,5651,5652,5654,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5692,5694,5696,5698,5700,5702,5704,5706,5708,5710,5712],{},[5198,5653],{"width":5281},[5283,5655,5285],{},[5198,5657],{"width":5200},[162,5659,335],{},[162,5661,2132],{},[162,5663,813],{},[162,5665,1700],{},[162,5667,826],{},[162,5669,13],{},[162,5671,5184],{},[162,5673,260],{},[162,5675,2132],{},[5198,5677],{"width":5200},[162,5679,4131],{},[162,5681,1700],{},[162,5683,766],{},[162,5685,1440],{},[162,5687,758],{},[162,5689,766],{},[162,5691,273],{},[5198,5693],{"width":5200},[162,5695,1367],{},[162,5697,245],{},[162,5699,338],{},[162,5701,2132],{},[162,5703,826],{},[162,5705,758],{},[162,5707,260],{},[162,5709,245],{},[162,5711,813],{},[162,5713,394],{},[166,5715,5716],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Recompute \\hspace{2mm} forward \\hspace{2mm}kinematics",[13,5718,5719],{},[147,5720,5722],{"className":5721},[150],[152,5723,5724],{"xmlns":154},[156,5725,5726,5782],{},[159,5727,5728,5730,5736,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764,5766,5768,5770,5772,5774,5780],{},[5198,5729],{"width":5281},[760,5731,5732,5734],{"accent":253},[162,5733,5358],{},[187,5735,5585],{},[187,5737,5361],{},[162,5739,5181],{},[162,5741,1700],{},[162,5743,766],{},[162,5745,1440],{},[162,5747,758],{},[162,5749,766],{},[162,5751,273],{},[162,5753,3331],{},[162,5755,245],{},[162,5757,338],{},[162,5759,2132],{},[162,5761,826],{},[162,5763,758],{},[162,5765,260],{},[162,5767,245],{},[162,5769,813],{},[162,5771,394],{},[187,5773,190],{"stretchy":189},[760,5775,5776,5778],{"accent":253},[162,5777,1852],{},[187,5779,5585],{},[187,5781,207],{"stretchy":189},[166,5783,5784],{"encoding":168},"\\hspace{1cm} \\tilde Q \\leftarrow ForwardKinematics(\\tilde Y)",[13,5786,5787],{},[147,5788,5790],{"className":5789},[150],[152,5791,5792],{"xmlns":154},[156,5793,5794,5874],{},[159,5795,5796,5798,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5866,5868,5870,5872],{},[5198,5797],{"width":5281},[5283,5799,5285],{},[5198,5801],{"width":5200},[162,5803,1835],{},[162,5805,1700],{},[162,5807,826],{},[162,5809,13],{},[162,5811,5184],{},[162,5813,260],{},[162,5815,2132],{},[5198,5817],{"width":5200},[162,5819,2148],{},[162,5821,758],{},[162,5823,260],{},[162,5825,2132],{},[162,5827,338],{},[162,5829,260],{},[5198,5831],{"width":5200},[162,5833,766],{},[162,5835,2132],{},[162,5837,291],{},[162,5839,5184],{},[162,5841,2148],{},[162,5843,758],{},[162,5845,766],{},[162,5847,245],{},[162,5849,784],{},[162,5851,758],{},[162,5853,260],{},[162,5855,245],{},[162,5857,1700],{},[162,5859,338],{},[5198,5861],{"width":5200},[162,5863,2148],{},[162,5865,1700],{},[162,5867,394],{},[162,5869,394],{},[162,5871,2132],{},[162,5873,394],{},[166,5875,5876],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Compute \\hspace{2mm} latent \\hspace{2mm} regularization \\hspace{2mm} losses",[13,5878,5879],{},[147,5880,5882],{"className":5881},[150],[152,5883,5884],{"xmlns":154},[156,5885,5886,5931],{},[159,5887,5888,5890,5905,5907,5909,5919,5921,5923],{},[5198,5889],{"width":5281},[238,5891,5892,5895],{},[162,5893,1244],{"mathvariant":5894},"script",[159,5896,5897,5899,5901,5903],{},[162,5898,2148],{},[162,5900,766],{},[162,5902,2132],{},[162,5904,291],{},[187,5906,5361],{},[162,5908,1440],{},[159,5910,5911,5913,5915,5917],{},[162,5912,2148],{},[162,5914,766],{},[162,5916,2132],{},[162,5918,291],{},[187,5920,1868],{"stretchy":189},[162,5922,5054],{},[256,5924,5925,5927,5929],{},[187,5926,1868],{"stretchy":189},[181,5928,183],{},[181,5930,183],{},[166,5932,5933],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{lreg} \\leftarrow w{lreg} \\lVert Z \\rVert _2^2",[13,5935,5936],{},[147,5937,5939],{"className":5938},[150],[152,5940,5941],{"xmlns":154},[156,5942,5943,5987],{},[159,5944,5945,5947,5961,5963,5977,5979,5981],{},[5198,5946],{"width":5281},[238,5948,5949,5951],{},[162,5950,1244],{"mathvariant":5894},[159,5952,5953,5955,5957,5959],{},[162,5954,394],{},[162,5956,766],{},[162,5958,2132],{},[162,5960,291],{},[187,5962,5361],{},[238,5964,5965,5967],{},[162,5966,1440],{},[159,5968,5969,5971,5973,5975],{},[162,5970,394],{},[162,5972,766],{},[162,5974,2132],{},[162,5976,291],{},[187,5978,1868],{"stretchy":189},[162,5980,5054],{},[238,5982,5983,5985],{},[187,5984,1868],{"stretchy":189},[181,5986,306],{},[166,5988,5989],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{sreg} \\leftarrow w_{sreg} \\lVert Z \\rVert _1",[13,5991,5992],{},[147,5993,5995],{"className":5994},[150],[152,5996,5997],{"xmlns":154},[156,5998,5999,6068],{},[159,6000,6001,6003,6017,6019,6033],{},[5198,6002],{"width":5281},[238,6004,6005,6007],{},[162,6006,1244],{"mathvariant":5894},[159,6008,6009,6011,6013,6015],{},[162,6010,323],{},[162,6012,766],{},[162,6014,2132],{},[162,6016,291],{},[187,6018,5361],{},[238,6020,6021,6023],{},[162,6022,1440],{},[159,6024,6025,6027,6029,6031],{},[162,6026,323],{},[162,6028,766],{},[162,6030,2132],{},[162,6032,291],{},[238,6034,6035,6066],{},[159,6036,6037,6039,6064],{},[187,6038,1868],{"fence":253},[1444,6040,6041,6057],{},[159,6042,6043,6049,6051],{},[238,6044,6045,6047],{},[162,6046,5054],{},[181,6048,193],{},[187,6050,303],{},[238,6052,6053,6055],{},[162,6054,5054],{},[181,6056,306],{},[159,6058,6059,6062],{},[162,6060,6061],{},"δ",[162,6063,260],{},[187,6065,1868],{"fence":253},[181,6067,306],{},[166,6069,6070],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{vreg} \\leftarrow w_{vreg} \\left\\Vert  \\frac {Z_0 - Z_1}{\\delta t} \\right\\Vert_1",[13,6072,6073],{},[147,6074,6076],{"className":6075},[150],[152,6077,6078],{"xmlns":154},[156,6079,6080,6149],{},[159,6081,6082,6084,6086,6088,6090,6092,6094,6096,6098,6100,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131,6133,6135,6137,6139,6141,6143,6145,6147],{},[5198,6083],{"width":5281},[5283,6085,5285],{},[5198,6087],{"width":5200},[162,6089,1244],{},[162,6091,1700],{},[162,6093,813],{},[162,6095,758],{},[162,6097,2148],{},[5198,6099],{"width":5200},[162,6101,6102],{"mathvariant":1217},"&",[5198,6104],{"width":5200},[162,6106,813],{},[162,6108,282],{},[162,6110,758],{},[162,6112,766],{},[162,6114,758],{},[162,6116,813],{},[162,6118,260],{},[162,6120,2132],{},[162,6122,766],{},[5198,6124],{"width":5200},[162,6126,394],{},[162,6128,13],{},[162,6130,758],{},[162,6132,813],{},[162,6134,2132],{},[5198,6136],{"width":5200},[162,6138,2148],{},[162,6140,1700],{},[162,6142,394],{},[162,6144,394],{},[162,6146,2132],{},[162,6148,394],{},[166,6150,6151],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Local \\hspace{2mm} \\& \\hspace{2mm} character \\hspace{2mm} space \\hspace{2mm} losses",[13,6153,6154],{},[147,6155,6157],{"className":6156},[150],[152,6158,6159],{"xmlns":154},[156,6160,6161,6210],{},[159,6162,6163,6165,6177,6179,6191,6193,6195,6198,6204],{},[5198,6164],{"width":5281},[238,6166,6167,6169],{},[162,6168,1244],{"mathvariant":5894},[159,6170,6171,6173,6175],{},[162,6172,2148],{},[162,6174,1700],{},[162,6176,813],{},[187,6178,5361],{},[238,6180,6181,6183],{},[162,6182,1440],{},[159,6184,6185,6187,6189],{},[162,6186,2148],{},[162,6188,1700],{},[162,6190,813],{},[187,6192,1868],{"stretchy":189},[162,6194,1852],{},[187,6196,6197],{},"⊖",[760,6199,6200,6202],{"accent":253},[162,6201,1852],{},[187,6203,5585],{},[238,6205,6206,6208],{},[187,6207,1868],{"stretchy":189},[181,6209,306],{},[166,6211,6212],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{loc} \\leftarrow w_{loc} \\lVert Y \\ominus \\tilde Y \\rVert_1",[13,6214,6215],{},[147,6216,6218],{"className":6217},[150],[152,6219,6220],{"xmlns":154},[156,6221,6222,6270],{},[159,6223,6224,6226,6238,6240,6252,6254,6256,6258,6264],{},[5198,6225],{"width":5281},[238,6227,6228,6230],{},[162,6229,1244],{"mathvariant":5894},[159,6231,6232,6234,6236],{},[162,6233,813],{},[162,6235,282],{},[162,6237,766],{},[187,6239,5361],{},[238,6241,6242,6244],{},[162,6243,1440],{},[159,6245,6246,6248,6250],{},[162,6247,813],{},[162,6249,282],{},[162,6251,766],{},[187,6253,1868],{"stretchy":189},[162,6255,5358],{},[187,6257,6197],{},[760,6259,6260,6262],{"accent":253},[162,6261,5358],{},[187,6263,5585],{},[238,6265,6266,6268],{},[187,6267,1868],{"stretchy":189},[181,6269,306],{},[166,6271,6272],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{chr} \\leftarrow w_{chr} \\lVert Q \\ominus \\tilde Q \\rVert_1",[13,6274,6275],{},[147,6276,6278],{"className":6277},[150],[152,6279,6280],{"xmlns":154},[156,6281,6282,6368],{},[159,6283,6284,6286,6288,6290,6292,6294,6296,6298,6300,6302,6304,6306,6308,6310,6312,6314,6316,6318,6320,6322,6324,6326,6328,6330,6332,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352,6354,6356,6358,6360,6362,6364,6366],{},[5198,6285],{"width":5281},[5283,6287,5285],{},[5198,6289],{"width":5200},[162,6291,1244],{},[162,6293,1700],{},[162,6295,813],{},[162,6297,758],{},[162,6299,2148],{},[5198,6301],{"width":5200},[162,6303,6102],{"mathvariant":1217},[5198,6305],{"width":5200},[162,6307,813],{},[162,6309,282],{},[162,6311,758],{},[162,6313,766],{},[162,6315,758],{},[162,6317,813],{},[162,6319,260],{},[162,6321,2132],{},[162,6323,766],{},[5198,6325],{"width":5200},[162,6327,394],{},[162,6329,13],{},[162,6331,758],{},[162,6333,813],{},[162,6335,2132],{},[5198,6337],{"width":5200},[162,6339,323],{},[162,6341,2132],{},[162,6343,2148],{},[162,6345,1700],{},[162,6347,813],{},[162,6349,245],{},[162,6351,260],{},[162,6353,696],{},[5198,6355],{"width":5200},[162,6357,2148],{},[162,6359,1700],{},[162,6361,394],{},[162,6363,394],{},[162,6365,2132],{},[162,6367,394],{},[166,6369,6370],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Local \\hspace{2mm} \\& \\hspace{2mm} character \\hspace{2mm} space \\hspace{2mm} velocity \\hspace{2mm} losses",[13,6372,6373],{},[147,6374,6376],{"className":6375},[150],[152,6377,6378],{"xmlns":154},[156,6379,6380,6482],{},[159,6381,6382,6384,6398,6400,6414],{},[5198,6383],{"width":5281},[238,6385,6386,6388],{},[162,6387,1244],{"mathvariant":5894},[159,6389,6390,6392,6394,6396],{},[162,6391,2148],{},[162,6393,323],{},[162,6395,2132],{},[162,6397,2148],{},[187,6399,5361],{},[238,6401,6402,6404],{},[162,6403,1440],{},[159,6405,6406,6408,6410,6412],{},[162,6407,2148],{},[162,6409,323],{},[162,6411,2132],{},[162,6413,2148],{},[238,6415,6416,6480],{},[159,6417,6418,6420,6444,6446,6478],{},[187,6419,1868],{"fence":253},[1444,6421,6422,6438],{},[159,6423,6424,6430,6432],{},[238,6425,6426,6428],{},[162,6427,1852],{},[181,6429,193],{},[187,6431,6197],{},[238,6433,6434,6436],{},[162,6435,1852],{},[181,6437,306],{},[159,6439,6440,6442],{},[162,6441,6061],{},[162,6443,260],{},[187,6445,303],{},[1444,6447,6448,6472],{},[159,6449,6450,6460,6462],{},[238,6451,6452,6458],{},[760,6453,6454,6456],{"accent":253},[162,6455,1852],{},[187,6457,5585],{},[181,6459,193],{},[187,6461,6197],{},[238,6463,6464,6470],{},[760,6465,6466,6468],{"accent":253},[162,6467,1852],{},[187,6469,5585],{},[181,6471,306],{},[159,6473,6474,6476],{},[162,6475,6061],{},[162,6477,260],{},[187,6479,1868],{"fence":253},[181,6481,306],{},[166,6483,6484],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{lvel} \\leftarrow w_{lvel} \\left\\Vert  \\frac {Y_0 \\ominus Y_1}{\\delta t} - \\frac {\\tilde Y_0 \\ominus \\tilde Y_1}{\\delta t} \\right\\Vert_1",[13,6486,6487],{},[147,6488,6490],{"className":6489},[150],[152,6491,6492],{"xmlns":154},[156,6493,6494,6596],{},[159,6495,6496,6498,6512,6514,6528],{},[5198,6497],{"width":5281},[238,6499,6500,6502],{},[162,6501,1244],{"mathvariant":5894},[159,6503,6504,6506,6508,6510],{},[162,6505,813],{},[162,6507,323],{},[162,6509,2132],{},[162,6511,2148],{},[187,6513,5361],{},[238,6515,6516,6518],{},[162,6517,1440],{},[159,6519,6520,6522,6524,6526],{},[162,6521,813],{},[162,6523,323],{},[162,6525,2132],{},[162,6527,2148],{},[238,6529,6530,6594],{},[159,6531,6532,6534,6558,6560,6592],{},[187,6533,1868],{"fence":253},[1444,6535,6536,6552],{},[159,6537,6538,6544,6546],{},[238,6539,6540,6542],{},[162,6541,5358],{},[181,6543,193],{},[187,6545,6197],{},[238,6547,6548,6550],{},[162,6549,5358],{},[181,6551,306],{},[159,6553,6554,6556],{},[162,6555,6061],{},[162,6557,260],{},[187,6559,303],{},[1444,6561,6562,6586],{},[159,6563,6564,6574,6576],{},[238,6565,6566,6572],{},[760,6567,6568,6570],{"accent":253},[162,6569,5358],{},[187,6571,5585],{},[181,6573,193],{},[187,6575,6197],{},[238,6577,6578,6584],{},[760,6579,6580,6582],{"accent":253},[162,6581,5358],{},[187,6583,5585],{},[181,6585,306],{},[159,6587,6588,6590],{},[162,6589,6061],{},[162,6591,260],{},[187,6593,1868],{"fence":253},[181,6595,306],{},[166,6597,6598],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{cvel} \\leftarrow w_{cvel} \\left\\Vert  \\frac {Q_0 \\ominus Q_1}{\\delta t} - \\frac {\\tilde Q_0 \\ominus \\tilde Q_1}{\\delta t} \\right\\Vert_1",[13,6600,6601],{},[147,6602,6604],{"className":6603},[150],[152,6605,6606],{"xmlns":154},[156,6607,6608,6666],{},[159,6609,6610,6612,6614,6616,6618,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660,6662,6664],{},[5198,6611],{"width":5281},[5283,6613,5285],{},[5198,6615],{"width":5200},[162,6617,1247],{},[162,6619,13],{},[162,6621,273],{},[162,6623,758],{},[162,6625,260],{},[162,6627,2132],{},[5198,6629],{"width":5200},[162,6631,338],{},[162,6633,2132],{},[162,6635,260],{},[162,6637,1440],{},[162,6639,1700],{},[162,6641,766],{},[162,6643,1367],{},[5198,6645],{"width":5200},[162,6647,13],{},[162,6649,758],{},[162,6651,766],{},[162,6653,758],{},[162,6655,826],{},[162,6657,2132],{},[162,6659,260],{},[162,6661,2132],{},[162,6663,766],{},[162,6665,394],{},[166,6667,6668],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Update \\hspace{2mm} network \\hspace{2mm} parameters",[13,6670,6671],{},[147,6672,6674],{"className":6673},[150],[152,6675,6676],{"xmlns":154},[156,6677,6678,6742],{},[159,6679,6680,6682,6688,6694,6696,6698,6701,6703,6705,6707,6709,6715,6721,6723,6726,6728,6734,6740],{},[5198,6681],{"width":5281},[238,6683,6684,6686],{},[162,6685,1337],{"mathvariant":1217},[162,6687,1835],{},[238,6689,6690,6692],{},[162,6691,1337],{"mathvariant":1217},[162,6693,5213],{},[187,6695,5361],{},[162,6697,335],{},[162,6699,6700],{},"A",[162,6702,273],{},[162,6704,758],{},[162,6706,826],{},[187,6708,190],{"stretchy":189},[238,6710,6711,6713],{},[162,6712,1337],{"mathvariant":1217},[162,6714,1835],{},[238,6716,6717,6719],{},[162,6718,1337],{"mathvariant":1217},[162,6720,5213],{},[187,6722,1849],{"separator":253},[162,6724,6725],{"mathvariant":1217},"∇",[187,6727,3396],{},[238,6729,6730,6732],{},[187,6731],{},[187,6733,4401],{"lspace":3531,"rspace":3531},[238,6735,6736,6738],{},[162,6737,1244],{"mathvariant":5894},[187,6739,4401],{"lspace":3531,"rspace":3531},[187,6741,207],{"stretchy":189},[166,6743,6744],{"encoding":168},"\\hspace{1cm} \\Theta_C \\Theta_D \\leftarrow RAdam(\\Theta_C \\Theta_D, \\nabla \\sum\\mathop{}_{*} \\mathcal {L}_{*})",[13,6746,6747],{},[147,6748,6750],{"className":6749},[150],[152,6751,6752],{"xmlns":154},[156,6753,6754,6762],{},[159,6755,6756,6758,6760],{},[162,6757,2132],{},[162,6759,338],{},[162,6761,273],{},[166,6763,6764],{"encoding":168},"end",[13,6766,6767,6768,6781],{},"После тренировки для работы алгоритма в режиме реального времени нейросеть Compressor не требуется, поскольку она необходима только для нахождения ",[147,6769,6771],{"className":6770},[150],[152,6772,6773],{"xmlns":154},[156,6774,6775,6779],{},[159,6776,6777],{},[162,6778,5054],{},[166,6780,5054],{"encoding":168},", используемого для тренировки других нейросетей.",[13,6783,6784,6785,4898,6802,6819,6820,4898,6843,6866,6867,4898,6880,6893],{},"Нейросеть Stepper тренируется брать на вход векторы ",[147,6786,6788],{"className":6787},[150],[152,6789,6790],{"xmlns":154},[156,6791,6792,6800],{},[159,6793,6794],{},[238,6795,6796,6798],{},[162,6797,242],{},[162,6799,245],{},[166,6801,4897],{"encoding":168},[147,6803,6805],{"className":6804},[150],[152,6806,6807],{"xmlns":154},[156,6808,6809,6817],{},[159,6810,6811],{},[238,6812,6813,6815],{},[162,6814,784],{},[162,6816,245],{},[166,6818,4916],{"encoding":168}," текущего кадра и выдавать дельту, добавляемую к ним, для получения векторов ",[147,6821,6823],{"className":6822},[150],[152,6824,6825],{"xmlns":154},[156,6826,6827,6841],{},[159,6828,6829],{},[238,6830,6831,6833],{},[162,6832,242],{},[159,6834,6835,6837,6839],{},[162,6836,245],{},[187,6838,715],{},[181,6840,306],{},[166,6842,4941],{"encoding":168},[147,6844,6846],{"className":6845},[150],[152,6847,6848],{"xmlns":154},[156,6849,6850,6864],{},[159,6851,6852],{},[238,6853,6854,6856],{},[162,6855,784],{},[159,6857,6858,6860,6862],{},[162,6859,245],{},[187,6861,715],{},[181,6863,306],{},[166,6865,4965],{"encoding":168}," на следующий кадр. Берется небольшое окно векторов ",[147,6868,6870],{"className":6869},[150],[152,6871,6872],{"xmlns":154},[156,6873,6874,6878],{},[159,6875,6876],{},[162,6877,1846],{},[166,6879,1846],{"encoding":168},[147,6881,6883],{"className":6882},[150],[152,6884,6885],{"xmlns":154},[156,6886,6887,6891],{},[159,6888,6889],{},[162,6890,5054],{},[166,6892,5054],{"encoding":168}," и повторно предсказываются следующие значения параметров позы и латентных переменных и подаются на следующий кадр.",[5162,6895,22,6896,6899,6980,7036,7090,7200,7246,7327,7417,7471,7525,7547,7595,7663,7731,7878,8024,8093,8155],{},[5165,6897,6898],{},"Псевдокод алгоритма тренировки Stepper(S)",[13,6900,6901],{},[147,6902,6904],{"className":6903},[150],[152,6905,6906],{"xmlns":154},[156,6907,6908,6977],{},[159,6909,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6941,6943,6945,6947,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6973,6975],{},[162,6911,5181],{},[162,6913,5184],{},[162,6915,338],{},[162,6917,813],{},[162,6919,260],{},[162,6921,245],{},[162,6923,1700],{},[162,6925,338],{},[5198,6927],{"width":5200},[162,6929,2123],{},[162,6931,766],{},[162,6933,758],{},[162,6935,245],{},[162,6937,338],{},[162,6939,6940],{},"S",[162,6942,260],{},[162,6944,2132],{},[162,6946,13],{},[162,6948,13],{},[162,6950,2132],{},[162,6952,766],{},[187,6954,190],{"stretchy":189},[162,6956,1846],{},[187,6958,1849],{"separator":253},[162,6960,5054],{},[187,6962,1849],{"separator":253},[162,6964,394],{},[187,6966,1849],{"separator":253},[238,6968,6969,6971],{},[162,6970,1337],{"mathvariant":1217},[162,6972,6940],{},[187,6974,207],{"stretchy":189},[187,6976,5264],{},[166,6978,6979],{"encoding":168},"Function \\hspace{2mm} TrainStepper(X, Z, s, \\Theta_S):",[13,6981,6982],{},[147,6983,6985],{"className":6984},[150],[152,6986,6987],{"xmlns":154},[156,6988,6989,7033],{},[159,6990,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031],{},[5198,6992],{"width":5281},[5283,6994,5285],{},[5198,6996],{"width":5200},[162,6998,6940],{},[162,7000,2132],{},[162,7002,260],{},[5198,7004],{"width":5200},[162,7006,245],{},[162,7008,338],{},[162,7010,245],{},[162,7012,260],{},[162,7014,245],{},[162,7016,758],{},[162,7018,2148],{},[5198,7020],{"width":5200},[162,7022,394],{},[162,7024,260],{},[162,7026,758],{},[162,7028,260],{},[162,7030,2132],{},[162,7032,394],{},[166,7034,7035],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Set \\hspace{2mm} initial \\hspace{2mm} states",[13,7037,7038],{},[147,7039,7041],{"className":7040},[150],[152,7042,7043],{"xmlns":154},[156,7044,7045,7087],{},[159,7046,7047,7049,7059,7061,7071,7073,7079,7081],{},[5198,7048],{"width":5281},[238,7050,7051,7057],{},[760,7052,7053,7055],{"accent":253},[162,7054,1846],{},[187,7056,5585],{},[181,7058,193],{},[187,7060,1849],{"separator":253},[238,7062,7063,7069],{},[760,7064,7065,7067],{"accent":253},[162,7066,5054],{},[187,7068,5585],{},[181,7070,193],{},[187,7072,5361],{},[238,7074,7075,7077],{},[162,7076,1846],{},[181,7078,193],{},[187,7080,1849],{"separator":253},[238,7082,7083,7085],{},[162,7084,5054],{},[181,7086,193],{},[166,7088,7089],{"encoding":168},"\\hspace{1cm} \\tilde X_0, \\tilde Z_0 \\leftarrow X_0, Z_0",[13,7091,7092],{},[147,7093,7095],{"className":7094},[150],[152,7096,7097],{"xmlns":154},[156,7098,7099,7197],{},[159,7100,7101,7103,7105,7107,7109,7111,7113,7115,7117,7119,7121,7123,7129,7131,7133,7135,7137,7139,7145,7147,7149,7151,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193,7195],{},[5198,7102],{"width":5281},[5283,7104,5285],{},[5198,7106],{"width":5200},[162,7108,1857],{},[162,7110,766],{},[162,7112,2132],{},[162,7114,273],{},[162,7116,245],{},[162,7118,813],{},[162,7120,260],{},[5198,7122],{"width":5200},[760,7124,7125,7127],{"accent":253},[162,7126,1846],{},[187,7128,5585],{},[5198,7130],{"width":5200},[162,7132,758],{},[162,7134,338],{},[162,7136,273],{},[5198,7138],{"width":5200},[760,7140,7141,7143],{"accent":253},[162,7142,5054],{},[187,7144,5585],{},[5198,7146],{"width":5200},[162,7148,1700],{},[162,7150,323],{},[162,7152,2132],{},[162,7154,766],{},[5198,7156],{"width":5200},[162,7158,758],{},[5198,7160],{"width":5200},[162,7162,1440],{},[162,7164,245],{},[162,7166,338],{},[162,7168,273],{},[162,7170,1700],{},[162,7172,1440],{},[5198,7174],{"width":5200},[162,7176,1700],{},[162,7178,4131],{},[5198,7180],{"width":5200},[162,7182,394],{},[5198,7184],{"width":5200},[162,7186,4131],{},[162,7188,766],{},[162,7190,758],{},[162,7192,826],{},[162,7194,2132],{},[162,7196,394],{},[166,7198,7199],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Predict \\hspace{2mm} \\tilde X \\hspace{2mm} and \\hspace{2mm} \\tilde Z \\hspace{2mm} over \\hspace{2mm} a \\hspace{2mm} window \\hspace{2mm} of \\hspace{2mm} s \\hspace{2mm} frames ",[13,7201,7202],{},[147,7203,7205],{"className":7204},[150],[152,7206,7207],{"xmlns":154},[156,7208,7209,7243],{},[159,7210,7211,7213,7215,7217,7219,7221,7223,7225,7227,7229,7231,7233,7235,7237,7239,7241],{},[5198,7212],{"width":5281},[162,7214,4131],{},[162,7216,1700],{},[162,7218,766],{},[5198,7220],{"width":5200},[162,7222,245],{},[187,7224,5361],{},[181,7226,306],{},[5198,7228],{"width":5200},[162,7230,260],{},[162,7232,1700],{},[5198,7234],{"width":5200},[162,7236,394],{},[5198,7238],{"width":5200},[162,7240,273],{},[162,7242,1700],{},[166,7244,7245],{"encoding":168},"\\hspace{1cm} for \\hspace{2mm} i  \\leftarrow 1 \\hspace{2mm} to \\hspace{2mm} s \\hspace{2mm} do",[13,7247,7248],{},[147,7249,7251],{"className":7250},[150],[152,7252,7253],{"xmlns":154},[156,7254,7255,7324],{},[159,7256,7257,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7288,7290,7292,7294,7296,7298,7300,7302,7308,7310,7312,7314,7316,7318],{},[5198,7258],{"width":7259},"5.6906em",[5283,7261,5285],{},[5198,7263],{"width":5200},[162,7265,1857],{},[162,7267,766],{},[162,7269,2132],{},[162,7271,273],{},[162,7273,245],{},[162,7275,813],{},[162,7277,260],{},[5198,7279],{"width":5200},[162,7281,273],{},[162,7283,2132],{},[162,7285,2148],{},[162,7287,260],{},[162,7289,758],{},[162,7291,394],{},[5198,7293],{"width":5200},[162,7295,4131],{},[162,7297,1700],{},[162,7299,766],{},[5198,7301],{"width":5200},[760,7303,7304,7306],{"accent":253},[162,7305,1846],{},[187,7307,5585],{},[5198,7309],{"width":5200},[162,7311,758],{},[162,7313,338],{},[162,7315,273],{},[5198,7317],{"width":5200},[760,7319,7320,7322],{"accent":253},[162,7321,5054],{},[187,7323,5585],{},[166,7325,7326],{"encoding":168},"\\hspace{2cm} \\text{//} \\hspace{2mm} Predict \\hspace{2mm} deltas \\hspace{2mm} for \\hspace{2mm} \\tilde X \\hspace{2mm} and \\hspace{2mm} \\tilde Z",[13,7328,7329],{},[147,7330,7332],{"className":7331},[150],[152,7333,7334],{"xmlns":154},[156,7335,7336,7414],{},[159,7337,7338,7340,7342,7348,7350,7352,7358,7360,7362,7364,7366,7382,7398,7404,7406,7412],{},[5198,7339],{"width":7259},[162,7341,6061],{},[760,7343,7344,7346],{"accent":253},[162,7345,242],{},[187,7347,5585],{},[187,7349,1849],{"separator":253},[162,7351,6061],{},[760,7353,7354,7356],{"accent":253},[162,7355,784],{},[187,7357,5585],{},[187,7359,5361],{},[162,7361,6940],{},[187,7363,190],{"stretchy":189},[187,7365,1733],{"stretchy":189},[238,7367,7368,7374],{},[760,7369,7370,7372],{"accent":253},[162,7371,1846],{},[187,7373,5585],{},[159,7375,7376,7378,7380],{},[162,7377,245],{},[187,7379,303],{},[181,7381,306],{},[238,7383,7384,7390],{},[760,7385,7386,7388],{"accent":253},[162,7387,5054],{},[187,7389,5585],{},[159,7391,7392,7394,7396],{},[162,7393,245],{},[187,7395,303],{},[181,7397,306],{},[331,7399,7400,7402],{},[187,7401,1750],{"stretchy":189},[162,7403,2123],{},[187,7405,1225],{"separator":253},[238,7407,7408,7410],{},[162,7409,1337],{"mathvariant":1217},[162,7411,6940],{},[187,7413,207],{"stretchy":189},[166,7415,7416],{"encoding":168},"\\hspace{2cm} \\delta \\tilde x, \\delta \\tilde z \\leftarrow S([\\tilde X_{i-1} \\tilde Z_{i-1}]^T; \\Theta_S)",[13,7418,7419],{},[147,7420,7422],{"className":7421},[150],[152,7423,7424],{"xmlns":154},[156,7425,7426,7468],{},[159,7427,7428,7430,7440,7442,7458,7460,7462],{},[5198,7429],{"width":7259},[238,7431,7432,7438],{},[760,7433,7434,7436],{"accent":253},[162,7435,1846],{},[187,7437,5585],{},[162,7439,245],{},[187,7441,5361],{},[238,7443,7444,7450],{},[760,7445,7446,7448],{"accent":253},[162,7447,1846],{},[187,7449,5585],{},[159,7451,7452,7454,7456],{},[162,7453,245],{},[187,7455,303],{},[181,7457,306],{},[187,7459,715],{},[162,7461,6061],{},[760,7463,7464,7466],{"accent":253},[162,7465,784],{},[187,7467,5585],{},[166,7469,7470],{"encoding":168},"\\hspace{2cm} \\tilde X_i \\leftarrow \\tilde X_{i-1} + \\delta  \\tilde z",[13,7472,7473],{},[147,7474,7476],{"className":7475},[150],[152,7477,7478],{"xmlns":154},[156,7479,7480,7522],{},[159,7481,7482,7484,7494,7496,7512,7514,7516],{},[5198,7483],{"width":7259},[238,7485,7486,7492],{},[760,7487,7488,7490],{"accent":253},[162,7489,5054],{},[187,7491,5585],{},[162,7493,245],{},[187,7495,5361],{},[238,7497,7498,7504],{},[760,7499,7500,7502],{"accent":253},[162,7501,5054],{},[187,7503,5585],{},[159,7505,7506,7508,7510],{},[162,7507,245],{},[187,7509,303],{},[181,7511,306],{},[187,7513,715],{},[162,7515,6061],{},[760,7517,7518,7520],{"accent":253},[162,7519,784],{},[187,7521,5585],{},[166,7523,7524],{"encoding":168},"\\hspace{2cm} \\tilde Z_i \\leftarrow \\tilde Z_{i-1} + \\delta  \\tilde z",[13,7526,7527],{},[147,7528,7530],{"className":7529},[150],[152,7531,7532],{"xmlns":154},[156,7533,7534,7544],{},[159,7535,7536,7538,7540,7542],{},[5198,7537],{"width":5281},[162,7539,2132],{},[162,7541,338],{},[162,7543,273],{},[166,7545,7546],{"encoding":168},"\\hspace{1cm} end",[13,7548,7549],{},[147,7550,7552],{"className":7551},[150],[152,7553,7554],{"xmlns":154},[156,7555,7556,7592],{},[159,7557,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590],{},[5198,7559],{"width":5281},[5283,7561,5285],{},[5198,7563],{"width":5200},[162,7565,1835],{},[162,7567,1700],{},[162,7569,826],{},[162,7571,13],{},[162,7573,5184],{},[162,7575,260],{},[162,7577,2132],{},[5198,7579],{"width":5200},[162,7581,2148],{},[162,7583,1700],{},[162,7585,394],{},[162,7587,394],{},[162,7589,2132],{},[162,7591,394],{},[166,7593,7594],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Compute \\hspace{2mm} losses",[13,7596,7597],{},[147,7598,7600],{"className":7599},[150],[152,7601,7602],{"xmlns":154},[156,7603,7604,7660],{},[159,7605,7606,7608,7622,7624,7638,7640,7642,7644,7646,7652,7654],{},[5198,7607],{"width":5281},[238,7609,7610,7612],{},[162,7611,1244],{"mathvariant":5894},[159,7613,7614,7616,7618,7620],{},[162,7615,242],{},[162,7617,323],{},[162,7619,758],{},[162,7621,2148],{},[187,7623,5361],{},[238,7625,7626,7628],{},[162,7627,1440],{},[159,7629,7630,7632,7634,7636],{},[162,7631,242],{},[162,7633,323],{},[162,7635,758],{},[162,7637,2148],{},[162,7639,1914],{"mathvariant":1217},[162,7641,1914],{"mathvariant":1217},[162,7643,1846],{},[187,7645,303],{},[760,7647,7648,7650],{"accent":253},[162,7649,1846],{},[187,7651,5585],{},[162,7653,1914],{"mathvariant":1217},[238,7655,7656,7658],{},[162,7657,1914],{"mathvariant":1217},[181,7659,306],{},[166,7661,7662],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{xval} \\leftarrow w_{xval} ||X - \\tilde X ||_1",[13,7664,7665],{},[147,7666,7668],{"className":7667},[150],[152,7669,7670],{"xmlns":154},[156,7671,7672,7728],{},[159,7673,7674,7676,7690,7692,7706,7708,7710,7712,7714,7720,7722],{},[5198,7675],{"width":5281},[238,7677,7678,7680],{},[162,7679,1244],{"mathvariant":5894},[159,7681,7682,7684,7686,7688],{},[162,7683,784],{},[162,7685,323],{},[162,7687,758],{},[162,7689,2148],{},[187,7691,5361],{},[238,7693,7694,7696],{},[162,7695,1440],{},[159,7697,7698,7700,7702,7704],{},[162,7699,784],{},[162,7701,323],{},[162,7703,758],{},[162,7705,2148],{},[162,7707,1914],{"mathvariant":1217},[162,7709,1914],{"mathvariant":1217},[162,7711,5054],{},[187,7713,303],{},[760,7715,7716,7718],{"accent":253},[162,7717,5054],{},[187,7719,5585],{},[162,7721,1914],{"mathvariant":1217},[238,7723,7724,7726],{},[162,7725,1914],{"mathvariant":1217},[181,7727,306],{},[166,7729,7730],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{zval} \\leftarrow w_{zval} ||Z - \\tilde Z ||_1",[13,7732,7733],{},[147,7734,7736],{"className":7735},[150],[152,7737,7738],{"xmlns":154},[156,7739,7740,7875],{},[159,7741,7742,7744,7758,7760,7774],{},[5198,7743],{"width":5281},[238,7745,7746,7748],{},[162,7747,1244],{"mathvariant":5894},[159,7749,7750,7752,7754,7756],{},[162,7751,242],{},[162,7753,323],{},[162,7755,2132],{},[162,7757,2148],{},[187,7759,5361],{},[238,7761,7762,7764],{},[162,7763,1440],{},[159,7765,7766,7768,7770,7772],{},[162,7767,242],{},[162,7769,323],{},[162,7771,2132],{},[162,7773,2148],{},[238,7775,7776,7873],{},[159,7777,7778,7780,7821,7823,7871],{},[187,7779,1868],{"fence":253},[1444,7781,7782,7815],{},[159,7783,7784,7801,7803],{},[238,7785,7786,7788],{},[162,7787,1846],{},[159,7789,7790,7792,7795,7797,7799],{},[181,7791,193],{},[187,7793,7794],{},"→",[162,7796,394],{},[187,7798,303],{},[181,7800,306],{},[187,7802,303],{},[238,7804,7805,7807],{},[162,7806,1846],{},[159,7808,7809,7811,7813],{},[181,7810,306],{},[187,7812,7794],{},[162,7814,394],{},[159,7816,7817,7819],{},[162,7818,6061],{},[162,7820,260],{},[187,7822,303],{},[1444,7824,7825,7865],{},[159,7826,7827,7847,7849],{},[238,7828,7829,7835],{},[760,7830,7831,7833],{"accent":253},[162,7832,1846],{},[187,7834,5585],{},[159,7836,7837,7839,7841,7843,7845],{},[181,7838,193],{},[187,7840,7794],{},[162,7842,394],{},[187,7844,303],{},[181,7846,306],{},[187,7848,303],{},[238,7850,7851,7857],{},[760,7852,7853,7855],{"accent":253},[162,7854,1846],{},[187,7856,5585],{},[159,7858,7859,7861,7863],{},[181,7860,306],{},[187,7862,7794],{},[162,7864,394],{},[159,7866,7867,7869],{},[162,7868,6061],{},[162,7870,260],{},[187,7872,1868],{"fence":253},[181,7874,306],{},[166,7876,7877],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{xvel} \\leftarrow w_{xvel} \\left\\Vert  \\frac {X_{0 \\rightarrow s-1} - X_{1 \\rightarrow s}}{\\delta t} - \\frac { \\tilde X_{0 \\rightarrow s-1} - \\tilde X_{1 \\rightarrow s}}{\\delta t} \\right\\Vert_1",[13,7879,7880],{},[147,7881,7883],{"className":7882},[150],[152,7884,7885],{"xmlns":154},[156,7886,7887,8021],{},[159,7888,7889,7891,7905,7907,7921],{},[5198,7890],{"width":5281},[238,7892,7893,7895],{},[162,7894,1244],{"mathvariant":5894},[159,7896,7897,7899,7901,7903],{},[162,7898,784],{},[162,7900,323],{},[162,7902,2132],{},[162,7904,2148],{},[187,7906,5361],{},[238,7908,7909,7911],{},[162,7910,1440],{},[159,7912,7913,7915,7917,7919],{},[162,7914,784],{},[162,7916,323],{},[162,7918,2132],{},[162,7920,2148],{},[238,7922,7923,8019],{},[159,7924,7925,7927,7967,7969,8017],{},[187,7926,1868],{"fence":253},[1444,7928,7929,7961],{},[159,7930,7931,7947,7949],{},[238,7932,7933,7935],{},[162,7934,5054],{},[159,7936,7937,7939,7941,7943,7945],{},[181,7938,193],{},[187,7940,7794],{},[162,7942,394],{},[187,7944,303],{},[181,7946,306],{},[187,7948,303],{},[238,7950,7951,7953],{},[162,7952,5054],{},[159,7954,7955,7957,7959],{},[181,7956,306],{},[187,7958,7794],{},[162,7960,394],{},[159,7962,7963,7965],{},[162,7964,6061],{},[162,7966,260],{},[187,7968,303],{},[1444,7970,7971,8011],{},[159,7972,7973,7993,7995],{},[238,7974,7975,7981],{},[760,7976,7977,7979],{"accent":253},[162,7978,5054],{},[187,7980,5585],{},[159,7982,7983,7985,7987,7989,7991],{},[181,7984,193],{},[187,7986,7794],{},[162,7988,394],{},[187,7990,303],{},[181,7992,306],{},[187,7994,303],{},[238,7996,7997,8003],{},[760,7998,7999,8001],{"accent":253},[162,8000,5054],{},[187,8002,5585],{},[159,8004,8005,8007,8009],{},[181,8006,306],{},[187,8008,7794],{},[162,8010,394],{},[159,8012,8013,8015],{},[162,8014,6061],{},[162,8016,260],{},[187,8018,1868],{"fence":253},[181,8020,306],{},[166,8022,8023],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{zvel} \\leftarrow w_{zvel} \\left\\Vert  \\frac {Z_{0 \\rightarrow s-1} - Z_{1 \\rightarrow s}}{\\delta t} - \\frac { \\tilde Z_{0 \\rightarrow s-1} - \\tilde Z_{1 \\rightarrow s}}{\\delta t} \\right\\Vert_1",[13,8025,8026],{},[147,8027,8029],{"className":8028},[150],[152,8030,8031],{"xmlns":154},[156,8032,8033,8091],{},[159,8034,8035,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055,8057,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079,8081,8083,8085,8087,8089],{},[5198,8036],{"width":5281},[5283,8038,5285],{},[5198,8040],{"width":5200},[162,8042,1247],{},[162,8044,13],{},[162,8046,273],{},[162,8048,758],{},[162,8050,260],{},[162,8052,2132],{},[5198,8054],{"width":5200},[162,8056,338],{},[162,8058,2132],{},[162,8060,260],{},[162,8062,1440],{},[162,8064,1700],{},[162,8066,766],{},[162,8068,1367],{},[5198,8070],{"width":5200},[162,8072,13],{},[162,8074,758],{},[162,8076,766],{},[162,8078,758],{},[162,8080,826],{},[162,8082,2132],{},[162,8084,260],{},[162,8086,2132],{},[162,8088,766],{},[162,8090,394],{},[166,8092,6668],{"encoding":168},[13,8094,8095],{},[147,8096,8098],{"className":8097},[150],[152,8099,8100],{"xmlns":154},[156,8101,8102,8152],{},[159,8103,8104,8106,8112,8114,8116,8118,8120,8122,8124,8126,8132,8134,8136,8138,8144,8150],{},[5198,8105],{"width":5281},[238,8107,8108,8110],{},[162,8109,1337],{"mathvariant":1217},[162,8111,6940],{},[187,8113,5361],{},[162,8115,335],{},[162,8117,6700],{},[162,8119,273],{},[162,8121,758],{},[162,8123,826],{},[187,8125,190],{"stretchy":189},[238,8127,8128,8130],{},[162,8129,1337],{"mathvariant":1217},[162,8131,6940],{},[187,8133,1849],{"separator":253},[162,8135,6725],{"mathvariant":1217},[187,8137,3396],{},[238,8139,8140,8142],{},[187,8141],{},[187,8143,4401],{"lspace":3531,"rspace":3531},[238,8145,8146,8148],{},[162,8147,1244],{"mathvariant":5894},[187,8149,4401],{"lspace":3531,"rspace":3531},[187,8151,207],{"stretchy":189},[166,8153,8154],{"encoding":168},"\\hspace{1cm} \\Theta_S \\leftarrow RAdam(\\Theta_S, \\nabla \\sum\\mathop{}_{*} \\mathcal {L}_{*})",[13,8156,8157],{},[147,8158,8160],{"className":8159},[150],[152,8161,8162],{"xmlns":154},[156,8163,8164,8172],{},[159,8165,8166,8168,8170],{},[162,8167,2132],{},[162,8169,338],{},[162,8171,273],{},[166,8173,6764],{"encoding":168},[13,8175,8176,8177,4898,8190,8203,8204,8217,8218,8231,8232,8250,8251,4917,8264,8281,8282,8300,8301,8322,8323,4776],{},"Наконец, нейросеть Projector позволяет полностью избавиться от необходимости хранения ",[147,8178,8180],{"className":8179},[150],[152,8181,8182],{"xmlns":154},[156,8183,8184,8188],{},[159,8185,8186],{},[162,8187,1846],{},[166,8189,1846],{"encoding":168},[147,8191,8193],{"className":8192},[150],[152,8194,8195],{"xmlns":154},[156,8196,8197,8201],{},[159,8198,8199],{},[162,8200,5054],{},[166,8202,5054],{"encoding":168}," в памяти.\nДля ее обучения берут вектор ",[147,8205,8207],{"className":8206},[150],[152,8208,8209],{"xmlns":154},[156,8210,8211,8215],{},[159,8212,8213],{},[162,8214,242],{},[166,8216,242],{"encoding":168},", семплируется гауссовский шум",[147,8219,8221],{"className":8220},[150],[152,8222,8223],{"xmlns":154},[156,8224,8225,8229],{},[159,8226,8227],{},[162,8228,338],{},[166,8230,338],{"encoding":168},"и масштабируется случайным шумом ",[147,8233,8235],{"className":8234},[150],[152,8236,8237],{"xmlns":154},[156,8238,8239,8247],{},[159,8240,8241],{},[331,8242,8243,8245],{},[162,8244,338],{},[162,8246,3516],{},[166,8248,8249],{"encoding":168},"n^\\sigma",",\nполученная величина добавляется к ",[147,8252,8254],{"className":8253},[150],[152,8255,8256],{"xmlns":154},[156,8257,8258,8262],{},[159,8259,8260],{},[162,8261,242],{},[166,8263,242],{"encoding":168},[147,8265,8267],{"className":8266},[150],[152,8268,8269],{"xmlns":154},[156,8270,8271,8279],{},[159,8272,8273],{},[760,8274,8275,8277],{"accent":253},[162,8276,242],{},[187,8278,2342],{},[166,8280,4738],{"encoding":168},",\nпо ней выполняется нахождение ближайших ",[147,8283,8285],{"className":8284},[150],[152,8286,8287],{"xmlns":154},[156,8288,8289,8297],{},[159,8290,8291],{},[331,8292,8293,8295],{},[162,8294,1367],{},[187,8296,4401],{},[166,8298,8299],{"encoding":168},"k^*"," методом ближайшего соседа.\nProjector далее обучается выдавать соответствующие вектора параметров позы ",[147,8302,8304],{"className":8303},[150],[152,8305,8306],{"xmlns":154},[156,8307,8308,8320],{},[159,8309,8310],{},[238,8311,8312,8314],{},[162,8313,242],{},[331,8315,8316,8318],{},[162,8317,1367],{},[187,8319,4401],{},[166,8321,5009],{"encoding":168}," и латентные переменные ",[147,8324,8326],{"className":8325},[150],[152,8327,8328],{"xmlns":154},[156,8329,8330,8342],{},[159,8331,8332],{},[238,8333,8334,8336],{},[162,8335,784],{},[331,8337,8338,8340],{},[162,8339,1367],{},[187,8341,4401],{},[166,8343,5031],{"encoding":168},[5162,8345,22,8346,8349,8433,8521,8558,8638,8671,8745,8781,8843,8895,8959,9011,9058,9130,9202,9312,9381,9445],{},[5165,8347,8348],{},"Псевдокод алгоритма тренировки Projector(P)",[13,8350,8351],{},[147,8352,8354],{"className":8353},[150],[152,8355,8356],{"xmlns":154},[156,8357,8358,8430],{},[159,8359,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406,8408,8410,8412,8414,8416,8418,8420,8426,8428],{},[162,8361,5181],{},[162,8363,5184],{},[162,8365,338],{},[162,8367,813],{},[162,8369,260],{},[162,8371,245],{},[162,8373,1700],{},[162,8375,338],{},[5198,8377],{"width":5200},[162,8379,2123],{},[162,8381,766],{},[162,8383,758],{},[162,8385,245],{},[162,8387,338],{},[162,8389,1857],{},[162,8391,766],{},[162,8393,1700],{},[162,8395,296],{},[162,8397,2132],{},[162,8399,813],{},[162,8401,260],{},[162,8403,1700],{},[162,8405,766],{},[187,8407,190],{"stretchy":189},[162,8409,242],{},[187,8411,1849],{"separator":253},[162,8413,1846],{},[187,8415,1849],{"separator":253},[162,8417,5054],{},[187,8419,1849],{"separator":253},[238,8421,8422,8424],{},[162,8423,1337],{"mathvariant":1217},[162,8425,1857],{"mathvariant":5894},[187,8427,207],{"stretchy":189},[187,8429,5264],{},[166,8431,8432],{"encoding":168},"Function \\hspace{2mm} TrainProjector(x, X, Z, \\Theta_{\\mathcal{P}}):",[13,8434,8435],{},[147,8436,8438],{"className":8437},[150],[152,8439,8440],{"xmlns":154},[156,8441,8442,8518],{},[159,8443,8444,8446,8448,8450,8452,8454,8456,8458,8460,8462,8464,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486,8488,8490,8492,8494,8496,8498,8500,8502,8504,8506,8508,8510,8512],{},[5198,8445],{"width":5281},[5283,8447,5285],{},[5198,8449],{"width":5200},[162,8451,6940],{},[162,8453,758],{},[162,8455,826],{},[162,8457,13],{},[162,8459,2148],{},[162,8461,2132],{},[5198,8463],{"width":5200},[162,8465,5184],{},[162,8467,338],{},[162,8469,245],{},[162,8471,4131],{},[162,8473,1700],{},[162,8475,766],{},[162,8477,826],{},[5198,8479],{"width":5200},[162,8481,338],{},[162,8483,1700],{},[162,8485,245],{},[162,8487,394],{},[162,8489,2132],{},[5198,8491],{"width":5200},[162,8493,826],{},[162,8495,758],{},[162,8497,291],{},[162,8499,338],{},[162,8501,245],{},[162,8503,260],{},[162,8505,5184],{},[162,8507,273],{},[162,8509,2132],{},[5198,8511],{"width":5200},[331,8513,8514,8516],{},[162,8515,338],{},[162,8517,3516],{},[166,8519,8520],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Sample \\hspace{2mm} uniform \\hspace{2mm} noise \\hspace{2mm} magnitude \\hspace{2mm} n^\\sigma",[13,8522,8523],{},[147,8524,8526],{"className":8525},[150],[152,8527,8528],{"xmlns":154},[156,8529,8530,8555],{},[159,8531,8532,8534,8540,8543,8545,8547,8549,8551,8553],{},[5198,8533],{"width":5281},[331,8535,8536,8538],{},[162,8537,338],{},[162,8539,3516],{},[187,8541,8542],{},"∼",[162,8544,1247],{"mathvariant":5894},[187,8546,190],{"stretchy":189},[181,8548,193],{},[187,8550,1849],{"separator":253},[181,8552,306],{},[187,8554,207],{"stretchy":189},[166,8556,8557],{"encoding":168},"\\hspace{1cm} n^\\sigma \\sim \\mathcal{U}(0, 1)",[13,8559,8560],{},[147,8561,8563],{"className":8562},[150],[152,8564,8565],{"xmlns":154},[156,8566,8567,8635],{},[159,8568,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589,8591,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633],{},[5198,8570],{"width":5281},[5283,8572,5285],{},[5198,8574],{"width":5200},[162,8576,6940],{},[162,8578,758],{},[162,8580,826],{},[162,8582,13],{},[162,8584,2148],{},[162,8586,2132],{},[5198,8588],{"width":5200},[162,8590,291],{},[162,8592,758],{},[162,8594,5184],{},[162,8596,394],{},[162,8598,394],{},[162,8600,245],{},[162,8602,758],{},[162,8604,338],{},[5198,8606],{"width":5200},[162,8608,338],{},[162,8610,1700],{},[162,8612,245],{},[162,8614,394],{},[162,8616,2132],{},[5198,8618],{"width":5200},[162,8620,323],{},[162,8622,2132],{},[162,8624,813],{},[162,8626,260],{},[162,8628,1700],{},[162,8630,766],{},[5198,8632],{"width":5200},[162,8634,338],{},[166,8636,8637],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Sample \\hspace{2mm} gaussian \\hspace{2mm} noise \\hspace{2mm} vector \\hspace{2mm} n",[13,8639,8640],{},[147,8641,8643],{"className":8642},[150],[152,8644,8645],{"xmlns":154},[156,8646,8647,8668],{},[159,8648,8649,8651,8653,8655,8658,8660,8662,8664,8666],{},[5198,8650],{"width":5281},[162,8652,338],{},[187,8654,8542],{},[162,8656,8657],{"mathvariant":5894},"N",[187,8659,190],{"stretchy":189},[181,8661,193],{},[187,8663,1849],{"separator":253},[181,8665,306],{},[187,8667,207],{"stretchy":189},[166,8669,8670],{"encoding":168},"\\hspace{1cm} n \\sim \\mathcal{N}(0, 1)",[13,8672,8673],{},[147,8674,8676],{"className":8675},[150],[152,8677,8678],{"xmlns":154},[156,8679,8680,8742],{},[159,8681,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740],{},[5198,8683],{"width":5281},[5283,8685,5285],{},[5198,8687],{"width":5200},[162,8689,6700],{},[162,8691,273],{},[162,8693,273],{},[5198,8695],{"width":5200},[162,8697,338],{},[162,8699,1700],{},[162,8701,245],{},[162,8703,394],{},[162,8705,2132],{},[5198,8707],{"width":5200},[162,8709,260],{},[162,8711,1700],{},[5198,8713],{"width":5200},[162,8715,4131],{},[162,8717,2132],{},[162,8719,758],{},[162,8721,260],{},[162,8723,5184],{},[162,8725,766],{},[162,8727,2132],{},[5198,8729],{"width":5200},[162,8731,323],{},[162,8733,2132],{},[162,8735,813],{},[162,8737,260],{},[162,8739,1700],{},[162,8741,766],{},[166,8743,8744],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Add \\hspace{2mm} noise \\hspace{2mm} to \\hspace{2mm} feature \\hspace{2mm} vector",[13,8746,8747],{},[147,8748,8750],{"className":8749},[150],[152,8751,8752],{"xmlns":154},[156,8753,8754,8778],{},[159,8755,8756,8758,8764,8766,8768,8770,8776],{},[5198,8757],{"width":5281},[760,8759,8760,8762],{"accent":253},[162,8761,242],{},[187,8763,2342],{},[187,8765,5361],{},[162,8767,242],{},[187,8769,715],{},[331,8771,8772,8774],{},[162,8773,338],{},[162,8775,3516],{},[162,8777,338],{},[166,8779,8780],{"encoding":168},"\\hspace{1cm} \\hat x \\leftarrow x + n^\\sigma n",[13,8782,8783],{},[147,8784,8786],{"className":8785},[150],[152,8787,8788],{"xmlns":154},[156,8789,8790,8840],{},[159,8791,8792,8794,8796,8798,8800,8802,8804,8806,8808,8810,8812,8814,8816,8818,8820,8822,8824,8826,8828,8830,8832,8834,8836,8838],{},[5198,8793],{"width":5281},[5283,8795,5285],{},[5198,8797],{"width":5200},[162,8799,5181],{},[162,8801,245],{},[162,8803,338],{},[162,8805,273],{},[5198,8807],{"width":5200},[162,8809,338],{},[162,8811,2132],{},[162,8813,758],{},[162,8815,766],{},[162,8817,2132],{},[162,8819,394],{},[162,8821,260],{},[5198,8823],{"width":5200},[162,8825,338],{},[162,8827,2132],{},[162,8829,245],{},[162,8831,291],{},[162,8833,282],{},[162,8835,411],{},[162,8837,1700],{},[162,8839,766],{},[166,8841,8842],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Find \\hspace{2mm} nearest \\hspace{2mm} neighbor",[13,8844,8845],{},[147,8846,8848],{"className":8847},[150],[152,8849,8850],{"xmlns":154},[156,8851,8852,8892],{},[159,8853,8854,8856,8862,8864,8866,8868,8870,8872,8874,8876,8878,8880,8886,8888,8890],{},[5198,8855],{"width":5281},[331,8857,8858,8860],{},[162,8859,1367],{},[187,8861,4401],{},[187,8863,248],{},[162,8865,8657],{},[162,8867,2132],{},[162,8869,758],{},[162,8871,766],{},[162,8873,2132],{},[162,8875,394],{},[162,8877,260],{},[187,8879,190],{"stretchy":189},[760,8881,8882,8884],{"accent":253},[162,8883,242],{},[187,8885,2342],{},[187,8887,1849],{"separator":253},[162,8889,1846],{},[187,8891,207],{"stretchy":189},[166,8893,8894],{"encoding":168},"\\hspace{1cm} k^* = Nearest(\\hat x, X)",[13,8896,8897],{},[147,8898,8900],{"className":8899},[150],[152,8901,8902],{"xmlns":154},[156,8903,8904,8956],{},[159,8905,8906,8908,8910,8912,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932,8934,8936,8938,8940,8942,8944,8946,8948,8950,8952,8954],{},[5198,8907],{"width":5281},[5283,8909,5285],{},[5198,8911],{"width":5200},[162,8913,1857],{},[162,8915,766],{},[162,8917,1700],{},[162,8919,296],{},[162,8921,2132],{},[162,8923,813],{},[162,8925,260],{},[5198,8927],{"width":5200},[162,8929,4131],{},[162,8931,2132],{},[162,8933,758],{},[162,8935,260],{},[162,8937,5184],{},[162,8939,766],{},[162,8941,2132],{},[5198,8943],{"width":5200},[162,8945,323],{},[162,8947,2132],{},[162,8949,813],{},[162,8951,260],{},[162,8953,1700],{},[162,8955,766],{},[166,8957,8958],{"encoding":168},"\\hspace{1cm} \\text{//} \\hspace{2mm} Project \\hspace{2mm} feature \\hspace{2mm} vector",[13,8960,8961],{},[147,8962,8964],{"className":8963},[150],[152,8965,8966],{"xmlns":154},[156,8967,8968,9008],{},[159,8969,8970,8972,8978,8980,8986,8988,8990,8992,8998,9000,9006],{},[5198,8971],{"width":5281},[760,8973,8974,8976],{"accent":253},[162,8975,242],{},[187,8977,5585],{},[187,8979,1849],{"separator":253},[760,8981,8982,8984],{"accent":253},[162,8983,784],{},[187,8985,5585],{},[187,8987,5361],{},[162,8989,1857],{"mathvariant":5894},[187,8991,190],{"stretchy":189},[760,8993,8994,8996],{"accent":253},[162,8995,242],{},[187,8997,2342],{},[187,8999,1849],{"separator":253},[238,9001,9002,9004],{},[162,9003,1337],{"mathvariant":1217},[162,9005,1857],{"mathvariant":5894},[187,9007,207],{"stretchy":189},[166,9009,9010],{"encoding":168},"\\hspace{1cm} \\tilde x, \\tilde z \\leftarrow \\mathcal{P}(\\hat x, \\Theta_{\\mathcal{{P}}})",[13,9012,9013],{},[147,9014,9016],{"className":9015},[150],[152,9017,9018],{"xmlns":154},[156,9019,9020,9056],{},[159,9021,9022,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042,9044,9046,9048,9050,9052,9054],{},[5198,9023],{"width":5281},[5283,9025,5285],{},[5198,9027],{"width":5200},[162,9029,1835],{},[162,9031,1700],{},[162,9033,826],{},[162,9035,13],{},[162,9037,5184],{},[162,9039,260],{},[162,9041,2132],{},[5198,9043],{"width":5200},[162,9045,2148],{},[162,9047,1700],{},[162,9049,394],{},[162,9051,394],{},[162,9053,2132],{},[162,9055,394],{},[166,9057,7594],{"encoding":168},[13,9059,9060],{},[147,9061,9063],{"className":9062},[150],[152,9064,9065],{"xmlns":154},[156,9066,9067,9127],{},[159,9068,9069,9071,9085,9087,9101,9103,9113,9115,9121],{},[5198,9070],{"width":5281},[238,9072,9073,9075],{},[162,9074,1244],{"mathvariant":5894},[159,9076,9077,9079,9081,9083],{},[162,9078,242],{},[162,9080,323],{},[162,9082,758],{},[162,9084,2148],{},[187,9086,5361],{},[238,9088,9089,9091],{},[162,9090,1440],{},[159,9092,9093,9095,9097,9099],{},[162,9094,242],{},[162,9096,323],{},[162,9098,758],{},[162,9100,2148],{},[187,9102,1868],{"stretchy":189},[238,9104,9105,9107],{},[162,9106,242],{},[331,9108,9109,9111],{},[162,9110,1367],{},[187,9112,4401],{},[187,9114,303],{},[760,9116,9117,9119],{"accent":253},[162,9118,242],{},[187,9120,5585],{},[238,9122,9123,9125],{},[187,9124,1868],{"stretchy":189},[181,9126,306],{},[166,9128,9129],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{xval} \\leftarrow w_{xval} \\lVert x_{k^*} - \\tilde x \\rVert_1",[13,9131,9132],{},[147,9133,9135],{"className":9134},[150],[152,9136,9137],{"xmlns":154},[156,9138,9139,9199],{},[159,9140,9141,9143,9157,9159,9173,9175,9185,9187,9193],{},[5198,9142],{"width":5281},[238,9144,9145,9147],{},[162,9146,1244],{"mathvariant":5894},[159,9148,9149,9151,9153,9155],{},[162,9150,784],{},[162,9152,323],{},[162,9154,758],{},[162,9156,2148],{},[187,9158,5361],{},[238,9160,9161,9163],{},[162,9162,1440],{},[159,9164,9165,9167,9169,9171],{},[162,9166,784],{},[162,9168,323],{},[162,9170,758],{},[162,9172,2148],{},[187,9174,1868],{"stretchy":189},[238,9176,9177,9179],{},[162,9178,784],{},[331,9180,9181,9183],{},[162,9182,1367],{},[187,9184,4401],{},[187,9186,303],{},[760,9188,9189,9191],{"accent":253},[162,9190,784],{},[187,9192,5585],{},[238,9194,9195,9197],{},[187,9196,1868],{"stretchy":189},[181,9198,306],{},[166,9200,9201],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{zval} \\leftarrow w_{zval} \\lVert z_{k^*} - \\tilde z \\rVert_1",[13,9203,9204],{},[147,9205,9207],{"className":9206},[150],[152,9208,9209],{"xmlns":154},[156,9210,9211,9309],{},[159,9212,9213,9215,9229,9231,9245],{},[5198,9214],{"width":5281},[238,9216,9217,9219],{},[162,9218,1244],{"mathvariant":5894},[159,9220,9221,9223,9225,9227],{},[162,9222,273],{},[162,9224,245],{},[162,9226,394],{},[162,9228,260],{},[187,9230,5361],{},[238,9232,9233,9235],{},[162,9234,1440],{},[159,9236,9237,9239,9241,9243],{},[162,9238,273],{},[162,9240,245],{},[162,9242,394],{},[162,9244,260],{},[238,9246,9247,9307],{},[159,9248,9249,9251,9253,9259,9261,9271,9279,9281,9283,9289,9291,9297,9305],{},[187,9250,1868],{"fence":253},[187,9252,1868],{"stretchy":189},[760,9254,9255,9257],{"accent":253},[162,9256,242],{},[187,9258,2342],{},[187,9260,303],{},[238,9262,9263,9265],{},[162,9264,242],{},[331,9266,9267,9269],{},[162,9268,1367],{},[187,9270,4401],{},[256,9272,9273,9275,9277],{},[187,9274,1868],{"stretchy":189},[181,9276,183],{},[181,9278,183],{},[187,9280,303],{},[187,9282,1868],{"stretchy":189},[760,9284,9285,9287],{"accent":253},[162,9286,242],{},[187,9288,2342],{},[187,9290,303],{},[760,9292,9293,9295],{"accent":253},[162,9294,242],{},[187,9296,5585],{},[256,9298,9299,9301,9303],{},[187,9300,1868],{"stretchy":189},[181,9302,183],{},[181,9304,183],{},[187,9306,1868],{"fence":253},[181,9308,306],{},[166,9310,9311],{"encoding":168},"\\hspace{1cm} \\mathcal{L}_{dist} \\leftarrow w_{dist} \\left\\Vert \\lVert \\hat x - x_{k^*} \\rVert_2^2 -  \\lVert \\hat x - \\tilde x \\rVert_2^2 \\right \\Vert_1",[13,9313,9314],{},[147,9315,9317],{"className":9316},[150],[152,9318,9319],{"xmlns":154},[156,9320,9321,9379],{},[159,9322,9323,9325,9327,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365,9367,9369,9371,9373,9375,9377],{},[5198,9324],{"width":5281},[5283,9326,5285],{},[5198,9328],{"width":5200},[162,9330,1247],{},[162,9332,13],{},[162,9334,273],{},[162,9336,758],{},[162,9338,260],{},[162,9340,2132],{},[5198,9342],{"width":5200},[162,9344,338],{},[162,9346,2132],{},[162,9348,260],{},[162,9350,1440],{},[162,9352,1700],{},[162,9354,766],{},[162,9356,1367],{},[5198,9358],{"width":5200},[162,9360,13],{},[162,9362,758],{},[162,9364,766],{},[162,9366,758],{},[162,9368,826],{},[162,9370,2132],{},[162,9372,260],{},[162,9374,2132],{},[162,9376,766],{},[162,9378,394],{},[166,9380,6668],{"encoding":168},[13,9382,9383],{},[147,9384,9386],{"className":9385},[150],[152,9387,9388],{"xmlns":154},[156,9389,9390,9442],{},[159,9391,9392,9394,9400,9402,9404,9406,9408,9410,9412,9414,9420,9422,9424,9426,9432,9438,9440],{},[5198,9393],{"width":5281},[238,9395,9396,9398],{},[162,9397,1337],{"mathvariant":1217},[162,9399,1857],{"mathvariant":5894},[187,9401,5361],{},[162,9403,335],{},[162,9405,6700],{},[162,9407,273],{},[162,9409,758],{},[162,9411,826],{},[187,9413,190],{"stretchy":189},[238,9415,9416,9418],{},[162,9417,1337],{"mathvariant":1217},[162,9419,1857],{"mathvariant":5894},[187,9421,1849],{"separator":253},[162,9423,6725],{"mathvariant":1217},[187,9425,3396],{},[238,9427,9428,9430],{},[187,9429],{},[187,9431,4401],{"lspace":3531,"rspace":3531},[238,9433,9434,9436],{},[162,9435,1244],{"mathvariant":5894},[187,9437,4401],{"lspace":3531,"rspace":3531},[187,9439,207],{"stretchy":189},[187,9441,207],{"stretchy":189},[166,9443,9444],{"encoding":168},"\\hspace{1cm} \\Theta_{\\mathcal{P}} \\leftarrow RAdam(\\Theta_{\\mathcal{P}}, \\nabla \\sum\\mathop{}_{*} \\mathcal {L}_{*}))",[13,9446,9447],{},[147,9448,9450],{"className":9449},[150],[152,9451,9452],{"xmlns":154},[156,9453,9454,9462],{},[159,9455,9456,9458,9460],{},[162,9457,2132],{},[162,9459,338],{},[162,9461,273],{},[166,9463,6764],{"encoding":168},[13,9465,9466],{},"Посредством сэмплирование шума разной величины, Projector делается устойчивым к возмущениям разного масштаба.",[13,9468,9469,9470,9486],{},"Для всех функций потерь во всех алгоритмах тренировки коэффициенты ",[147,9471,9473],{"className":9472},[150],[152,9474,9475],{"xmlns":154},[156,9476,9477,9483],{},[159,9478,9479,9481],{},[162,9480,1440],{},[187,9482,4401],{},[166,9484,9485],{"encoding":168},"w*"," подбираются такими, чтобы уравнять исходные (на 1-й итерации обучения) полученные значения.",[13,9488,9489],{},"В качестве оптимизатора выбран RAdam.",[13,9491,9492],{},"Количество слоев, нейронов и функции активации для нейросетей представлены на изображении ниже:",[13,9494,9495],{},[79,9496],{"alt":81,"src":9497},"/img/blog/article-ml-in-animation-overview/6.png",[13,9499,9500],{},"Порядок работы архитектуры в режиме реального времени следующий:",[55,9502,9503,9566,9612],{},[58,9504,9505,9506,9523,9524,4898,9545],{},"Формируется ",[147,9507,9509],{"className":9508},[150],[152,9510,9511],{"xmlns":154},[156,9512,9513,9521],{},[159,9514,9515],{},[760,9516,9517,9519],{"accent":253},[162,9518,242],{},[187,9520,2342],{},[166,9522,4738],{"encoding":168},", подается на вход в Projector, который выдает ",[147,9525,9527],{"className":9526},[150],[152,9528,9529],{"xmlns":154},[156,9530,9531,9543],{},[159,9532,9533],{},[238,9534,9535,9537],{},[162,9536,242],{},[331,9538,9539,9541],{},[162,9540,1367],{},[187,9542,4401],{},[166,9544,5009],{"encoding":168},[147,9546,9548],{"className":9547},[150],[152,9549,9550],{"xmlns":154},[156,9551,9552,9564],{},[159,9553,9554],{},[238,9555,9556,9558],{},[162,9557,784],{},[331,9559,9560,9562],{},[162,9561,1367],{},[187,9563,4401],{},[166,9565,5031],{"encoding":168},[58,9567,9568,9569,4898,9590,9611],{},"Найденные ",[147,9570,9572],{"className":9571},[150],[152,9573,9574],{"xmlns":154},[156,9575,9576,9588],{},[159,9577,9578],{},[238,9579,9580,9582],{},[162,9581,242],{},[331,9583,9584,9586],{},[162,9585,1367],{},[187,9587,4401],{},[166,9589,5009],{"encoding":168},[147,9591,9593],{"className":9592},[150],[152,9594,9595],{"xmlns":154},[156,9596,9597,9609],{},[159,9598,9599],{},[238,9600,9601,9603],{},[162,9602,784],{},[331,9604,9605,9607],{},[162,9606,1367],{},[187,9608,4401],{},[166,9610,5031],{"encoding":168}," подаются на вход в Stepper, который перемещает их во времени",[58,9613,9614],{},"Результат из шага 2 и подается на вход в Decompressor, который выдает конечную позу персонажа",[13,9616,9617],{},"Ограничения хабра не позволяют приложить демонстрацию работы, с видеоматериалами можно ознакомиться здесь.",[29,9619,9621],{"id":9620},"заключение","Заключение",[13,9623,9624],{},"В статье не были приведены оценки качества работы и производительности рассмотренных подходов, с ними вы можете ознакомиться более подробно в первоисточниках.",[13,9626,9627],{},"Также не были разобраны некоторые важные составляющие (построение траектории движения, сопоставление персонажа с картой высот) ввиду выхода этих тем за рамки статьи. В следующей статье я планирую раскрыть часть из опущенных деталей.",[13,9629,9630],{},"Список литературы:",[141,9632,9633,9642,9650,9658,9666],{},[58,9634,9635,9636],{},"Motion matching: ",[758,9637,9641],{"href":9638,"rel":9639},"https://gdcvault.com/play/1022985/Motion-Matching-and-The-Road",[9640],"nofollow","Motion Matching and The Road to Next-Gen Animation",[58,9643,9644,9645],{},"The Last of us Part II: ",[758,9646,9649],{"href":9647,"rel":9648},"https://gdcvault.com/play/1027012/Bringing-Allies-to-Life-in",[9640],"Bringing Allies to Life in the 'Last of Us Part II'",[58,9651,9652,9653],{},"PFNN: ",[758,9654,9657],{"href":9655,"rel":9656},"https://dl.acm.org/doi/abs/10.1145/3072959.3073663",[9640],"Phase-Functioned Neural Networks for Character Control",[58,9659,9660,9661],{},"MANN: ",[758,9662,9665],{"href":9663,"rel":9664},"https://dl.acm.org/doi/abs/10.1145/3197517.3201366",[9640],"Mode-Adaptive Neural Networks for Quadruped Motion Control",[58,9667,9668,9669],{},"LMM: ",[758,9670,9673],{"href":9671,"rel":9672},"https://static-wordpress.ubisoft.com/montreal.ubisoft.com/wp-content/uploads/2020/07/09154101/Learned_Motion_Matching.pdf",[9640],"Learned Motion Matching",{"title":81,"searchDepth":9675,"depth":9675,"links":9676},2,[9677,9678,9679,9680,9681,9682],{"id":31,"depth":9675,"text":32},{"id":96,"depth":9675,"text":97},{"id":120,"depth":9675,"text":121},{"id":2268,"depth":9675,"text":2269},{"id":4084,"depth":9675,"text":4085},{"id":9620,"depth":9675,"text":9621},"mdx",{"readTime":9685,"image":9686,"date":9687,"tags":9688,"authors":9694},"13 минут","/img/blog/article-ml-in-animation-overview/preview.png","2026-05-19",[9689,9690,9691,9692,9693],"Motion Capture","Нейронные сети","GameDev","Машинное обучение","Анимация",[9695],"georgiy-markelov","/ru/blog/ml-in-animation-overview",{"title":9698,"description":9699},"Анимация персонажей в реальном времени с помощью машинного обучения - обзор PFNN, MANN и LMM","Разбор современных технологий анимации персонажей в реальном времени на основе машинного обучения. Рассматриваем архитектуры PFNN, MANN и LMM, их принципы и пайплайн работы, требования к данным, архитектуры","ru/blog/ml-in-animation-overview","vif_qPri2hyCrCVukg39_j4UeuTjK7R1yoyvsT4VI00",1780489445252]