Skeleton-Aware Networks for Deep Motion Retargeting

Skeleton-Aware Networks for Deep Motion Retargeting解析

  • 摘要
  • 1. 簡介
  • 2. Related Work
    • 2.1 運動重定向(Motion Retargeting)
    • 2.2 Neural Motion Processing
  • 3. 概述(Overview)
  • 4. 骨骼感知深度運動處理
    • 4.1 運動表征
    • 4.2 骨架卷積
    • 4.3 保持拓撲的骨架池
      • Unpooling
    • 4.4 Evaluation
  • 5. 跨結構運動重定向(Cross-structural Motion Retargeing)
    • 5.1 問題設置
    • 5.2 網絡架構
      • Reconstruction Loss
      • Latent Consistency Loss
      • Adversarial Loss
      • End-Effectors Loss

論文網址:Skeleton-Aware Networks for Deep Motion Retargeting
論文代碼:https://github.com/DeepMotionEditing/deep-motion-editing
論文項目:https://deepmotionediting.github.io/retargeting
論文出處:ACM Transactions on Graphics (TOG),2020
論文單位:北京電影學院,特拉維夫大學,北京大學

摘要

  • 我們引入了一種新的深度學習框架,用于數據驅動的骨架之間的運動重定向,這些骨架可能具有不同的結構,但對應于同態圖(homeomorphic graphs)。
  • 重要的是,我們的方法學習了如何重新定位,而不需要在訓練集中的運動之間進行任何明確的配對。
  • 我們利用這樣一個事實,即不同的同態骨架(homeomorphic skeletons) 可以通過一系列邊緣合并操作簡化為一個共同的原始骨架(primal skeleton),我們將其稱為骨架池化(skeletal pooling)
  • 因此,我們的主要技術貢獻是引入了新的可微卷積、池化和解池化算子。
  • 這些操作符是骨骼感知的(skeleton-aware),這意味著它們明確地說明了骨骼的層次結構和關節鄰接性,它們一起將原始運動轉換為與原始骨骼關節相關的深度時間特征集合。
  • 換句話說,我們的算子構成了一個新的深度運動處理框架的構建塊,該框架將運動嵌入到一個共同的潛在空間中,由一組同態骨架共享。
  • 因此,重定向可以簡單地通過對這個潛在空間進行編碼和解碼來實現。
  • 我們的實驗表明,與現有的框架方法相比,我們的框架在運動重定向以及一般運動處理方面是有效的。
  • 我們的方法還在一個合成數據集上進行了定量評估,該數據集包含應用于不同骨架的成對運動。
  • 據我們所知,我們的方法是第一個在沒有任何配對示例的情況下,在具有不同采樣運動鏈的骨架之間執行重定向的方法。

