論文導讀:GraspNet-1Billion——雜亂場景、6 自由度、10 億筆抓取標註的通用抓取基準

Hao-Shu Fang, Chenxi Wang, Minghao Gou, Cewu Lu · 2020原文連結

一句話讀懂這篇論文

2D 抓取資料集只能描述「由上往下夾」,而且每張圖通常只有一個物體。真實的箱中揀選是一堆東西疊在一起,夾爪要從各種角度伸進去。GraspNet-1Billion 做了三件事:用真實相機拍雜亂場景、用物理公式自動算出每個物體上所有可行的 6 自由度抓取(總共超過 10 億個)、提供一套不依賴標註完整性的統一評分方式。順帶提出的基線網路(GraspNet-Baseline),後來成為 GSNet、AnyGrasp 的骨架。

論文資訊卡

  • 標題:GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping
  • 作者:Hao-Shu Fang(方浩樹)、Chenxi Wang、Minghao Gou、Cewu Lu(盧策吾,通訊作者)——上海交通大學
  • 發表:CVPR 2020
  • 網站:graspnet.net(資料集、graspnetAPI、基線程式碼 graspnet-baseline)
  • 定位:6 自由度抓取最常用的評測基準。同一團隊之後的 GSNet(ICCV 2021)和 AnyGrasp(T-RO 2023)都建立在這個資料集與基線網路之上

問題背景:兩個阻礙

論文開頭點出抓取偵測當時遇到的兩個障礙:

1. 表示法與評估方式不統一

有的方法輸出 2D 矩形,用 IoU + 角度差評估;有的輸出 6D 姿態,各自用自己的指標。彼此無法直接比較,而用真實機器人評測又太花成本。

2. 高品質大規模訓練資料難取得

資料來源問題
人工標註(Cornell 等)規模小、標註稀疏
真實機器人試抓(Pinto、Levine)每個場景只有一個抓取標籤,耗時且需要大量硬體
模擬環境(Dex-Net、Jacquard)規模大,但模擬與真實的視覺落差會降低實際表現

作者認為一個好的基準要同時做到三點:資料跟真實感測器看到的一致、有大規模而且稠密準確的抓取標註、能用統一方式評估不同表示法的抓取。他們的解法是兩邊各取所長:影像在真實世界拍,標註在模擬中用解析方式算。

資料集規模與組成

項目數量
物體88 個(32 個來自 YCB、13 個 Dex-Net 2.0 的對抗性物體、43 個自行蒐集),全部有高品質 3D 網格模型
場景190 個雜亂場景,每個場景隨機擺約 10 個物體
影像每個場景 512 張(256 個視角 × 2 台相機),共 97,280 張 RGB-D
抓取姿態每個場景 300 萬~900 萬個,總計超過 11 億個

跟其他資料集比較:

資料集每場景抓取數每場景物體數標籤6D 姿態總抓取總影像來源
Cornell81矩形否8,0191,0351 台相機
Pinto1–矩形否50K50K1 台相機
Levine1–矩形否800K800K1 台相機
Dex-Net 2.011矩形否6.7M6.7M模擬
Jacquard201矩形否1.1M54K模擬
VR-Grasping-10110016-DoF是4.8M10K模擬
GraspNet39M106-DoF是1.2B97K2 台相機

每張影像附帶的標註:6D 物體姿態、6 自由度抓取姿態、矩形抓取姿態(給 2D 方法用)、實例遮罩、邊界框、相機姿態。因為每一幀都有相機姿態,多個視角的點雲可以直接融合。

資料蒐集

  • 相機裝在機械手臂上,手臂沿著固定軌跡移動,覆蓋四分之一球面上的 256 個視角。用手臂是因為它能精準重複同一條軌跡,方便自動化
  • 同時用兩台相機拍:Intel RealSense D435 和 Kinect 4 Azure。兩者的深度品質不同,方便測試演算法在不同感測器雜訊下的表現
  • 相機外參不靠手臂的正向運動學(會有誤差),而是在 256 個拍攝點都對一個固定的 ArUco 標記拍照,算出相對於標記的相機姿態

標註流程

6D 物體姿態

97,280 張影像逐張標註太累。因為相機姿態已知,只需要標註每個場景的第一幀,其他幀用相機姿態推算:

Pji=cami−1 cam0 Pj0P_j^i = \text{cam}_i^{-1}\,\text{cam}_0\,P_j^0

