態(tài)環(huán)境下的視覺(jué)SLAM與SfM:干擾源分類(lèi)與處理策略)
動(dòng)態(tài)環(huán)境四個(gè)字出現(xiàn)在綜述標(biāo)題里聽(tīng)起來(lái)像一句套話但真正跑過(guò)一版視覺(jué)SLAM的人都知道一個(gè)在走廊里來(lái)回走動(dòng)的人就足以讓原本穩(wěn)定的位姿估計(jì)在十幾秒內(nèi)現(xiàn)出原形。運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)Structure from Motion也一樣街景里出現(xiàn)行人和車(chē)輛時(shí)離線重建出來(lái)的點(diǎn)云會(huì)長(zhǎng)出一片“幽靈點(diǎn)”。Visual SLAM與SfM在靜態(tài)場(chǎng)景下?lián)碛谐墒斓睦碚摽蚣芄こ躺弦灿泻芏嗫蓮?fù)用的工具一旦環(huán)境變動(dòng)態(tài)問(wèn)題就從“怎么解方程”切換成“怎么先知道哪些方程不能信”。這篇綜述把視覺(jué)SLAM、基于運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)的離線重建以及多視圖幾何統(tǒng)一到同一條“動(dòng)態(tài)環(huán)境”主線下。上篇先交代問(wèn)題定義、干擾源分類(lèi)、主流處理策略和評(píng)估邏輯。對(duì)準(zhǔn)備做動(dòng)態(tài)場(chǎng)景實(shí)驗(yàn)的算法開(kāi)發(fā)者來(lái)說(shuō)這一半內(nèi)容基本決定了你后面能不能看懂各種新方法的出發(fā)動(dòng)機(jī)對(duì)剛接觸三維視覺(jué)的新手而言它也是一張很合適的地圖。下面是我讀上篇時(shí)整理的筆記帶著自己的理解講不負(fù)責(zé)逐句轉(zhuǎn)述原文。1. 動(dòng)態(tài)環(huán)境為何是SLAM與SfM的“照妖鏡”1.1 靜態(tài)假設(shè)是兩套算法共同的地基視覺(jué)SLAM通常按時(shí)間順序處理圖像實(shí)時(shí)估計(jì)相機(jī)自身位姿同時(shí)增量維護(hù)一張地圖SfM則拿到一段圖像序列或一組照片離線恢復(fù)相機(jī)軌跡和三維稀疏點(diǎn)云。兩者在實(shí)現(xiàn)細(xì)節(jié)上差得很遠(yuǎn)但共享同一套幾何前提場(chǎng)景主體是靜止的圖像之間觀察到的是同一個(gè)剛體世界在不同視角下的投影相機(jī)的運(yùn)動(dòng)是引起圖像變化的唯一主要因素。這個(gè)“靜態(tài)假設(shè)”平時(shí)不太會(huì)被察覺(jué)因?yàn)榇蠖鄶?shù)公開(kāi)測(cè)試序列都干干凈凈??伤鼛缀跏莾商姿惴ǖ牡鼗L卣鼽c(diǎn)的匹配依賴它本質(zhì)矩陣和基礎(chǔ)矩陣的估計(jì)依賴它光束法平差BA構(gòu)建的誤差項(xiàng)也依賴它。一旦場(chǎng)景里出現(xiàn)真正的運(yùn)動(dòng)物體這些計(jì)算環(huán)節(jié)里就會(huì)混入“按靜物來(lái)處理”的誤匹配。綜述里反復(fù)強(qiáng)調(diào)一個(gè)點(diǎn)動(dòng)態(tài)問(wèn)題不是某個(gè)模塊的缺陷而是數(shù)學(xué)框架自身邊界之外的東西。你可以在特征提取階段換更魯棒的描述子也可以在位姿優(yōu)化階段加更強(qiáng)的核函數(shù)但只要模型假設(shè)仍然是“世界靜止”運(yùn)動(dòng)物體就永遠(yuǎn)是一個(gè)需要單獨(dú)處理的例外。所以動(dòng)態(tài)SLAM的研究重點(diǎn)從來(lái)不是把某個(gè)基礎(chǔ)算法改得更好而是先教會(huì)系統(tǒng)分辨哪些觀測(cè)屬于例外。1.2 動(dòng)態(tài)目標(biāo)在四個(gè)核心環(huán)節(jié)上“拆臺(tái)”讀綜述時(shí)我習(xí)慣把動(dòng)態(tài)干擾拆到具體環(huán)節(jié)里看。上篇雖然沒(méi)有用“四個(gè)環(huán)節(jié)”這種說(shuō)法但對(duì)照原文描述動(dòng)態(tài)目標(biāo)主要沖擊的是特征匹配、魯棒位姿估計(jì)、局部地圖維護(hù)和全局優(yōu)化。特征匹配階段運(yùn)動(dòng)目標(biāo)自身往往紋理豐富。比如一件帶條紋的衣服一輛反光的車(chē)身它們的特征點(diǎn)數(shù)量可能比背景墻還要密集。前后幀里這些點(diǎn)在圖像坐標(biāo)系下確實(shí)可以從一個(gè)位置移動(dòng)到另一個(gè)位置但它們對(duì)應(yīng)的三維世界點(diǎn)其實(shí)并不固定。于是常規(guī)最近鄰匹配會(huì)給出一個(gè)“看起來(lái)正確、實(shí)際物理錯(cuò)誤”的對(duì)應(yīng)關(guān)系。魯棒位姿估計(jì)階段常用RANSAC一類(lèi)方法從匹配點(diǎn)里篩外點(diǎn)。動(dòng)態(tài)目標(biāo)通常只占畫(huà)面一部分少量外點(diǎn)混在內(nèi)點(diǎn)里RANSAC還有可能扛得住但如果運(yùn)動(dòng)物體占據(jù)畫(huà)面比例很高或者紋理極強(qiáng)外點(diǎn)甚至可能形成偽內(nèi)點(diǎn)把正確運(yùn)動(dòng)模型往錯(cuò)誤方向拉。這是很多算法在動(dòng)態(tài)環(huán)境下精度驟降的直接原因。局部地圖維護(hù)和全局優(yōu)化就更隱蔽。動(dòng)態(tài)點(diǎn)的特征一旦被誤插入地圖后續(xù)幀就會(huì)反復(fù)往那個(gè)錯(cuò)誤的三維位置投影形成持續(xù)的誤差源。BA階段為了“讓所有點(diǎn)都舒服”會(huì)不自覺(jué)地調(diào)整相機(jī)位姿去遷就那幾顆動(dòng)態(tài)點(diǎn)最終表現(xiàn)為軌跡緩慢漂移、重投影誤差居高不下。這也是為什么很多純SLAM系統(tǒng)在動(dòng)態(tài)走廊里跑一分鐘沒(méi)事跑十分鐘就開(kāi)始飄。1.3 綜述把“動(dòng)態(tài)”的范圍劃得比我預(yù)想更寬我原本以為動(dòng)態(tài)環(huán)境指的就是行人和汽車(chē)結(jié)果上篇給的定義要寬得多。除了物體本身的位移它還包含物體的形態(tài)變化、遮擋造成的外觀突變以及由物體運(yùn)動(dòng)引起的陰影和反光變化。用一句話來(lái)概括凡是讓同一世界點(diǎn)的圖像投影在時(shí)間上不穩(wěn)定的因素都可以算進(jìn)動(dòng)態(tài)環(huán)境的考察范圍。這個(gè)邊界有一個(gè)很實(shí)際的意義。很多工程文檔里把動(dòng)態(tài)物體檢測(cè)等同于“人車(chē)識(shí)別”可真正影響視覺(jué)定位的往往還包括移動(dòng)的樹(shù)影、玻璃幕墻上的反射、被風(fēng)吹動(dòng)的衣擺以及一段墻壁上忽明忽暗的光照。這些因素不改變?nèi)S幾何位置卻改變光度信息特征是同一個(gè)特征點(diǎn)但描述子可能完全變了。當(dāng)然綜述也畫(huà)了一條紅線相機(jī)自身的運(yùn)動(dòng)不被視為環(huán)境動(dòng)態(tài)因?yàn)槟鞘切枰蠼獾牧坎皇歉蓴_。這個(gè)區(qū)分看似多余實(shí)際上非常必要——如果不先定義清楚后續(xù)分類(lèi)就會(huì)把“場(chǎng)景運(yùn)動(dòng)”和“觀測(cè)運(yùn)動(dòng)”混在一起。動(dòng)態(tài)估計(jì)的第一步不是識(shí)別什么在動(dòng)而是明確什么不可以動(dòng)。2. 干擾源分類(lèi)先把“動(dòng)態(tài)”拆成一張表2.1 按運(yùn)動(dòng)性質(zhì)劃分剛性、非剛性、微動(dòng)上篇對(duì)動(dòng)態(tài)干擾源的分類(lèi)第一條主線是按物體的運(yùn)動(dòng)性質(zhì)拆成剛性、非剛性和微動(dòng)。剛性運(yùn)動(dòng)最好處理。人體軀干、車(chē)輛、箱子它們整體做三維剛體變換依然滿足剛性幾何約束。算法只需要判斷“這個(gè)三維點(diǎn)簇是否經(jīng)歷了同一個(gè)剛體變換”就能大概率把動(dòng)態(tài)區(qū)域篩出來(lái)。這也是早期動(dòng)態(tài)SLAM大多數(shù)從幾何方法入手的原因成本低、不依賴預(yù)訓(xùn)練模型。非剛性運(yùn)動(dòng)就麻煩得多。人的四肢、飄動(dòng)的旗子、彎曲的布料它們的局部仍然剛體但整體不再滿足任何單一三維變換。基礎(chǔ)矩陣或本質(zhì)矩陣只能約束點(diǎn)在極線上的位置不能約束它必須是某個(gè)剛體上的點(diǎn)。于是對(duì)極幾何能給出一個(gè)“弱否定”卻很難給出“強(qiáng)確認(rèn)”。微動(dòng)又是另一個(gè)極端比如樹(shù)葉在風(fēng)中抖動(dòng)、水面波紋、遠(yuǎn)處草地的輕微擺動(dòng)。這些運(yùn)動(dòng)幅度小、像素位移淺在特征點(diǎn)層面很難和噪聲分開(kāi)。它們通常不會(huì)讓SLAM崩潰卻會(huì)讓局部地圖區(qū)域持續(xù)抖動(dòng)最終表現(xiàn)為中等程度的漂移和模糊。綜述把這三類(lèi)分開(kāi)列出是為了提醒讀者沒(méi)有一種單一判定方法能同時(shí)覆蓋它們。2.2 按時(shí)間尺度劃分短暫遮擋、長(zhǎng)期占用、反復(fù)經(jīng)過(guò)第二種分類(lèi)角度是時(shí)間尺度這個(gè)角度在工程里特別重要。短暫遮擋指行人從鏡頭前一閃而過(guò)或者車(chē)輛快速穿越視野。它造成的最大問(wèn)題是特征跟蹤中斷相機(jī)瞬間失去一小片區(qū)域的匹配點(diǎn)。對(duì)視覺(jué)SLAM來(lái)說(shuō)短暫遮擋最危險(xiǎn)的時(shí)候正是平移或旋轉(zhuǎn)劇烈的時(shí)候系統(tǒng)失去定位錨點(diǎn)容易產(chǎn)生位姿跳變。長(zhǎng)期占用更棘手比如一輛停在路邊的車(chē)或者靠在墻邊不動(dòng)的人。它們?cè)趲缀紊鲜恰办o止”的常規(guī)幾何方法會(huì)判定為靜態(tài)點(diǎn)并插入地圖。等到物體啟動(dòng)開(kāi)走地圖里就會(huì)出現(xiàn)一塊殘留的“幻影結(jié)構(gòu)”不僅污染建圖結(jié)果還會(huì)在后續(xù)定位時(shí)誘導(dǎo)位姿估計(jì)。上篇特別強(qiáng)調(diào)這類(lèi)物體屬于“潛在動(dòng)態(tài)”而不是“當(dāng)前動(dòng)態(tài)”需要語(yǔ)義先驗(yàn)來(lái)提前識(shí)別。反復(fù)經(jīng)過(guò)則體現(xiàn)為同一位置不斷出現(xiàn)、消失的動(dòng)態(tài)占用比如商場(chǎng)出入口、地鐵閘機(jī)旁邊。它既不形成穩(wěn)定的地圖點(diǎn)也不制造明顯的幻影卻會(huì)不斷打斷局部區(qū)域的匹配連續(xù)性。長(zhǎng)期跑下來(lái)系統(tǒng)在這一帶的關(guān)鍵幀質(zhì)量會(huì)明顯下降。三種時(shí)間尺度對(duì)應(yīng)的問(wèn)題不一樣這也為后面章節(jié)選擇“幾何先驗(yàn)還是語(yǔ)義先驗(yàn)”提供了依據(jù)。2.3 光照和反射動(dòng)態(tài)環(huán)境里最常見(jiàn)的“隱形干擾”讀到這里我才意識(shí)到之前自己調(diào)試建圖系統(tǒng)踩過(guò)的大坑其實(shí)被這張分類(lèi)表覆蓋得很清楚。某個(gè)用玻璃幕墻建筑的場(chǎng)景白天和下午各跑一遍重建出來(lái)的墻面點(diǎn)云完全不同不是幾何錯(cuò)了是描述子在反射區(qū)域的匹配對(duì)不上。這類(lèi)現(xiàn)象在綜述里被歸為“光度動(dòng)態(tài)”并在上篇里被單獨(dú)列出來(lái)提醒。陰影是最典型的例子。一棵樹(shù)在陽(yáng)光下移動(dòng)陰影地面本身的幾何結(jié)構(gòu)沒(méi)動(dòng)但在圖像上陰影邊界處的像素灰度發(fā)生劇烈跳變。特征點(diǎn)提取器可能在陰影邊界附近找到大量關(guān)鍵點(diǎn)而前后幀這些點(diǎn)的描述子差異巨大。匹配失敗還是輕的更麻煩的是它可能把位姿估計(jì)往錯(cuò)誤方向拽。反光和透明材質(zhì)同樣麻煩。水面波紋、汽車(chē)漆面、玻璃窗戶都會(huì)讓原本應(yīng)該一致的光度模型失真。綜述指出這類(lèi)“光度動(dòng)態(tài)”通常不能用幾何約束來(lái)解決因?yàn)橥队拔恢玫膸缀侮P(guān)系沒(méi)有錯(cuò)只是觀測(cè)量不可信。它們需要額外的先驗(yàn)比如已知類(lèi)別屬性、多曝光融合、或者把特征提取器設(shè)計(jì)得對(duì)灰度變化更鈍感。2.4 一張表把干擾源收攏起來(lái)我讀綜述時(shí)做了一張最小化的匯總表方便對(duì)照后續(xù)方法分別解決哪個(gè)問(wèn)題。這張表不是原文原樣的章節(jié)結(jié)構(gòu)而是我把上篇內(nèi)容按自己的理解整理出來(lái)的。干擾類(lèi)型典型樣例主要破壞環(huán)節(jié)幾何方法效果語(yǔ)義方法效果剛性運(yùn)動(dòng)行人、車(chē)輛、推車(chē)誤匹配、地圖幻影較好較好非剛性形變四肢擺動(dòng)、布料、旗幟匹配、位姿優(yōu)化較弱中等微動(dòng)樹(shù)葉、水面、草叢局部地圖抖動(dòng)幾乎無(wú)效無(wú)效長(zhǎng)期占用路邊??寇?chē)輛、靜止人地圖幻影、定位漂移無(wú)效好光度動(dòng)態(tài)陰影、反光、光照突變特征描述、匹配無(wú)效部分有效這張表直接決定了你選方法時(shí)的優(yōu)先級(jí)。以后看到某個(gè)算法聲稱“在動(dòng)態(tài)場(chǎng)景下效果好”我會(huì)先去查它解決了表格里哪一行而不是直接去看精度曲線。3. 上篇方法主線如何給特征點(diǎn)打上“動(dòng)態(tài)標(biāo)簽”3.1 幾何路徑對(duì)極幾何和多視圖一致性上篇梳理的方法最早的一支以幾何約束為主核心思路是“用靜態(tài)框架反推誰(shuí)不符合靜態(tài)框架”。輸入是對(duì)應(yīng)點(diǎn)證據(jù)輸出是動(dòng)態(tài)點(diǎn)的概率或硬標(biāo)簽整個(gè)流程不依賴語(yǔ)義類(lèi)別信息?;A(chǔ)矩陣和本質(zhì)矩陣是這套路線的核心工具。理想靜態(tài)場(chǎng)景下所有正確匹配都嚴(yán)格落在極線上。一旦某個(gè)點(diǎn)對(duì)應(yīng)一個(gè)動(dòng)態(tài)物體它就會(huì)明顯偏離極線約束在RANSAC循環(huán)里被當(dāng)成外點(diǎn)。單目雙幀幾何約束就能提供不錯(cuò)的初篩多視圖一致性則更穩(wěn)因?yàn)橥粋€(gè)動(dòng)態(tài)點(diǎn)會(huì)在多幀之間反復(fù)呈現(xiàn)不一致置信度可以累計(jì)。幾何方法的優(yōu)點(diǎn)是泛化性好。你不需要知道“那個(gè)東西是人還是車(chē)”也能判斷它有問(wèn)題。它的缺點(diǎn)同樣明顯。對(duì)微小運(yùn)動(dòng)不敏感對(duì)非剛性形變約束偏弱對(duì)“潛在動(dòng)態(tài)”完全無(wú)能為力。一個(gè)靜止站在路邊的人幾何方法一定會(huì)把它的特征納入靜態(tài)地圖直到它起身才后知后覺(jué)地開(kāi)始處理。綜述說(shuō)得很直接幾何是必要手段但不是充分手段。3.2 語(yǔ)義路徑把“會(huì)動(dòng)的東西”提前列進(jìn)黑名單語(yǔ)義先驗(yàn)是動(dòng)態(tài)SLAM在深度學(xué)習(xí)流行后的大分支。目標(biāo)檢測(cè)或?qū)嵗指罹W(wǎng)絡(luò)在跟蹤線程之外每幀跑一次把行人、車(chē)輛、騎車(chē)人等類(lèi)別對(duì)應(yīng)的像素區(qū)域找出來(lái)直接禁止這些區(qū)域的特征點(diǎn)進(jìn)入位姿估計(jì)。有些方法更進(jìn)一步把這些區(qū)域的特征點(diǎn)標(biāo)記為“動(dòng)態(tài)候選”在后續(xù)幾何校驗(yàn)里再確認(rèn)一遍。這種路徑最大的好處是能處理長(zhǎng)期占用。車(chē)停在路邊不動(dòng)幾何方法看不出問(wèn)題語(yǔ)義方法卻能提前把它認(rèn)出是“可運(yùn)動(dòng)的物體”主動(dòng)從地圖構(gòu)建里排除。人在門(mén)口站著不動(dòng)也一樣系統(tǒng)知道它不是一個(gè)“固定的雕塑”遲早會(huì)移動(dòng)于是干脆不把它計(jì)入地圖。但語(yǔ)義路徑也有自己的坑。分類(lèi)器永遠(yuǎn)長(zhǎng)著一雙“它認(rèn)識(shí)的眼睛”只識(shí)別訓(xùn)練集里見(jiàn)過(guò)的類(lèi)別。公園里的滑板少年、商場(chǎng)里的清潔機(jī)器人、工地上的吊臂凡是沒(méi)進(jìn)過(guò)訓(xùn)練集的新物體都會(huì)被當(dāng)成靜態(tài)背景。真實(shí)動(dòng)態(tài)環(huán)境永遠(yuǎn)有新類(lèi)別上線這是我在工程里對(duì)語(yǔ)義方法保持謹(jǐn)慎的根本原因。上篇也承認(rèn)純語(yǔ)義方案的召回率上限受模型類(lèi)別覆蓋度限制。3.3 時(shí)序路徑讓系統(tǒng)從“歷史的動(dòng)靜里”學(xué)習(xí)時(shí)序先驗(yàn)走的是另一條路通過(guò)連續(xù)多幀的變化模式來(lái)識(shí)別動(dòng)態(tài)區(qū)域。最簡(jiǎn)單的做法是看光流和背景模型是否一致。靜止背景的光流場(chǎng)會(huì)隨著相機(jī)運(yùn)動(dòng)呈現(xiàn)整體平滑的模式而動(dòng)態(tài)物體上會(huì)疊加快速且獨(dú)立的光流分量。把這種“不一致”提取出來(lái)就給動(dòng)態(tài)區(qū)域打了標(biāo)簽。這類(lèi)方法對(duì)完全未知的動(dòng)態(tài)物體有效因?yàn)樗灰蕾囶?lèi)別表。只要物體在畫(huà)面里產(chǎn)生獨(dú)立于背景的運(yùn)動(dòng)時(shí)序模型就能捕捉。它也很適合在線SLAM場(chǎng)景因?yàn)楦櫨€程本來(lái)就要計(jì)算幀間特征匹配額外統(tǒng)計(jì)光流一致性成本可控。時(shí)序方法的短板是響應(yīng)速度。它必須觀察到連續(xù)若干幀后才敢判定“這里有動(dòng)態(tài)”在物體第一次進(jìn)入畫(huà)面的短時(shí)間內(nèi)系統(tǒng)仍然會(huì)把這些點(diǎn)視為正常點(diǎn)。遇到快速穿過(guò)鏡頭的物體等標(biāo)簽打上時(shí)它已經(jīng)給位姿估計(jì)貢獻(xiàn)了至少一兩幀的誤差。所以時(shí)序先驗(yàn)適合做“確認(rèn)”不太適合做“預(yù)測(cè)”。很多綜述里提到的混合做法其實(shí)就是讓語(yǔ)義負(fù)責(zé)預(yù)測(cè)、時(shí)序負(fù)責(zé)確認(rèn)、幾何負(fù)責(zé)兜底。3.4 三種先驗(yàn)怎么配合才是上篇真正想講的事把三種路徑分開(kāi)看都不復(fù)雜難的是組合。動(dòng)態(tài)SLAM里常見(jiàn)的一條流水線是先讓語(yǔ)義分割網(wǎng)絡(luò)給出“疑似動(dòng)態(tài)區(qū)域”再用極線約束檢查這些區(qū)域的特征點(diǎn)在幾何上是不是真的違背了靜態(tài)模型最后用幀間時(shí)序信息做平滑防止單幀誤檢造成標(biāo)簽抖動(dòng)。這個(gè)順序背后有一套邏輯。語(yǔ)義先驗(yàn)回答“它可能動(dòng)”因?yàn)槿?、?chē)天然具備運(yùn)動(dòng)能力。幾何先驗(yàn)回答“它正在動(dòng)”因?yàn)橐坏┻\(yùn)動(dòng)確實(shí)發(fā)生它必然違反多視圖幾何一致性。時(shí)序先驗(yàn)回答“它一直在動(dòng)”用來(lái)過(guò)濾單幀噪聲、填補(bǔ)幾何方法暴露的盲區(qū)。三個(gè)答案重疊得越多動(dòng)態(tài)標(biāo)簽的置信度就越高。這套組合邏輯在綜述里不算新但讓我印象深刻的是它對(duì)“失敗模式”的描述。如果只用語(yǔ)義會(huì)把靜止的車(chē)輛排除掉地圖稀疏對(duì)定位精度不利。如果只用幾何會(huì)漏掉潛伏的動(dòng)態(tài)物體。如果只用時(shí)序會(huì)產(chǎn)生檢測(cè)延遲。各自的失敗模式幾乎互補(bǔ)所以上篇總結(jié)出的方向不是挑選某一種而是設(shè)計(jì)一套“誰(shuí)先發(fā)表意見(jiàn)、誰(shuí)最后拍板”的流程。4. 動(dòng)態(tài)場(chǎng)景下的評(píng)測(cè)邏輯不能只看軌跡誤差4.1 動(dòng)態(tài)序列評(píng)測(cè)ATE高不代表動(dòng)態(tài)處理得好看到這里有一個(gè)容易踩的坑評(píng)測(cè)SLAM在動(dòng)態(tài)場(chǎng)景下的表現(xiàn)不能只報(bào)絕對(duì)軌跡誤差A(yù)TE。ATR衡量的是相機(jī)位姿和真值軌跡的偏差但它不區(qū)分誤差來(lái)源于動(dòng)態(tài)干擾還是來(lái)源于普通累積漂移。一個(gè)系統(tǒng)可能因?yàn)闆](méi)有把動(dòng)態(tài)物體剔除干凈而恰好產(chǎn)生了“抵消性誤差”ATE數(shù)值反而好看。更麻煩的是動(dòng)態(tài)場(chǎng)景本身的真值就很有講究。真值軌跡通常由一個(gè)外部定位系統(tǒng)提供比如運(yùn)動(dòng)捕捉設(shè)備。但這個(gè)真值只描述相機(jī)運(yùn)動(dòng)不描述場(chǎng)景里行人的位置。于是同一個(gè)序列、同一個(gè)位姿真值有人在評(píng)測(cè)時(shí)把動(dòng)態(tài)物體全部手動(dòng)標(biāo)注出來(lái)有人在評(píng)測(cè)時(shí)完全不管。兩套標(biāo)準(zhǔn)跑出來(lái)的指標(biāo)根本沒(méi)有可比性。綜述在上篇建議評(píng)測(cè)至少應(yīng)該分兩層看底層看追蹤連續(xù)性也就是有沒(méi)有明顯跳變和跟蹤丟失上層看地圖質(zhì)量包括動(dòng)態(tài)區(qū)域有沒(méi)有被錯(cuò)誤插入靜態(tài)地圖、靜態(tài)背景有沒(méi)有被誤刪。只報(bào)一個(gè)ATE數(shù)字等于把所有問(wèn)題都?jí)旱揭粭l曲線里信息量太低了。4.2 SLAM與SfM對(duì)動(dòng)態(tài)物體的“期望”并不一致視覺(jué)SLAM和SfM雖然共享很多幾何原理但它們的輸出目標(biāo)不同導(dǎo)致動(dòng)態(tài)處理的評(píng)價(jià)標(biāo)準(zhǔn)也不一樣。SLAM在線運(yùn)行每一幀都要給出相機(jī)位姿它最關(guān)心的是動(dòng)態(tài)干擾會(huì)不會(huì)造成位姿跳變和地圖污染。所以動(dòng)態(tài)物體能不能被“臨時(shí)屏蔽”比它能不能被“準(zhǔn)確重建”更重要。SfM離線運(yùn)行目標(biāo)是重建整個(gè)場(chǎng)景的三維結(jié)構(gòu)。它更關(guān)心動(dòng)態(tài)物體是否產(chǎn)生了錯(cuò)誤的三角化點(diǎn)。對(duì)街景重建項(xiàng)目來(lái)說(shuō)行人和車(chē)輛是純粹的噪聲重建系統(tǒng)希望把它們徹底濾掉甚至連痕跡都不要留。但在另外一些應(yīng)用里比如影視制作的動(dòng)作捕捉動(dòng)態(tài)物體的結(jié)構(gòu)重建本身就是目標(biāo)。同一條幾何流程前者把動(dòng)態(tài)當(dāng)垃圾扔掉后者把動(dòng)態(tài)當(dāng)寶貝取出評(píng)測(cè)標(biāo)準(zhǔn)自然不能共用。這也解釋了為什么綜述上篇會(huì)反復(fù)強(qiáng)調(diào)“預(yù)留分類(lèi)任務(wù)”。用同一套SLAM系統(tǒng)去處理動(dòng)態(tài)環(huán)境你先得定義好自己的產(chǎn)品要“剔除動(dòng)態(tài)”還是“重建動(dòng)態(tài)”方法路線會(huì)完全不同。我見(jiàn)過(guò)不少項(xiàng)目在方案討論階段爭(zhēng)論用哪種檢測(cè)網(wǎng)絡(luò)實(shí)際上應(yīng)該先爭(zhēng)論產(chǎn)品到底要哪個(gè)結(jié)果。4.3 公開(kāi)數(shù)據(jù)集能說(shuō)明問(wèn)題但不能說(shuō)明全部問(wèn)題動(dòng)態(tài)SLAM領(lǐng)域有幾種常見(jiàn)的數(shù)據(jù)集形態(tài)室內(nèi)運(yùn)動(dòng)捕捉序列包含大量行人活動(dòng)的視覺(jué)慣性序列以及自動(dòng)駕駛場(chǎng)景的影像數(shù)據(jù)集。它們各有優(yōu)勢(shì)也各有軟肋。室內(nèi)場(chǎng)景真值精確、動(dòng)態(tài)目標(biāo)可控但環(huán)境外觀單一行人數(shù)量最多也就十幾個(gè)無(wú)法覆蓋長(zhǎng)期占用和光度動(dòng)態(tài)。自動(dòng)駕駛序列場(chǎng)景豐富但真值計(jì)算成本極高還會(huì)引入傳感器坐標(biāo)系對(duì)齊誤差。最重要的這些數(shù)據(jù)集都默認(rèn)有固定語(yǔ)義類(lèi)別車(chē)輛、行人、騎行者。如果一個(gè)算法的動(dòng)態(tài)處理能力完全依賴語(yǔ)義分割的質(zhì)量換個(gè)沒(méi)有“滑板車(chē)”類(lèi)別的環(huán)境效果馬上跳水。綜述上篇提到的一個(gè)通用建議是把算法拿到?jīng)]有訓(xùn)練分布的重疊的序列上做壓力測(cè)試。動(dòng)態(tài)區(qū)域占比從5%逐步增加到40%看系統(tǒng)在哪個(gè)區(qū)間開(kāi)始失效。這個(gè)壓力測(cè)試思路很適合工程團(tuán)隊(duì)復(fù)制因?yàn)樗苤苯赢?huà)出一條“動(dòng)態(tài)魯棒性曲線”比單個(gè)數(shù)據(jù)集上的百分之零點(diǎn)幾的精度差異有說(shuō)服力得多。4.4 我發(fā)現(xiàn)的最關(guān)鍵“評(píng)測(cè)變量”動(dòng)態(tài)比和動(dòng)態(tài)速度如果讓我從評(píng)測(cè)邏輯里抽出兩個(gè)最關(guān)鍵的變量我會(huì)選動(dòng)態(tài)比和動(dòng)態(tài)速度。動(dòng)態(tài)比是指動(dòng)態(tài)區(qū)域占畫(huà)面面積的比例。比例很低的場(chǎng)景魯棒估計(jì)本身就能處理不需要?jiǎng)討B(tài)模塊比例超過(guò)一定值后內(nèi)點(diǎn)數(shù)量不夠即使完美剔除動(dòng)態(tài)也會(huì)造成退化。動(dòng)態(tài)速度則是像素層面的運(yùn)動(dòng)速度。慢速目標(biāo)容易被時(shí)序方法忽略快速目標(biāo)容易形成大位移導(dǎo)致光流失敗。這兩種變量在真實(shí)環(huán)境里彼此獨(dú)立一輛車(chē)慢慢駛過(guò)路口可以占大面積一支筆快速揮動(dòng)可以占小面積。上篇雖然沒(méi)有給出某個(gè)統(tǒng)一公式但它對(duì)評(píng)測(cè)條件的強(qiáng)調(diào)已經(jīng)暗示理想場(chǎng)景應(yīng)該覆蓋“高/低比例”和“高/低速度”的笛卡爾積。5. 讀過(guò)上篇之后我更傾向記住的五條判斷5.1 靜態(tài)點(diǎn)越充足動(dòng)態(tài)處理越要保守很多人誤以為動(dòng)態(tài)處理的責(zé)任是把所有運(yùn)動(dòng)物體都標(biāo)出來(lái)其實(shí)不是。關(guān)鍵目標(biāo)是保證靜態(tài)點(diǎn)數(shù)量足夠且干凈位姿估計(jì)才能穩(wěn)定。如果某個(gè)疑似動(dòng)態(tài)區(qū)域只占畫(huà)面很小一部分即使把它漏掉RANSAC也能用大量靜態(tài)內(nèi)點(diǎn)把外點(diǎn)壓住。這時(shí)候強(qiáng)行開(kāi)啟動(dòng)態(tài)檢測(cè)反而可能把靜態(tài)點(diǎn)誤刪降低內(nèi)點(diǎn)數(shù)量。我自己的建議是動(dòng)態(tài)模塊的輸出不要做成二值標(biāo)簽而是做成“信任程度”。低于閾值的位置不參與位姿估計(jì)不代表它們不能保留在地圖維護(hù)的候選區(qū)里。這樣即使標(biāo)簽出了錯(cuò)系統(tǒng)損失的也只是一部分信息而不是直接喪失一片區(qū)域的跟蹤能力。5.2 語(yǔ)義模型的“未知類(lèi)別”問(wèn)題比精度更致命語(yǔ)義路徑表現(xiàn)出的最終性能往往不取決于模型在公開(kāi)數(shù)據(jù)集上的mAP而取決于它能不能對(duì)未知物體保持“不知道自己不知道”的謙遜。在工程現(xiàn)場(chǎng)新動(dòng)態(tài)物體是常態(tài)一只飛過(guò)的鳥(niǎo)、一個(gè)傾倒的紙箱、一臺(tái)自動(dòng)導(dǎo)引車(chē)都可能不屬于任何預(yù)設(shè)類(lèi)別。追求更高的分割精度邊際收益有限真正有用的設(shè)計(jì)是讓語(yǔ)義模塊輸出“未知?jiǎng)討B(tài)候選”的置信度交給幾何時(shí)序模塊去確認(rèn)。5.3 幾何校驗(yàn)永遠(yuǎn)不要省哪怕你有最貴重的語(yǔ)義模型因?yàn)檎Z(yǔ)義模型再?gòu)?qiáng)它也會(huì)遇到訓(xùn)練分布之外的區(qū)域。幾何校驗(yàn)是唯一不依賴類(lèi)別的“物理安檢”你不需要知道物體是什么只需要確認(rèn)它是否符合剛體世界的基本規(guī)則。把語(yǔ)義檢測(cè)框里的特征點(diǎn)全部跳過(guò)而不做幾何確認(rèn)等于把系統(tǒng)命運(yùn)完全交給訓(xùn)練集的覆蓋率。做過(guò)一次真實(shí)實(shí)驗(yàn)就會(huì)明白訓(xùn)練集之外的動(dòng)態(tài)物體往往最容易讓純語(yǔ)義方案現(xiàn)出原形。5.4 時(shí)序平滑模塊不是錦上添花是必須的特征點(diǎn)動(dòng)態(tài)標(biāo)簽如果單靠單幀判定一定會(huì)在連續(xù)幀間來(lái)回抖動(dòng)。同一面墻這一幀被誤判為動(dòng)態(tài)下一幀恢復(fù)靜態(tài)就會(huì)導(dǎo)致地圖點(diǎn)被反復(fù)插入、刪除對(duì)BA和地圖維護(hù)的影響非常大。加上時(shí)序平滑后標(biāo)簽更新會(huì)考慮歷史狀態(tài)誤檢的雜波被抑制系統(tǒng)整體穩(wěn)定度顯著提升。代價(jià)只是少數(shù)幀的理解延遲在大部分場(chǎng)景里可以接受。5.5 面對(duì)真實(shí)項(xiàng)目先測(cè)量“動(dòng)態(tài)場(chǎng)景分布”再選方案最后一個(gè)判斷偏工程。無(wú)論是做掃地機(jī)器人、園區(qū)巡檢還是AR定位第一步都不是選模型而是先測(cè)量產(chǎn)品看到的到底屬于哪種動(dòng)態(tài)干擾。是人物反復(fù)穿行還是車(chē)輛長(zhǎng)期??窟€是陽(yáng)光造成的陰影遷移對(duì)照上篇那張干擾源分類(lèi)表每種分布對(duì)應(yīng)的最優(yōu)方法幾乎都不一樣。先花一周統(tǒng)計(jì)真實(shí)數(shù)據(jù)里的動(dòng)態(tài)占比、動(dòng)態(tài)速度和動(dòng)態(tài)類(lèi)別比試十個(gè)開(kāi)源方案都管用。如果把上篇濃縮成一個(gè)動(dòng)作我會(huì)把它想象成給每一幀畫(huà)面建立一張“哪些位置暫時(shí)不值得相信”的信任地圖。靜態(tài)與動(dòng)態(tài)的分離從來(lái)不是把所有運(yùn)動(dòng)物體扔出畫(huà)面而是讓系統(tǒng)在每一個(gè)時(shí)刻都知道該把信任放在哪里。對(duì)我個(gè)人來(lái)說(shuō)讀完上篇收獲最大的不是多記了幾種方法名而是學(xué)會(huì)了先看問(wèn)題分類(lèi)再?zèng)Q定用什么工具。這篇筆記的下半部分再接著整理語(yǔ)義幾何融合、稠密重建和實(shí)時(shí)性之間的取舍。