1. 簡介

  • 捕捉人類的運動是運動分析、計算機動畫和人機交互的基本任務。
  • 動作捕捉(Motion capture,MoCap) 系統通常要求表演者佩戴一組標記,其位置由磁性或光學傳感器采樣,產生3D骨骼姿勢的時間序列。
  • 由于不同的動作捕捉設置涉及不同的標記配置和使用不同的軟件,捕獲的骨骼可能在其結構和關節數量不同,對應于不同的捕獲個體也存在骨骼長度和比例的差異
  • 因此,運動重定向是必要的,不僅可以將捕獲的動作從一個關節角色轉移到另一個,在相同的動作捕捉設置中,而且可以跨不同的設置。
  • 后者對于使用來自多個不同運動數據集的數據也是必不可少的,以便為各種運動處理任務訓練通用的、設置不可知的、數據驅動的模型。
  • 深度神經網絡徹底改變了許多計算機視覺任務的最新技術,它利用圖像和視頻的規則網格表示,非常適合卷積和池化操作。
  • 與圖像不同,不同特征的骨骼表現出不規則的連通性。此外,骨架的結構通常是分層的
  • 這些差異表明,CNN中常用的現有算子可能不是分析和合成關節運動的最佳選擇。
  • 在本文中,我們引入了一個新的運動處理框架,該框架由用于深度學習的鉸接骨架運動表示和幾個可微operators組成,包括卷積、池化和解池化(convolution, pooling and unpooling),這些算子在該表示上運行。
  • operators是骨架感知的,這意味著它們顯式地考慮骨架結構(層次結構和聯合鄰接)。
  • 這些 operators 構成了一個新的深層框架的構建塊,其中較淺的層學習局部的、低層次的、關節旋轉之間的相關性,而較深的層學習身體部位之間的更高層次的相關性
  • 所提出的運動處理框架可用于各種基于運動分析和綜合學習的任務。在這項工作中,我們專注于具有相同末端執行器集的骨架之間的運動重定向任務,但從根部到這些末端執行器的運動鏈上的關節數量可能不同。
  • 這種骨架可以用同態圖 (homeomorphic graphs)(拓撲等價)來表示。
  • 雖然運動重定向是一個長期存在的問題,但目前的方法不能在結構或關節數量不同的骨骼之間自動執行重定向。
  • 在此場景中,應該手動指定不同骨架之間的對應關系,這通常會導致不可避免的重定向錯誤。動畫師必須通過操縱關鍵幀來手動糾正這些錯誤,這是一個非常繁瑣的過程。
  • 先前的研究表明,多模態非配對圖像翻譯任務可以使用共享潛在空間有效地進行。
  • 在這些工作中,來自不同領域的相同大小的圖像被嵌入到一個共享的空間中,例如,圖像的內容,與它的風格分開。
  • 在圖像上,這樣的嵌入使用標準卷積和池化算子很容易實現; 然而,對于具有不同結構的骨骼,情況并非如此。
  • 在這項工作中,我們利用我們的骨骼感知運動處理框架,特別是skeletal pooling,將不同骨骼執行的運動嵌入到共享的潛在域空間中。
  • 我們的關鍵思想利用了這樣一個事實,即不同的,但同態的,骨架可以減少到一個共同的原始骨架,它可以被視為訓練數據中所有不同骨架的共同祖先,通過合并成對的相鄰邊/骨架。
  • 通過骨骼卷積和池化層的交錯,共享潛在空間由與原始骨骼關節相關的深層時間特征集合組成。隱空間由每個骨架結構(域)的編碼器-解碼器對共同學習。
  • 此外,我們利用我們的深度運動表征將運動屬性從骨架的形狀屬性中分離出來,這使我們能夠在我們的深度特征空間中使用簡單的算法執行運動重定向。
  • 與由靜態(關節偏移)和動態(關節旋轉)組成的原始、低級的運動表示類似,我們的深層運動特征也分為靜態和動態部分。
  • 然而,在原始輸入運動中,這兩個部分是強耦合的: 特定的關節旋轉序列與特定的骨長度和骨骼結構相綁定。
  • 相比之下,我們的編碼器學習解耦它們: 潛在代碼的動態部分變得與骨架無關,而靜態部分對應于共同的原始骨架。
  • 潛空間的這一特性使得只需將 A 編碼器產生的潛碼輸入 B 解碼器,就可以將運動從骨架 A 重定向到骨架 B 。
  • 總之,我們在這項工作中的兩個主要貢獻是:
    (1)一種新的運動處理框架,由深度運動表示和可微分骨架感知卷積、池化和解池化 operators 組成。
    (2)一種具有不同關節數量的拓撲等效骨架間不配對運動重定向的新結構。

2. Related Work

2.1 運動重定向(Motion Retargeting)

  • 經典的運動重定向方法,依賴于對特定運動手工制作的運動學約束的優化,并涉及簡化假設。
  • 捕獲的運動數據的可用性增加使得數據驅動的方法更具吸引力。所有數據驅動方法都假定源和目標鉸接結構是相同的。
  • 一些工作探索了將人類運動數據重新定位到非人形角色。在這種情況下,源骨架和目標骨架可能會有很大的不同,然而,上述方法需要以目標角色的風格捕捉人類主體的動作。
  • 還需要從捕獲的動作序列中選擇一些關鍵的姿勢,并將它們與相應的角色姿勢相匹配,或將相應的運動配對在一起,以學習映射。
  • 與前面提到的方法類似,學習這樣的映射需要許多姿勢對姿勢的對應。
  • 角色的運動風格可以由 身體部位組(groups of body parts,GBPs) 運動來表示。因此,通過建立GBPs之間的對應關系,然后進行約束優化以保持原始運動,可以跨骨架結構實現運動風格的重定向。這需要為每對字符定義GBPs和它們之間的對應關系。
  • 另一個松散相關的問題是網格變形傳遞問題。

