彭 爽,蔣榮欣
(浙江大學浙江省網絡多媒體技術研究重點實驗室,杭州310027)
面向高清視頻監控系統的實時運動檢測算法
彭 爽,蔣榮欣
(浙江大學浙江省網絡多媒體技術研究重點實驗室,杭州310027)
針對高清視頻監控系統中精確運動檢測的高實時性需求,提出一種基于計算統一設備架構(CUDA)的運動檢測算法。采用一種改進幀差與背景差分相結合的方法,減少背景更新干擾,提升運動檢測的精確性。在CUDA內進行視頻運動檢測計算,避免傳統圖形處理器硬解碼后視頻數據在顯示內存與CPU之間傳輸的問題。運用塊內多線程合并訪問共享內存的方式,減少52.9%全局內存訪問量,解決CUDA大規模訪問全局內存延遲較大的問題。實驗結果表明,該算法在保證準確性的同時,針對高清視頻每秒可傳輸52.6幀,能夠滿足實時性要求。
視頻監控;運動檢測;幀差法;背景差分法;硬解碼;合并訪問
運動檢測是監控領域的一個重要課題。特別是在需要安全防范的場合下,運動檢測能在發生異常情況時有效幫助跟蹤定位運動目標,自動報警或自動存儲視頻,是監控系統達到智能化的必要手段[1]。然而,隨著高清視頻的普及化,視頻的解碼及運動檢測很難達到精確性與實時性兼顧的要求。1080P分辨率的H264視頻碼流,通常碼率為8 Mb/s,幀率為25 f/s,意味著監控系統解碼的負荷量為8 Mb/s,運動檢測計算的負荷量為320 Mb/s,對實時精確地檢測運動目標構成了極大的挑戰[2]。
視頻監控系統運動偵測主要包含視頻解碼和運動檢測計算。視頻解碼分為軟解碼和硬解碼,高清視頻的軟解碼和運動檢測對CPU性能挑戰大,無法達到實時性需求。傳統的視頻硬解碼和運動檢測存在以下問題:(1)運動檢測算法主要有光流法、背景差分法、幀差法[3]。這3種算法都存在很大的局限性。光流法計算復雜,背景差分法對光線等背景變化敏感,幀差法無法提取完整的運動目標及內部紋理;(2)解碼后的數據存放于顯示內存中,而顯示內存與主存之間的數據傳輸速度受限于總線的傳輸速度[4]。
針對上述問題,本文提出基于CUDA的硬解碼及運動檢測算法,具體內容包括:(1)采用一種改進的幀差與背景差分結合的方法,完整地提取運動目標,有效避免背景誤判;(2)在CUDA環境下進行運動檢測計算,避免了顯示內存與內存傳輸的瓶頸問題;(3)針對CUDA對全局內存訪問延遲大的問題,采用塊(block)內多線程共享內存,一個線程處理4×4個像素,合并訪問其鄰域,降低運算復雜度。
2.1 傳統的運動檢測算法
背景差分法通過計算當前幀和設定背景的特征差,進行背景消去,然后與預設閾值作比較。若所得到的像素數大于預設閾值,則判定被監視場景中有運動物體,從而得到運動目標[5]。其優點是原理和算法設計簡單,但是對光線變化敏感,同時容易忽略與背景亮度相似的運動物體。幀差法是采用計算相鄰幀差絕對值是否大于閾值來檢測移動物體。其優點是算法簡單,對光線變化不敏感;缺點是無法完整地提取運動目標,且如果選擇幀間隔過大則判斷缺乏準確,幀間隔小則計算量較大[6]。在運動分量檢測后,通常畫面的噪點較多,需進行降噪操作以保證檢測的精確度[7]。
2.2 改進的運動檢測算法
針對背景差分法對背景變化敏感,幀差法無法完整提取運動目標等問題,本文采用一種改進的基于幀差和背景差分結合的運動檢測算法。將當前幀與上一參考幀相減,將所得圖像與背景差分后圖像進行位或運算后可準確提煉出運動目標所在區域。隨后針對存在移動物體的8×8宏塊單元進行開運算,去掉毛刺,去掉孤立的噪點像素[8-9]。將運動目標以外的區域更新到背景中,如圖1所示。

圖1 改進的運動檢測算法
在圖1中,It(x,y)是當前幀,I(t-1)(x,y)是上一參考幀,I(t-1)(x,y)為上一次更新過的背景圖像,其表達方式為:

將當前幀與參考幀進行絕對值減法運算:

再將I(t,m)(x,y)與B(t-1)(x,y)進行差分運算,后得到背景差分后運動區域。將此區域與幀差所得運動區域疊加,可得到完整的運動物體。圖像根據d閾值進行二值化,將運動區域與非運動區域區分出來:

此時運動區域尚有圖像噪點。利用圖像開運算提取運動目標骨干信息,去掉毛刺,減少孤立噪點的影響:

同時,將運動區域按8×8宏塊存儲,若當前區域內有運動像素,則置為255,反之置為0:

該算法相比幀差法能更完整地檢測到運動目標,并能準確完整地反映運動物體的位置與移動量。同時相比背景差分法降低了光線等因素的影響,可精確地獲得運動物體的形狀與內部紋理。
3.1 CUDA硬解碼及運動檢測算法
本文選取NVIDA公司提供的CUDA開發包進行實驗。將網絡碼流解析后組成完整視頻幀,送入GPU進行解碼,解碼出來的數據為NV12或者YV12格式。這2種數據格式都屬于YUV格式,其Y分量都是連續的,NV12的U,V分量為交叉分布,YV12的U,V分量為連續分布[10]。而運動檢測算法通常只需取像素點的亮度分量,即Y分量進行計算。獲取Y分量后進行運動檢測計算,計算完成后將YUV數據格式轉化成顯卡可渲染的RGB數據進行顯示,同時更新背景幀。通知業務層進行運動偵測的后處理,如自動報警或自動存儲等,如圖2所示。
GPU解碼后的數據存放于紋理內存中,即顯示內存[11]。而顯示內存與內存間的數據傳輸速度為當前的難題。基于CUDA的運動檢測計算是直接從紋理內存讀取數據,有效地避免這一瓶頸。

圖2 視頻監控系統運動檢測算法流程
在CUDA中將待檢測的Y圖像分量作幀差與背景差分運算,得到的2個運動區域進行疊加,利用開運算將背景中的毛刺去除,提取準確的運動目標。將運動區域以外的圖像塊更新到背景中,流程如圖3所示。

圖3 CUDA環境內數據處理流程
3.2 CUDA數據處理布局
CUDA架構的內存分為寄存器、常量內存、紋理內存、共享內存、本地內存和全局內存等。共享內存讀寫速度相當快,一般為1個~2個GPU時鐘周期,而全局內存讀寫速度高達400個GPU時鐘周期左右[12]。共享內存要求數據有局部性重用(一個block內共享),且每個GPU處理單元共享內存最大限制為48 KB,所以不適用針對高清圖像的多步處理;全局內存容量大,適合圖像批處理數據的存儲。為了提高訪問全局存儲器的效率,本文采用了一種稱為合并訪問的機制來加速全局存儲器的訪問[13]。
當運動檢測計算時,大量的訪問全局內存存在冗余性,效率較低。因此,本文采用一種共享內存和全局存儲器合并訪問的方式。同一個塊內線程可訪問同一共享內存,每個線程可將當前待處理數據和上下鄰域數據存儲至共享內存中,如圖4所示。當所有線程讀取完畢后,線程處理時可直接從共享內存中獲取需要訪問的鄰域數據。為了能夠高效地訪問顯存,讀取和存儲必須對齊,寬度為4 Byte。如果沒有正確的對齊,讀寫將被編譯器拆分為多次操作,極大地影響效率[14]。計算每個輸出點時,需要取其鄰域的8個像素,相鄰像素處理時讀取到的數據有重疊(如圖5(a)所示),為了避免重復訪問所以每個線程處理4×4個像素,計算此16個像素點時,共訪問36個鄰域像素值,為4字節對齊(如圖5(b)所示)。4×4像素計算時,每個線程平均需要訪問全局內存68次,而采用共享內存后,每個線程平均訪問全局內存次數降低至36次,節省了52.9%的全局內存訪問。

