本發(fā)明涉及視頻處理及并行計算技術(shù)領(lǐng)域,尤其涉及一種基于cuda的監(jiān)控視頻前景提取加速方法。
背景技術(shù):
在視頻監(jiān)控被廣泛應(yīng)用的情況下,基于視頻的運動目標(biāo)檢測和跟蹤的應(yīng)用越來越廣泛,也顯得越來越重要,并朝著網(wǎng)絡(luò)化、高清化和智能化方向發(fā)展,這對監(jiān)控系統(tǒng)的實時性和可靠性提出了更高的要求。為了提高系統(tǒng)的實時性,可以從降低圖像的量化位數(shù)、選擇效率更高的圖像處理算法和選擇處理能力更強的硬件等方面入手。然而降低像素的位數(shù)會丟失許多信息,也會降低圖像質(zhì)量,而圖像算法的計算效率和準(zhǔn)確性往往難以兼顧,尤其是在應(yīng)用場景比較復(fù)雜時,因此選擇處理能力更強的硬件往往成了現(xiàn)實的選擇。目前,pc機中的顯卡一般都帶有g(shù)pu(graphicsprocessingunit,圖形處理器),相對于cpu來說,gpu具有更強的計算能力。
2007年,nvidia公司發(fā)布的cuda(computeunifieddevicearchitecture,統(tǒng)一計算設(shè)備架構(gòu))并行計算架構(gòu)能夠有效利用gpu強大的處理能力進(jìn)行圖形渲染以外的通用計算,引發(fā)了產(chǎn)業(yè)界和學(xué)術(shù)界的巨大反響。與傳統(tǒng)的gpu通用計算相比,cuda編程更簡單,能夠更加方便地利用gpu的硬件資源并提供更強大的功能?,F(xiàn)在,cuda技術(shù)己在天體物理學(xué)、石油勘探、模式識別、生物工程等諸多領(lǐng)域獲得廣泛應(yīng)用。隨著gpu通用計算地快速發(fā)展,計算正在由僅使用cpu計算向cpu+gpu的協(xié)同計算方向發(fā)展。
在此背景下,需要在已有的前景提取算法基礎(chǔ)上,如何通過將gpu的高性能計算能力和cpu的分支運算能力相結(jié)合,實現(xiàn)高效處理視頻前景提取成為了亟待解決的問題。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中的上述問題,即為了解決如何通過將gpu的高性能計算能力和cpu的分支運算能力相結(jié)合,實現(xiàn)高效處理視頻前景提取的問題,本發(fā)明提供了一種基于cuda的監(jiān)控視頻前景提取加速方法,應(yīng)用于包含cpu和gpu的圖形處理裝置,包括:
gpu依據(jù)背景模型對視頻幀進(jìn)行前景處理,得到前景信息;
cpu在獲取gpu中輸出的某一個視頻幀的前景信息后,根據(jù)該視頻幀的前景信息對背景模型進(jìn)行修正,并將修正后的背景模型用于gpu對下一視頻幀的前景處理。
優(yōu)選地,gpu采用三個可并行進(jìn)行數(shù)據(jù)處理的cuda流進(jìn)行前景處理,對于第n個處理周期,處理方法包括:
第一cuda流從cpu接收第n個視頻幀數(shù)據(jù);
第二cuda流對第n-1個視頻幀數(shù)據(jù)依據(jù)背景模型,通過設(shè)定的前景信息計算方法進(jìn)行前景處理;
第三cuda流將第n-2個視頻幀數(shù)據(jù)的前景信息發(fā)送至cpu。
優(yōu)選地,在對三個cuda流初始化的同時,在主機內(nèi)存中為連續(xù)3幀分配在cuda流中使用的頁鎖定內(nèi)存、為連續(xù)3幀分配傳回數(shù)據(jù)的頁鎖定內(nèi)存,在gpu的全局內(nèi)存中為連續(xù)3幀分配存儲空間和與視頻幀相同大小的布爾值空間。
優(yōu)選地,cpu和gpu之間采用異步方式進(jìn)行數(shù)據(jù)傳輸。
優(yōu)選地,所述的前景處理包括視頻幀預(yù)處理、前景概率計算和隨機數(shù)生成。
優(yōu)選地,所述前景概率,其計算方法::
其中,μ表示在對預(yù)設(shè)背景模型進(jìn)行計算以后的均值系數(shù),pt為視頻幀預(yù)處理過程中當(dāng)前視頻幀中像素點歸一化處理后的值,α為影響力參數(shù),σ為當(dāng)前像素點的前景概率。
優(yōu)選地,基于底圖生成初始化的背景模型,其方法為:
采用沒有任何前景物體的視頻幀為底圖,對底圖進(jìn)行n次拷貝得到初始化的背景模型;n為預(yù)設(shè)次數(shù)。
優(yōu)選地,在對三個cuda流初始化后,還包括線程塊的數(shù)量計算的步驟,計算的方法為:
其中,bx和by分別為x方向和y方向上的線程塊數(shù)量,tx和ty是每個線程塊中線程的數(shù)量,w和h是視頻幀的橫向和縱向的像素個數(shù)。
優(yōu)選地,所述tx和tt為預(yù)設(shè)值,所述tx與ty之積為32的倍數(shù)。
優(yōu)選地,所述對背景模型進(jìn)行修正,其方法為:
依據(jù)所獲取gpu中輸出的某一個視頻幀的前景信息中的布爾值,確定為真的布爾值對應(yīng)的隨機數(shù),并進(jìn)一步對背景模型進(jìn)行修正。
與現(xiàn)有技術(shù)相比,本發(fā)明至少具有以下優(yōu)點:
通過本發(fā)明中基于cuda的監(jiān)控視頻前景提取加速方法的設(shè)計,實現(xiàn)了將gpu的高性能計算能力和cpu的分支運算能力相結(jié)合,達(dá)到了對視頻前景的高效提取處理。
附圖說明
圖1是本發(fā)明所提供的基于cuda的監(jiān)控視頻前景提取加速方法的結(jié)構(gòu)示意圖;
圖2是本發(fā)明所提供的cpu、gpu和cuda流間數(shù)據(jù)傳輸?shù)姆止f(xié)作并行處理示意圖;
圖3是本發(fā)明所提供的基于cuda的監(jiān)控視頻前景提取加速方法的步驟流程示意圖。
具體實施方式
下面參照附圖來描述本發(fā)明的優(yōu)選實施方式。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,這些實施方式僅僅用于解釋本發(fā)明的技術(shù)原理,并非旨在限制本發(fā)明的保護(hù)范圍。
本發(fā)明中,根據(jù)cuda的特性對算法進(jìn)行拆分,將算法分為適合于gpu的處理部分和適合于cpu的處理部分,并利用頁鎖定內(nèi)存和異步傳輸將cpu端內(nèi)存和設(shè)備端內(nèi)存之間數(shù)據(jù)傳輸時間隱藏,從而大幅加速視頻前景提取的計算速度,進(jìn)而滿足視頻處理的要求。
本發(fā)明主要利用cuda對視頻前景提取進(jìn)行了并行化加速,同時根據(jù)cpu和gpu各自的特點對算法進(jìn)行拆分和優(yōu)化,最高加速比能達(dá)到15倍以上。
為了實現(xiàn)本發(fā)明的目的,結(jié)合圖1~2,本發(fā)明提供了一種基于cuda的監(jiān)控視頻前景提取加速方法,應(yīng)用于包含cpu和gpu的圖形處理裝置,包括:
gpu依據(jù)背景模型對視頻幀進(jìn)行前景處理,得到前景信息;
cpu在獲取gpu中輸出的某一個視頻幀的前景信息后,根據(jù)該視頻幀的前景信息對背景模型進(jìn)行修正,并將修正后的背景模型用于gpu中下一視頻幀的前景處理。
gpu采用三個可并行進(jìn)行數(shù)據(jù)處理的cuda流進(jìn)行前景處理,對于第n個處理周期,處理方法包括:
第一cuda流從cpu接收第n個視頻幀數(shù)據(jù);
第二cuda流對第n-1個視頻幀數(shù)據(jù)依據(jù)背景模型,通過設(shè)定的前景信息計算方法進(jìn)行前景處理;
第三cuda流將第n-2個視頻幀數(shù)據(jù)的前景信息發(fā)送至cpu。
本發(fā)明中,cpu和gpu之間采用異步方式進(jìn)行數(shù)據(jù)傳輸。
下面通過實施例的詳細(xì)步驟對本發(fā)明視頻幀的處理流程進(jìn)行進(jìn)一步細(xì)化說明,如圖3所示,包括:
步驟301,用底圖生成初始化的背景模型。
本實施例采用統(tǒng)一內(nèi)存(unifiedmemory),將背景模型存儲在統(tǒng)一內(nèi)存中。由于背景模型在cpu和gpu端同時需要,而且背景模型的修改量比較小,可以交給cuda的驅(qū)動在合適的時候自動完成傳遞,所以可以將背景模型儲存在一個統(tǒng)一內(nèi)存中。
底圖是視頻幀中無前景物體的特殊幀,本實施例中首選選定作為底圖的為沒有任何前景物體的視頻幀,對底圖進(jìn)行n次拷貝得到初始化的背景模型。n的取值與視頻幀率有關(guān),在本實施案例中n的取值為20。
步驟302,cuda流及存儲空間初始化。
初始化三個cuda流,在主機內(nèi)存中為連續(xù)3幀分配在cuda流中使用的頁鎖定內(nèi)存、為連續(xù)3幀分配傳回數(shù)據(jù)的頁鎖定內(nèi)存,在gpu的全局內(nèi)存(globalmemory)中為連續(xù)3幀分配存儲空間和與視頻幀相同大小的布爾值空間。
由于視頻幀的像素值只有一次存取過程,這個數(shù)據(jù)存儲在全局內(nèi)存中即可。3個流所執(zhí)行的計算依次為向gpu拷貝數(shù)據(jù)、執(zhí)行g(shù)pu計算、將數(shù)據(jù)拷貝回主機,并且3個流同時啟動。其中,gpu運算過程為公式計算等,盡量避免了if語句和修改模型等分支較多的語句,這些步驟將通過步驟306由cpu執(zhí)行。
步驟303,cuda流中線程塊的計算。
設(shè)定每個線程塊(block)中的線程數(shù),并計算所需的線程塊數(shù)量。線程塊的數(shù)量和視頻幀的分辨率有關(guān),計算方法如公式(1)所示:
其中,bx和by分別為x方向和y方向上的線程塊數(shù)量,tx和ty是每個線程塊中線程的數(shù)量,w和h是視頻幀的橫向和縱向的像素個數(shù)。
利用公式(1)計算得到的線程塊個數(shù)與每個線程塊包含的線程的數(shù)量,包括x方向上的和y方向上的個數(shù),均可以保證大于或者等于圖像的像素數(shù)量,既不會出現(xiàn)線程分配的冗余又不會出現(xiàn)線程數(shù)不足的錯誤。其中tx和ty是預(yù)先定義好的,保證tx×ty是32的倍數(shù)即可。
在本實施例中,tx和ty均取16。
步驟304,對頁鎖定內(nèi)存以異步方式復(fù)制到設(shè)備中的視頻數(shù)據(jù),啟動核函數(shù)對視頻幀進(jìn)行前景處理。
上文已經(jīng)對三個cuda流的功能設(shè)置,以及所處理的視頻幀的序號規(guī)則進(jìn)行了說明,此處不再對各cuda流中所對應(yīng)的視頻幀進(jìn)行進(jìn)一步描述,僅僅為了說明第二cuda流中的視頻幀前景處理方法。
本實施中,前景處理包括視頻幀預(yù)處理、前景概率計算和隨機數(shù)生成。
在核函數(shù)的計算過程中,采取每個線程對1個像素進(jìn)行處理的策略,由于各個像素之間計算相對獨立,線程之間不需要進(jìn)行交互。在預(yù)處理過程中,對視頻幀的每一個像素進(jìn)行歸一化處理。
前景概率利用公式(2)進(jìn)行計算:
其中,μ表示在對預(yù)設(shè)背景模型進(jìn)行計算以后的均值系數(shù),pt為視頻幀預(yù)處理過程中當(dāng)前視頻幀中像素點歸一化處理后的值,α為影響力參數(shù),σ為當(dāng)前像素點的前景概率。
對背景中的n個底圖進(jìn)行計算,可以得到n個μ值,將各個μ值帶入σ的計算公式,可以得到最終結(jié)果σ,這個數(shù)值代表此像素點是前景點的概率的大小,數(shù)值越大,代表這個點是前景點的概率越大。之后,使用閾值ε對這個點進(jìn)行分割,如果σ>ε代表這個點是前景點,反之是背景點。將得到的結(jié)果布爾值儲存在預(yù)先申請好的內(nèi)存中。
在隨機數(shù)生成的階段,利用cuda的隨機數(shù)生成子生成隨機數(shù)。在本實施例中,隨機數(shù)取值為1到20的整數(shù),這個隨機數(shù)代表了背景模型的具體位置。
在本實施例中,閾值ε取值0.85。
步驟305,將計算得到的布爾值空間和隨機數(shù)以異步的方式傳回頁鎖定內(nèi)存中。
步驟306,對背景模型進(jìn)行修正。
依據(jù)所獲取gpu中輸出的某一個視頻幀的前景信息中的布爾值,如果布爾值為真,則獲取已經(jīng)生成的隨機數(shù)?;诓紶栔悼臻g和隨機數(shù)對背景模型進(jìn)行修正。
cpu在獲取gpu中輸出的某一個視頻幀的前景信息后,根據(jù)該視頻幀的前景信息對背景模型進(jìn)行修正,并將修正后的背景模型用于gpu中下一視頻幀的前景處理。
上述對背景模型的修改方式為本領(lǐng)域中較常見的算法,為本領(lǐng)域公知常識,此處不再贅述。
由于對背景模型進(jìn)行修正不符合gpu中全局內(nèi)存的結(jié)合訪問模型,訪問所需的周期較長,所以比較適合于在cpu中進(jìn)行修改,再由統(tǒng)一內(nèi)存進(jìn)行傳輸。
上述步驟描述僅為了說明視頻幀數(shù)據(jù)處理的流程,并未對三個cuda流的并行處理機制進(jìn)行詳細(xì)展開,具體可以結(jié)合圖1、圖2來看,在一個處理周期內(nèi),假設(shè)該處理周期為n,則三個cuda流同時啟動,并分別執(zhí)行:第一cuda流從cpu接收第n個視頻幀數(shù)據(jù);第二cuda流對第n-1個視頻幀數(shù)據(jù)依據(jù)背景模型,通過設(shè)定的前景信息計算方法進(jìn)行前景處理;第三cuda流將第n-2個視頻幀數(shù)據(jù)的前景信息發(fā)送至cpu。從而通過對視頻幀處理流程拆解、并行的方式,實現(xiàn)處理周期的縮短。
在第二cuda流進(jìn)行前景處理過程中,在前景概率計算前,cpu已完成第三cuda流輸出數(shù)據(jù)的接收、和依據(jù)第n-2個視頻幀數(shù)據(jù)的前景信息對背景模型的修正,該修正后的模型可以用于第二cuda流中對第n-1個視頻幀數(shù)據(jù)的處理。
本實施例中,涉及到cpu、gpu和cuda流間的數(shù)據(jù)傳輸,三者之間的分工與時間的關(guān)系如圖2所示,在同一個處理周期內(nèi)需并行完成后一視頻幀的輸入、當(dāng)前視頻幀的處理、以及前一視頻幀處理數(shù)據(jù)的輸出和處理;其中前一視頻幀處理數(shù)據(jù)的輸出和處理為順次執(zhí)行的兩個步驟:前一視頻幀處理數(shù)據(jù)的輸出、依據(jù)前一視頻幀數(shù)據(jù)的前景信息對背景模型的修正。
本發(fā)明采用的基于cuda的監(jiān)控視頻前景提取加速方法具有如下優(yōu)點:
1.利用cuda計算模型的優(yōu)勢,將每個像素點的計算分配給gpu中的虛擬線程,所有線程同時執(zhí)行,大幅提高了算法的執(zhí)行速度,而且保證提取效果不會受到影響;
2.根據(jù)cpu和gpu各自的計算特點,對計算任務(wù)進(jìn)行了分工,將密集計算的工作交給gpu進(jìn)行處理,模型修改等分支和訪存較多工作交給cpu進(jìn)行處理;
3.利用cuda的流處理特性,采用3個流的設(shè)計,在計算的同時進(jìn)行數(shù)據(jù)的傳輸,將數(shù)據(jù)傳輸需要的時間進(jìn)行了隱藏。
本領(lǐng)域技術(shù)人員應(yīng)該能夠意識到,結(jié)合本文中所公開的實施例描述的各示例的方法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明電子硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以電子硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。本領(lǐng)域技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
術(shù)語“包括”或者任何其它類似用語旨在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備/裝置不僅包括那些要素,而且還包括沒有明確列出的其它要素,或者還包括這些過程、方法、物品或者設(shè)備/裝置所固有的要素。
至此,已經(jīng)結(jié)合附圖所示的優(yōu)選實施方式描述了本發(fā)明的技術(shù)方案,但是,本領(lǐng)域技術(shù)人員容易理解的是,本發(fā)明的保護(hù)范圍顯然不局限于這些具體實施方式。在不偏離本發(fā)明的原理的前提下,本領(lǐng)域技術(shù)人員可以對相關(guān)技術(shù)特征作出等同的更改或替換,這些更改或替換之后的技術(shù)方案都將落入本發(fā)明的保護(hù)范圍之內(nèi)。