2.2 Neural Motion Processing

  • CNN應用于3D特征動畫。運動被表示為三維關節位置的時間序列,卷積核在時間維度上是局部的,但在關節維度(支持包括骨骼的所有關節)上是全局的。因此,關節連通性和骨骼的層次結構被忽略。
  • 此外,使用3D關節位置表示運動并不能完全描述運動,并且需要IK來提取動畫。
  • 僅從關節旋轉中提取的卷積特征不能完全捕獲3D運動,因為當應用于不同的骨骼時,同一組關節四元數會導致不同的姿勢。
  • 由于鉸接特征的骨架可以用圖形表示,因此可以考慮使用圖形卷積網絡(GCNs) 來處理運動數據。在這種網絡中,卷積濾波器直接應用于圖節點及其鄰居。
  • 另一種不基于卷積的選擇是使用深度RNN對時空圖進行學習。
  • 這些方法的目標與我們的不同(預測運動,而不是重新定位)。

3. 概述(Overview)

  • 我們的目標是處理具有不同結構但拓撲結構相同的骨骼之間的運動重定向任務。

  • 關鍵思想是利用拓撲等價骨架可以用同態圖(homeomorphic graphs) 表示這一事實。

  • 通過消除沿線性分支的2次節點,一對這樣的圖可以簡化為一個共同的最小圖,如圖2所示。我們把由簡化的公共圖表示的骨架稱為原始骨架(primal skeleton)
    在這里插入圖片描述
    我們的池化operator移除二次節點(綠色點)并合并它們相鄰的邊。經過幾個匯集步驟,不同的骨骼結構,拓撲等效,骨架被簡化成一個共同的原始骨架。

  • 這一觀察結果表明,編碼由不同的同態骨骼執行的運動到一個獨立于原始骨骼結構或骨骼比例的深度表征。

  • 由此產生的潛在空間對于具有不同結構的骨骼執行的運動是共同的,我們使用它來學習數據驅動的運動重定向,而不需要任何配對訓練數據。

  • 重定向過程如圖3所示,使用在運動域上訓練的編碼器E_A,由具有相同結構的骨架執行,將源運動編碼到公共潛在空間中。
    在這里插入圖片描述
    非配對跨結構運動重定向。我們的建筑將不同的同態骨架的運動編碼到一個共享的深層潛在空間中,對應于一個共同的原始骨架。然后,這種表示可以被解碼為同一區域(結構內重定向,intra-structural retargeting)或來自另一個同態區域(跨結構重定向,cross-structural retargeting)的骨骼執行的運動。

  • 從這個空間,潛在的表征可以被解碼成一個由目標骨骼執行的運動。

  • 目標骨骼可能具有相同的結構,但骨骼長度不同,在這種情況下,解碼由在相同域上訓練的解碼器D_A完成。

  • 然而,使用在不同域上訓練的解碼器D_B,運動也可以跨不同的骨骼結構重新定位。

  • 為了實現上述方法,我們引入了一個新的深度運動處理框架,由兩個新的組件組成:
    (1)深度運動表征(Deep Motion Representation)。我們將運動序列表示為構成圖形的一組時間armatures,其中每個armatures由一個動態的、時間相關的特征向量(通常稱為關節旋轉)以及一個靜態的、時間無關的特征向量(通常稱為偏移)表示,如圖4所示。
    在這里插入圖片描述
    靜態-動態結構是角色動畫中常見的低級表示,我們的框架沿著處理鏈保留了它。具體來說,我們使用兩個分支(靜態和動態)將低級信息轉換為運動特征的深層靜態動態表示。
    (2)深層骨骼操作(Deep Skeletal Operators)。我們定義了可以應用于動畫骨架的新的微分Operators。Operators是骨架感知的,即Operators考慮骨架結構(層次結構和關節鄰接)。
    將這些Operators連接到一個可優化的神經網絡中,可以學習深層時間特征,這些特征表示淺層的低水平、局部聯合相關性和深層的高水平、全局身體部位相關性。

4. 骨骼感知深度運動處理

  • 下面我們將描述我們的運動處理框架,它包括我們的運動表示,以及我們新的骨架卷積、池化和解池化Operators。

