論文導讀:GSNet——先找出「哪裡值得抓」,雜亂場景的快速精準抓取偵測

Chenxi Wang, Hao-Shu Fang, Minghao Gou, Hongjie Fang, Jin Gao, Cewu Lu · 2021原文連結

一句話讀懂這篇論文

在一堆雜亂的物體中,真正能抓的點其實很少——就算只看物體上的點,可抓的也不到 10%。但之前的 6 自由度抓取方法都是均勻地在整個場景取點,把大量運算浪費在不可能成功的位置。GSNet 先訓練一個模型判斷「這個點值不值得抓」(graspness),只在高分的地方取樣、再算細節。結果準確率翻倍、速度也更快。

論文資訊卡

  • 標題:Graspness Discovery in Clutters for Fast and Accurate Grasp Detection
  • 作者:Chenxi Wang、Hao-Shu Fang(共同一作)、Minghao Gou、Hongjie Fang、Jin Gao、Cewu Lu(通訊作者)——上海交通大學
  • 發表:ICCV 2021(arXiv 版本於 2024 年上傳)
  • 定位:GraspNet-1Billion 團隊的第二篇。GSNet 的程式庫後來升級並整合進 AnyGrasp

問題背景:where 和 how

作者把雜亂場景的抓取偵測拆成兩個階段:

  1. Where:在單視角點雲中,找出可抓性高的位置
  2. How:在這些局部區域,決定抓取參數——平面內旋轉、接近深度、抓取分數、夾爪寬度

之前的方法幾乎都專注在 how:

  • 取樣—評估路線(GPD、PointNetGPD、6-DoF GraspNet):在場景中均勻隨機取候選,再用模型評分
  • 端到端路線(GraspNet-Baseline、S4G 等):網路直接處理整個場景點雲,在前向傳播之前或之中取點(體素降採樣、最遠點取樣)

這些方法都沒有明確建模 where,候選點均勻分佈在場景裡。作者用 GraspNet-1Billion 統計發現,即使給了物體遮罩,可抓的點也不到所有取樣點的 10%,更不用說整個場景。這種嚴重的不平衡浪費了大量運算,也降低效率。

認知科學也有對應的觀察:人在準備抓取之前,視覺注意力會先偏向可抓性最高的區域(affordance attention),而且這發生在動作準備階段之前。這就是 graspness 這個概念的出發點。

核心概念:Graspness

兩種 graspness

對一個點集 P={pi}P = \{p_i\},假設球面上均勻分佈 VV 個接近方向 {vj}\{v_j\}:

  • 點層級 graspness Sp={sip∈[0,1]}S^p = \{s^p_i \in [0, 1]\}:這個點整體有多值得抓
  • 視角層級 graspness Sv={siv∈[0,1]V}S^v = \{s^v_i \in [0, 1]^V\}:從每個方向抓這個點,各自有多值得

用前瞻搜尋定義

直覺上,判斷「哪裡可抓」似乎需要複雜的幾何推理。作者發現其實不用——只要把從這個點出發、所有可能的未來抓取姿態都試一遍,可行的比例就能很好地代表它的可抓性。

假設有一個能判斷任意抓取成功與否的 oracle 1(⋅)\mathbb{1}(\cdot),Gi,jG_{i,j} 是在點 pip_i、從方向 vjv_j 的所有可行抓取姿態,則:

s~ip=∑j=1V∑g∈Gi,j1(g)∑j=1V∣Gi,j∣,s~ijv=∑g∈Gi,j1(g)∣Gi,j∣\tilde{s}^p_i = \frac{\sum_{j=1}^{V}\sum_{g \in G_{i,j}}\mathbb{1}(g)}{\sum_{j=1}^{V}|G_{i,j}|}, \qquad \tilde{s}^v_{ij} = \frac{\sum_{g \in G_{i,j}}\mathbb{1}(g)}{|G_{i,j}|}

也就是「可行的抓取數 ÷ 總抓取數」。