PjiP_j^i 是物體 jj 在第 ii 幀的姿態,cami\text{cam}_i 是第 ii 幀的相機姿態。所有 6D 姿態都經過多位標註者反覆檢查與修正。物體遮罩和邊界框則是用 6D 姿態把網格投影回影像得到的。

抓取姿態:兩階段自動標註

抓取姿態分佈在一個連續的大空間裡,理論上有無限多個,人工標不完。因為物體都是已知的,可以用兩階段自動化流程:

第一階段:在每個物體上單獨標註

  1. 把網格模型降採樣,讓取樣點(稱為 grasp point)在體素空間中均勻分佈
  2. 每個 grasp point 在球面上均勻取 VV 個接近方向(view)
  3. 每個方向再在「夾爪深度 DD × 平面內旋轉角 AA」的二維格點上搜尋候選
  4. 夾爪寬度依幾何決定,確保不會夾空也不會碰撞
  5. 用**力封閉(force-closure)**指標評分

力封閉的意思是:給定抓取姿態、物體和摩擦係數 μ\mu,判斷兩根手指能不能形成穩定的對握。摩擦係數越小,表示接觸面越滑、要求越嚴格。標註時把 μ\mu 從 1.0 開始以 0.1 為間隔往下降,直到這個抓取不再成立為止,記下最後還能成立的最小 μ\mu。能在越小摩擦係數下成立的抓取越穩,所以分數定義為:

s=1.1−μ,s∈(0,1]s = 1.1 - \mu, \qquad s \in (0, 1]

μ=0.1\mu = 0.1 還成立的抓取得到 s=1.0s = 1.0(最好);只在 μ=1.0\mu = 1.0 成立的抓取得到 s=0.1s = 0.1。因此分數只有 10 個等級。

第二階段:投影到場景

用標註好的 6D 物體姿態,把物體座標系下的抓取轉到世界座標系:

Pi=cam0 Pi0,Gi(w)=Pi⋅Gi(o)P_i = \text{cam}_0\,P_i^0, \qquad G_i^{(w)} = P_i \cdot G_i^{(o)}

然後做碰撞檢測:用簡化的夾爪模型,檢查夾爪範圍內有沒有其他物體或背景的點,碰到的抓取就剔除。最終正負樣本比約 1:2。

整條流程的關鍵在於:影像是真的(沒有模擬落差),標註是算出來的(不需要人工,而且非常稠密)。

評測方式

資料切分

190 個場景中 100 個訓練、90 個測試。測試集再分三類各 30 個場景:

  • Seen:物體在訓練集出現過
  • Similar(Unseen but similar):沒看過,但跟訓練物體類似
  • Novel:完全沒看過的新物體

為什麼不用矩形指標

矩形指標(角度差 < 30°、IoU > 0.25)有兩個問題:只能評估矩形表示法;而且因為標註不可能列舉所有正確抓取,門檻設得很寬鬆,可能高估表現——當時 Cornell 上已經有方法超過 99%。

線上評估

GraspNet 的做法是不預先計算測試集的標籤,而是對每個預測的抓取直接用力封閉指標當場計算:

  1. 檢查夾爪範圍內的點雲,判斷這個抓取是針對哪個物體
  2. 跟產生標註時一樣,用力封閉指標在不同摩擦係數 μ\mu 下判斷是否成功
  3. 碰撞檢測:夾爪不能撞到場景中的其他東西

這樣的評估不限定抓取的表示法,也不受標註完整性影響——只要預測的抓取在物理上成立,就算對。

指標:AP

雜亂場景中演算法通常會輸出很多個抓取,而實際執行時是挑排名前面的去做,所以排前面的抓取有多少是對的最重要。採用 Precision@k:

  • APμ\text{AP}_\mu:給定摩擦係數 μ\mu,kk 從 1 到 50 的 Precision@k 平均
  • AP:μ\mu 從 0.2 到 1.0(間隔 0.2)的 APμ\text{AP}_\mu 平均
  • 論文另外報告 AP0.8\text{AP}_{0.8}(較寬鬆)和 AP0.4\text{AP}_{0.4}(較嚴格)

為了避免分數被大量相似的抓取、或集中在單一物體上的抓取灌水,評估前會先做 pose-NMS。官方提供 graspnetAPI,可以載入資料、視覺化抓取,並用統一的 AP 指標評測。

作者也說明這個基準的定位:抓取問題可以拆成「預測所有可行的抓取姿態」(電腦視覺)和「針對特定機器人做運動規劃」(機器人學)。GraspNet 專注在前者,所以用簡化的夾爪模型和碰撞檢測;真實夾爪和手臂的碰撞、運動規劃應該在執行時處理。

基線網路:GraspNet-Baseline

抓取的表示法

兩指平行夾爪的抓取寫成:

G=[ R    t    w ]G = [\,R \;\; t \;\; w\,]

R∈R3×3R \in \mathbb{R}^{3\times3} 是夾爪朝向,t∈R3×1t \in \mathbb{R}^{3\times1} 是抓取中心,ww 是夾爪寬度。

直接讓網路學旋轉矩陣不直觀——旋轉矩陣有行列式為 1、反矩陣等於轉置等限制,很難學。所以借用 6D 姿態估計的做法,把朝向拆成視角分類 + 平面內旋轉。問題重新表述為:對物體表面的一個 grasp point,預測

  1. 接近向量 VV:夾爪從哪個方向伸過去
  2. 接近距離 DD:夾爪沿接近方向要伸多深
  3. 平面內旋轉 RR:夾爪繞接近軸轉幾度
  4. 夾爪寬度 WW:要張多開

整體架構

shell
場景點雲(N × 3)
      │
PointNet++ 骨幹(編碼 + 解碼)
      │  最遠點取樣 M = 1024 個點,每點 C 維特徵
      ▼
ApproachNet ──► 每點:可抓/不可抓 + V = 300 個方向的分數
      │
Cylinder Grouping ──► 沿選定方向,在 4 種深度的圓柱內取點、轉到局部座標
      │
 ┌────┴──────────┐
 ▼               ▼
OperationNet   ToleranceNet
旋轉角/寬度/分數  抗擾動能力
      │
碰撞檢測 → NMS → 依分數排序取前 50 個

PointNet++ 骨幹

點雲不像影像有規則的格子,不能直接做卷積。PointNet++ 的做法是:

  • Set Abstraction(特徵萃取):用最遠點取樣(FPS)挑出代表點,再以半徑搜尋取鄰居,把「鄰居相對中心的 xyz 差值」加上特徵送進 MLP + max pooling,得到這一區的特徵。逐層擴大範圍
  • Feature Propagation(特徵傳播):把稀疏點的特徵插值回較密的點

論文設定:四層 Set Abstraction,半徑 0.04、0.1、0.2、0.3 公尺,分組大小 64、32、16、16,點數依序降到 2048、1024、512、256;再用兩層 Feature Propagation 上採樣回 1024 個點、每點 256 維特徵。

ApproachNet:哪些點能抓、從哪個方向抓

  • 輸入:1024 個點(座標 + 特徵)
  • 輸出:每個點 2+V2 + V 個值——2 個值判斷可抓或不可抓,V=300V = 300 個值是 300 個預先定義的接近方向各自的分數

可抓與否和方向是一起估的,因為有些方向會被遮擋,就算點本身可以抓,從那個方向也伸不進去。

標籤怎麼給:

  • 不在物體上的點 → 負樣本
  • 在物體上,且 5 mm 半徑內至少有一個可行的標註抓取 → 正樣本
  • 在物體上但找不到參考標註 → 忽略,不參與訓練

每個正樣本點周圍取 VV 個虛擬接近方向,對每個方向在球面上找 5° 以內的標註方向當參考,分數取該方向下抓取信心度的最大值。損失函數:

LA=1Ncls∑iLcls(ci,ci∗)+λ11Nreg∑i,jci∗ 1(∣vij,vij∗∣<5∘) Lreg(sij,sij∗)L_A = \frac{1}{N_{cls}}\sum_i L_{cls}(c_i, c_i^*) + \lambda_1 \frac{1}{N_{reg}}\sum_{i,j} c_i^*\,\mathbb{1}\big(|v_{ij}, v_{ij}^*| < 5^\circ\big)\,L_{reg}(s_{ij}, s_{ij}^*)

LclsL_{cls} 用二分類 softmax loss,LregL_{reg} 用 smooth L1。指示函數確保只在附近 5° 內有標註方向時才計算方向分數的損失。

Cylinder Region Transformation:把方向和實際點雲結合