4.1 運動表征

  • 我們的鉸接特征的運動表示如圖4所示。
  • 一個長度為 T 的運動序列用靜態分量 S∈RJ×S 和動態分量 Q∈RT×J×Q 來描述,其中 J 為 armatures(骨架)的個數,S和Q分別為靜態和動態特征的維數(通常為S = 3和Q = 4)。
  • 靜態分量S由一組偏移量(3D向量)組成,這些偏移量描述了任意初始姿態的骨架,而動態分量Q指定了每個關節(相對于運動鏈中的父坐標幀)旋轉的時間序列,由單位四元數表示。
  • 根結點 R∈RT×(S+Q) 與 J 個armatures分開表示(它的子節點),作為一系列全局平移和旋轉(方向)。
  • 骨架結構由樹狀圖表示,其節點(nodes)對應關節和末端執行器,而邊緣(edges)對應armatures,如圖4所示。
  • 因此,對于有J個armatures的骨架,圖有J +1個nodes。
  • 連通性由運動鏈(從根關節到末端執行器的路徑)決定,并由鄰接表Nd = {N1d, N2d,…, NJd}表達,其中Nid表示樹中與第 i 條邊的距離等于或小于 d 的邊(見圖4)。

4.2 骨架卷積

  • 我們在兩個并行分支中處理運動: 一個動態分支,產生與時間相關的深度特征;一個靜態分支,產生靜態深度特征。兩個分支都有一個共同的特性,即它們的卷積核考慮骨架結構來計算跨armatures的局部特征,如圖5所示。
    在這里插入圖片描述
    我們的框架使用由兩個并行分支(動態和靜態)組成的塊執行骨架卷積、激活和骨架池。動態分支將平鋪和連接的靜態特征作為其骨架-時間卷積層的輸入的一部分。靜態分支只對靜態特性進行操作。
  • 動態分支執行骨架到時間的卷積,在armatures和時間軸上使用具有局部支持的核,如圖6所示。
    在這里插入圖片描述
    骨架卷積和池化。骨架-時間卷積核(如藍色和紫色)具有局部支持。
    支撐沿時間軸連續;對于armatures,每個內核的支持是由連通性映射和到內核“居中”的armatures的距離(d=1)決定的(顯示在左側骨架中)。
    沿著時間軸的權值是時間不變的,但他們不是共享在不同的電樞。
    右邊的骨架顯示了拓撲保持骨架池的結果,它將成對連續的armatures特征合并為單個armatures特征。
  • 請注意,雖然時間軸上的核是暫時不變的(即,核權重是隨時間共享的),但它們不是在不同的armatures上共享的。這是因為不同身體部位在不同模式下運動這一實時。因此,每個部分中提取的特征可能是唯一的。例如,我們有理由認為,以脊柱關節為中心的核提取的特征可能與以膝蓋為中心的特征不同。
  • 由于運動是通過靜態和動態特征的組合來充分描述的,因此卷積核在計算過程中考慮這兩個組成部分是很重要的。因此,我們沿著時間軸平鋪靜態表示 S,并沿著通道軸將結果連接到 Q,從而得到 M∈RT×J×(Q+S)
  • 在實際應用中,通過對每個armatures施加具有局部支持 d 的動態支路中的骨架-時間卷積:
    在這里插入圖片描述
    式中,M_j∈RT×(Q+S)表示第 j 個armatures的特征,W_ij∈Rk×(Q+S)×K和bi_j∈RK是K個具有時間支持 k 的學習濾波器,并且 ? 表示一個時間的一維卷積。注意,卷積前后的armatures數量是保留的。
  • 圖6展示了兩個框架卷積核(紅色和藍色),其中每個都應用于不同的相鄰armatures組。
  • 與動態分支相比,靜態分支只將靜態特征矩陣 S 作為輸入,而忽略了動態部分。
  • 這是我們做出的選擇,以確保產生的深度特征空間的靜態組件僅依賴于骨架的結構,而不依賴于任何特定的運動。
  • 因此,靜態卷積operator可以看作是(1)中動態卷積operator的特例,其中Q = 0(即S個輸入通道),T = 1, k = 1。實際上,這是一個矩陣乘法運算符。
  • 靜態和動態分支共享連接映射Nd,這使我們能夠遞歸地將骨架卷積應用于運動序列,同時保持分支之間的維度和語義一致性。
  • 請注意根(root),它被視為一個特殊的armature,有兩個動態部分: 全局位置和全局旋轉,是由內核卷積,內核的支持包含最近的armature (最高為距離d),以及末端執行器。
  • 以這種方式選擇支持是由于全局根運動與末端執行器局部運動之間存在低水平的相關性,例如,在跑步和步行中可以清楚地觀察到。這種連接可以將全局信息注入到更深層的動態特性中。

4.3 保持拓撲的骨架池

  • 為了使我們的骨骼感知網絡能夠學習更高層次的深度骨骼-時間特征,我們接下來定義了armature 上的池化,這是受MeshCNN框架的啟發,它合并網格邊緣,同時匯集它們的深層特征。
  • 一般來說,池化鼓勵網絡學習一個有效的基(內核),使它能夠提取低維的特征,這些特征被優化以滿足指定的損失函數。
  • 對于在常規數據(如時間信號或圖像)上的池化,信號結構固有地隱含了鄰接性,而內核大小決定了池化區域。
  • 在這種情況下,相應區域的特征被合并(通常是通過平均或取最大值)到一個更小的均勻網格中,其中鄰接性也被明確定義。
  • 有各種方法來定義電樞上的池化。我們的池化是保持拓撲的,這意味著池化的骨架(graph),它包含較少的armatures (edges),對于輸入是同態的。
  • 具體來說,我們的池化 operator 通過合并相鄰邊的特征來去除 degree 2 的節點。下一節將介紹這個定義。
  • 池化應用于具有連續的邊緣序列的骨架分支,這些邊緣序列連接 degree 2 的節點,其中池化區域是不相交的邊緣集 {P1, P2,…, PJ≈},其大小不大于p。我們選擇最接近根的余數集。在實踐中,由于人類骨骼中的連續分支很短,我們始終使用p = 2。
  • 骨架池化應用于靜態和動態特征激活,由:
    在這里插入圖片描述
    其中pool可以是最大值或平均值。
  • armatures 軸上的骨架池操作符如圖6所示。可以看到,例如,從頸部到頭部的順序分支(標記為紅色),包含兩個armatures ,在最終的骨架中匯集成一個armatures 。
  • 我們的池化可以直觀地解釋為一種操作,使網絡能夠學習一個深度骨架,具有更少的armatures ,近似于原始骨架的運動。
  • 注意,在動態分支中,標準的向下采樣也被附加應用于時間軸。

Unpooling

  • 解池化(Unpooling)operator是池化的對應項,在不增加信息的情況下增加特征激活的分辨率。
  • 在我們的示例中,Unpooling是基于先前池化骨架的記錄結構執行的。
  • 我們通過復制在相應池化步驟中由兩條邊合并產生的每條邊的特征激活來擴展邊(armatures )的數量。
  • 由于Unpooling沒有可學習的參數,因此通常將其與卷積相結合,以恢復池化操作中丟失的原始分辨率。
  • 注意,在動態分支中,標準上采樣額外應用于時間軸。

4.4 Evaluation

  • 我們的框架可以用于各種基于學習的運動處理任務。接下來,我們將根據Holden等人提出的框架的構建模塊進行評估,Holden等人引入了用于動作編輯的深度學習框架。它們的構建塊由標準的一維時間卷積組成,具有對通道(聯合)軸的完全支持,以及僅在時間軸上執行的池化操作符。
  • 為了評估這兩個框架的有效性,我們實現了兩個自動編碼器,它們共享相同數量的組件和類型的層。
  • 在第一種方法中,我們使用了Holden等人提出的標準卷積和池化方法,而在第二種方法中,我們使用了我們的骨架感知算子。
  • 圖7描繪了我們的自動編碼器的示意圖,其中包含一組靜態和動態編碼器(分別為ES和EQ)和一個解碼器D。
    在這里插入圖片描述
    網絡結構的詳細信息如下:
    在這里插入圖片描述
  • 兩個自動編碼器都是用一個重構損失(2范數)來訓練的。
  • 為了公平比較,兩個自編碼器都是用單位四元數表示的關節旋轉進行訓練的(盡管在原始論文中,Holden等人使用關節位置來表示運動)。
  • 然而,為了避免沿運動鏈的誤差積累,將重構損失應用于由正運動學(FK)從旋轉中獲得的相應關節位置。
  • 在訓練過程中,每個自編碼器學習一個代表運動流形的潛在空間: 自然運動的連續空間; 因此,運動去噪可以通過簡單地將帶噪聲的運動投影到流形上,使用訓練好的編碼器,然后將其解碼回時空來實現。
  • 我們通過測量在一組看不見的運動測試集上的重構(l2 loss)來評估自編碼器的性能,其中輸入被注入了兩種類型的噪聲:(1)高斯白噪聲(μ= 0,σ = 0.01) (2)隨機零: 我們隨機選擇對關節和框架,用零覆蓋已有的值(模擬動作捕捉故障)。
  • 圖8顯示了從視頻序列中提取的幀,可以在補充材料中找到,表1報告了兩種方法之間的定量比較。
    在這里插入圖片描述
    在這里插入圖片描述
  • 可以看出,我們的骨架感知算子在兩種噪聲類型下都取得了更好的性能。
  • 從視頻中可以看出,我們的結果顯示關節位置的局部誤差更小,全局位置也更好,穩定性也更好。
  • 傳統的operators忽略了骨架結構,而我們的operators以更結構化的方式對信息進行池化和壓縮。