實際上這樣的 oracle 不存在,而且連續空間中的抓取有無限多個,所以要近似:

  • 每個(點, 方向)沿著夾爪深度和平面內旋轉角做格點取樣,得到 LL 個候選
  • 用力學解析模型算每個候選的品質分數 qi,jkq^k_{i,j}
  • 設一個門檻 cc,分數超過就算成功
s~ip=∑j=1V∑k=1L1(qi,jk>c)∑j=1V∣Gi,j∣\tilde{s}^p_i = \frac{\sum_{j=1}^{V}\sum_{k=1}^{L}\mathbb{1}(q^k_{i,j} > c)}{\sum_{j=1}^{V}|G_{i,j}|}

從單一物體到雜亂場景

直接用 6D 姿態把物體層級的 graspness 投影到場景上不夠,因為:

  1. 單一物體上可行的抓取,放進雜亂場景後可能會撞到背景或其他物體,變成不可行
  2. 深度相機只拍到單視角的部分點雲,需要把場景點和投影後的物體點對應起來

解法是沿用 GraspNet-1Billion 的做法,用 3D 模型和 6D 姿態重建場景,每個抓取都做碰撞檢查,得到碰撞標籤 ci,jkc^k_{i,j},只有「品質過門檻且不碰撞」才算數:

s~ip=∑j=1V∑k=1L1(qi,jk>c)⋅1(ci,jk)∑j=1V∣Gi,j∣\tilde{s}^p_i = \frac{\sum_{j=1}^{V}\sum_{k=1}^{L}\mathbb{1}(q^k_{i,j} > c)\cdot\mathbb{1}(c^k_{i,j})}{\sum_{j=1}^{V}|G_{i,j}|}

然後把物體點投影到場景,每個場景點用最近鄰找到對應的物體點,取得 graspness。最後每個場景做 min-max 正規化(視角層級的是逐欄正規化)。

從視覺化可以看到幾個有意思的現象:大部分低 graspness 區域是因為會撞到桌面——同樣的區域在單一物體時 graspness 其實很高;graspness 也會受鄰近物體影響,例如一把刀壓在香蕉上,會把香蕉上原本連續的高 graspness 區域切斷;物體大小也有影響,一個平躺的盒子形狀很簡單,卻幾乎沒有高 graspness 的區域,因為最大開口 0.1 公尺的夾爪找不到地方下手。

這個定義合理嗎

作者把 graspness > 0.3 的點當正樣本、< 0.1 的點當負樣本(數量相同),用 t-SNE 視覺化骨幹網路抽出的局部幾何特徵。不論訓練集或測試集,高低 graspness 的點在特徵空間中明顯分開。代表 graspness 確實對應到可辨識的局部幾何特徵,可以從點雲學出來。

GSNet 架構

shell
稠密單視角點雲(N × 3)
        │
ResUNet14(MinkowskiEngine 稀疏卷積)── N × (3 + C),C = 512
        │
MLP(GraspableNet)── 每點:物體/背景 + 點層級 graspness
        │
Graspable FPS ── 只在 graspness > 0.1 的物體點上做最遠點取樣,取 M = 1024 個種子點
        │
MLP(ApproachNet)── 每個種子點:300 個方向的視角 graspness
        │  推論選最佳方向;訓練用機率式取樣(PVS)
        ▼
Cylinder Grouping ── 沿選定方向取圓柱,每個取 K = 16 個點
        │
共享 PointNet(MLP + max pooling)
        │
MLP ── 每個種子點輸出 12 角度 × 4 深度 = 48 組(分數, 寬度)
        │
取分數最高的組合 → M 個抓取姿態

整個網路分成兩大塊:級聯 graspness 模型(找 where)和抓取操作模型(算 how)。

級聯 graspness 模型

從點座標直接映射到 graspness 很難,兩者的空間差距太大。所以先用骨幹網路把點轉成高維特徵 FF,再從特徵分別預測兩種 graspness:

fp=hp∘ht,fv=hv∘htf^p = h^p \circ h^t, \qquad f^v = h^v \circ h^t

hth^t:點集 → 特徵,hph^p:特徵 → 點層級 graspness,hvh^v:特徵 → 視角層級 graspness,兩者共用同一組特徵。

