彭 爽,蔣榮欣
(浙江大學(xué)浙江省網(wǎng)絡(luò)多媒體技術(shù)研究重點實驗室,杭州310027)
面向高清視頻監(jiān)控系統(tǒng)的實時運動檢測算法
彭 爽,蔣榮欣
(浙江大學(xué)浙江省網(wǎng)絡(luò)多媒體技術(shù)研究重點實驗室,杭州310027)
針對高清視頻監(jiān)控系統(tǒng)中精確運動檢測的高實時性需求,提出一種基于計算統(tǒng)一設(shè)備架構(gòu)(CUDA)的運動檢測算法。采用一種改進幀差與背景差分相結(jié)合的方法,減少背景更新干擾,提升運動檢測的精確性。在CUDA內(nèi)進行視頻運動檢測計算,避免傳統(tǒng)圖形處理器硬解碼后視頻數(shù)據(jù)在顯示內(nèi)存與CPU之間傳輸?shù)膯栴}。運用塊內(nèi)多線程合并訪問共享內(nèi)存的方式,減少52.9%全局內(nèi)存訪問量,解決CUDA大規(guī)模訪問全局內(nèi)存延遲較大的問題。實驗結(jié)果表明,該算法在保證準(zhǔn)確性的同時,針對高清視頻每秒可傳輸52.6幀,能夠滿足實時性要求。
視頻監(jiān)控;運動檢測;幀差法;背景差分法;硬解碼;合并訪問
運動檢測是監(jiān)控領(lǐng)域的一個重要課題。特別是在需要安全防范的場合下,運動檢測能在發(fā)生異常情況時有效幫助跟蹤定位運動目標(biāo),自動報警或自動存儲視頻,是監(jiān)控系統(tǒng)達到智能化的必要手段[1]。然而,隨著高清視頻的普及化,視頻的解碼及運動檢測很難達到精確性與實時性兼顧的要求。1080P分辨率的H264視頻碼流,通常碼率為8 Mb/s,幀率為25 f/s,意味著監(jiān)控系統(tǒng)解碼的負荷量為8 Mb/s,運動檢測計算的負荷量為320 Mb/s,對實時精確地檢測運動目標(biāo)構(gòu)成了極大的挑戰(zhàn)[2]。
視頻監(jiān)控系統(tǒng)運動偵測主要包含視頻解碼和運動檢測計算。視頻解碼分為軟解碼和硬解碼,高清視頻的軟解碼和運動檢測對CPU性能挑戰(zhàn)大,無法達到實時性需求。傳統(tǒng)的視頻硬解碼和運動檢測存在以下問題:(1)運動檢測算法主要有光流法、背景差分法、幀差法[3]。這3種算法都存在很大的局限性。光流法計算復(fù)雜,背景差分法對光線等背景變化敏感,幀差法無法提取完整的運動目標(biāo)及內(nèi)部紋理;(2)解碼后的數(shù)據(jù)存放于顯示內(nèi)存中,而顯示內(nèi)存與主存之間的數(shù)據(jù)傳輸速度受限于總線的傳輸速度[4]。
針對上述問題,本文提出基于CUDA的硬解碼及運動檢測算法,具體內(nèi)容包括:(1)采用一種改進的幀差與背景差分結(jié)合的方法,完整地提取運動目標(biāo),有效避免背景誤判;(2)在CUDA環(huán)境下進行運動檢測計算,避免了顯示內(nèi)存與內(nèi)存?zhèn)鬏數(shù)钠款i問題;(3)針對CUDA對全局內(nèi)存訪問延遲大的問題,采用塊(block)內(nèi)多線程共享內(nèi)存,一個線程處理4×4個像素,合并訪問其鄰域,降低運算復(fù)雜度。
2.1 傳統(tǒng)的運動檢測算法
背景差分法通過計算當(dāng)前幀和設(shè)定背景的特征差,進行背景消去,然后與預(yù)設(shè)閾值作比較。若所得到的像素數(shù)大于預(yù)設(shè)閾值,則判定被監(jiān)視場景中有運動物體,從而得到運動目標(biāo)[5]。其優(yōu)點是原理和算法設(shè)計簡單,但是對光線變化敏感,同時容易忽略與背景亮度相似的運動物體。幀差法是采用計算相鄰幀差絕對值是否大于閾值來檢測移動物體。其優(yōu)點是算法簡單,對光線變化不敏感;缺點是無法完整地提取運動目標(biāo),且如果選擇幀間隔過大則判斷缺乏準(zhǔn)確,幀間隔小則計算量較大[6]。在運動分量檢測后,通常畫面的噪點較多,需進行降噪操作以保證檢測的精確度[7]。
2.2 改進的運動檢測算法
針對背景差分法對背景變化敏感,幀差法無法完整提取運動目標(biāo)等問題,本文采用一種改進的基于幀差和背景差分結(jié)合的運動檢測算法。將當(dāng)前幀與上一參考幀相減,將所得圖像與背景差分后圖像進行位或運算后可準(zhǔn)確提煉出運動目標(biāo)所在區(qū)域。隨后針對存在移動物體的8×8宏塊單元進行開運算,去掉毛刺,去掉孤立的噪點像素[8-9]。將運動目標(biāo)以外的區(qū)域更新到背景中,如圖1所示。
圖1 改進的運動檢測算法
在圖1中,It(x,y)是當(dāng)前幀,I(t-1)(x,y)是上一參考幀,I(t-1)(x,y)為上一次更新過的背景圖像,其表達方式為:
將當(dāng)前幀與參考幀進行絕對值減法運算:
再將I(t,m)(x,y)與B(t-1)(x,y)進行差分運算,后得到背景差分后運動區(qū)域。將此區(qū)域與幀差所得運動區(qū)域疊加,可得到完整的運動物體。圖像根據(jù)d閾值進行二值化,將運動區(qū)域與非運動區(qū)域區(qū)分出來:
此時運動區(qū)域尚有圖像噪點。利用圖像開運算提取運動目標(biāo)骨干信息,去掉毛刺,減少孤立噪點的影響:
同時,將運動區(qū)域按8×8宏塊存儲,若當(dāng)前區(qū)域內(nèi)有運動像素,則置為255,反之置為0:
該算法相比幀差法能更完整地檢測到運動目標(biāo),并能準(zhǔn)確完整地反映運動物體的位置與移動量。同時相比背景差分法降低了光線等因素的影響,可精確地獲得運動物體的形狀與內(nèi)部紋理。
3.1 CUDA硬解碼及運動檢測算法
本文選取NVIDA公司提供的CUDA開發(fā)包進行實驗。將網(wǎng)絡(luò)碼流解析后組成完整視頻幀,送入GPU進行解碼,解碼出來的數(shù)據(jù)為NV12或者YV12格式。這2種數(shù)據(jù)格式都屬于YUV格式,其Y分量都是連續(xù)的,NV12的U,V分量為交叉分布,YV12的U,V分量為連續(xù)分布[10]。而運動檢測算法通常只需取像素點的亮度分量,即Y分量進行計算。獲取Y分量后進行運動檢測計算,計算完成后將YUV數(shù)據(jù)格式轉(zhuǎn)化成顯卡可渲染的RGB數(shù)據(jù)進行顯示,同時更新背景幀。通知業(yè)務(wù)層進行運動偵測的后處理,如自動報警或自動存儲等,如圖2所示。
GPU解碼后的數(shù)據(jù)存放于紋理內(nèi)存中,即顯示內(nèi)存[11]。而顯示內(nèi)存與內(nèi)存間的數(shù)據(jù)傳輸速度為當(dāng)前的難題。基于CUDA的運動檢測計算是直接從紋理內(nèi)存讀取數(shù)據(jù),有效地避免這一瓶頸。
圖2 視頻監(jiān)控系統(tǒng)運動檢測算法流程
在CUDA中將待檢測的Y圖像分量作幀差與背景差分運算,得到的2個運動區(qū)域進行疊加,利用開運算將背景中的毛刺去除,提取準(zhǔn)確的運動目標(biāo)。將運動區(qū)域以外的圖像塊更新到背景中,流程如圖3所示。
圖3 CUDA環(huán)境內(nèi)數(shù)據(jù)處理流程
3.2 CUDA數(shù)據(jù)處理布局
CUDA架構(gòu)的內(nèi)存分為寄存器、常量內(nèi)存、紋理內(nèi)存、共享內(nèi)存、本地內(nèi)存和全局內(nèi)存等。共享內(nèi)存讀寫速度相當(dāng)快,一般為1個~2個GPU時鐘周期,而全局內(nèi)存讀寫速度高達400個GPU時鐘周期左右[12]。共享內(nèi)存要求數(shù)據(jù)有局部性重用(一個block內(nèi)共享),且每個GPU處理單元共享內(nèi)存最大限制為48 KB,所以不適用針對高清圖像的多步處理;全局內(nèi)存容量大,適合圖像批處理數(shù)據(jù)的存儲。為了提高訪問全局存儲器的效率,本文采用了一種稱為合并訪問的機制來加速全局存儲器的訪問[13]。
當(dāng)運動檢測計算時,大量的訪問全局內(nèi)存存在冗余性,效率較低。因此,本文采用一種共享內(nèi)存和全局存儲器合并訪問的方式。同一個塊內(nèi)線程可訪問同一共享內(nèi)存,每個線程可將當(dāng)前待處理數(shù)據(jù)和上下鄰域數(shù)據(jù)存儲至共享內(nèi)存中,如圖4所示。當(dāng)所有線程讀取完畢后,線程處理時可直接從共享內(nèi)存中獲取需要訪問的鄰域數(shù)據(jù)。為了能夠高效地訪問顯存,讀取和存儲必須對齊,寬度為4 Byte。如果沒有正確的對齊,讀寫將被編譯器拆分為多次操作,極大地影響效率[14]。計算每個輸出點時,需要取其鄰域的8個像素,相鄰像素處理時讀取到的數(shù)據(jù)有重疊(如圖5(a)所示),為了避免重復(fù)訪問所以每個線程處理4×4個像素,計算此16個像素點時,共訪問36個鄰域像素值,為4字節(jié)對齊(如圖5(b)所示)。4×4像素計算時,每個線程平均需要訪問全局內(nèi)存68次,而采用共享內(nèi)存后,每個線程平均訪問全局內(nèi)存次數(shù)降低至36次,節(jié)省了52.9%的全局內(nèi)存訪問。
圖4 同一塊內(nèi)共享內(nèi)存存儲數(shù)據(jù)
圖5 單數(shù)據(jù)處理和塊數(shù)據(jù)處理方式對比
運用CUDA進行塊內(nèi)的計算時,需要通過<<<numBlocks,threadPerBlock> > > 進 行 內(nèi) 核數(shù)(numBlocks)和塊內(nèi)線程數(shù)(threadsPerBlock)的配置[12]。針對上文中提到的每次處理4×4個數(shù)據(jù),每次訪問到的數(shù)據(jù)x坐標(biāo)idx,y坐標(biāo)idy分別為:
其中,blockIdx為當(dāng)前塊的索引號;blockDim表示每個塊的維度;threadIdx為當(dāng)前塊內(nèi)線程索引號。
該算法實驗環(huán)境的 GPU為 NVIDIA Geforce 8400 GS(computer capability:1.1),CPU為Intel(R) Core(TM)2 Duo。網(wǎng)絡(luò)視頻分辨率分別設(shè)置為720×480像素,1 280×720像素和1 920×1 080像素。實驗數(shù)據(jù)如圖6所示。其中,圖6(a)為上一次更新過的背景圖像;圖6(b)為上一幀圖像;圖6(c)為當(dāng)前幀;圖6(d)為圖6(a)與圖6(c)進行差分閾值二值化的圖像;圖6(e)為圖6(b)與圖6(c)進行幀差閾值二值化的圖像;圖 6(f)為圖 6(d)和圖6(e)圖像位或后所得圖像;圖6(g)為圖6(f)進行開運算后的圖像;圖6(h)為提取的運動宏塊,此運動宏塊以外的區(qū)域進行背景更新。
圖6 高清監(jiān)控運動檢測實驗輸出
實驗結(jié)果表明,本文采取的改進幀差與背景差分結(jié)合的方法可以準(zhǔn)確檢測出運動目標(biāo)的輪廓以及內(nèi)部紋理,將圖像進行開運算后去除了孤立噪點,消除了誤判斷成運動目標(biāo)的小物體。所以本文中的基于CUDA的解碼及運動檢測算法保證了輸出數(shù)據(jù)的精確度。
在相同環(huán)境下,運用相同算法對比CPU和GPU的運動檢測計算,實驗數(shù)據(jù)如表1所示,其中,總時間比為CPU運動檢測時間與GPU運動檢測的時間之比。720×480像素分辨率下平均碼率為1.5 Mb/s, I幀大小為50 Kb,幀率為25 f/s。1 280×720像素分辨率平均碼率為4 Mb/s,I幀大小平均為100 Kb,幀率為25 f/s。1 920×1 080像素分辨率平均碼率為8 Mb/s,I幀大小平均為150 Kb,幀率為25 f/s。表1中為不同分辨率的視頻解碼及運動檢測所需時間的平均數(shù)據(jù)。
表1 不同分辨率的視頻解碼及運動檢測所需時間對比
表1數(shù)據(jù)顯示,針對720×480像素,1 280×720像素,1 920×1 080像素分辨率的視頻,基于CUDA的硬解碼及運動檢測與CPU軟解碼和運動檢測相比,總時間分別縮短了5.2倍、6.0倍、10.4倍。
從表2數(shù)據(jù)可看出,基于CUDA的運動檢測計算運用本文中優(yōu)化后的內(nèi)存訪問方案較優(yōu)化前平均時間縮短了1.91倍。表中的時間比表示優(yōu)化前的檢測時間與優(yōu)化后的檢測時間之比。針對1 080 P分辨率,基于CUDA的視頻運動檢測方法幀率可達52.6 f/s,滿足了高清智能監(jiān)控系統(tǒng)的實時性要求。
表2 不同分辨率的GPU運動檢測優(yōu)化前后時間對比
本文設(shè)計了一個在高清智能監(jiān)控系統(tǒng)中的環(huán)境實時運動檢測算法。該算法兼顧了高清視頻運動檢測的準(zhǔn)確性與實時性。實驗結(jié)果表明,本文提出的運動檢測算法精度高,計算復(fù)雜度較低。在GPU內(nèi)進行圖像運動檢測計算可避免傳統(tǒng)GPU硬解碼后顯示內(nèi)存中視頻數(shù)據(jù)與CPU之間的傳輸瓶頸問題。在CUDA內(nèi)部的運動檢測算法采用了多線程共享內(nèi)存與合并訪問的方式,減少了數(shù)據(jù)訪問延遲,保證了高清智能監(jiān)控系統(tǒng)的實時性要求。
[1] Hu Weiming,Tan Tieniu,Wang Liang,et al.A Survey on Visual Surveillance of Object Motion and Behaviors[J].IEEE Transactions on Systems,Man,and Cybernetics,2004,34(3):334-352.
[2] Scotti G,Marcenaro L,Coelho C,et al.Dual Camera Intelligent Sensor for High Definition 360 Degrees Surveillance[J].IEEE Proceedings on Vision,Image and Signal Processing,2005,152(2):250-257.
[3] 周 游,劉艷瀅,王春民,等.幾種人體運動檢測算法的比較分析[J].吉林大學(xué)學(xué)報:信息科學(xué)版,2009,27 (6):652-657.
[4] Padalikar S,Diamos G.Exploring theLatency and Bandwidth Tolerance of Cuda Applications[Z].2009.
[5] McHugh J M,Konrad J,Saligrama V,et al.Foregroundadaptive Background Subtraction[J].IEEE Signal Processing Letters,2009,16(5):390-393.
[6] Davide A,Matteucci M,Naccari M.A Revaluation of Frame Difference in Fast and Robust Motion Detection[C]//Proc.of the 4th ACM International Workshop on Video Surveillance and Sensor Networks.New York, USA:ACM Press,2006:215-218.
[7] Gonzalez R C,Wintz P.Digital Image Processing[M].2nd ed.New York,USA:Academic Press,1987.
[8] Yang J,Tian M.Denoising of Coal Flotation Froth Image Using Opening and Closing Filters with Area Reconstruction and Alternating Order Filtering[M]// Deng Hepu,Miao Duoqian,Lei Jingsheng.Artificial Intelligence and ComputationalIntelligence.Berlin, Germany:Springer,2011:376-382.
[9] Rane M A.Fast Morphological Image Processing on GPU Using CUDA[D].Pune,India:Pune University, 2013.
[10] Han Bo,Zhou Bingfeng.Efficient Video Decoding on GPUsby PointBased Rendering[C]//Proc.of Eurographics Symposium on Graphics Hardware. Vienna,Austria:ACM Press,2006:79-86.
[11] Wang Guohui,Wu M,Sun Yang,et al.A Massively Parallel Implementation of QC-LDPC Decoder on GPU[C]//Proc.of the 9th Symposium on Application Specific Processors.[S.l.]:IEEE Press,2011:82-85.
[12] NVIDIA.CUDA Programming Guide Version 2.1[M].Santa Clara,USA:NVIDIA Corporation,2009.
[13] Rao Chao,Liu Shuoqi.Research of CUDA in Intelligent Visual Surveillance Algorithms[C]//Proc.of the 3rd Chinese Conference on Intelligent Visual Surveillance.[S.l.]:IEEE Press,2011:73-76.
[14] NVIDIA.The CUDA Compiler Driver NVCC[M].Santa Clara,USA:NVIDIA Corporation,2009.
編輯 顧逸斐
Real-time Motion Detection Algorithm for High Definition Video Surveillance System
PENG Shuang,JIANG Rong-xin
(Network Multimedia Technology Research Laboratory of Zhejiang Province,Zhejiang University,Hangzhou 310027,China)
Aiming at high real-time demand for accurate motion detection in high-definition video surveillance system, this paper proposes an efficient motion detection algorithm based on Compute Unified Device Architecture(CUDA).By using an improved frame difference and background subtraction method of combining,background interference update is reduced and the accuracy of motion detection is enhanced.By performing video motion detection calculations in the CUDA, the traditional Graphic Processing Unit(GPU)hard decoded video data avoid storing in display memory transferred to CPU,which is the bottleneck problem.This paper uses multiple threads within a block coalesced access shared memory, reduces the amount by 52.9% of the global memory access,solves large-scale access to global memory latency CUDA larger problem.Experimental results show that for high-definition video monitoring system,the proposed motion detection algorithm can reach 52.6 frames per second,ensuring the accuracy as well,and can meet the real-time requirements.
video surveillance;motion detection;frame difference method;background subtraction method;hard decode; coalesced access
1000-3428(2014)11-0288-04
A
TP311.1
10.3969/j.issn.1000-3428.2014.11.057
浙江省級重點科技創(chuàng)新團隊基金資助項目(2011R09021-02)。
彭 爽(1989-),女,碩士研究生,主研方向:網(wǎng)絡(luò)多媒體,并行編程;蔣榮欣,副研究員。
2013-11-07
2013-12-02E-mail:vivo_peng@126.com
中文引用格式:彭 爽,蔣榮欣.面向高清視頻監(jiān)控系統(tǒng)的實時運動檢測算法[J].計算機工程,2014,40(11):288-291.
英文引用格式:Peng Shuang,Jiang Rongxin.Real-time Motion Detection Algorithm for High Definition Video Surveillance System[J].Computer Engineering,2014,40(11):288-291.