5. 跨結構運動重定向(Cross-structural Motion Retargeing)

  • 運動重定向并不是一個精確定義的任務。當動畫師手動將源運動重新定位到目標角色時,他們通常會嘗試實現兩個主要目標
    (1)結果的運動應該看起來自然和視覺上對目標角色是合理的,同時與原始源運動非常相似。
    (2)關節位置滿足感知敏感約束,如腳和手接觸,通常通過應用IK優化實現。

  • 下面,我們將解釋我們的框架如何實現遵循上述規則的無監督重定向。

5.1 問題設置

  • 我們將運動重定向描述為一個非配對的跨域翻譯任務。
  • 具體來說,讓M_A和M_B表示兩個運動域,其中每個域中的運動由具有相同骨骼結構(分別為S_A和S_B)的骨骼進行,但可能具有不同的骨骼長度和比例。這個公式適合現有的公共動作捕捉數據集,其中每個數據集包含共享骨骼結構和執行各種動作的不同字符。
  • 進一步假設S_A和S_B的骨架結構存在同態性。請注意,這些域是未配對的,這意味著在兩個域之間沒有顯式的運動對(由不同的骨架執行)。
  • 設每個運動 i∈M_A用(S_A, Qi_A)對表示,其中S_A∈S_A為骨架偏移量集合,Qi_A為關節旋轉,如4.1所述。
  • 給定目標骨架S_B∈S_B的偏移量,我們的目標是將(S_A, Qi_A)映射到一個重定向的旋轉集Qi_B~ 中,該旋轉集描述了S_B應該執行的運動。正式地,我們尋求數據驅動的映射GA→B
    在這里插入圖片描述
    在我們的設置中,平移映射GA→B與映射GB→A同時學習。

5.2 網絡架構

  • 我們的架構由編碼器,解碼器和鑒別器組成,編碼器Em = [EmQ, EmS],解碼器Dm和鑒別器Cm的單獨組合為每個域進行訓練Mm, m∈{A, B}。
  • 這里,EmQ是動態編碼器,EmS是靜態編碼器,如圖7所示。同樣,請參見圖9(a),它顯示了網絡中信息流的高級視圖。
    在這里插入圖片描述
  • 在為每個運動域訓練了上述組件之后,在測試時,通過使用解碼器D_B將E_AQ產生的動態運動表示與E_SB產生的靜態表示結合起來,可以獲得所需的映射GA→B,如圖9(B)所示。
    在這里插入圖片描述
  • 這是可能的,因為我們的編碼器產生了一個獨立于原始骨骼屬性的深度運動編碼,并且共享的潛在空間與一個共同的原始骨骼結構相關聯。
  • 換句話說,編碼器解開了低級的、相關的動態和靜態參數,并且可以簡單地使用它們的深層、解開的表示來執行重定向。
  • 下面,我們描述了用于訓練網絡的不同損失,如圖9(a)所示。注意,我們的損失項只描述了一個方向(A→B)。對稱項是通過交換A和B的角色來獲得的。

Reconstruction Loss

  • 為了訓練同一域中運動的自動編碼器([EAQ , EAS ], DA),我們采用了關節旋轉和關節位置的標準重構損失:
    在這里插入圖片描述
    其中FK是一個正運動學算子,它返回關節位置(給定旋轉和骨架)

Latent Consistency Loss

  • 如前所述,我們的骨骼池運算符可以通過池化連續armatures的特征,將同胚骨骼的運動嵌入到一個共同的深層原始骨骼潛空間中,如圖2所示。
  • 事實證明,在共享潛在空間中嵌入來自不同域的樣本對于多模態圖像翻譯任務是有效的。約束可以直接應用于這個中間表示,方便解糾纏。
  • 受此啟發,我們將潛在一致性損失應用于共享表示,以確保重定向運動QiB ~ 保留與原始剪輯相同的動態特征
    在這里插入圖片描述
    其中∥·∥1為L1范數

