6D rotation representation
- 又稱: 6D rotation, continuous 6D rotation representation
- 類別: Foundations & spatial maths › Frames & transforms
- 標籤: rotations, pose-estimation, deep-learning, spatial-math, so3
把一個 3D 旋轉編碼為兩個 3D 向量,即其旋轉矩陣的前兩行,讓神經網路能預測旋轉,而不受歐拉角或四元數不連續性的影響。
定義
6D 旋轉表示(6D rotation representation)以六個數字編碼一個 3D 旋轉:兩個 3D 向量,經過正交歸一化後成為旋轉矩陣的前兩行。它由 Zhou 等人在 2019 年提出,用於預測旋轉或以旋轉為輸入的神經網路。要把網路的六個輸出轉換成旋轉,先將第一個向量正規化,再去除第二個向量沿第一個向量的分量並將結果正規化,就像 Gram-Schmidt 正交化一樣,第三行則是前兩行的外積。任何六個數字,只要其中的兩個向量非零且不平行,都會對應到一個有效的旋轉矩陣。
其動機在於連續性。Zhou 等人證明,3D 旋轉在四維或更低維實數空間中的每一種表示都是不連續的:在某處,彼此接近的旋轉會對應到相距很遠的表示,或反之亦然。歐拉角在角度繞回時會跳變,並有萬向鎖問題;軸角在旋轉達到 π 時會繞回;四元數有雙重覆蓋,即 q 與 −q 描述同一個旋轉,而為了消除這種歧義把它們限制在一個半球上,又會在邊界處產生跳變。被訓練來迴歸這類目標的網路,必須逼近一個不連續函數,這往往會讓某些旋轉產生很大的誤差。6D 表示與完整的 9D 旋轉矩陣一樣是連續的,在他們的實驗中,以它訓練的網路學習旋轉更為準確。
6D 形式是冗餘的而非最小的,而且其 Gram-Schmidt 步驟對第一行與第二行的處理方式不同。一種常見的替代做法是預測矩陣的全部九個元素,再以奇異值分解把它們投影到最接近的旋轉,這對各行是對稱的。損失通常在恢復出的旋轉矩陣上計算,例如以測地角或 Frobenius 距離,而不是在六個原始數字上計算。這種表示是學習用的工具:傳統的估測與最佳化通常以四元數或李代數更新,直接在旋轉群上進行。
為何重要
許多機器人學習與感知系統都要預測方向:物體與手的姿態、人體關節的旋轉、末端執行器的動作。旋轉表示的選擇會影響這些網路的訓練效果,而 6D 表示已成為旋轉類輸出與輸入的常見預設選擇。
主要應用
- 以神經網路進行物體與手部姿態估測
- 預測關節旋轉的人體姿態與人體模型
- 學習式機器人策略與動作空間中的末端執行器方向
- 相機姿態迴歸與相對姿態估測
- 動作與抓取的生成模型
實際應用
一個團隊訓練一個網路,從戴在手腕上的感測器估測一個人的手臂姿態。網路不為肩膀與手肘輸出歐拉角,而是為每個關節輸出六個數字。一個小型網路層以 Gram-Schmidt 與外積把每組六個數字轉換成旋轉矩陣,損失則透過這些矩陣與動作捕捉真值之間的測地角來比較兩者。感測器提供的方向輸入也使用相同的編碼,因此網路從不會遇到角度繞回。部署時,預測的旋轉矩陣會轉換成四元數或關節角度,交給機器人控制器。
常見誤解
- 6D 指的是完整的 6-DoF 姿態 — 這種表示只涵蓋旋轉,而旋轉有三個自由度,以六個數字編碼
- 網路的六個輸出本身就是旋轉 — 必須先正交歸一化,並以外積補齊,才能構成有效的旋轉矩陣
- 對學習而言,四元數一定是最佳選擇 — 它們的雙重覆蓋,以及限制在一個半球上所產生的跳變,使它們作為迴歸目標時是不連續的
- 6D 表示在任何地方都能取代四元數 — 它是為神經網路的輸入與輸出設計的,而濾波器與最佳化器通常直接在旋轉群上運作
誰需要了解
- 設計動作空間與觀測空間的機器人學習研究人員
- 從事姿態估測的電腦視覺工程師
- 人體動作與動畫研究人員
- 訓練抓取與操作網路的工程師
相關技術
- 旋轉矩陣(Rotation Matrix)
- 四元數(Quaternions)
- Gram-Schmidt 正交化(Gram-Schmidt Orthogonalization)
- SVD 正交化(SVD Orthogonalization)
- PyTorch3D
相關術語
相關專案
- pySLAM: Hybrid Python/C++ visual SLAM pipeline with classic and deep-learning front-ends
- AprilTag: The standard visual fiducial marker system for robot localization and pose estimation
- manif: Header-only C++ Lie theory library for robotics state estimation
- PyPose: PyTorch library for differentiable robotics with deep learning and Lie group optimization
- Intrinsic Core: Intrinsic's open industrial robot stack: real-time control, planning and perception
- PULP-Dronet: Visual navigation for nano-drones with CNN inference onboard a PULP processor.