圖4 同一塊內共享內存存儲數據

圖5 單數據處理和塊數據處理方式對比
運用CUDA進行塊內的計算時,需要通過<<<numBlocks,threadPerBlock> > > 進 行 內 核數(numBlocks)和塊內線程數(threadsPerBlock)的配置[12]。針對上文中提到的每次處理4×4個數據,每次訪問到的數據x坐標idx,y坐標idy分別為:

其中,blockIdx為當前塊的索引號;blockDim表示每個塊的維度;threadIdx為當前塊內線程索引號。
該算法實驗環境的 GPU為 NVIDIA Geforce 8400 GS(computer capability:1.1),CPU為Intel(R) Core(TM)2 Duo。網絡視頻分辨率分別設置為720×480像素,1 280×720像素和1 920×1 080像素。實驗數據如圖6所示。其中,圖6(a)為上一次更新過的背景圖像;圖6(b)為上一幀圖像;圖6(c)為當前幀;圖6(d)為圖6(a)與圖6(c)進行差分閾值二值化的圖像;圖6(e)為圖6(b)與圖6(c)進行幀差閾值二值化的圖像;圖 6(f)為圖 6(d)和圖6(e)圖像位或后所得圖像;圖6(g)為圖6(f)進行開運算后的圖像;圖6(h)為提取的運動宏塊,此運動宏塊以外的區域進行背景更新。

圖6 高清監控運動檢測實驗輸出
實驗結果表明,本文采取的改進幀差與背景差分結合的方法可以準確檢測出運動目標的輪廓以及內部紋理,將圖像進行開運算后去除了孤立噪點,消除了誤判斷成運動目標的小物體。所以本文中的基于CUDA的解碼及運動檢測算法保證了輸出數據的精確度。
在相同環境下,運用相同算法對比CPU和GPU的運動檢測計算,實驗數據如表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中為不同分辨率的視頻解碼及運動檢測所需時間的平均數據。

表1 不同分辨率的視頻解碼及運動檢測所需時間對比
表1數據顯示,針對720×480像素,1 280×720像素,1 920×1 080像素分辨率的視頻,基于CUDA的硬解碼及運動檢測與CPU軟解碼和運動檢測相比,總時間分別縮短了5.2倍、6.0倍、10.4倍。
從表2數據可看出,基于CUDA的運動檢測計算運用本文中優化后的內存訪問方案較優化前平均時間縮短了1.91倍。表中的時間比表示優化前的檢測時間與優化后的檢測時間之比。針對1 080 P分辨率,基于CUDA的視頻運動檢測方法幀率可達52.6 f/s,滿足了高清智能監控系統的實時性要求。

表2 不同分辨率的GPU運動檢測優化前后時間對比
本文設計了一個在高清智能監控系統中的環境實時運動檢測算法。該算法兼顧了高清視頻運動檢測的準確性與實時性。實驗結果表明,本文提出的運動檢測算法精度高,計算復雜度較低。在GPU內進行圖像運動檢測計算可避免傳統GPU硬解碼后顯示內存中視頻數據與CPU之間的傳輸瓶頸問題。在CUDA內部的運動檢測算法采用了多線程共享內存與合并訪問的方式,減少了數據訪問延遲,保證了高清智能監控系統的實時性要求。
[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].吉林大學學報:信息科學版,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
浙江省級重點科技創新團隊基金資助項目(2011R09021-02)。
彭 爽(1989-),女,碩士研究生,主研方向:網絡多媒體,并行編程;蔣榮欣,副研究員。
2013-11-07
2013-12-02E-mail:vivo_peng@126.com
中文引用格式:彭 爽,蔣榮欣.面向高清視頻監控系統的實時運動檢測算法[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.