Adversarial Loss

  • 由于我們的數據是不配對的,所以重新定位的運動沒有可以比較的基礎事實。
  • 因此,我們使用對抗性損失,其中判別器C_B評估解碼的時間旋轉集Qi_B~ 是否似乎是骨架S_B的合理運動:
    在這里插入圖片描述

End-Effectors Loss

  • 雖然同形骨骼在關節數量上可能不同,但它們共享同一組末端執行器。
  • 我們利用這一特性要求原骨架和重定向骨架的末端執行器具有相同的歸一化速度。
  • 標準化是必需的,因為對于不同的字符,速度可能在不同的尺度上。
  • 這個要求特別有助于避免常見的重定向偽影,例如腳滑動; 輸入運動中腳速度為零的幀應該導致重定向運動中腳速度為零。這個公式是
    在這里插入圖片描述
  • 雖然我們的末端執行器損失顯著減輕足部滑動偽影,但我們使用標準逆運動學(IK)優化進一步清潔足部接觸。
  • 清理是完全自動的: 我們從運動輸入序列中提取二進制腳接觸標簽,并通過將腳的位置固定在接觸時間槽的平均位置來應用IK來強制腳接觸。
  • 用于訓練的全部損失綜合了上述損失項:
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35073.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35073.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35073.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot + Vue3前后端分離實戰wiki知識庫系統<十二>--用戶管理單點登錄開發一

目標: 在上一次Spring Boot Vue3前后端分離實戰wiki知識庫系統<十一>--文檔管理功能開發三我們已經完成了文檔管理的功能模塊開發,接下來則開啟新模塊的學習---用戶登錄,這塊還是有不少知識點值得學習的,…

指針與引用:C語言中的內存魔法

開始本篇文章之前先推薦一個好用的學習工具,AIRIght,借助于AI助手工具,學習事半功倍。歡迎訪問:http://airight.fun/。 也把我學習過程中搜集的資料分享給大家,希望可以幫助大家少走彎路,鏈接:h…

機器人CPP編程基礎-02變量Variables

機器人CPP編程基礎-01第一個程序Hello World 基礎代碼都可以借助人工智能工具進行學習。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…

Matlab繪制圓形(rectangle函數、viscircles函數和圓的參數方程)

基于matlab繪制圓形 一、rectangle函數 對于繪制圓心坐標為&#xff08;x&#xff0c;y&#xff09;半徑為r的圓形&#xff0c;函數為&#xff1a; x0; y0; r1; rectangle(Position, [x-r,y-r,2*r,2*r], Curvature, [1 1],EdgeColor, r); axis equalEdgeColor表示顏色 二、…

多版本node環境搭建切換管理NVM

Node.js NVM 全名 Node Version Management 一、Node 模塊對象 參考博客 Node 模塊對象 二、Node 多版本管理NVM &#xff08;1&#xff09;參考 Node 多版本管理 &#xff08;2&#xff09;github上NVM工具 nvm-windows mirrors / coreybutler / nvm-windows GitCode…

消息隊列(12) - 定義服務器類

目錄 前言設計思想 前言 之前,我們寫了通信協議的具體設計,接下來我們設計服務器類 設計思想 我們先只考慮一個虛擬主機的情況下, 在一個虛擬主機的情況下,我們需要有一個session會話來幫助我們存儲信息,并且既然是網絡通信,那么socket關鍵字肯定也必不可少,我們在引入一個線…

解決lldb調試時可能出現的personality set failed: Function not implemented

最近在嘗試使用Visual Studio 2022遠程連接Linux進行C/C的開發&#xff0c;由于CentOS風波不斷&#xff0c;所以現在的開發基本上都是使用ubuntu了&#xff0c;但是目前VS2022有一些BUG&#xff0c;就是遠程調試時&#xff0c;如果目標系統是ubuntu則會出現啟動調試器很慢的問題…

mysql高并發下主鍵自增打來的問題

在一般情況下&#xff0c;在新增領域對象后&#xff0c;都需要獲取對應的主鍵值。使用應用層來維護主鍵&#xff0c;在一定程度上有利于程序性能的優化和應用移植性的提高。在采用數據庫自增主鍵的方案里&#xff0c;如果JDBC驅動不能綁定新增記錄對應的主鍵&#xff0c;就需要…

LeetCode 1281. 整數的各位積和之差

