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