李宇鵬
摘要: 三維重建技術是將從普通相機獲得的二維圖像生成一個三維虛擬場景的過程。在這個過程中需要對圖像進行特征點的提取和匹配,得到三維場景中的點,獲稀疏的點云,為此需要對點云進行稠密化以獲得更多的點,接著對獲得的稠密點云進行網(wǎng)格化處理得到三維模型,然后把二維圖像的紋理信息與三維模型進行對應貼圖,最終獲得逼真的三維紋理模型。既然輸入圖片為二維圖像,所以特征點提取主要針對二維圖像。對圖像特征點的提取是基礎,也是最重要的一部分,只有能夠得到正確的特征點,才能在接下來的一系列計算中保持準確度。現(xiàn)在做圖像處理的時候,人們普遍使用的是卷積神經(jīng)網(wǎng)絡(CNN),卷積神經(jīng)網(wǎng)絡是局部連接網(wǎng)絡,其最大的特點就是局部連接性。即對一副圖像中的某個像素p來說,一般離像素p越近的像素對其影響也就越大。因此卷積神經(jīng)網(wǎng)絡在圖像領域獲得巨大的成功的核心點在于可以捕捉局部相關性。而且采用CNN進行圖像特征提取比起其他傳統(tǒng)方法,具有實時快速的優(yōu)點。所以在二維圖像特征點提取方面,本文主要介紹使用CNN方法。
關鍵詞: 圖像三維重建;卷積神經(jīng)網(wǎng)絡;多層神經(jīng)網(wǎng)絡;池化
中圖分類號: TP391.41??? 文獻標識碼: A??? 文章編號: 1672-9129(2018)09-0098-02
Abstract:? The technology of 3D reconstruction is the process of generating a 3D virtual scene from 2D images obtained from ordinary cameras. In this process, it is necessary to extract and match the feature points of the image, get the points in the 3D scene and obtain sparse point clouds, so we need to dense the point clouds to obtain more points. Then the dense point cloud is meshed to obtain the 3D model, and then the texture information of the two-dimensional image is mapped to the 3D model, and a realistic 3D texture model is obtained. Since the input image is a two-dimensional image, feature point extraction is mainly for two-dimensional image. Extraction of Image feature points is the basis It is also the most important part that can maintain accuracy in the next series of calculations only if the correct feature points are obtained. When image processing is done now, it is widely used that convolution neural network (CNN), convolutional neural network is a local connection network, and its biggest characteristic is local connectivity. That is, for a pixel p in an image, the closer the pixel p to the pixel p, the greater the impact on the pixel p. Therefore, the key to the great success of convolution neural networks in image field lies in the ability to capture local correlation. In addition, compared with other traditional methods, CNN is used for image feature extraction. The advantage of real-time and fast. So in two-dimensional image feature point extraction, this paper mainly introduces the use of CNN method.
Keywords: image 3D reconstruction;convolution neural network;multilayer neural network;pooling.
隨著計算機技術的不斷進步,人們對計算機技術能力的要求也在不斷地增加,人們希望計算機技術不僅僅能做一些簡單的工作,更希望計算機技術能夠替代人去完成他們想做的一些危險的、復雜的事情。本文中所研究的技術正是要實現(xiàn)人們所想要計算機能達到的效果之一。計算機技術中的計算機視覺是一種類似于人眼睛功能的一項技術,它的目的就是實現(xiàn)把二維圖像轉(zhuǎn)換為虛擬的三維場景的過程。雖然當前計算機視覺技術還不能做到像人的眼睛一樣的效果,但是在這幾十年的發(fā)展中也形成了很多的成熟的技術來完成一些簡單的類似眼睛的功能。
與以往的方法相比,利用掃描設備例如深度掃描儀和三維相機雖然能夠獲得準確的三維模型,但是不能廣泛的應用在一個非局限的空間中,它只能應用在一些局部范圍內(nèi),比如可以掃描一個小的物件像小型的古物、杯子等。同時使用掃描儀的成本也是非常高的。而使用基于圖像的三維重建技術可以很好處理這些問題。在與傳統(tǒng)的基于幾何構造三維重建(實體造型、細分曲面、隱式曲面等)相比,三維重建技術不僅使用方式簡單,而且減少人力、物力、財力。尤其對于大型的復雜的室外場景,使用基于圖像的三維重建技術相比其他方法有很大的優(yōu)勢。
正如我們所知,三維重建技術在我們的生活中的需求在不斷地增加,例如在機器人導航,醫(yī)療影像,虛擬展示,人臉識別等領域,三維重建技術不僅在日常生活中有著重要的應用,在工業(yè)仿真和軍事模擬中也是起著重要的作用。
三維重建技術最早在國外出現(xiàn),在上世紀六十年代,麻省理工學院首次進行了從二維圖像到三維立體的研究,這標志著三維重建的開始。在1992年卡內(nèi)基梅隆大學內(nèi)完成了第一個基于圖像的三維重建系統(tǒng)。近年來關于三維重建的發(fā)展和研究也不斷的進步,Ramalingam和Antunes等人在2015年提出的一種特征點獲取的方法,使用交比這一數(shù)學方法來得到特征點。在2016年由Silvano Galliani和Konrad Schindler提出了使用卷積神經(jīng)網(wǎng)絡CNN來形成三維表面點的法向量,這是一種使用卷積神經(jīng)網(wǎng)絡和傳統(tǒng)方法相結合的新技術。
在國內(nèi)雖然在這方面起步比較晚,清華大學、中科院、哈爾濱工業(yè)大學、浙江大學等都有杰出的代表。清華大學的王磊提出了基于平面投影和遺傳的算法,該算法可以在非定標的情況下進行,得到很好的特征點的提取。
1 神經(jīng)網(wǎng)絡
1.1神經(jīng)元。科學家們希望能模擬人類大腦的思考方式,制造與人類大腦作用相同的機器。所以科學家就在大腦思考方式的啟發(fā)下,模擬神經(jīng)元,組成神經(jīng)網(wǎng)絡,進而模擬人類思考。1904年生物學家就已經(jīng)知曉了人體大腦中神經(jīng)元的組成結構。一個神經(jīng)元通常具有多個樹突,主要用來接受傳入信息;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經(jīng)元傳遞信息。軸突末梢跟其他神經(jīng)元的樹突產(chǎn)生連接,從而傳遞信號。這個連接的位置在生物學上叫做“突觸”。1943年,心理學家McCulloch和數(shù)學家Pitts參考了生物神經(jīng)元的結構,發(fā)表了抽象的神經(jīng)元模型今天仍然在使用。
圖1所示的神經(jīng)元模型是一個包含輸入,輸出與計算功能的模型。輸入(x1,x2,x3)可以類比為神經(jīng)元的樹突,而輸出可以類比為神經(jīng)元的軸突,計算則可以類比為細胞核。在設計一個神經(jīng)網(wǎng)絡時,輸入層與輸出層的節(jié)點數(shù)往往是固定的,中間層則可以自由指定。神經(jīng)網(wǎng)絡結構圖中的拓撲與箭頭代表著預測過程時數(shù)據(jù)的流向,跟訓練時的數(shù)據(jù)流有一定的區(qū)別。
結構圖里的關鍵不是圓圈(代表“神經(jīng)元”),而是連接線(代表“神經(jīng)元”之間的連接)。每個連接線對應一個不同的權重(其值稱為權值),這是需要訓練得到的。一個神經(jīng)網(wǎng)絡的訓練算法就是讓權重的值調(diào)整到最佳,以使得整個網(wǎng)絡的預測效果最好。
1.2單層感知器。關于單層的感知器,輸入層里的“輸入單元”只負責傳輸數(shù)據(jù),不做計算;輸出層里的“輸出單元”則需要對前面一層的輸入進行計算。一個神經(jīng)元的輸出可以向多個神經(jīng)元傳遞,所以輸出可以不止一個。
圖2的公式是一個矩陣乘法,其中a為輸入向量(a1,a2,a3)轉(zhuǎn)置的列向量,w是一個兩行三列的權重值組成的矩陣,用wx,y來表達一個權值。下標中的x代表后一層神經(jīng)元的序號,而y代表前一層神經(jīng)元的序號。所以簡寫為z=g(a*w),這個公式是神經(jīng)網(wǎng)絡中從前一層計算后一層的矩陣運算。感知器只能做簡單的線性分類任務。
1.3多層神經(jīng)網(wǎng)絡。
圖3為由多個神經(jīng)元組成的多層網(wǎng)絡。第一層感知器接收外部輸入,做出判斷后發(fā)出信號,信號作為上層感知器的輸入,直至得到最后的結果。將這張圖中第一層inputs叫輸入層,最后一層output叫輸出層,中間為隱藏層。而這種結構,顯然還是符合矩陣乘法。單層(只有輸入層和輸出層)的感知器其實只能進行線性的分類,而加入隱藏層后,可以進行一些空間變換從而達到可以無限逼近任意連續(xù)函數(shù)的效果。
需要說明的是,在多層神經(jīng)網(wǎng)絡中,使用S型函數(shù)sigmoid作為函數(shù)g,把函數(shù)g也稱作閾值函數(shù)。而事實上,所謂的神經(jīng)網(wǎng)絡的本質(zhì)就是通過參數(shù)與激活函數(shù)(激活函數(shù)就是我們的輸入)來擬合特征與目標之間的真實函數(shù)關系。這張圖里,上層感知器的輸出總是下層感知器的輸入。現(xiàn)實中,還有可能發(fā)生循環(huán)傳遞,本文重點在卷積,所以不詳細敘述。
1.4訓練(學習)。一個神經(jīng)網(wǎng)絡的搭建,需要滿足三個條件:
(1)輸入和輸出
(2)權重(w)和偏置(b)
(3)多層神經(jīng)網(wǎng)絡的結構
也就是說,需要事先畫出類似于圖3的圖形,其中如何確定有幾個隱藏層是很重要的。每層神經(jīng)元的個數(shù)需要設計者自己設定,目前在這方面還未出現(xiàn)一個明確的算法。然后就是確定每個權重(w)和偏置(b),進行訓練??梢阅靡恍┮阎Y果的數(shù)據(jù)輸入神經(jīng)網(wǎng)絡,求得輸出,這是正想傳播,然后再根據(jù)已知的輸出結果反向,求得每層的w和b,并進行修改,這是反向傳播。上述操作即為深度學習的過程。
正因為神經(jīng)網(wǎng)絡需要不斷嘗試,所以對于運算速度的要求很高,這也是為什么神經(jīng)網(wǎng)絡在近幾年才發(fā)展的原因之一。
2 卷積神經(jīng)網(wǎng)絡
2.1概況。卷據(jù)神經(jīng)網(wǎng)絡簡單的來說一般包含這幾個層次:1、輸入層:用于數(shù)據(jù)的輸入(圖像處理中就是圖像的輸入);2、卷積層:使用卷積核來進行特征提取和特征映射;3、池化層:對特征圖進行稀疏處理,減少數(shù)據(jù)運算量;3、全連接層:減少特征點的損失;4、輸出層:用于結果的輸出。
2.2卷積。19世紀60年代,科學家通過對貓的視覺皮層細胞研究發(fā)現(xiàn),每一個視覺神經(jīng)元只會處理一小塊區(qū)域的視覺圖像,即感受野(Receptive Field)。用卷積和池化操作可以相當程度的減小運算量,這個在下面會講到。我們還是舉一個例子來了解一下這里的卷積的具體含義。
輸入一個RGB(red,green,blue三種顏色來表示此圖),所以這個圖片是一個7*7*3的圖片(就是圖中最左側的Input Volume)(其實原圖是一個5*5*3的,但加入了一個由0組成的邊框)。現(xiàn)在有兩個3*3*3過濾器(Filter)(也叫卷積核),以及對應的偏置(Bias)。然后將過濾器放在圖片的左上角,把過濾器上的每個點與在圖中對應位置上的每一個點的值相乘并求和,得到卷積后的結果作為輸出(Output Volume)中的下角標。而這個式子就可以寫成output[0,0,0]=∑(x[i,j,k]*w0[i0,j0,k0]+b0)(0≤i,j,k≤2)。其中i0==i,j0==j,k0==k,但隨著卷積核移動,將出現(xiàn)不相等的情況。得到這個結果后,過濾器按照步長依次從左往右,從上往下滑動,每滑動一次,就會生成一個輸出值。當一個過濾器掃描結束后,換下一個過濾器繼續(xù)掃描,所以最終會有兩個3*3*3的output volume,這個output也叫特征圖(feature map)。如上,有幾個filters就會有幾個feature map。Feature map的尺寸=[(輸入圖片的尺寸-過濾器的尺寸+2*padding尺寸)/步長]+1=[(6-3+2*1)/2]+1=3。
為了理解清楚,舉一個簡單的小例子,這是一個簡單的6×6圖像,左邊的一半是10,右邊一般是0。如果你把它當成一個圖片,左邊那部分看起來是白色的,像素值10是比較亮的像素值,右邊像素值比較暗,我使用灰色來表示0,盡管它也可以被畫成黑的。圖片里,有一個特別明顯的垂直邊緣在圖像中間,這條垂直線是從黑到白的過渡線,或者從白色到深色。
當用一個3×3過濾器進行卷積運算的時候,這個3×3的過濾器可視化為下面這個樣子,在左邊有明亮的像素,然后有一個過渡,0在中間,然后右邊是深色的。卷積運算后,就得到的是右邊的矩陣。
如果把最右邊的矩陣當成圖像,它是這個樣子。在中間有段亮一點的區(qū)域,對應檢查到這個6×6圖像中間的垂直邊緣。這里的維數(shù)似乎有點不正確,檢測到的邊緣太粗了。因為在這個例子中,圖片太小了。如果用一個1000×1000的圖像,而不是6×6的圖片,會發(fā)現(xiàn)其會很好地檢測出圖像中的垂直邊緣。
不難看出,這與和前面所述的神經(jīng)網(wǎng)絡中的運算過程很相似,只是卷積核在掃描中一直沒有變,每次操作對應的w和b的數(shù)量相當小,所以相較于神經(jīng)網(wǎng)絡中全連接的處理方式可以大大降低操作的時間。而這樣做的原理就是圖片有很強的空間相關性,但其實這毫無疑問是個犧牲正確率換取效率的方法,但能用1%的正確率換取1000倍的效率。
在之前的小例子中看到,如果用一個3×3的過濾器卷積一個6×6的圖像,最后會得到一個4×4的輸出,也就是4×4矩陣。那是因為3×3過濾器在6×6矩陣中,只可能有4×4種可能的位置。這背后的數(shù)學解釋是,如果我們有一個n×n的圖像,用f×f的過濾器做卷積,那么輸出的維度就是(n-f+1)×(n-f+1)。在這個例子里是6-3+1=4,因此得到了一個4×4的輸出。這樣的話會有兩個缺點,第一個缺點是每次做卷積操作,你的圖像就會縮小,從6×6縮小到4×4,你可能做了幾次之后,圖像就會變得很小了,可能會縮小到只有1×1的大小。人們可不想讓圖像在每次識別邊緣或其他特征時都縮小,這就是第一個缺點。第二個缺點是,如果注意角落邊緣的像素,這些像素點只被一個輸出所觸碰或者使用,因為它位于這個3×3的區(qū)域的一角。但如果是在中間的像素點,就會有許多3×3的區(qū)域與之重疊。所以那些在角落或者邊緣區(qū)域的像素點在輸出中采用較少,意味著丟掉了圖像邊緣位置的許多信息。
為了解決這些問題,可以在卷積操作之前填充這幅圖像,就是所謂的Padding。在這個案例中,可以沿著圖像邊緣再填充一層像素。如果這樣操作了,那么6×6的圖像就被填充成了一個 8×8的圖像。如果用3×3的圖像對這個8×8的圖像卷積,得到的輸出就不是4×4的,而是6×6的圖像,就得到了一個尺寸和原始圖像6×6的圖像。習慣上,用0去填充。
2.3池化。
池化(pooling)操作有以下幾種:
1.Max Pooling:在feature map中取每一個kernel 所對應區(qū)域的最大值
2.Mean Pooling:在feature map中取每一個kernel 所對應區(qū)域的平均值
3.Stachastic-pooling:先生成與feature map一樣尺寸的概率矩陣,再根據(jù)概率矩陣隨機在feature map中取每一個kernel所對應區(qū)域的隨機值
需要說明的是,當Kernel width=stride是傳統(tǒng)的不重疊池,而當Stride 2.4對比。為了顯示卷積的好處,下面來進行一下全連接與卷積的對比: 在全連接層中,前一層的所有神經(jīng)元都和后一層的所有神經(jīng)元相互連接,如果前一層有32*32*3個神經(jīng)元,后一層有5*15*15個神經(jīng)元,則一共需要32*32*3*5*15*15=3456000個參數(shù)來刻畫它們之間的關系。 而在卷積層中,前一層中filter區(qū)域內(nèi)的神經(jīng)元和后一層對應位置的神經(jīng)元才會連接。例如,輸入圖片是32*32*3,使用5個3*3*3的filter,步長為2,生成5個15*15的feature map。這個過程一共需要的參數(shù)有:5*3*3*3=135個。 現(xiàn)在來做一個除法3456000/135=25600。兩者相差25600倍,而這只是圖片很小的情況,所以即使卷積會使我們損失一定的正確率,也是可以接受的,更何況這些正確率可以通過我們對策略進行調(diào)整來彌補。在卷積神經(jīng)網(wǎng)絡中也存在全連接層,只是會應用到卷積與池化而已。 3 結語 處理圖像三維重建中的特征點提取工作時,卷積神經(jīng)網(wǎng)絡的應用需要結合具體的算法,但特征點提取基本大部分都是由輸入層、卷積層、池化層完成的。卷積神經(jīng)網(wǎng)絡廣泛應用于圖像處理的各種方面,不只限于在三維重建。人臉識別系統(tǒng),汽車自動駕駛技術等都涉及到了卷積神經(jīng)網(wǎng)絡,卷積神經(jīng)網(wǎng)絡的應用還有廣大的發(fā)展空間。 參考文獻: [1]陳樹,王磊.一種改進的基于RANSAC方法的SIFT特征匹配[J].信息技術,2016(12):39-43. [2]張學賀. 基于雙目視覺的六足機器人環(huán)境地圖構建及運動規(guī)劃研究[D].哈爾濱工業(yè)大學,2016. [3]戴嘉境. 基于多幅圖像的三維重建理論及算法研究[D].上海交通大學,2012. [4](英)Mark S. Nixon, Alberto S. Aguado著,楊高坡,李實英譯.計算機視覺特征提取與圖像處理(第三版)[M].電子工業(yè)出版社,2014.