ApproachNet 只給出一個抽象的方向,但要決定怎麼夾,還得看那個方向上實際有什麼形狀。這一步做的是:

  1. 接近距離比較不敏感,所以離散成 K=4K = 4 個區間:0.01、0.02、0.03、0.04 公尺
  2. 對每個深度,沿接近向量取一個圓柱,在圓柱內取固定數量的點
  3. 把這些點從世界座標轉到以 grasp point 為原點、接近向量為 z 軸的局部座標

轉換矩陣:

Oij=[ oij1, [0,−vij(3),vij(2)]T, vij ],oij1=[0,−vij(3),vij(2)]T×vijO_{ij} = \big[\,o^1_{ij},\ [0, -v_{ij(3)}, v_{ij(2)}]^T,\ v_{ij}\,\big], \quad o^1_{ij} = [0, -v_{ij(3)}, v_{ij(2)}]^T \times v_{ij}

轉換後,不管原本在場景中的哪個位置、哪個方向,所有候選都有統一的表示,網路比較好學。

OperationNet:轉幾度、張多開、分數多少

  • 輸入:每個(grasp point, 深度)組合的局部圓柱點雲特徵
  • 輸出:每個(grasp point, 深度, 候選角度)組合的
    • 抓取分數(這個組合抓起來有多好)
    • 角度分類分數(是一個分類 logit,不是直接回歸角度)
    • 夾爪寬度

平面內旋轉分成 12 個區間。因為夾爪是對稱的,只需要預測 0°~180°,每 15° 一格。旋轉角用分類而不是回歸,因為已有研究證明分類效果較好(消融實驗也證實了這點)。抓取信心度對應前面的 10 個分數等級。損失函數:

LR=∑d=1K(1Ncls∑ijLclsd(Rij,Rij∗)+λ21Nreg∑ijLregd(Sij,Sij∗)+λ31Nreg∑ijLregd(Wij,Wij∗))L_R = \sum_{d=1}^{K}\left(\frac{1}{N_{cls}}\sum_{ij}L^d_{cls}(R_{ij}, R^*_{ij}) + \lambda_2\frac{1}{N_{reg}}\sum_{ij}L^d_{reg}(S_{ij}, S^*_{ij}) + \lambda_3\frac{1}{N_{reg}}\sum_{ij}L^d_{reg}(W_{ij}, W^*_{ij})\right)

LclsL_{cls} 用 sigmoid cross entropy 做多類別二元分類。

候選數量大約是 1024 個點 × 4 種深度 × 12 種角度,非常稠密。

ToleranceNet 與 Grasp Affinity Fields:抓得穩不穩

可行的抓取有無限多個,人類會傾向挑就算位置稍微偏一點也還能成功的抓取。論文把這個直覺量化成 Grasp Affinity Fields(GAFs):

對每個標註抓取,在球面空間中搜尋鄰居,找出「偏移多遠以內,抓取分數仍然 > 0.5」的最大距離,當作這個抓取的抗擾動能力。

在官方 baseline 程式碼中,這個概念的實作大致是逐步放大搜尋半徑:取得半徑 rr 內的其他標註點 → 讀取它們的摩擦係數 → 檢查摩擦係數夠低(抓得穩)的鄰居比例是否達到門檻 → 達到就記下這個半徑並繼續放大,否則停止,回傳目前的半徑當作 tolerance。

ToleranceNet 學習預測這個值:

LF=∑d=1K1Nreg∑ijLregd(Tij,Tij∗)L_F = \sum_{d=1}^{K}\frac{1}{N_{reg}}\sum_{ij}L^d_{reg}(T_{ij}, T^*_{ij})

訓練與推論

總損失:

L=LA+αLR+βLFL = L_A + \alpha L_R + \beta L_F

超參數 λ1,λ2,λ3,α,β=0.5,1.0,0.2,0.5,0.1\lambda_1, \lambda_2, \lambda_3, \alpha, \beta = 0.5, 1.0, 0.2, 0.5, 0.1。ApproachNet、OperationNet、ToleranceNet 分別是大小 (256, 302, 302)、(128, 128, 36)、(128, 64, 12) 的 MLP。

訓練:PyTorch,Adam,單張 RTX 2080;每個場景隨機取 2 萬個點;初始學習率 0.001,batch size 4,60 個 epoch 後降到 0.0001,100 個 epoch 後降到 0.00001。

