郭孟夏
(四川大學視覺合成圖形圖像技術國防重點學科實驗室,成都610065)
單應性矩陣的使用一直是熱門話題,在進行平面目標追蹤時,尋找其單應性矩陣尤為重要。到目前為止,越來越多的人使用傳統(tǒng)方法在進行單應性矩陣的估計計算,并不斷的改進,但是在提取圖像對的特征點時,極容易產(chǎn)生誤匹配和累計誤差。而使用基于深度學習的單應性估計算法可以減少誤匹配帶來的累計誤差。近年來,現(xiàn)代深度學習模型[4]廣泛運用在各個領域,包括圖像分類、對象檢測、場景分割、自然語言處理等。在計算機視覺領域,他們已經(jīng)取得了超越傳統(tǒng)方法的巨大成功。深度模型和傳統(tǒng)方法的一個主要區(qū)別是以前手工制作的特征提取的自動化,它可以針對特定的數(shù)據(jù)和任務進行優(yōu)化。
相機標定[7]技術是根據(jù)物體在三維空間位置和圖像位置之間的關系,建立相機幾何成像模型并計算出相機參數(shù)的過程,通過攝像機拍攝的圖片用某種算法計算出相機內(nèi)部和外部參數(shù),外部參數(shù)包括旋轉(zhuǎn)矩陣和平移向量,內(nèi)部參數(shù)包括相機焦距、光心和畸變參數(shù)等。由此,我們可以得到像素坐標系和世界坐標系的坐標映射關系:
其中,u、v 表示像素坐標系中的坐標,s 表示尺度因子,fx、fy、u0、v0、γ(由于制造誤差產(chǎn)生的兩個坐標軸偏斜參數(shù),通常很?。┍硎? 個相機內(nèi)參,R,t 表示相機外參,xw、yw、zw(假設標定棋盤位于世界坐標系中zw=0 的平面)表示世界坐標系中的坐標,M 是內(nèi)參矩陣。
經(jīng)過(4)計算可以得到(5)(6)。
對單應性矩陣的9 個參數(shù)進行歸一化,為H 添加約束條件,將H 矩陣模設為1,如(7)所示,經(jīng)整理后可得(8)(9)。
假如我們得到了兩幅圖片中對應的N 個點對(特征點匹配對),可以得到一個線性方程組,用矩陣形式表示為(10),A 的維度由N 確定。
由于單應矩陣H 包含了約束(7),因此根據(jù)上述線性方程組,8 個自由度的H 我們至少需要4 對對應的點才能計算出單應性矩陣。但是,在真實的應用場景中,我們計算的點對中都會存在誤差。例如點的位置偏差幾個像素,甚至出現(xiàn)特征點對誤匹配的現(xiàn)象,如果只使用4 個點對來計算單應性矩陣,又會出現(xiàn)累計誤差。因此,為了使得計算更精確,一般都會使用遠大于4 個點對來計算單應矩陣。
一般有以下5 個步驟:
(1)提取每張圖SIFT/SURF/FAST 等特征點;
(2)提取每個特征點對應的特征描述子;
(3)通過匹配特征點描述子,找到圖像對中匹配的特征點對;
(4)使用RANSAC 算法剔除錯誤的匹配;
(5)求解方程組,計算單應性矩陣;
以上特征點提取算法和對匹配的特征點求解單應性在OpenCV 中都有已封裝的庫函數(shù)。
目前最廣為人知的方法有兩類,一類是文獻[1]中提出的基于CNN 的單應性估計方法使用類VGG 網(wǎng)絡結構[5]來處理圖像對中的兩個圖像塊。這兩個輸入塊被轉(zhuǎn)換為灰度級、歸一化,然后相互堆疊。該架構使用八個卷積層,后面是兩個完全連接的層,卷積層則使用3×3 內(nèi)核。第二類是文獻[2]中提出的基于CNN 的單應性估計方法,它試圖通過使用多個首尾相連堆疊的孿生卷積神經(jīng)網(wǎng)絡來提高先前方法的準確性。類似于之前的基于CNN 的方法,該方法還將兩個圖像塊作為輸入,并輸出估計的角擾動值,該值可以映射到單應矩陣H。這種CNN 架構使用八個卷積層,后面是兩個完全連接的層。在文獻[6]中,對上述兩種算法進行了對比,并提出,色彩對于單應性的估計并不敏感,因此考慮使用灰度圖像。
以上算法所使用的數(shù)據(jù)都是在MS-COCO 中選取圖像,在該圖像上經(jīng)過隨機擾動和相應變化,與原圖像形成圖像對,使得其背景都一樣,從而作為groundtruth進行訓練。但是在視頻場景中,幀與幀之間的連續(xù)變化,使得其單應性具有一定的關聯(lián)性和規(guī)律。
本文的主要工作是介紹了一種在視頻場景下基于深度學習的單應性矩陣的估計方法。由于視頻背景是實時變化的,有自然場景下有各種不同運動狀態(tài),包含縮放(Scale change,SC)、旋轉(zhuǎn)(Rotation,RT)、透視傾斜(Perspective distortion,PD)、遮擋(Occlusion,OC)和超出視野范圍(Out of view,OV),等等,無法實現(xiàn)背景的一致性。因此針對視頻場景下,存在連續(xù)的幀變化,首先我們設視頻第一幀為交互幀,在該幀標定平面目標的位置坐標,平面目標的位置在視頻中隨時變化。為了便于闡述視頻序列中的前后關系,將前一幀設為第k-1幀,當前幀設為第k 幀。
該視頻每個視頻可拆分成501 幀,幀圖像為三通道RGB 圖像,像素為1280×720。首先對圖像進行預處理,如圖1 所示,圖像第k-1 幀和第k 幀分別經(jīng)過降采樣和灰度化得到A 和B,然后將A,B 堆疊成雙通道的灰度圖像作為深度學習訓練的輸入。
圖1
如圖2 所示,基于回歸的VGG 改進網(wǎng)絡深度學習架構。我們的網(wǎng)絡使用3×3 的卷積,并帶有歸一化(Batchnorm)和線性整流函數(shù)(Rectified Linear Unit,Re?LU),在結構上類似于VGG[5]網(wǎng)絡。以128×72×2 的雙通道灰度圖像作為輸入。我們使用8 個卷積層,每兩個卷積后有一個最大池化層(maxpooling layer)(2×2,stride=2),8 個卷積層分別有64,64,64,64,128,128,128,128 個濾波器。決策層是兩個完全連接層,第一個完全連接層有1024 個單元。最后生成8 個實數(shù),并在訓練中使用Euclidean(L2)損失函數(shù)。
圖2
視頻幀序列中,每一幀中都有一個平面目標,在現(xiàn)實中為矩形。對該模型進行訓練之前,標定該目標的四個角點坐標,第k-1 幀的四個角點分別為A,B,C,D,第k 幀的對應角點分別為A’,B’,C’,D’,根據(jù)坐標點的變化制作訓練的標簽(11),訓練的結果表征的是相鄰兩幀對應平面目標的角點坐標變化。而這一變化可以唯一的映射到單應性矩陣H,從而估計出我們想得到的結果。
圖3
本文使用Python 編程語言并基于TensorFlow 后臺進行編碼。電腦使用Intel Core i7-4790@3.6GHz CPU,8G RAM,NVIDIA GeForce GTX 1060 3GB GPU 的配置。訓練單應性矩陣估計模型過程中,最小批大小設為32,學習率設為0.0001,優(yōu)化器使用Adam,為防止模型過擬合,將丟失概率設為0.5。由于視頻的幀序列之間存在連續(xù)性,而以往的圖像預處理都忽略了這一點,因此,本文還在文獻[1]的基礎上設計了一種生成訓練集的方法,從而可以將視頻幀序列的連續(xù)性加以利用。
在文獻[3]中,有多個不同場景、不同運動狀態(tài)的視頻,其中每個視頻中都存在同一平面目標,本文使用其中縮放、旋轉(zhuǎn)、透視傾斜三個運動狀態(tài)的視頻。圖像的預處理過程如下:
(1)調(diào)整所有訓練圖像樣本的大小,所有圖像從1280×720 降采樣到128×72;
(2)然后將所有三通道彩色圖像樣本都轉(zhuǎn)化為灰度圖;
(3)接著將第k 幀和第k-1 幀經(jīng)過(1)(2)后的單通道灰度圖像結合成雙通道灰度圖像。
本文選擇了20 個場景,共計60 個視頻,約30000張圖片作為樣本進行訓練和測試。
通過訓練,我們可以得到的是一個權重模型,模型的輸入為經(jīng)過預處理的雙通道灰度圖像,輸出為8 個自由度的向量,它們代表的是圖3 中四個角點A,B,C,D 與A’,B’,C’,D’的坐標差值。在對測試集進行測試時,我們已知第k-1 幀的角點坐標,通過訓練好的模型計算可得到第k 幀的角點坐標,從而可以計算得到第k-1 幀和第k 幀之間變換的單應性矩陣。圖4 展示了部分圖像對單應性矩陣估計的結果,左邊是視頻k-1幀,右邊是第k 幀,藍色線段標注的是四點坐標的GroundTruth。我們在圖4 中畫出了前后幀對應角點,從而可以更直觀地看到估計效果。
本文使用約21000 張圖像作為訓練集,約9000 張圖像作為測試集。在縮放、旋轉(zhuǎn)和透視傾斜上,都相比于現(xiàn)有算法具有更好的魯棒性。
圖4
本文提出了一種在視頻場景下的單應性矩陣估計算法,相比于現(xiàn)有算法對圖像進行切割或者拼接的圖像預處理方法而言,更適用于在自然場景下,當背景發(fā)生變化時,對單應性矩陣進行估計。而實驗結果表明,該算法有助于提高估計單應性矩陣的準確性,可以運用在平面目標追蹤和SLAM(Simultaneous Localization And Mapping)等領域中。
但是本文也存在一些問題,在發(fā)生劇烈運動和運動模糊的狀態(tài)下,由于圖像的辨識度不夠高,訓練模型提取的特征點不夠多,導致單應性的估計精度會降低。因此,針對上述問題,還有很大的改進空間,我們可以考慮對網(wǎng)絡和損失函數(shù)進行改進,例如:在損失函數(shù)中加入一個權重影響因子等,從而實現(xiàn)優(yōu)化后的視頻單應性估計。