Multi-path Learning for Object Pose Estimation Across Domains論文
論文鏈接:arxiv
解決什麼問題
無監督的6Dpose估計,即使沒有沒見過的物體也能處理
本文創新點\貢獻
- 作者提出了一個Multi-path的編碼器結構,包含一個編碼器和多個解碼器,這個編碼器可以學習公共特徵,讓所有的實例共享一個latent空間,這個編碼器以view敏感的方式編碼那些在訓練期間沒見過的對象視圖,然後解碼器是針對每個不同實例進行處理的
- 這種方法是無監督的,不需要標註數據,只需要用3D model來合成數據訓練就行了,可以通過排除擾動的方式來彌補真實數據和合成數據之間的差異
前人方法
基於大量數據且特定實例,不靈活
本文IDEA來源
AAE [ Implicit 3d orientation learning for 6d object detection from rgb images ] 2018 ,提取實例級的物體表達特徵
方法
方法概述
分成兩階段,初始化和微調:
- 初始化:假定現在有A類物體的model,用A類的model來訓練MP編碼器並且生成codebook,codebook存放target姿態的圖像編碼,MP編碼器的輸出可以稱之爲“code”,將code和codebook中的target視圖作比較,取相似度的cosine分數最高的target視圖爲結果,該物體的初步pose就取自這個target視圖。
- 微調:交替優化,因爲MP編碼器有位移不變性,所以優化旋轉起手
原理和優點:
- MP編碼器獲得的是物體視圖的方向的category不可知但外形依賴的描述符
- 在位置物體上的迭代微調,比DeepIM效果好
- 迭代微調還能消除離散誤差,暗含一個latent code,能映射所有的SO(3)
Multi-Path Encoder-Decoder
功能:
解碼器都是輔助編碼器的, 爲了能讓編碼器學的好,之後就可以捨棄解碼器,只留下編碼器,這個方法能學習到交叉表達、共享特徵
編碼器算是個基礎backbone,每種類別的東西都能學一點
結構:
由一個編碼器,還有n個解碼器組成,其中,n是不同的物體形狀數量
z就是解碼器和數據增強合二爲一
輸入和輸出:
輸入也做了增強,異類batch包含多種物體;輸出的編碼是分開的,每個解碼器只接受對應物體shape的code。
loss:
表示選擇對應shape 的解碼器。
j是batch中物體index, k是所有解碼類別的index,每次應該都是
Principal Component Analysis of Encodings
做了兩個實驗:
- car的80個CAD模型實例
- 8個不同的類別的10個實例
經過訓練,產生72個視點,沿着方位角、仰角和平面內旋轉的完整旋轉
從這些角度記錄不同的物體,然後喂入編碼器
?咋回事?經過訓練才這麼做,那麼訓練的是什麼?是所有的類別(不包括要用到的)生成一遍特徵嗎?
還是codebook?
從全部物體的編碼空間中,計算前三個重要元素,並且將所有的編碼投射到這個方向上,這是一種插值,如下圖:
PCA?找到關鍵的方向,然後在關鍵的方向突出,從一個超球面構造新的shape,這也是插值嗎?
話說這個分pca是怎麼做到的,這三種東西看不動啊
表格說明:
最上面一行表示訓練集的car實例的編碼,只有這一樣的實例被用於訓練,其他行都是訓練集中不包含的,只是用來訓練MP編碼器來學習一些基本特徵
第二個要測量八個物體,但是隻用了沙發和廁所來訓練,而且用來訓練的還是不包含在測試集中的shape,應該是這個意思
結果:
可以看到,編碼器在每個旋轉軸都很平滑,即使是評估沒訓練過的物體上。
從圖中可以看到,當從同一點開始,在不同的子流形中結束的時候,能捕獲編碼對象的形狀和它們的對稱性。
沒看的出來啊
例如,car實例產生兩個旋轉的閉合軌跡,因爲汽車的形狀在相反的視點上看起來很相似
閉合?如果轉到另一邊還是相似,就是閉合?這東西顯示的是外觀特徵?
還可以看出來在每個模型中,car的訓練和測試都被編碼的比較相似,說明了編碼器和codebook的性質
能較好的表示的性質?
其他的沒見過的也隔開了,因此一個有意義的pose描述符能被提取,而不需要重新訓練編碼器,只要從3D模型創建一個codebook
創建codebook是用3D模型創建好多個角度的視圖,然後網絡就能根據視圖匹配,來確定pose?是這樣嗎?
對
所以這是一個匹配器?
有點像
除了偏移量,模型都學習相當相似的編碼器,即使第一個模型沒有學習過沙發和廁所。
這說明提取了低級的特徵能夠貫穿多種外觀和類別。
對於偏移量具有不變性,偏移量是通過別的方法計算的
Iterative Refinement of Latent Codes
MP編碼器對位移具有不變性,所以先優化旋轉
目的:
讓結果更準確,同時通過增加擾動來讓網絡具有一定的魯棒性
輸入:
初始化pose()和target視角,初始化pose是利用編碼器輸出的code和codebook匹配得來的。
利用target視角和編碼器來生成,這個將用於和渲染的輸出比較,來得出一個分數,分數最多即選中
執行:
共有三層循環,最內層是生成多種擾動,越往後生成的越少;第二層是根據擾動得到,共循環四次;最外層是根據邊緣匹配來調整,共循環三次。
- 最內層:對輸入的做一定的擾動,且執行多次,生成很多的擾動,根據擾動後的R和輸入的來渲染3D model,把新渲染的圖片輸入到編碼器中得到輸出。
- 中間層:之後,將和作比較,在所有的擾動中選出分數最大的,這個將作爲新的
- 最外層:根據目前得到的pose來渲染3D model生成,然後對坐多尺度邊緣匹配,可以得到,將其加到上得到新的
從SO3採樣的優勢:
- SO3的維度更低
- 只搜索描述有效方向的 latent manifold(隱流形?)
迭代微調就是用的SO3
Object Pose Estimation Across Domains
單個mp編碼器可以利用批處理推理來實現與對象數量幾乎保持一致的運行時間
訓練的編碼器網絡一直是固定的, 但是可用的方法取決於所考慮的測試對象的特徵和可用信息:
- 第一列:全部條件齊全,沒啥說的
- 第二列:如果test 3D model可獲得的話,能夠很好的創造一個新的codebook並且從中估計pose。
有了模型可以直接合成數據來訓練,也有codebook,算是比較好的情況 - 第三列:如果沒有3D模型,但是有相同category的訓練的實例的codebook的話,可以直接使用這些codebook來生成pose
但是,沒有可供對齊的3D model的話,提取的表示更依賴於object的形狀,而不是它的class,因爲畢竟沒有可參考的codebook
refien結果可以來自稀疏codebook,或者只做局部相關pose估計而不適用任何codebook
注意,這裏說是沒有codebook的話,就只有局部相關了,應該說說沒有3D模型參考就無法得出pose,其實也是合理的,pose也是人爲定義的,如果沒有3D model,也不知道一開始的方向是如何的
訓練
數據準備:
爲了讓預測有魯棒性,輸入都隨即位移和縮放了,背景隨機生成,遮擋、光亮、顏色都做了增強。
在T-LESS上的處理合成數據,8w個Pascal VOC背景圖片,4w個黑背景圖片,4w個隨機紋理背景
爲了完成重建任務,學到的特徵需要對光線和顏色的增強以及輸入的轉換保持魯棒,增加的那些擾動就是爲了這個目的
網絡結構:
MaskRCNN的結構加ResNet50
實驗結果
MOdelNet40的度量:
絕對角度誤差還有ADD,還有2D投影度量,設置5像素爲閾值
T-LESS:
使用VSD度量,可以處理對稱和對物體,是二義性不變性的pose誤差度量,可以測量可視的物體表面
多物體是指重疊倒一起的時候如何度量嗎
On evaluation of 6D object pose estimation. In European Conference on Computer Vision
召回率:, 物體可視大於,tolerance
總結
第一次接觸到這種latent和codebook,看起來蠻有趣的,應該是用匹配來代替迴歸,但是每次都要從codebook中查找,這樣或許挺影響速度的。
但是這種方法不需要每次都訓練模型就感覺很nice,一對多的特性很值得學習,本質上就是提取最一般最魯棒的特徵,要想想還有沒有別的方法來做同樣的事情
或許還可以在特徵的提取上加一些約束loss