推論時有一個重新排序的步驟:先依抓取分數把預測分到 10 個區間(因為標籤只有 10 個等級),同一個區間內再依 ToleranceNet 預測的抗擾動能力排序。最後的後處理是:碰撞檢測濾掉會撞到場景的候選 → NMS 濾掉太相似的重複姿態 → 依分數取前 50 個。

實驗結果一:標註真的對得上真實世界嗎

在物體上貼 ArUco 標記(只為了在這個實驗中方便取得 6D 姿態),挑 10 個物體,在 Flexiv Rizon 手臂 + RealSense D435 上執行不同分數的抓取,每種設定隨機選 100 個:

物體s=1s=0.5s=0.1物體s=1s=0.5s=0.1
香蕉98%67%21%蘋果97%65%16%
削皮刀95%59%9%龍96%60%9%
馬克杯96%62%12%駱駝93%67%23%
剪刀89%61%5%電鑽96%61%14%
獅子98%68%16%黑色滑鼠98%64%13%

高分抓取的真實成功率平均約 96%,低分抓取成功率很低。代表用力封閉解析算出的分數,跟真實世界的抓取結果是一致的。

實驗結果二:方法比較

結果格式為 RealSense / Kinect:

方法Seen APSeen AP₀.₈Seen AP₀.₄Similar APSimilar AP₀.₈Similar AP₀.₄Novel APNovel AP₀.₈Novel AP₀.₄
GG-CNN15.48/16.8921.84/22.4710.25/11.2313.26/15.0518.37/19.764.62/6.195.52/7.385.93/8.781.86/1.32
Chu et al.15.97/17.5923.66/24.6710.80/12.7415.41/17.3620.21/21.647.06/8.867.64/8.048.69/9.342.52/1.76
GPD22.87/24.3828.53/30.1612.84/13.4621.33/23.1827.83/28.649.64/11.328.24/9.588.89/10.142.67/3.16
PointNetGPD25.96/27.5933.01/34.2115.37/17.8322.68/24.3829.15/30.8410.76/12.839.23/10.669.89/11.242.74/3.21
本文27.56/29.8833.43/36.1916.95/19.3126.11/27.8434.18/33.1914.23/16.6210.55/11.5111.25/12.923.98/3.56
  • 矩形方法(GG-CNN、Chu)在所有指標上都最低。在 Cornell 上動輒 90% 以上的方法,到了雜亂場景 + 力封閉評估只剩 15 左右——矩形指標可能高估了這些方法
  • 點雲候選方法(GPD、PointNetGPD)比矩形方法好,但本文的端到端網路在所有切分上都更好
  • Novel 物體上所有方法都大幅下降,這個問題留給了之後的 GSNet、AnyGrasp

消融實驗

在 Kinect 的 Seen 測試集上:

設定APAP₀.₈AP₀.₄
完整模型29.8836.1919.31
分類改成直接回歸23.7433.2812.15
拿掉 ToleranceNet28.5335.6216.33
  • 把「視角分類 + 旋轉分類」改成直接回歸接近方向和旋轉角度,AP 掉了 6 個百分點,嚴格指標 AP₀.₄ 掉更多
  • 拿掉 ToleranceNet,AP₀.₄ 從 19.31 掉到 16.33——抗擾動排序主要幫助的是嚴格條件下的穩定抓取

影響與定位

GraspNet-1Billion 對抓取領域的影響主要有三點:

  1. 讓 6 自由度抓取有了共同的比較基準。之後幾乎所有點雲抓取方法都在這個資料集上報告 Seen / Similar / Novel 三種 AP
  2. 「真實影像 + 解析標註」的資料生產方式,同時避開了人工標註的規模限制和模擬資料的視覺落差
  3. 基線網路的模組拆法(骨幹 → 找可抓點與方向 → 圓柱分組 → 預測操作參數)被後續研究沿用。GSNet 在前面加了「graspness」來更聰明地挑點;AnyGrasp 再加上時序追蹤和重心感知

限制方面:資料集的 88 個物體規模不算大,Novel 測試集上的表現說明泛化到全新物體仍然困難;評估用的是簡化夾爪模型,沒有考慮手臂本身的可達性與碰撞。

相關論文推薦

參考資料

相關術語

訂閱 RoboTech Lab 電子報

每週一封,整理新的教學、論文導讀與機器人業界動態。隨時可以取消訂閱。