【LetMeFly】1281.整數的各位積和之差 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/subtract-the-product-and-sum-of-digits-of-an-integer/ 給你一個整數 n&#xff0c;請你幫忙計算并返回該整數「各位數字之積」與「各位數字之和」的差。 示例 1&#xff1a; …

學習筆記整理-JS-03-表達式和運算符

[[toc]] 一、表達式和運算符 1. 表達式 表達式種類 算術、關系、邏輯、賦值、綜合 二、JS基本表達式 1. 算術運算符 意義運算符加減-乘*除/取余% 加減乘除 加減的符號和數學一致&#xff0c;乘號是*號&#xff0c;除法是/號默認情況&#xff0c;乘除法的優先級高于加法和…

安卓源碼分析(10)Lifecycle實現組件生命周期管理

參考&#xff1a; https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hlzh-cn#java https://developer.android.google.cn/reference/androidx/lifecycle/Lifecycle 文章目錄 1、概述2、LifeCycle類3、LifecycleOwner類4、LifecycleObserver類 1、…

數據庫字段命名導致的SQL報錯

1.表設計 create table variables (id bigint not null comment 主鍵,business_key varchar(128) null comment 業務key,key varchar(128) null comment Map中的key,value varchar(255) null comment…

Centos yum命令大全

1.使用YUM查找軟件包 $ yum search python 2.列出所有可安裝的軟件包 $ yum list | grep python 3.列出所有可更新的軟件包 $ yum list updates 4.列出所有已安裝的軟件包 $ yum list installed | grep python

[GIN-debug] [ERROR] listen tcp: address 8080: missing port in address

學習Golang_gin框架的第一天 遇到一下報錯 : [GIN-debug] [ERROR] listen tcp: address 8080: missing port in address 錯誤代碼 : package mainimport "github.com/gin-gonic/gin"func main() {router : gin.Default()router.GET("/index", func…

910數據結構(2014年真題)

算法設計題 問題1 已知一個帶頭結點的單鏈表head&#xff0c;假設結點中的元素為整數&#xff0c;試編寫算法&#xff1a;按遞增次序輸出單鏈表中各個結點的數據元素&#xff0c;并釋放結點所占的存儲空間。要求&#xff1a;(1)用文字給出你的算法思想&#xff1b;(2)不允許使…

nginx禁用3DES和DES弱加密算法

nginx禁用3DES和DES弱加密算法 項目背景 最近護網行動&#xff0c;收到漏洞報告&#xff0c;如下&#xff1a; 漏洞名稱SSL/TLS協議信息泄露漏洞(CVE-2016-2183)【原理掃描】詳細描述TLS是安全傳輸層協議&#xff0c;用于在兩個通信應用程序之間提供保密性和數據完整性。 TLS…

opencv 基礎50-圖像輪廓學習03-Hu矩函數介紹及示例-cv2.HuMoments()

什么是Hu 矩&#xff1f; Hu 矩&#xff08;Hu Moments&#xff09;是由計算機視覺領域的科學家Ming-Kuei Hu于1962年提出的一種圖像特征描述方法。這些矩是用于描述圖像形狀和幾何特征的不變特征&#xff0c;具有平移、旋轉和尺度不變性&#xff0c;適用于圖像識別、匹配和形狀…

C語言鏈表操作

目錄 鏈表基本操作 刪除重復元素 查找倒數第N個節點 查找中間節點 約瑟夫環 循環鏈表 合并有序鏈表 逆置鏈表 逆置鏈表(雙向鏈表) 鏈表基本操作 //linklist.c#include "linklist.h" #include <stdlib.h>struct node *head NULL; struct node *tail…

React 18 state 狀態更新函數

參考文章 把一系列 state 更新加入隊列 設置組件 state 會把一次重新渲染加入隊列。但有時可能會希望在下次渲染加入隊列之前對 state 的值執行多次操作。為此&#xff0c;了解 React 如何批量更新 state 會很有幫助。 React 會對 state 更新進行批處理 在下面的示例中&…

Docker查看、創建、進入容器相關的命令

1.查看、創建、進入容器的指令 用-it指令創建出來的容器&#xff0c;創建完成之后會立馬進入容器。退出之后立馬關閉容器。 docker run -it --namec1 centos:7 /bin/bash退出容器&#xff1a; exit查看現在正在運行的容器命令&#xff1a; docker ps查看歷史容器&#xff0…