論文導讀: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
作者把雜亂場景的抓取偵測拆成兩個階段:
- Where:在單視角點雲中,找出可抓性高的位置
- How:在這些局部區域,決定抓取參數——平面內旋轉、接近深度、抓取分數、夾爪寬度
之前的方法幾乎都專注在 how:
- 取樣—評估路線(GPD、PointNetGPD、6-DoF GraspNet):在場景中均勻隨機取候選,再用模型評分
- 端到端路線(GraspNet-Baseline、S4G 等):網路直接處理整個場景點雲,在前向傳播之前或之中取點(體素降採樣、最遠點取樣)
這些方法都沒有明確建模 where,候選點均勻分佈在場景裡。作者用 GraspNet-1Billion 統計發現,即使給了物體遮罩,可抓的點也不到所有取樣點的 10%,更不用說整個場景。這種嚴重的不平衡浪費了大量運算,也降低效率。
認知科學也有對應的觀察:人在準備抓取之前,視覺注意力會先偏向可抓性最高的區域(affordance attention),而且這發生在動作準備階段之前。這就是 graspness 這個概念的出發點。
核心概念:Graspness
兩種 graspness
對一個點集 ,假設球面上均勻分佈 個接近方向 :
- 點層級 graspness :這個點整體有多值得抓
- 視角層級 graspness :從每個方向抓這個點,各自有多值得
用前瞻搜尋定義
直覺上,判斷「哪裡可抓」似乎需要複雜的幾何推理。作者發現其實不用——只要把從這個點出發、所有可能的未來抓取姿態都試一遍,可行的比例就能很好地代表它的可抓性。
假設有一個能判斷任意抓取成功與否的 oracle , 是在點 、從方向 的所有可行抓取姿態,則:
也就是「可行的抓取數 ÷ 總抓取數」。
實際上這樣的 oracle 不存在,而且連續空間中的抓取有無限多個,所以要近似:
- 每個(點, 方向)沿著夾爪深度和平面內旋轉角做格點取樣,得到 個候選
- 用力學解析模型算每個候選的品質分數
- 設一個門檻 ,分數超過就算成功
從單一物體到雜亂場景
直接用 6D 姿態把物體層級的 graspness 投影到場景上不夠,因為:
- 單一物體上可行的抓取,放進雜亂場景後可能會撞到背景或其他物體,變成不可行
- 深度相機只拍到單視角的部分點雲,需要把場景點和投影後的物體點對應起來
解法是沿用 GraspNet-1Billion 的做法,用 3D 模型和 6D 姿態重建場景,每個抓取都做碰撞檢查,得到碰撞標籤 ,只有「品質過門檻且不碰撞」才算數:
然後把物體點投影到場景,每個場景點用最近鄰找到對應的物體點,取得 graspness。最後每個場景做 min-max 正規化(視角層級的是逐欄正規化)。
從視覺化可以看到幾個有意思的現象:大部分低 graspness 區域是因為會撞到桌面——同樣的區域在單一物體時 graspness 其實很高;graspness 也會受鄰近物體影響,例如一把刀壓在香蕉上,會把香蕉上原本連續的高 graspness 區域切斷;物體大小也有影響,一個平躺的盒子形狀很簡單,卻幾乎沒有高 graspness 的區域,因為最大開口 0.1 公尺的夾爪找不到地方下手。
這個定義合理嗎
作者把 graspness > 0.3 的點當正樣本、< 0.1 的點當負樣本(數量相同),用 t-SNE 視覺化骨幹網路抽出的局部幾何特徵。不論訓練集或測試集,高低 graspness 的點在特徵空間中明顯分開。代表 graspness 確實對應到可辨識的局部幾何特徵,可以從點雲學出來。
GSNet 架構
稠密單視角點雲(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 很難,兩者的空間差距太大。所以先用骨幹網路把點轉成高維特徵 ,再從特徵分別預測兩種 graspness:
:點集 → 特徵,:特徵 → 點層級 graspness,:特徵 → 視角層級 graspness,兩者共用同一組特徵。
為什麼要「級聯」? 是 300 維的高維輸出,對所有點都算太貴;而且大部分點在點層級就已經不可抓了,根本不需要算它的視角 graspness。所以先用 篩點,篩完再對剩下的點算 。
骨幹網路:用 MinkowskiEngine 上的 ResUNet14。它用 3D 稀疏卷積處理任意大小的點雲,U 形架構 + 殘差區塊 + 跳接,在多種 3D 深度學習任務中表現很好。也可以換成 PointNet、PointCNN 等其他逐點網路。輸入 N × 3,輸出 N × (3 + C)。
Graspable FPS: 是一個 MLP,輸出每個點 1 個 graspness 值和 2 個物體/背景分類分數(N × 3),非物體點的 graspness 設為 0。然後只在 graspness 超過門檻 的點上做最遠點取樣,取出 M 個種子點。最遠點取樣讓種子點彼此距離最大化,覆蓋整個可抓區域,而不是擠在同一處。
Graspable PVS(機率式視角選擇): 也是 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):每個(平面內旋轉, 接近深度)組合各自的分數和寬度,取分數最高的組合當預測。
分數表示:用「這個抓取仍成立的最小摩擦係數 」評估品質:
越小,分數越高,越可能成功。所有分數正規化到 [0, 1]。
跟 GraspNet-Baseline 的 OperationNet 有什麼不同
| 項目 | GraspNet-Baseline | GSNet |
|---|---|---|
| 圓柱表示 | 每個深度區間各切一個圓柱,同一個抓取會有多組重複的點 | 只切一個圓柱,高度取最大深度 0.04 m,深度改成在最終輸出時分類 |
| 點座標 | 轉換後不縮放(絕對值很小,≤ 0.05 m) | 用圓柱半徑(0.05 m)縮放,寬度預測也對應調整 |
| 點特徵 | 每個深度區間從原始輸入(約 2 萬點)取 64 個點,只有 xyz | 從種子點(約 1 千點)取 16 個點,xyz 串接骨幹網路的特徵,減少取樣運算 |
| 輸出 | 每個深度區間輸出分數、旋轉角、寬度,選角度分類分數最高的 | 每個(旋轉, 深度)組合都輸出分數和寬度,選抓取分數最高的;分數和寬度改成 0~1 的相對值 |
損失函數
兩個模型同時訓練,多任務損失:
- :物體/背景分類(softmax)
- :點層級、視角層級 graspness 回歸
- :抓取分數、夾爪寬度回歸
- 回歸都用 smooth L1,權重都設為 10
- 和 只在物體上的點計算; 只在種子點的方向上計算; 只對標註分數 > 0 的抓取計算
實作細節
- 資料:GraspNet-1Billion。每個點有 300 個方向、每個方向 48 個抓取的密集標註,所以 、
- 前處理:點雲以 0.005 m 體素降採樣,只用相機座標的 XYZ;即時資料增強:沿 YZ 平面隨機翻轉、繞 Z 軸 ±30° 隨機旋轉
- 網路:骨幹輸出 C = 512;M = 1024 個種子點、V = 300 個方向、門檻 ; 是 (512, 3) 的 MLP, 是 (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 個區間,比較預測和標籤落在第幾個區間:
在三種變化下測試(Kinect 訓練):
| 變化類型 | 訓練 | 測試 | ||
|---|---|---|---|---|
| 物體 | 場景 0-99 | 訓練集本身 | 0.0485 | 0.0451 |
| Seen(100-129) | 0.0677 | 0.0457 | ||
| Similar(130-159) | 0.0856 | 0.0459 | ||
| Novel(160-189) | 0.0802 | 0.0413 | ||
| 視角 | 視角 0-127 | 視角 0-127 | 0.0697 | 0.0468 |
| 視角 128-191 | 0.0725 | 0.0473 | ||
| 視角 192-255 | 0.0763 | 0.0476 | ||
| 相機 | Kinect | Kinect | 0.0677 | 0.0457 |
| RealSense | 0.0984 | 0.0461 |
點層級 graspness 在 Seen 和 Novel 之間差異不大,視角變化影響也小;換到 RealSense 誤差較高但仍可接受。視角層級 graspness 在所有設定下幾乎不變。結論是 graspness 模型對物體、視角、相機的變化都不敏感,可以當成即插即用的模組。
實驗結果二:GraspNet-1Billion 評測
結果格式為 RealSense / Kinect,CGM 是級聯 graspness 模型,CD 是碰撞檢測:
| 方法 | Seen AP | Seen AP₀.₈ | Seen AP₀.₄ | Similar AP | Similar AP₀.₈ | Similar AP₀.₄ | Novel AP | Novel AP₀.₈ | Novel AP₀.₄ |
|---|---|---|---|---|---|---|---|---|---|
| GG-CNN | 15.48/16.89 | 21.84/22.47 | 10.25/11.23 | 13.26/15.05 | 18.37/19.76 | 4.62/6.19 | 5.52/7.38 | 5.93/8.78 | 1.86/1.32 |
| Chu et al. | 15.97/17.59 | 23.66/24.67 | 10.80/12.74 | 15.41/17.36 | 20.21/21.64 | 7.06/8.86 | 7.64/8.04 | 8.69/9.34 | 2.52/1.76 |
| GPD | 22.87/24.38 | 28.53/30.16 | 12.84/13.46 | 21.33/23.18 | 27.83/28.64 | 9.64/11.32 | 8.24/9.58 | 8.89/10.14 | 2.67/3.16 |
| PointNetGPD | 25.96/27.59 | 33.01/34.21 | 15.37/17.83 | 22.68/24.38 | 29.15/30.84 | 10.76/12.83 | 9.23/10.66 | 9.89/11.24 | 2.74/3.21 |
| GraspNet-Baseline | 27.56/29.88 | 33.43/36.19 | 16.95/19.31 | 26.11/27.84 | 34.18/33.19 | 14.23/16.62 | 10.55/11.51 | 11.25/12.92 | 3.98/3.56 |
| GPD + CGM | 28.16/29.65 | 34.07/35.59 | 17.21/18.94 | 26.47/28.19 | 33.14/33.74 | 14.27/16.20 | 9.73/10.89 | 10.55/11.37 | 3.35/4.12 |
| PointNetGPD + CGM | 33.86/33.17 | 41.50/40.85 | 22.93/23.18 | 28.91/29.06 | 34.70/35.96 | 16.95/17.33 | 11.97/12.47 | 13.52/13.31 | 4.01/4.64 |
| Baseline + CGM | 41.46/39.51 | 49.32/48.75 | 29.64/26.19 | 36.87/35.28 | 45.69/44.93 | 25.29/23.84 | 15.11/13.26 | 17.49/15.03 | 6.74/5.28 |
| GSNet | 65.70/61.19 | 76.25/71.46 | 61.08/56.04 | 53.75/47.39 | 65.04/56.78 | 45.97/40.43 | 23.98/19.01 | 29.93/23.73 | 14.05/10.60 |
| GSNet + CD | 67.12/63.50 | 78.46/74.54 | 60.90/58.11 | 54.81/49.18 | 66.72/59.27 | 46.17/41.89 | 24.31/19.78 | 30.52/24.60 | 14.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 PVS | 46.17 |
| 整個點雲 FPS | graspable PVS | 51.15 |
| graspness 區域隨機取樣 | graspable PVS | 53.32 |
| graspable FPS | 表面法向量 | 55.63 |
| graspable FPS | 訓練時取最高分方向 | 58.34 |
| graspable FPS | graspable PVS | 59.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 模型 | 抓取操作模型 | 總計 |
|---|---|---|---|
| RealSense | 0.08 s | 0.02 s | 0.10 s |
| Kinect | 0.10 s | 0.02 s | 0.12 s |
GPD 和 PointNetGPD 要超過 1 秒,GSNet 只要 0.1 秒左右。
真實機器人實驗
UR-5 手臂 + Robotiq 兩指夾爪 + RealSense D435,只保留桌面工作區的點來加速。六個雜亂場景,每個 6~8 個 GraspNet-1Billion 中的物體,隨機堆放,持續抓取直到桌面清空。成功率定義為物體數 ÷ 嘗試次數:
| 場景 | 物體數 | 嘗試次數 | 成功率 |
|---|---|---|---|
| 1 | 6 | 6 | 100% |
| 2 | 6 | 7 | 85.7% |
| 3 | 7 | 9 | 77.8% |
| 4 | 7 | 7 | 100% |
| 5 | 8 | 8 | 100% |
| 6 | 8 | 9 | 88.9% |
| 總計 | 42 | 46 | 91.3% |
跟其他方法比較(物體分三組,每組 10 個,各重複四次):
| 方法 | A 組 | B 組 | C 組 |
|---|---|---|---|
| GPD | 71.43% | 74.07% | 67.80% |
| PointNetGPD | 76.92% | 78.43% | 70.18% |
| GraspNet-Baseline | 81.63% | 80.00% | 74.07% |
| GSNet | 88.89% | 90.91% | 85.11% |
示範影片中還有鏈條、裝彈珠的網袋、拖鞋等不在 GraspNet-1Billion 裡的物體,模型對新物體也表現穩定。
影響與定位
GSNet 的貢獻可以濃縮成一句話:先決定在哪裡花運算,再決定怎麼抓。這個看似簡單的改變帶來兩個效果:
- 準確率:訓練時提供更多正樣本,網路更容易收斂;推論時候選集中在高品質區域
- 速度:低 graspness 的點直接從前向傳播中丟掉,不用浪費運算
另一個重要貢獻是 graspness 模型的通用性——它不依賴特定物體,對視角、相機變化穩定,可以直接接到其他抓取方法前面。
GSNet 之後被整合進 AnyGrasp。AnyGrasp 的幾何處理模組基本上就是 GSNet 的架構,再加上 5 種深度選項、穩定度分數(重心感知),以及用 RGB 特徵做跨幀追蹤的時序關聯模組。
相關論文推薦
- 論文導讀:GraspNet-1Billion——雜亂場景、6 自由度、10 億筆抓取標註的通用抓取基準——GSNet 的資料集與基線
- 論文導讀:AnyGrasp——把稠密 6 自由度抓取生成與時序追蹤合而為一——以 GSNet 為基礎延伸
- 論文導讀:Contact-GraspNet——把 6 自由度抓取降維成 4 自由度來學——同年另一條 6 自由度抓取路線
參考資料
- 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 電子報
每週一封,整理新的教學、論文導讀與機器人業界動態。隨時可以取消訂閱。