為什麼要「級聯」?SvS^v 是 300 維的高維輸出,對所有點都算太貴;而且大部分點在點層級就已經不可抓了,根本不需要算它的視角 graspness。所以先用 hph^p 篩點,篩完再對剩下的點算 hvh^v。

骨幹網路:用 MinkowskiEngine 上的 ResUNet14。它用 3D 稀疏卷積處理任意大小的點雲,U 形架構 + 殘差區塊 + 跳接,在多種 3D 深度學習任務中表現很好。也可以換成 PointNet、PointCNN 等其他逐點網路。輸入 N × 3,輸出 N × (3 + C)。

Graspable FPS:hph^p 是一個 MLP,輸出每個點 1 個 graspness 值和 2 個物體/背景分類分數(N × 3),非物體點的 graspness 設為 0。然後只在 graspness 超過門檻 δp=0.1\delta_p = 0.1 的點上做最遠點取樣,取出 M 個種子點。最遠點取樣讓種子點彼此距離最大化,覆蓋整個可抓區域,而不是擠在同一處。

Graspable PVS(機率式視角選擇):hvh^v 也是 MLP,對種子點輸出 M × V 的視角 graspness 和 M × C 的殘差特徵。V 個方向用 Fibonacci 格點在單位球面上取。推論時直接選 graspness 最高的方向;訓練時則把每個種子點所有方向的 graspness 正規化成機率,依機率抽樣方向。這樣訓練時能看到更多樣的方向,提供更豐富的資料。

抓取操作模型

採用 crop-and-refine 的做法(在 2D、3D 偵測中都證明有效):沿著(種子點, 方向)切出圓柱空間,轉到夾爪座標系,再估計抓取參數。

圓柱分組:每個點—方向對,用固定高度與半徑的圓柱,從 M 個種子點中取 K 個點。對齊夾爪座標系後,用圓柱半徑正規化點座標,再串接特徵(Graspable FPS 和 PVS 兩段輸出的特徵相加)。得到 M × K × (3 + C) 的抓取候選。

從候選生成抓取:共享的 PointNet(MLP + max pooling)把每個候選壓成 M × C' 的特徵,再用一個 MLP 輸出 M × (A × D × 2):每個(平面內旋轉, 接近深度)組合各自的分數和寬度,取分數最高的組合當預測。

分數表示:用「這個抓取仍成立的最小摩擦係數 μi\mu_i」評估品質:

qi={ln⁡(μmax/μi)ln⁡(μmax/μmin),gi 為正樣本0,gi 為負樣本q_i = \begin{cases} \dfrac{\ln(\mu_{max}/\mu_i)}{\ln(\mu_{max}/\mu_{min})}, & g_i \text{ 為正樣本} \\[2ex] 0, & g_i \text{ 為負樣本} \end{cases}

μi\mu_i 越小,分數越高,越可能成功。所有分數正規化到 [0, 1]。

跟 GraspNet-Baseline 的 OperationNet 有什麼不同

項目GraspNet-BaselineGSNet
圓柱表示每個深度區間各切一個圓柱,同一個抓取會有多組重複的點只切一個圓柱,高度取最大深度 0.04 m,深度改成在最終輸出時分類
點座標轉換後不縮放(絕對值很小,≤ 0.05 m)用圓柱半徑(0.05 m)縮放,寬度預測也對應調整
點特徵每個深度區間從原始輸入(約 2 萬點)取 64 個點,只有 xyz從種子點(約 1 千點)取 16 個點,xyz 串接骨幹網路的特徵,減少取樣運算
輸出每個深度區間輸出分數、旋轉角、寬度,選角度分類分數最高的每個(旋轉, 深度)組合都輸出分數和寬度,選抓取分數最高的;分數和寬度改成 0~1 的相對值

損失函數

兩個模型同時訓練,多任務損失:

L=Lo+α(Lp+Lv)+β(Ls+Lw)L = L_o + \alpha(L_p + L_v) + \beta(L_s + L_w)
  • LoL_o:物體/背景分類(softmax)
  • Lp,LvL_p, L_v:點層級、視角層級 graspness 回歸
  • Ls,LwL_s, L_w:抓取分數、夾爪寬度回歸
  • 回歸都用 smooth L1,權重都設為 10
  • LpL_p 和 LsL_s 只在物體上的點計算;LvL_v 只在種子點的方向上計算;LwL_w 只對標註分數 > 0 的抓取計算

實作細節

  • 資料:GraspNet-1Billion。每個點有 300 個方向、每個方向 48 個抓取的密集標註,所以 V=300V = 300、L=48L = 48
  • 前處理:點雲以 0.005 m 體素降採樣,只用相機座標的 XYZ;即時資料增強:沿 YZ 平面隨機翻轉、繞 Z 軸 ±30° 隨機旋轉
  • 網路:骨幹輸出 C = 512;M = 1024 個種子點、V = 300 個方向、門檻 δp=0.1\delta_p = 0.1;hph^p 是 (512, 3) 的 MLP,hvh^v 是 (512, 512, 300)
  • 圓柱:K = 16 個點,半徑 0.05 m,高度範圍 [−0.02, 0.04] m
  • 輸出:平面內旋轉 A = 12 類(每類 15°),接近深度 D = 4 類(0.01、0.02、0.03、0.04 m),共 48 類
  • 訓練:PyTorch,GTX 1080Ti,Adam,batch size 4,10 個 epoch;學習率第一個 epoch 0.001,之後每個 epoch 乘 0.95;約一天收斂。一張 GPU 更新模型,另一張即時產生標籤

實驗結果一:graspness 模型夠穩定嗎

用排名誤差衡量:把 graspness 範圍均分成 K = 20 個區間,比較預測和標籤落在第幾個區間:

erank=1Nr∑i=1Nr∣r^i−ri∣Ke_{rank} = \frac{1}{N_r}\sum_{i=1}^{N_r}\frac{|\hat{r}_i - r_i|}{K}

在三種變化下測試(Kinect 訓練):

變化類型訓練測試erankpe^p_{rank}erankve^v_{rank}
物體場景 0-99訓練集本身0.04850.0451
Seen(100-129)0.06770.0457
Similar(130-159)0.08560.0459
Novel(160-189)0.08020.0413
視角視角 0-127視角 0-1270.06970.0468
視角 128-1910.07250.0473
視角 192-2550.07630.0476
相機KinectKinect0.06770.0457
RealSense0.09840.0461

點層級 graspness 在 Seen 和 Novel 之間差異不大,視角變化影響也小;換到 RealSense 誤差較高但仍可接受。視角層級 graspness 在所有設定下幾乎不變。結論是 graspness 模型對物體、視角、相機的變化都不敏感,可以當成即插即用的模組。

實驗結果二:GraspNet-1Billion 評測

結果格式為 RealSense / Kinect,CGM 是級聯 graspness 模型,CD 是碰撞檢測:

方法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
GraspNet-Baseline27.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
GPD + CGM28.16/29.6534.07/35.5917.21/18.9426.47/28.1933.14/33.7414.27/16.209.73/10.8910.55/11.373.35/4.12
PointNetGPD + CGM33.86/33.1741.50/40.8522.93/23.1828.91/29.0634.70/35.9616.95/17.3311.97/12.4713.52/13.314.01/4.64
Baseline + CGM41.46/39.5149.32/48.7529.64/26.1936.87/35.2845.69/44.9325.29/23.8415.11/13.2617.49/15.036.74/5.28
GSNet65.70/61.1976.25/71.4661.08/56.0453.75/47.3965.04/56.7845.97/40.4323.98/19.0129.93/23.7314.05/10.60
GSNet + CD67.12/63.5078.46/74.5460.90/58.1154.81/49.1866.72/59.2746.17/41.8924.31/19.7830.52/24.6014.23/11.17

讀這張表的重點:

  • GSNet 不需要任何後處理,在兩種相機上都大幅領先。跟前一代最好的 GraspNet-Baseline 比,AP 大約翻倍;在最嚴格的 AP₀.₄ 上,所有類別都有超過 140% 的相對提升
  • Top-1 抓取準確率(RealSense/Kinect):Seen 78.22/76.49、Similar 62.88/57.64、Novel 28.97/24.04
  • 加上簡單的平行夾爪碰撞檢測(移除會撞到場景點的抓取),三類別再分別提升 1.42/2.31、1.06/1.79、0.33/0.77 AP
  • CGM 可以即插即用:把級聯 graspness 模型加到舊方法上,全部都明顯進步。GraspNet-Baseline 只是把 ApproachNet 換成 CGM,Seen AP 就從 27.56 跳到 41.46;GPD 和 PointNetGPD 則是先用 graspness 決定候選點,再接它們原本的 Darboux 座標估計和分類流程

消融實驗

在 Kinect 的 Seen 測試集上:

點取樣方向選擇AP
整個點雲隨機取樣graspable PVS46.17
整個點雲 FPSgraspable PVS51.15
graspness 區域隨機取樣graspable PVS53.32
graspable FPS表面法向量55.63
graspable FPS訓練時取最高分方向58.34
graspable FPSgraspable PVS59.70
  • FPS 比隨機取樣至少多 4.98 AP;在 graspness 區域取樣,不論 FPS 或隨機都再多 7 AP 以上
  • 方向選擇上,機率式選擇(PVS)比用表面法向量或固定取最高分都好,因為它在訓練時動態選方向,提供更豐富的資料
graspness 層級AP視角 graspness 定義AP
物體層級55.33平均品質分數50.62
場景層級59.70最大品質分數56.95
可行抓取比例59.70

考慮碰撞的場景層級 graspness 比物體層級好;graspness 用「可行抓取的比例」定義,比用平均或最大品質分數好。

推論速度

相機級聯 graspness 模型抓取操作模型總計
RealSense0.08 s0.02 s0.10 s
Kinect0.10 s0.02 s0.12 s

GPD 和 PointNetGPD 要超過 1 秒,GSNet 只要 0.1 秒左右。

真實機器人實驗

UR-5 手臂 + Robotiq 兩指夾爪 + RealSense D435,只保留桌面工作區的點來加速。六個雜亂場景,每個 6~8 個 GraspNet-1Billion 中的物體,隨機堆放,持續抓取直到桌面清空。成功率定義為物體數 ÷ 嘗試次數:

場景物體數嘗試次數成功率
166100%
26785.7%
37977.8%
477100%
588100%
68988.9%
總計424691.3%

跟其他方法比較(物體分三組,每組 10 個,各重複四次):

方法A 組B 組C 組
GPD71.43%74.07%67.80%
PointNetGPD76.92%78.43%70.18%
GraspNet-Baseline81.63%80.00%74.07%
GSNet88.89%90.91%85.11%

示範影片中還有鏈條、裝彈珠的網袋、拖鞋等不在 GraspNet-1Billion 裡的物體,模型對新物體也表現穩定。

影響與定位

GSNet 的貢獻可以濃縮成一句話:先決定在哪裡花運算,再決定怎麼抓。這個看似簡單的改變帶來兩個效果:

  1. 準確率:訓練時提供更多正樣本,網路更容易收斂;推論時候選集中在高品質區域
  2. 速度:低 graspness 的點直接從前向傳播中丟掉,不用浪費運算

另一個重要貢獻是 graspness 模型的通用性——它不依賴特定物體,對視角、相機變化穩定,可以直接接到其他抓取方法前面。

GSNet 之後被整合進 AnyGrasp。AnyGrasp 的幾何處理模組基本上就是 GSNet 的架構,再加上 5 種深度選項、穩定度分數(重心感知),以及用 RGB 特徵做跨幀追蹤的時序關聯模組。

相關論文推薦

參考資料

  • Wang, C., Fang, H.-S., Gou, M., Fang, H., Gao, J., & Lu, C. (2021). Graspness Discovery in Clutters for Fast and Accurate Grasp Detection. ICCV 2021. arXiv:2406.11142
  • GSNet 程式庫已整合進 AnyGrasp:graspnet.net/anygrasp

相關術語

訂閱 RoboTech Lab 電子報

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