這是一個很有趣的方法,以我的觀點來看是跟 3D 點雲的 Multi-View 方法的延伸。

主要是把 3D 點雲特徵用投影方法投回 2D 影像,
利用 2D/3D 的融合特徵解決物件遮蔽的偵測問題。


本篇數學推導較為艱澀,筆者在文中會推導重要部份。




本文架構為四大 Loss值的組合。

L_Keypoints:




首先會先算 Keypoint Heatmaps,

從一台車裡面算出 12 個點對標資料集的 Keypoint GT。
(論文沒有細講,但個人從後面 KNN 猜測這裡做 L2  Norm。)




L_Edge:








在講 L_Edge 之前,我們要先定義 V 與 E:

大V 是由 k 個頂點組成的關鍵點集合,
而 V^l 代表 GT (真實的存在的關鍵點)、V^g 代表模型預測出來的關鍵點。

E_ij 代表點i 與 點j 組成的邊,若點i && 點j 皆屬於關鍵點,則 E_ij 為 1、其餘為 0。








把 V^g 還有 E_ij 拿去算三層的全連接層(FC)之後就會得到 E^l_ij。
這邊要特別注意 V^l 代表 GT,但是 E^l_ij 代表模型算出來的邊。

L_Edge 定義為:

(-1)* sigma * E_ij * log(E^l_ij)

L_Edge 的物理意義就是希望算出來的 E^l_ij 趨近於真實存在的 E_ij,
這邊應該還蠻 trivial 的。




L_Trifocal:




這個 Loss 就複雜很多,我們要談到多視角融合的原理。

首先我們要定義一個雙視圖:


雙視圖解釋對極點


圖中 C 代表第一攝影機,C’ 代表第二攝影機。
第一視圖即是第一攝影機所看到的平面,第二視圖亦然。

e 點即是第二攝影機在第一視圖上所代表的點,
所以 e 點就是第二攝影機(C’ )對於第一攝影機(C)的對極點。

要算出攝影機對極點需要攝影機內置矩陣 K,
這個 K 矩陣牽涉基本矩陣 F,因為與本文較無關,筆者在此按下不表。

有興趣了解的朋友,筆者推薦:

“Multiple View Geometry in Computer Vision, 2/e, Richard Hartley” 一書

中興的學弟可以修資工所吳俊霖老師開的影像處理,
當年寫第一份作業就有寫到這部份。




假設有三個攝影機照同一個 X點的三視圖



現在我們有了攝影機矩陣 P、P’、P”:

P = [ I  | 0 ]
P’ = [ A | a_4 ]
P” = [ B | b_4 ]

a_i, b_i 代表攝影機矩陣的第 i 個 column。
(如參照中國資料,那邊會說 column = 列,與臺灣直行橫列剛好相反,須注意。)


以 P 當作觀察的攝影機來說,
a_4, b_4 在此代表 P’, P” 攝影機在 P攝影機平面的對極點。


讓 i 代表第i 個攝影機, a,b 代表非 i 的其他兩個攝影機,
那麼三焦張量 T_i 的定義就是:

T_i = (a_i)(b_4)^t – (a_4)(b_i)^t 

所以 T 算出來應該要是 3x3x3 矩陣,可以自己推導一下。





點線對應關係


接下來我們要用三個視圖中的點線對應關係推導三焦張量的損失,

兩關係式:

  • x” = H_13 * x
  • l = (H_13^t) * l”

x” 為空間中 X點在第三視圖上的投影,
H_13 矩陣實為第一視圖投影至第三視圖中的投影矩陣。




H矩陣推導




其中 H_13 = [h_1, h_2, h_3], h_i = T^t_i * l’。

根據空間中的關係又可以推導出:

H_12 = [T_1, T_2, T_3] * l”

暫時看不懂 H_12 怎麼來的沒關係,先知道就好。


因為 H_13 = [h_1, h_2, h_3], h_i = T^t_i * l’,
所以 l = (H_13^t) * l” 
            -> l = ([T_1, T_2, T_3]^t * l’)^t * l”
            -> l = l’^t * [T_1, T_2, T_3] * l”




skew-symmetric matrix

接著因為三焦張量的特殊表達式,

所以我們要複習一下大學線性代數 – 反對稱矩陣。

先定義反對稱矩陣:

任意矩陣 A 的反對稱矩陣 B 為 B = A^t – A,
反對稱矩陣的特性為 B^t = (-1)*B。

接著複習反對稱矩陣表達式:

Assume two martrix a, b,
a cross b == [a]x * b == (a^t * [b]x)^t.

又自己 cross 自己等於零,
零矩陣的轉置是不是也是零矩陣?

所以 0^t == [a]x * a == a^t * [a]x

沒錯!不要猶豫!
自信地把等式同乘 (-1)!

筆者高中時就是班上最自信的那位,自信地讓高中數學被當!
但是這裡真的可以同乘啦!

以上複習完畢。




由線推導點的投影 – 1



由線推導點的投影 – 2

由點投影關係式 x” = H_13 * x 為基底推導, 
由上一段可知 H_13 = [T^t_1, T^t_2, T^t_3] * l’,
則 x” = H_13 * x 
          -> x” = [T^t_1, T^t_2, T^t_3] * l’ * x 
          -> x” = sum(X_i * T^t_i) * l’ 
          -> x”^t = l’^t * sum(X_i * T^_i)

由前段可知 a cross a 為零,所以:

x”^t * [x”]x == l’^t * sum(X_i * T^_i) * [x”]x == 0^t

接著我們要來拆解 l’,
x’為空間中 X 在第二視圖上的投影,令 y’ 為第二視圖上過 l’ 的任意點。

l’ = x’ cross y’ = [x’]x * y’
l’^t = y’^t * [x’]x^t




將  l’ 帶回等式



由前段可知 l’^t = y’^t * [x’]x^t,
將其帶回 l’^t * sum(X_i * T^_i) * [x”]x == 0^t

-> y’^t * [x’]x^t * sum(X_i * T^_i) * [x”]x == 0^t

由於 y 點可以為 l’ 上的任意點,所以 y’^t 可以消去,
此段在”Multiple View Geometry in Computer Vision, 2/e, Richard Hartley” 一書中有證明,
但為文章內容簡潔本文按下不表。

又可利用 skew-symmetric matrix 性質:

A^t = (-1)*A

所以

[x’]x^t = (-1)*[x’]x

推導最終結果為:

-> [x’]x *(sumx_i*T_i)*[x”]x = 0





與三焦損失相比較:

將不可視的模型預測點 V^g_j 與推導結果做 cross,
若完美預測,則 Loss 為零。

L_Trifocal 以上推導完畢。




L_Reproj:



這裡的 pi 是相機的內置矩陣,W為 3D空間預測點座標圖,

這裡做 pi(W_j) 的物理意義是把 3D空間預測點座標圖投影回 2D平面,
特別注意 V^g_j 也是 2D平面的座標預測點。




Total Loss:


最後把四個 Loss 加總起來就可以了 ODO!


如何對本文有任何疑問或書寫錯誤,
歡迎留言或是聯絡我:

wuyiulin@gmail.com


By wuyiulin

喜歡騎單車的影像算法工程師

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *