玩了十幾年 3D 掃描,老問題一直沒解決:透明、反光的東西,掃不出來,機器人看不見
![]()
前段時間新到了一臺新的 3D 掃描設備 Revopoint MetroY,想看看新設備能不能好點,試了幾樣東西,emmmmm....還是那個樣
![]()
比如我這個對講機,透明玻璃罩,掃出來只剩后面的屏幕,罩子本身消失了
![]()
Hytera 對講機,你值得擁有
玻璃罩子,你擁有不了一點
如果顯示器會反光,那就直接空白了
![]()
比如這個小玩意兒
你就獲得了這個
Mesh 一下更清晰:屏幕整塊都丟了
玻璃瓶稍微好一點,但也缺了不少
![]()
Cocia 巧克力奶,山姆有售
看角度,有時候能撿回來一點
Revopoint MetroY 這玩意兒還不便宜,但該有的問題,是個個都在,反正也不知道啥時候能解決
也是在前段時間找方案的時候,和螞蟻那邊聊到他們在做一個東西,叫 LingBot-Depth,大致上能解決這些問題,方法就是:AI 補全
思路有點反直覺:把「測不準」的地方當作訓練材料,讓 AI 能夠理解這些看不清的東西(思路很類似 Bert,這個后面講)
在用了這個模型之后,機器人能穩定抓起透明玻璃杯、反光不銹鋼杯
![]()
左邊原始深度圖,透明物體大片缺失;右邊補全后,機器人能抓了
而這個東西,今天也正式開源了,這里來說道說道
![]()
https://github.com/robbyant/lingbot-depth?tab=readme-ov-file 老問題了
說回前文,最早開始玩 3D,還得追溯到 14 年的時候, Google 發布 Project Tango,這是一個空間感知平臺,手機或平板上集成了深度傳感器、攝像頭、IMU
![]()
Project Tango
當時,第一時間搞了一臺開發機,當時覺得這玩意要改變世界,結果掃自己家客廳,落地窗的位置是一個長方形的虛空
后來呢...Google 2017 年底宣布停止支持,2018 年 3 月正式關閉
我懷疑他們自己也掃不明白辦公室的玻璃幕墻
如果強行算的話,我最早用上的3D 設備是 Kinect。不過我當時只是弄來玩舞力全開啥的,還沒想到可以來開發
再往后,看到有些開發者朋友,拿它做一些交互應用,但碰到透明、反光、吸光的材質,深度圖上直接出洞,而窗戶經常是個窟窿
![]()
Kinect
以前的 Xbox 還有 Kinect,現在咋就沒了
RealSense 用的是紅外結構光,透明物體同樣會造成深度缺失。比如拍桌面,透明塑料盒大面積丟數據
iPhone 的 LiDAR 好一點,但鏡面和類鏡面表面還是個坎
![]()
https://developer.apple.com/documentation/avfoundation/capturing-depth-using-the-lidar-camera
它的原理是往外發激光脈沖,測光往返的時間來算距離
但鏡面和類鏡面表面還是個坎
光打上去,直接被彈到別的方向去了,很少能散射回接收器
掃描 App 的教程都會寫:盡量避開鏡子和高反光表面
比如我現在在廚房,用水龍頭往鍋里倒水,會發現水的部分被完全忽視了
![]()
軟件是 Record3D:其實鍋里,有半鍋水了
再比如,如果去拍攝魚缸,會發現玻璃缸的位置全是空洞,魚倒是有幾條,飄在虛空里
等等...是不是能拿這玩意兒去釣魚...這個真沒去試...釣魚佬狂喜
然后,換了不知道多少設備,反正透明、反光的東西,特別容易出問題
為什么會這樣
市面上的深度相機,測距原理大概有這么幾種
ToF(飛行時間)
就是發一束光出去,測它飛回來用了多久,算出距離,然后算出來它的 3D 結構,蘋果各種設備的 LiDAR(激光雷達)就是這個原理
結構光
投射一個已知的圖案(比如點陣)到物體上,看圖案怎么變形,反推深度,早期的 Kinect、Face ID 用的都是這個
雙目
靠左右兩個攝像頭拍到的畫面做匹配,通過視差算距離,有的純靠物體表面本身的紋理,比如 ZED 系列
有的會主動往外打紅外紋理來增加匹配點,比如 RealSense D 系列、Orbbec Gemini
![]()
深度感知的幾種方式 共同的弱點
當知道了原理,就很自然的能明白為啥鏡面、透明的物品,測 3D 總是崩:
? 透明的東西,光穿過去了,反射信號弱或者跑偏
? 鏡面的東西,光彈到別處去了
? 純色無紋理的表面,雙目匹配找不到對應點
![]()
結果呢...就是深度圖上出現缺失、噪聲、錯誤的深度值,有時候是一片黑,有時候是亂跳的數據
對人來說無所謂,眼睛看一眼就知道那是玻璃杯,但機器人就不行了,需要精確的三維坐標,不然干不了一點活
一個思路:用「測不準」當訓練素材
以前的做法,就是繞開這個問題
用更貴的傳感器、多傳感器融合、或者干脆限制使用場景
但 AI 時代了,總是可以有點新的思路:既然這些「測不準」的區域是真實存在的,為什么不拿來當學習材料?
這個方法叫 Masked Depth Modeling,簡稱 MDM
大家都是經歷過九年義務教育的優秀人才,熟悉古詩詞鑒賞套路和英語完形填空的解題方法
當你在試卷里看到:「襯衣的價格是___」
根據腦補,你就會知道要填「九磅十五便士」
深度圖也一樣,根據周圍的深度值和彩色圖的內容,可以推斷空的地方大概是多遠
![]()
MDM訓練示意
MDM 訓練流程:把缺失的深度當作「填空題」
BERT 的訓練方式就是這樣,隨機擋住一些詞,讓模型猜
相當于老師出卷子,隨便挑幾個空讓學生填
MDM 也是填空題,但出題方式不一樣
? 深度相機測不準的地方,必考
? 測得不太穩的地方,大概率考
如果這些還湊不夠一張卷子,再從測得準的地方隨機挑一些
最后一張卷子大概有 60% 到 90% 是空
這樣訓練出來的模型,既會做難題,也會做簡單題
深度相機哪里容易測不準,它就重點練哪里
搞點數據
做深度學習,數據是關鍵
(當然,做啥數據都是關鍵)
深度數據比普通圖片難搞得多,需要專門的相機采集
現有的公開數據集還有個問題
大多是精心挑選的「好」數據,深度圖很完整,沒什么缺失
MDM 需要的,偏偏是帶著缺失的數據
越多真實的「爛數據」,對它越有用
![]()
于是,螞蟻聯合奧比中光采集了一批真實數據,然后也制作了很多高質量合成數據
真實數據:210 萬張
用 3D 打印做了一個采集支架,能掛不同型號的深度相機
包括主動雙目的(RealSense、Orbbec)和被動雙目的(ZED)
![]()
采集設備長這樣,一個支架掛多個相機,很樸實
螞蟻的這次數據采集和效果驗證,是和奧比中光合作的,這是國內做 3D 視覺的頭部公司,很多人手上的深度相機可能就是他們的 Gemini 330 系列
![]()
為了收集這些數據,他們派人跑了住宅、辦公室、商場、健身房、博物館、停車場、醫院、機場候機廳,總共二十多種場景
合成數據:100 萬張
在 Blender 里用 3D 模型渲染,關鍵是要模擬「不完美」
你沒看錯,這里主動制造不完美,去復現真實相機的失效模式
這里的做法,就是渲染的時候故意用傳統的立體匹配算法去算深度
加上 700 萬的公開數據集,總共 1000 萬張用于訓練
最終的結果,就是....成功讓 AI 學會了識別這些透明、反光物體
![]()
效果怎么樣
下面這些內容,都來自技術報告
![]()
https://github.com/Robbyant/lingbot-depth/blob/main/tech-report.pdf 深度補全
在幾個標準數據集上測,按難度分了四檔:
從簡單的隨機遮擋,到極端的大面積缺失
LingBot-Depth 在所有檔位上都是最好的
室內數據集上,「極端」檔位的誤差比第二名低 40% 以上
![]()
效果對比 輸入、真值、其他方法、LingBot-Depth 視頻深度
只用圖片訓練,沒有用視頻,但模型在視頻上表現出了時序一致性
拿著相機在玻璃大堂、健身房、水族館隧道這些場景里走
原始深度圖大片缺失,補全后的深度圖則填上了空洞,幀與幀之間還很連貫
![]()
機器人抓取
這是最實際的應用
測試物體:不銹鋼杯、透明玻璃杯、透明收納盒、玩具車
物體
原始深度
補全后
不銹鋼杯
13/20
17/20
透明玻璃杯
12/20
16/20
玩具車
9/20
16/20
透明收納盒
抓不了
10/20
這里得說一下,透明收納盒用原始深度完全抓不了,因為深度圖上它大面積缺失
用 LingBot-Depth 補全后,成功率 50%;
50% 聽起來不高,但之前是 0%
從「完全不行」到「一半能成」,質變
![]()
左邊原始深度(透明物體大片缺失),右邊補全后的深度 最后
本項目的代碼、模型權重現已全部開源,而訓練數據也將于近期開源x
? 代碼:
https://github.com/robbyant/lingbot-depth
? 權重:
https://huggingface.co/robbyant/lingbot-depth
做具身和視覺的團隊,可以直接拿來用,很利好具身了
另外:奧比中光也將基于 LingBot-Depth 推出新一代深度相機
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.