付澤偉 金 城
(復(fù)旦大學計算機科學技術(shù)學院 上海 201203)
隨著科技的進步手機等便攜設(shè)備的計算能力不斷增強,擁有攝像頭的移動設(shè)備也越來越普及,應(yīng)用這些設(shè)備可以很方便地進行拍照和攝像。人們經(jīng)常需要利用手機等便攜設(shè)備記錄屏幕中播放的視頻信息,但是在拍攝到屏幕的同時不可避免地會拍攝到屏幕外的背景,這些背景對后續(xù)的視頻處理會帶來很大的干擾。
定位屏幕區(qū)域的目標是在圖片或視頻中,找出屏幕邊緣的四條直線,如圖1所示。
圖1 輸入圖片(左)屏幕區(qū)域(右)
實際上想要準確地找到屏幕邊緣的四條直線很困難,傳統(tǒng)方法先用canny邊緣檢測算法得到視頻中物體的邊緣,然后用HoughLine直線檢測算法從邊緣中檢測直線,但是傳統(tǒng)方法只能在背景簡單的情況下使用。真實的場景下,屏幕外的背景復(fù)雜,屏幕區(qū)域的邊緣本來應(yīng)該是由四條直線組成,但是傳統(tǒng)方法找到的邊緣直線經(jīng)常是多條長短不一的直線并且直線間也存在寬窄不等的間隙。此外,傳統(tǒng)方法也面臨著屏幕區(qū)域外的背景和屏幕區(qū)域內(nèi)的圖像中的直線干擾等問題。因此,本文對傳統(tǒng)方法的兩個關(guān)鍵步驟進行了改進。
(1) 改進了屏幕區(qū)域邊緣檢測方法。傳統(tǒng)的canny邊緣檢測算法需要設(shè)置很多的閾值參數(shù),這些參數(shù)要根據(jù)實驗效果人為設(shè)定,一旦參數(shù)過多,就很難根據(jù)經(jīng)驗設(shè)定,另外這些參數(shù)只對特定的情形有很好的效果。而深度學習具有表征能力強,不需要人為設(shè)定參數(shù),自動獲得特征等優(yōu)點。因此,采用了基于全卷積神經(jīng)網(wǎng)絡(luò)的屏幕區(qū)域邊緣檢測方法,獲得了很好的檢測效果。
(2) 提出一種新的屏幕區(qū)域邊緣定位算法。傳統(tǒng)的輪廓檢測算法只能定位閉合輪廓的邊緣,適應(yīng)性有限。此外由于有大量的干擾,傳統(tǒng)方法定位屏幕區(qū)域的邊緣很困難。因此,本文提出一種利用全卷積神經(jīng)網(wǎng)絡(luò)產(chǎn)生的屏幕區(qū)域邊緣圖像和屏幕區(qū)域位置圖像來定位屏幕輪廓的算法,這種算法具有效率高,抗干擾能力強,算法簡單等特點。
本方法實現(xiàn)的一個關(guān)鍵步驟就是檢測到屏幕的邊緣,邊緣檢測算法的研究歷史很悠久,也是計算機視覺的基本研究課題之一。早期的方法是基于sobel算子的邊緣檢測方法[1],以及被廣泛采用的canny檢測算法[2]?;谛畔⒄摰乃惴ㄓ術(shù)Pb分割算法[4]、pb算法[5]。有的算法依賴人類設(shè)計的特征,比如,BEL算法[6]、Multi-scale[7]和StrucutredEdge[8]。文獻[20]依靠視頻前后幀的關(guān)系定位屏幕范圍,取得了很好的效果。還有很多很多基于卷積神經(jīng)網(wǎng)絡(luò)CNN(Convolutional Neural Network)的邊緣檢測算法,比如,N4-Fields[9], DeepEdge[10],F(xiàn)astmask[11],SGN[12]。文獻[16-19]進行圖像的語音分割。有的采用全卷積神經(jīng)網(wǎng)絡(luò),例如,HED[13]、RCF[14]、CASENet[15]、Mask r-cnn[21]。這些方法把卷積層的輸出接入一個side output 層,side output層由一個1×1的卷積層,一個deconv層和一個softmax層組成,每層side-output進行融合,由于利用了多尺度的信息,因此取得了很好的效果。
屏幕區(qū)域的邊緣檢測和基于深度學習的邊緣檢測有很多的不同,最主要的區(qū)別是:(1) 基于深度學習的邊緣檢測目標是得到通用物體的邊緣(多種物體的邊緣),而屏幕的邊緣檢測只要得到屏幕區(qū)域的邊緣圖像即可(只有屏幕區(qū)域的邊緣),因此需要神經(jīng)網(wǎng)絡(luò)排除其他物體的邊緣。(2) 雖然神經(jīng)網(wǎng)絡(luò)能夠排除大部分其他物體的邊緣,但是還是存在部分干擾。如圖2所示,fusion-output是神經(jīng)網(wǎng)絡(luò)輸出的屏幕區(qū)域邊緣圖像,其中存少量其他物體的邊緣,因此只用fusion-output無法得到正確結(jié)果,我們需要神經(jīng)網(wǎng)絡(luò)輸出屏幕區(qū)域的位置信息幫助定位(也就是side-outout 5)。
原圖 神經(jīng)網(wǎng)絡(luò)輸出的fusion-output 神經(jīng)網(wǎng)絡(luò)輸出的side-outout 5圖2 屏幕區(qū)域邊緣圖像
網(wǎng)絡(luò)通過修改VGG-16而來,VGG-16網(wǎng)絡(luò)由13個卷積層,和3個全連接層組成,VGG-16網(wǎng)絡(luò)不但在分類問題中表現(xiàn)優(yōu)異,而且容易應(yīng)用到其他場景[15],比如物體檢測和圖像分類。本文的網(wǎng)絡(luò)對VGG-16的修改主要有:
(1) 移動設(shè)備性能差,而VGG-16是一個通用的神經(jīng)網(wǎng)絡(luò)框架,VGG-16模型對于移動設(shè)備來說太大了,而屏幕邊緣檢測只需要網(wǎng)絡(luò)能檢測屏幕區(qū)域到邊緣的直線即可,因此減少VGG-16每一層卷積核的數(shù)量對屏幕區(qū)域邊緣檢測也不會造成太大影響。在實驗部分也測試了不同卷積核的數(shù)量對最終結(jié)果的影響以及運行速度,而本文最終采用的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 本文采用的網(wǎng)絡(luò)結(jié)構(gòu)
(2) 去掉了VGG-16的第五個max-pool層,和后面的全連接層。主要原因是,加入max-pool 5層會使輸出的side-output大小縮小為原來的1/32,經(jīng)過32× deconv層后,會使得精度大大降低,對結(jié)果不利。
(3) 在Conv1-2、Conv2-2、Conv3-3、Conv4-3、Conv5-3五層后面接了一個1×1-1的卷積層進行降維,這等于對所有卷積核輸出的結(jié)果做加權(quán)求和,同時權(quán)重由網(wǎng)絡(luò)學習得到。之后接一個deconv層,對feature map進行上采樣,使得feature map和原圖一樣大。
(4) 所有5個上采樣得到的結(jié)果進行concat,之后用一個1×1-1的卷積層進行特征圖的融合,最后使用一個sigmoid輸出屏幕區(qū)域邊緣圖像(圖3的fusion-output所示)。這里1×1-1的卷積的參數(shù)可以自動學習,也可以人工指定,本文中采用人工指定的方式,具體值在2.2中說明。
(5) 在Conv5-3之后的deconv層連接一個sigmoid layer輸出屏幕區(qū)域位置圖像(如圖3的side-output 5),side-output 5得到的屏幕區(qū)域邊緣位置不夠精細,但是作為高層的輸出比fusion-output少了很多干擾,因此可以當作屏幕區(qū)域位置圖像使用。
(1)
式中:
(2)
下式表示各層第j個像素點融合為fusion-output的第j個像素點的值時各層的權(quán)重,其中w1=w2=w3=w4=0.2,w5=0.28。
(3)
(4)
(5)
式(6)是最終的損失函數(shù),該損失函數(shù)刪去了HED[13]中損失函數(shù)的低層部分,保留了side-output 5。在實驗部分解釋了原因和實驗結(jié)果。
L(W)=L(side 5)(X(side 5);W)+L(fusion)(X(fusion);W)
(6)
本文采用部分真實場景的圖片和部分合成圖片的方式自制數(shù)據(jù)集。合成的圖片主要采用了不同的背景,和不同的前景圖片合成,其中前景圖片加上平移、旋轉(zhuǎn)、透視變換。背景圖片進行隨機的裁剪,合成的圖片還進行了反轉(zhuǎn)操作來擴充數(shù)據(jù)集,這種自制數(shù)據(jù)總計有10萬幅,手工標注的真實場景數(shù)據(jù)總計2 000幅。另外有500幅真實場景的圖片作為測試集。
主要利用fusion-output和side-output 5得到屏幕區(qū)域的邊緣。整體流程如圖4所示。
圖4 邊緣定位算法整體流程圖
(1) 屏幕區(qū)域邊緣直線檢測 先對Fusion-output生成的單通道圖進行閾值化,大于閾值t的點的像素值為255,小于t的點的像素值為0,其中的閾值t是Fusion-output中像素點的值大于30的點的均值,設(shè)閾值化后的圖像為Ft,然后用Hough直線檢測算法在Ft中檢測直線,但是同一條直線,也會被檢測為很多長短不一,有重疊、有間隙的直線,因此需要對檢測到的直線進行合并。
合并方法:
① 對檢測到的直線根據(jù)長度進行排序。
② 找到最長的直線,刪除所有比這條直線短且和這條直線重合的直線(重合判斷方法在下文詳述)。
③ 重復(fù)步驟①和②,直到最后一條直線為止。
④ 記錄邊緣直線集合SI。
判斷重合方法:
① 計算較短直線兩個端點到長直線的距離,記為L1和L2。
② 設(shè)定兩個長度閾值ps和pm(pm>ps,在本文中pm=10,ps=5)。
③ 如果L1>pm或L2>pm,判斷為不重合;如果L1 說明:只用一個閾值來區(qū)分兩條直線是否為同一條直線會帶來問題。因為fusion-output屏幕區(qū)域內(nèi)外邊緣之間有寬有窄,如果長度閾值取得較大,直線合并效果好,但是在屏幕內(nèi)外邊緣距離較窄的情況下,容易把內(nèi)外邊緣也錯誤合并;如果閾值取得較小,直線合并效果差,產(chǎn)生的干擾多。因此采用兩個直線閾值,可以獲得很好的內(nèi)外邊緣直線。 (2) 產(chǎn)生候選框 圖5顯示了產(chǎn)生候選框集合的流程。在圖片中選取一個點t(本文中設(shè)置t點為屏幕中心點),稱之為目標點,SI集合中選兩條直線la和lb, 直線la和lb的交點為pi,選取la的一個端點為pa,選取lb的一個端點為pb,交點pi到pa的向量稱為pipa,pi到pb的向量稱為pipb,pi到目標點t稱為向量pit,計算滿足公式pit=a·pipa+b·pipb,a>0且b>0的端點pa和pb。如果有多個端點滿足要求,則取到交點pi長度最大的端點。記錄pi、pa和pb,作為一個角結(jié)構(gòu)。依次對SI集合中剩余的直線進行處理。 圖5 產(chǎn)生候選框集合的流程 從前面得到的角結(jié)構(gòu)中,取兩個不含相同直線的角結(jié)構(gòu),為pi1、pb1、pa1和pi2、pb2、pa2,其中pb1和pb2位于點pi1和pi2組成的直線一邊,pa1和pa2位于直線一邊,如圖5所示。計算等式pi1pi2=a1·pi1pb1+b1·pi1pa1,pi2pi1=a2·pi2pb2+b2·pi2pa2,若a1、b1、a2、b2都大于0,則這兩個角結(jié)構(gòu)可以組成一個候選框,如圖5最后一步所示。計算pi1pb1和pi2pb2的交點以及pi1pa1和pi2pa2的交點,得到四邊形的另外兩個交點,保存四個交點,得到候選框,重復(fù)對所有角結(jié)構(gòu)進行計算。最終所有的候選框總算包圍著目標點t。 (3) 候選框評分方法 我們主要用fusion-output和side-output 5對候選框打分,式(7)計算四邊形一條邊的得分,其中點(xi,yi)位于直線Line(i)上,pj(xi,yi)是點(xi,yi)在圖像j中的像素值(本文中,j為fusion-output或side-output 5),|line(i)|是直線Line(i)上點集的個數(shù)。式(8)計算一個候選框的得分,Line(i)為候選框Rect(q)的邊緣線。 (7) (8) 首先在side-output 5對候選框進行打分,即對所有候選框計算M(q,j)j=side-output5,最高得分乘0.9為閾值a,排除得分小于閾值a的候選框,之后對剩余的候選框在fusion-output中打分,對剩余的候選框計算M(q,j)j=fusion-output,得分最高者為最終結(jié)果。 之所以采用這種方案是因為,fusion-output中屏幕邊緣較為精細,但是錯誤很多,side-output 5的邊緣粗,但是能準確反映邊框的大概位置,如果候選框只用fusion-output計算評分,可能會出現(xiàn)畫中畫的侯選框得分最高。產(chǎn)生這種問題的原因是,fusion-output是由各層side-output融合而成,低層錯誤的邊緣可能會融合成像素值很大的錯誤邊緣,導致最終的評分錯誤。因此我們先用side-output 5得到一些位置準確,但是可能包含一些由屏幕區(qū)域內(nèi)邊緣和外邊緣組成候選框。之后用fusion-output評分,因為內(nèi)邊緣和外邊緣組成候選框會穿過屏幕邊框的部分,而屏幕的邊框部分的像素值很低,導致評分降低,只有那些連成一個整體的全是由屏幕內(nèi)邊緣組成或全由屏幕外邊緣組成的候選框,才會在fusion-output中得到很高的評分,之后選取評分最高的那個。因此最終結(jié)果要么是屏幕區(qū)域內(nèi)邊框組成的邊緣,或者是屏幕區(qū)域外邊框組成的邊緣。 我們利用了TensorFlow來實現(xiàn)網(wǎng)絡(luò),先在網(wǎng)絡(luò)最后的卷積層后加上Maxpool-5層、全連接層、soft-max層并用ImageNet數(shù)據(jù)集對網(wǎng)絡(luò)進行物體檢測訓練,然后用預(yù)訓練好的參數(shù)初始化我們的網(wǎng)絡(luò),side-output1-5中的1×1conv采用期望為0、方差為0.01的高斯分布來初始化,bias=0。Fusion-output中的1×1convd用來融合各層的結(jié)果,其中ai為side-outputi(i為1~5)對應(yīng)的參數(shù),其中a1=a2=a3=a4=0.2,a5=0.28,不參與訓練。deconv-layer用 bilinear初始化。網(wǎng)絡(luò)剩余的超參數(shù)為:minibatch size=10,learning rate=1e-6,每訓練10 k次除以10,momentum=0.9,weight decay=0.000 2,所有參數(shù)的訓練在1塊NVIDIA TITAN X GPU上完成。 我們測試了不同的卷積核個數(shù)對fusion-output和side-output 5的影響,表1顯示了三種網(wǎng)絡(luò)的結(jié)構(gòu),每種網(wǎng)絡(luò)都以VGG-16模型為基礎(chǔ),只是改變了卷積核的個數(shù)。使用同樣的屏幕區(qū)域邊緣定位算法計算最終的結(jié)果。 表1 三種不同的網(wǎng)絡(luò)大小 經(jīng)過測試表2顯示了在一臺iphone8手機上三種網(wǎng)絡(luò)的計算性能。 表2 三種網(wǎng)絡(luò)的性能 圖6顯示了三幅不同的輸入圖在三種不同網(wǎng)絡(luò)結(jié)構(gòu)中得到的結(jié)果,圖片1在三種模型的最終結(jié)果中,都把屏幕區(qū)域的左邊緣標記為外邊框,右邊緣標記為內(nèi)邊框,我認為產(chǎn)生這種結(jié)果的原因是,左-內(nèi)邊框和右-外邊框都不明顯,導致fusion-output中對應(yīng)的像素值較低,最終候選框在fusion-output上得分較低,因此我們的算法會優(yōu)先選擇邊緣清晰的邊框。圖片2在三種模型的最終結(jié)果中下邊緣都不對,產(chǎn)生這種結(jié)果的原因是本文中目標點t設(shè)定為屏幕中間,導致目標點t在下邊緣的下面,而邊框的要求是必須包圍目標點t,因此導致錯誤。圖片3是不含有屏幕區(qū)域的圖像,Model-A不能準確地區(qū)分,但是Model-B,Model-C的side-output 5、fusion-output都不會產(chǎn)生明顯的響應(yīng),可以區(qū)分這種不含屏幕的干擾。 圖6 三種不同網(wǎng)絡(luò)的結(jié)果 在HED[13]邊緣檢測方法中,loss的計算公式如下: (9) 我們測試了Model-B網(wǎng)絡(luò)采用HED-loss和式(6)的輸出,如圖7所示。 HED網(wǎng)絡(luò)是一種通用的邊緣檢測方法,通過讓低層的side-output參與loss的計算,可以讓低層產(chǎn)生的更精細的結(jié)果參與最后的融合,得到非常好的邊緣檢測效果。但是,我們需要的只是檢測到屏幕的邊緣,如果讓低層也參與loss計算,最后的結(jié)果會因為低層的影響而產(chǎn)生很多干擾。而且,不同層檢測到的邊緣的粗細程度也不一樣,如果簡單地加以融合,HED-loss產(chǎn)生的fusion-output屏幕邊緣較粗,很容易無法區(qū)分屏幕內(nèi)外邊框的邊緣。而我們的loss邊緣精細,且干擾更少。 為了證明算法的有效性,我們將屏幕區(qū)域定位算法(Model-B)和三種基于特征點的目標跟蹤算法進行對比。三種目標跟蹤算法為:CamShift[22],Online Boosting(Boosting)[23],Multiple Instance Learning(MIL)[24] 具體來說,我們手動標記視頻幀的屏幕區(qū)域,采用圖像檢索的評價標準,正確率=(計算結(jié)果中是屏幕區(qū)域的像素個數(shù))/(計算結(jié)果中總的像素個數(shù)),召回率=(計算結(jié)果中是屏幕區(qū)域的像素個數(shù))/(屏幕區(qū)域中總的像素個數(shù))。我們將所有視頻幀的平均結(jié)果作為最終結(jié)果記錄于表3中。結(jié)果表明,由于深度學習的應(yīng)用,本方法速度較其他三種慢,但是準確率、召回率和F-score都有明顯提高,此外,我們的方法相比其他三種不需要設(shè)定大量的參數(shù),使用簡單。 表3 不同方法在屏幕檢測上的性能對比 本文提出了一種新的基于深度學習的定位屏幕輪廓的方法,利用深度學習極強的表達能力,產(chǎn)生好的邊緣圖像和位置圖像,并用屏幕輪廓定位算法定位屏幕輪廓。實驗表明,我們的方法在面對非屏幕的矩形物體的干擾下,也能產(chǎn)生很好的效果,即使圖像背景復(fù)雜,邊緣干擾嚴重,也能成功獲得很好的結(jié)果。本方法計算速度快,擴展性強,可以用同樣的框架檢測其他形狀的物體,擁有廣泛的應(yīng)用前景。4 實 驗
4.1 不同的網(wǎng)絡(luò)大小
4.2 不同的loss 函數(shù)
4.3 相關(guān)方法對比實驗
5 結(jié) 語