一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法
【專利摘要】本發(fā)明提出了基于Spark的海量視頻語(yǔ)義標(biāo)注方法,其主要是以海量視頻在Hadoop大數(shù)據(jù)集群環(huán)境下的彈性分布式存儲(chǔ)為基礎(chǔ),采用Spark計(jì)算模式進(jìn)行視頻標(biāo)注。該方法主要包括以下內(nèi)容:基于分形理論的視頻分割方法及其在Spark上的實(shí)現(xiàn);基于Spark的視頻特征提取方法和基于元學(xué)習(xí)策略的視覺(jué)單詞形成方法;基于Spark的視頻標(biāo)注的生成方法。本發(fā)明,相對(duì)于傳統(tǒng)的單機(jī)計(jì)算、并行計(jì)算或分布式計(jì)算,計(jì)算速度提高百倍以上,具有標(biāo)注內(nèi)容信息全、錯(cuò)誤率低等優(yōu)點(diǎn)。
【專利說(shuō)明】—種基于Spark的海量視頻語(yǔ)義標(biāo)注方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種視頻的處理方法,特別是一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法。
【背景技術(shù)】
[0002]近年來(lái),隨著多媒體應(yīng)用及社交網(wǎng)絡(luò)的風(fēng)靡流行,各種多媒體數(shù)據(jù)(文本、圖像以及視頻等)呈現(xiàn)指數(shù)級(jí)的爆炸式增長(zhǎng);這些大規(guī)模數(shù)據(jù)給傳統(tǒng)的多媒體研究,尤其是基于視頻應(yīng)用和研究帶來(lái)了新的挑戰(zhàn)和機(jī)遇,如何有效地組織、利用視頻數(shù)據(jù)來(lái)驅(qū)動(dòng)和滿足用戶對(duì)于視頻多種個(gè)性化需求正成為計(jì)算機(jī)視覺(jué)和多媒體領(lǐng)域的一個(gè)研究熱點(diǎn)。
[0003]人類所理解的視頻與用底層視覺(jué)特征來(lái)表達(dá)的視頻之間存在著很大的差距,即在視頻語(yǔ)義和視覺(jué)特征之間橫亙著“語(yǔ)義鴻溝”。為了實(shí)現(xiàn)更為貼近用戶理解能力的、用自然語(yǔ)言描述的查詢方式,對(duì)視頻語(yǔ)義標(biāo)注的研究逐漸引起人們的廣泛注意。標(biāo)注就是使用語(yǔ)義關(guān)鍵字或標(biāo)簽來(lái)表示一幅視頻的語(yǔ)義內(nèi)容,進(jìn)而可以將視頻檢索轉(zhuǎn)化為基于文本的檢索。早期,基于文本的視頻檢索大都采用人工標(biāo)注的方法,即需要專業(yè)人員對(duì)每幅視頻標(biāo)出關(guān)鍵字。然而,一方面人工標(biāo)注存在主觀性和不精確性,直接影響到檢索結(jié)果的準(zhǔn)確性?’另一方面對(duì)視頻進(jìn)行人工標(biāo)注費(fèi)時(shí)費(fèi)力,尤其是面對(duì)目前的海量視頻,人工標(biāo)注十分困難。
[0004]大數(shù)據(jù)技術(shù)為海量視頻標(biāo)注提供了一個(gè)有效的解決途徑。一方面,大數(shù)據(jù)技術(shù)可以解決大容量視頻數(shù)據(jù)的存儲(chǔ)問(wèn)題;另一方面,分布式運(yùn)算也可以解決視頻語(yǔ)義分析運(yùn)算。Spark是UC Berkeley AMP lab所開(kāi)源的并行計(jì)算框架,Spark基于MapReduce算法實(shí)現(xiàn)的分布式計(jì)算,擁有Hadoop/MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。
[0005]同時(shí),Spark在機(jī)器學(xué)習(xí)方面有著無(wú)與倫比的優(yōu)勢(shì),特別適合需要多次迭代計(jì)算的視頻標(biāo)注算法。同時(shí)Spark的擁有非常出色的容錯(cuò)和調(diào)度機(jī)制,確保系統(tǒng)的穩(wěn)定運(yùn)行。因此,使用Spark計(jì)算框架解決海量視頻標(biāo)注問(wèn)題,具有非常好的易用性。
[0006]國(guó)內(nèi)外已有諸多學(xué)者對(duì)多媒體標(biāo)注進(jìn)行了深入研究,圖像內(nèi)容語(yǔ)義注釋方法(專利申請(qǐng)?zhí)?00610053867.9)將圖像處理技術(shù)與機(jī)器學(xué)習(xí)技術(shù)以及自然語(yǔ)言處理等技術(shù)結(jié)合起來(lái),實(shí)現(xiàn)了對(duì)圖像內(nèi)容的語(yǔ)義標(biāo)注;同時(shí)支持根據(jù)用戶的標(biāo)注特點(diǎn)校正底層的標(biāo)注映射規(guī)則庫(kù),使得標(biāo)注結(jié)果更符合具體用戶的標(biāo)注要求。一種基于語(yǔ)義二叉樹(shù)的圖像標(biāo)注(專利申請(qǐng)?zhí)?01110002770.6)對(duì)于特定場(chǎng)景的圖像集,采用圖像分割算法對(duì)用于學(xué)習(xí)的標(biāo)注圖像進(jìn)行分割,獲得圖像區(qū)域的視覺(jué)描述;同時(shí),構(gòu)造用于學(xué)習(xí)的所有圖像的視覺(jué)最近鄰圖并建立所述場(chǎng)景的語(yǔ)義二叉樹(shù);最后,對(duì)所述場(chǎng)景下的待標(biāo)注圖像,從語(yǔ)義二叉樹(shù)的根節(jié)點(diǎn)到葉子節(jié)點(diǎn)找到相應(yīng)位置,并將該節(jié)點(diǎn)處到根節(jié)點(diǎn)的所有標(biāo)注字傳遞給所述圖像。
[0007]這兩種方法在數(shù)據(jù)量不大、實(shí)時(shí)性要求不高的情況下,能夠取得不錯(cuò)的圖片標(biāo)注效果,但對(duì)于海量視頻資源,單機(jī)的計(jì)算資源明顯無(wú)法支持大規(guī)模運(yùn)算,因此該算法無(wú)法應(yīng)用到海量視頻標(biāo)注中去。本發(fā)明中,在Spark框架強(qiáng)計(jì)算能力的支持下,通過(guò)顏色矩、邊緣、紋理三重特征表征一類實(shí)體,采用元學(xué)習(xí)策略在實(shí)體表征合理性和分類學(xué)習(xí)可靠性方面有了很大提聞。
【發(fā)明內(nèi)容】
[0008]發(fā)明目的:本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法。
[0009]為了解決上述技術(shù)問(wèn)題,本發(fā)明公開(kāi)了一種一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法,包括以下步驟:
[0010]步驟1:將海量視頻部署到一組計(jì)算節(jié)點(diǎn)上,通過(guò)Spark集群計(jì)算視頻巾貞時(shí)間序列的分形維度差值,實(shí)現(xiàn)鏡頭分割,獲取關(guān)鍵幀;關(guān)于Spark集群和Hadoop,可以參見(jiàn):
1、基于Spark的機(jī)器學(xué)習(xí)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn),唐振坤,廈門大學(xué),2014-05-01,碩士論文;
2、基于Hadoop的海量視頻數(shù)據(jù)存儲(chǔ)及轉(zhuǎn)碼系統(tǒng)的研究與設(shè)計(jì),李曉波,浙江工業(yè)大學(xué),2013-03-28,碩士論文;3、基于Hadoop開(kāi)源框架的視頻內(nèi)容分發(fā)平臺(tái)研究,葉志強(qiáng);劉晨鳴;王一梅廣播電視信息,2013-03-15
[0011]步驟2:在Spark集群上提取對(duì)象的檢測(cè)樣本的顏色矩、邊緣以及紋理特征向量,進(jìn)行元學(xué)習(xí)策略訓(xùn)練,形成視覺(jué)詞典;并依據(jù)視覺(jué)詞典對(duì)關(guān)鍵視頻幀進(jìn)行預(yù)測(cè),產(chǎn)生能表征該關(guān)鍵視頻幀的視覺(jué)單詞;
[0012]步驟3:通過(guò)Tf方法對(duì)待測(cè)視頻的視覺(jué)單詞進(jìn)行優(yōu)先排序,將篩選結(jié)果作為該視頻的標(biāo)注。TF詞頻(Term Frequency),TF表示詞條在文檔中出現(xiàn)的頻率,頻率越高說(shuō)明該視覺(jué)單詞在視頻中的重要性越大。
[0013]步驟I在Spark集群上實(shí)現(xiàn)視頻分割,劃分海量視頻分布至一組計(jì)算節(jié)點(diǎn),利用分形方法將視頻按時(shí)間序列分割為若干鏡頭,并提取關(guān)鍵幀,具體包括如下步驟:步驟1-1:轉(zhuǎn)換視頻數(shù)據(jù)格式,將視頻二進(jìn)制數(shù)據(jù)通過(guò)Hadoop自定義輸出流轉(zhuǎn)換為Spark集群可讀取的byte型數(shù)據(jù),并保存到Hadoop分布式系統(tǒng)Hadoop Distributed File System(以下簡(jiǎn)稱“HDFS”)上;根據(jù)視頻總幀數(shù),利用并行分塊函數(shù)parallelize把視頻切分為塊,一個(gè)塊代表一個(gè)視頻巾貞的彈性分布式數(shù)據(jù)集Resilient Distributed Datasets (以下簡(jiǎn)稱“RDD”)數(shù)據(jù)對(duì)象parVideoRDD ;調(diào)用幀處理程序,將parVideoRDD中的每一數(shù)據(jù)塊都并行的分配到P個(gè)計(jì)算節(jié)點(diǎn),從而實(shí)現(xiàn)對(duì)整個(gè)視頻的幀數(shù)據(jù)并行處理;
[0014]步驟1-2:采用差分盒法,計(jì)算每一視頻幀分形維度,通過(guò)時(shí)間序列的分形維度差值,求出切變鏡頭和漸變鏡頭的邊界,從而將視頻分割為一組鏡頭;在此計(jì)算過(guò)程中,通過(guò)Spark在各計(jì)算節(jié)點(diǎn)見(jiàn)的聯(lián)系方式SparkContext實(shí)現(xiàn)各個(gè)計(jì)算節(jié)點(diǎn)間共享,使用映射函數(shù)map O完成分配步驟,再使用歸一函數(shù)reduce O完成更新步驟;
[0015]步驟1-3:按時(shí)間序列,取每一鏡頭臨界幀作為該鏡頭的關(guān)鍵幀,返回Spark主節(jié)點(diǎn)的結(jié)果是關(guān)鍵幀號(hào)和其場(chǎng)景描述的視頻幀的RDD數(shù)據(jù),將該視頻幀的RDD數(shù)據(jù)存儲(chǔ)為KeyFrameSce.txt文本文件,用于后續(xù)步驟調(diào)用。
[0016]步驟2包括如下步驟:
[0017]步驟2-1:截取一組包括待測(cè)對(duì)象的各類圖片,作為該對(duì)象的檢測(cè)樣本;將圖片通過(guò)通道管理函數(shù)pipeO分配到一組計(jì)算節(jié)點(diǎn),根據(jù)關(guān)鍵幀顏色矩、邊緣直方圖以及分形維度特征提取18維特征向量,用于表征該對(duì)象的圖像語(yǔ)義內(nèi)容;返回Spark主節(jié)點(diǎn)的結(jié)果是特征向量RDD數(shù)據(jù),將其輸出到文本文件SampleVec.txt中,此時(shí)SampleVec.txt文本文件包含該對(duì)象的特征信息;
[0018]步驟2-2:將分布式文件系統(tǒng)HDFS上的文本文件SampleVec.txt通過(guò)分析類SparkContext的文本讀取函數(shù)TextFile讀取字符串String類型的RDD數(shù)據(jù)SampleVecRDD,并將該數(shù)據(jù)分配到P個(gè)計(jì)算節(jié)點(diǎn),P為大于I的自然數(shù);采用基于元學(xué)習(xí)策略的4種分類算法,包括Generalized Winnow算法、支持向量機(jī)算法、條件隨機(jī)域算法和最大熵算法,對(duì)代表該類對(duì)象的語(yǔ)義內(nèi)容進(jìn)行特征訓(xùn)練,形成代表該類對(duì)象的視覺(jué)單詞,并與文字語(yǔ)義內(nèi)容相關(guān)聯(lián);視覺(jué)單詞是一個(gè)由元分類器表征且與文字語(yǔ)義內(nèi)容存在相應(yīng)映射關(guān)系的XML文件,每一個(gè)XML文件代表一類視覺(jué)單詞;
[0019]步驟2-3:重復(fù)步驟2-1和步驟2-2,訓(xùn)練得到一組能夠代表一類對(duì)象的特征的視覺(jué)單詞,與相對(duì)應(yīng)的文字語(yǔ)義內(nèi)容建立映射關(guān)系后,匯聚成視覺(jué)詞典;
[0020]步驟2-4:根據(jù)步驟2-1的,將步驟1-3得到的關(guān)鍵視頻幀數(shù)據(jù)通過(guò)通道管理函數(shù)pipeO分配到一組計(jì)算節(jié)點(diǎn),并提取18維特征向量,用于表征該關(guān)鍵視頻幀的語(yǔ)義內(nèi)容;返回Spark主節(jié)點(diǎn)的結(jié)果是關(guān)鍵視頻幀的幀序號(hào)和特征向量RDD數(shù)據(jù),將返回的[幀序號(hào),特征向量RDD數(shù)據(jù)]輸出到文本文件KeyFrameVec.txt中,此時(shí)KeyFrameVec.txt文本文件包含整個(gè)視頻文件關(guān)鍵幀信息;
[0021]步驟2-5:根據(jù)步驟2-2,將分布式文件系統(tǒng)HDFS上的文本文件KeyFrameVec.txt通過(guò)SparkContext的文本讀取函數(shù)TextFile函數(shù)讀取字符串String類型RDD數(shù)據(jù)FrameVecRDD,數(shù)據(jù)FrameVecRDD每一行包含一巾貞號(hào)及語(yǔ)義特征向量,并將數(shù)據(jù)FrameVecRDD分配到P個(gè)計(jì)算節(jié)點(diǎn);對(duì)照視覺(jué)詞典,采用元學(xué)習(xí)策略對(duì)代表視頻巾貞語(yǔ)義內(nèi)容的特征向量進(jìn)行預(yù)測(cè),得出該視頻幀所表述的一個(gè)以上的視覺(jué)單詞;返回的結(jié)果是幀序號(hào)、視覺(jué)單詞、對(duì)應(yīng)文字組合的RDD數(shù)據(jù),將該RDD數(shù)據(jù)存儲(chǔ)為Word, txt文本文件,用于后續(xù)步驟調(diào)用。
[0022]步驟3將視頻中各關(guān)鍵幀對(duì)應(yīng)的視覺(jué)單詞進(jìn)行匯總,通過(guò)Tf模型篩選,實(shí)現(xiàn)視頻基于量化單詞的線性表達(dá),形成視頻標(biāo)注,具體包括如下步驟:
[0023]步驟4-1:將HDFS上的文本文件Word, txt讀取到Spark集群上,設(shè)待測(cè)視頻所有關(guān)鍵幀共含有M個(gè)視覺(jué)單詞,將這些視覺(jué)單詞按照權(quán)值的大小進(jìn)行排序,權(quán)值范圍O?1,視覺(jué)單詞權(quán)值由Tf模型決定;
[0024]步驟4-2:通過(guò)數(shù)據(jù)集RDD的保存文檔函數(shù)SaveAsTextFile將視覺(jué)單詞、對(duì)應(yīng)文字及出現(xiàn)概率保存為HDFS上的文本文件Keywords, txt,取出現(xiàn)頻率最高的五個(gè)視覺(jué)單詞作為該視頻的標(biāo)注。
[0025]步驟2-1中,所述一組包括待測(cè)對(duì)象的各類圖片為I萬(wàn)至3萬(wàn)張。
[0026]本發(fā)明涉及基于Spark的海量視頻語(yǔ)義標(biāo)注方法。首先,在Spark集群上,以HDFS存儲(chǔ)方式將海量視頻部署到若干計(jì)算節(jié)點(diǎn)上,通過(guò)分形維度實(shí)現(xiàn)鏡頭分割。其次,在Spark集群上提取對(duì)象樣本的顏色矩、邊緣以及紋理特征向量,進(jìn)行元學(xué)習(xí)策略訓(xùn)練,形成視覺(jué)詞典;并依據(jù)視覺(jué)詞典對(duì)關(guān)鍵幀進(jìn)行預(yù)測(cè),產(chǎn)生能表征該鏡頭的視覺(jué)單詞。最后,通過(guò)Tf方法對(duì)待測(cè)視頻的視覺(jué)單詞進(jìn)行排序,將篩選結(jié)果作為該視頻的標(biāo)注。
[0027]本發(fā)明與現(xiàn)有技術(shù)相比,其顯著優(yōu)點(diǎn)為:采用Spark計(jì)算框架,將存儲(chǔ)和計(jì)算節(jié)點(diǎn)在物理上結(jié)合在一起,從而避免在數(shù)據(jù)密集計(jì)算中易形成的1/0吞吐量的制約,通過(guò)數(shù)據(jù)冗余性,提升了可擴(kuò)展性、容錯(cuò)能力、并發(fā)訪問(wèn)能力和并發(fā)讀寫能力;實(shí)現(xiàn)了對(duì)體量龐大的非結(jié)構(gòu)化視頻數(shù)據(jù)進(jìn)行分析,將海量復(fù)雜多源的視頻數(shù)據(jù)轉(zhuǎn)化為機(jī)器可識(shí)別的、具有明確語(yǔ)義的信息,進(jìn)而進(jìn)行視頻標(biāo)注。
【專利附圖】
【附圖說(shuō)明】
[0028]下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明做更進(jìn)一步的具體說(shuō)明,本發(fā)明的上述和/或其他方面的優(yōu)點(diǎn)將會(huì)變得更加清楚。
[0029]圖1基于Spark的海量視頻語(yǔ)義標(biāo)注流程圖。
[0030]圖2海量視頻數(shù)據(jù)Hadoop存儲(chǔ)模型架構(gòu)圖。
[0031]圖3Hadoop存儲(chǔ)模型架構(gòu)的寫操作過(guò)程示意圖。
[0032]圖4Hadoop存儲(chǔ)模型架構(gòu)的讀操作過(guò)程示意圖。
[0033]圖5基于Spark的元學(xué)習(xí)訓(xùn)練過(guò)程示意圖。
[0034]圖6基于Spark的元學(xué)習(xí)測(cè)試過(guò)程示意圖。
【具體實(shí)施方式】
[0035]本發(fā)明基于Spark的海量視頻語(yǔ)義標(biāo)注方法,步驟如下:
[0036]第一步,建立Hadoop/Spark海量視頻大數(shù)據(jù)平臺(tái),該平臺(tái)由管理模塊、結(jié)構(gòu)模塊和數(shù)據(jù)模塊三部分組成且相互獨(dú)立,實(shí)現(xiàn)海量數(shù)據(jù)的彈性存儲(chǔ);模塊間通過(guò)以太網(wǎng)實(shí)現(xiàn)通信,實(shí)現(xiàn)各模塊單獨(dú)維護(hù)和升級(jí),靈活處理系統(tǒng)的冗余和備份。如圖2所示,管理模塊向操作系統(tǒng)(客戶端)提供一組訪問(wèn)界面,主要包括:對(duì)文件和目錄的建立、打開(kāi)、關(guān)閉、撤銷、讀、寫、權(quán)限管理等。操作系統(tǒng)(客戶端)通過(guò)這些訪問(wèn)界面獲得數(shù)據(jù)存儲(chǔ)系統(tǒng)的各種服務(wù)。結(jié)構(gòu)模塊,將不同結(jié)構(gòu)的數(shù)據(jù)文件在數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)表,表中描述了文件屬性信息和文件存儲(chǔ)信息。數(shù)據(jù)模塊是管理模塊、結(jié)構(gòu)模塊的橋梁。數(shù)據(jù)模塊將管理模塊提交的用戶文件以硬盤數(shù)據(jù)塊或扇區(qū)為單位存儲(chǔ)到文件系統(tǒng),并將磁盤數(shù)據(jù)塊或扇區(qū)信息存入結(jié)構(gòu)模塊中。
[0037]實(shí)現(xiàn)數(shù)據(jù)寫操作過(guò)程,如圖3所示。
[0038]I)客戶端調(diào)用管理模塊接口調(diào)用函數(shù)來(lái)創(chuàng)建文件。
[0039]2)向文件數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)查詢文件信息。若文件不存在,在文件數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)新的文件,即在對(duì)應(yīng)文件類型的數(shù)據(jù)表中添加一條表項(xiàng)。管理軟件模塊返回“文件輸出”命令給客戶端,并創(chuàng)建文件輸出緩沖,此緩沖用于客戶端寫入文件數(shù)據(jù)。文件輸出緩沖的大小應(yīng)和數(shù)據(jù)模塊的數(shù)據(jù)塊(扇區(qū))大小保持一致。
[0040]3)客戶端準(zhǔn)備寫入文件數(shù)據(jù)。將文件按數(shù)據(jù)塊(扇區(qū))的大小分割成獨(dú)立塊,再將第一個(gè)文件塊寫入文件輸出緩沖,并將寫入文件輸出緩沖的數(shù)據(jù)大小信息發(fā)送給管理模塊。
[0041]4)客戶端向管理軟件模塊發(fā)出數(shù)據(jù)準(zhǔn)備完畢消息。
[0042]5)管理模塊向大數(shù)據(jù)數(shù)據(jù)模塊請(qǐng)求一個(gè)磁盤塊(扇區(qū))。
[0043]6)把磁盤塊(扇區(qū))號(hào)返回給管理模塊,并對(duì)本塊(扇區(qū))做已分配標(biāo)記。
[0044]7)管理模塊將文件輸出緩沖中的數(shù)據(jù)發(fā)送給數(shù)據(jù)模塊。
[0045]8)數(shù)據(jù)模塊將文件系統(tǒng)返回的磁盤塊(扇區(qū))地址返回給管理模塊。
[0046]9)管理模塊收到確認(rèn)消息后并通知結(jié)構(gòu)模塊把這個(gè)磁盤塊(扇區(qū))地址記錄到文件的disk和sector表項(xiàng)中,并累計(jì)己寫入的文件大小。
[0047]10)管理模塊向客戶端發(fā)數(shù)據(jù)寫入成功消息,并通知客戶端寫入下一個(gè)文件塊。循環(huán)執(zhí)行3)到10),直到所有的文件塊都傳輸完畢。
[0048]11)客戶端收到最后一個(gè)文件塊的寫入確認(rèn)消息后向管理模塊發(fā)出關(guān)閉文件消息,文件管理模塊收到文件關(guān)閉消息后執(zhí)行文件關(guān)閉操作,文件寫入過(guò)程結(jié)束。實(shí)現(xiàn)數(shù)據(jù)讀的過(guò)程如下,如圖4所示。
[0049]I)客戶端調(diào)用管理模塊接口調(diào)用函數(shù)打開(kāi)所要讀取的文件。
[0050]2)管理模塊向文件數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)模塊發(fā)出讀取文件信息命令。
[0051]3)文件數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)模塊返回文件信息。管理模塊得到該文件的所有文件信息和對(duì)應(yīng)的數(shù)據(jù)塊(扇區(qū))地址。
[0052]4)管理模塊創(chuàng)建文件輸入緩沖,此緩沖用于客戶端讀取文件數(shù)據(jù)。文件輸入緩沖的大小應(yīng)和數(shù)據(jù)模塊的數(shù)據(jù)塊(扇區(qū))大小一致。管理模塊根據(jù)文件數(shù)據(jù)塊(扇區(qū))地址向數(shù)據(jù)模塊發(fā)出數(shù)據(jù)塊(扇區(qū))讀取命令。
[0053]5)數(shù)據(jù)模塊將數(shù)據(jù)塊(扇區(qū))數(shù)據(jù)發(fā)送到管理模塊。
[0054]6)管理模塊通知客戶端輸入數(shù)據(jù)準(zhǔn)備好。
[0055]7)客戶端調(diào)用管理模塊接口調(diào)用函數(shù)開(kāi)始讀取數(shù)據(jù)。
[0056]8)管理模塊將輸入緩沖數(shù)據(jù)和數(shù)據(jù)大小值發(fā)送到客戶端。
[0057]9)客戶端向管理模塊發(fā)送數(shù)據(jù)讀取確認(rèn)消息。管理模塊收到確認(rèn)消息后開(kāi)始重復(fù)步驟5到步驟10。
[0058]10)全部數(shù)據(jù)塊都發(fā)送完畢后,管理模塊向客戶端發(fā)送文件關(guān)閉消息。
[0059]第二步,將海量視頻部署到若干計(jì)算節(jié)點(diǎn)上,在Spark集群上,通過(guò)分形維度實(shí)現(xiàn)鏡頭分割,并提取鏡頭關(guān)鍵幀。
[0060]I)轉(zhuǎn)換視頻數(shù)據(jù)格式,將HDFS上二進(jìn)制的視頻數(shù)據(jù)通過(guò)Hadoop的自定義輸出流轉(zhuǎn)換為Spark可讀取的數(shù)據(jù),視頻數(shù)據(jù)通過(guò)分析類SparkContext的文件讀取函數(shù)TextFile讀取為Spark集群上的String類型RDD數(shù)據(jù)VideoRDD,利用RDD的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)toArray將該RDD數(shù)據(jù)轉(zhuǎn)換為Int型的Array數(shù)據(jù)VideoArray。根據(jù)視頻的總巾貞數(shù),利用數(shù)據(jù)并行分塊函數(shù)parallelize把VideoArray切分為塊大小為一個(gè)視頻幀的RDD數(shù)據(jù)parVideoRDD,此時(shí)調(diào)用幀處理程序,parVideoRDD中的每一塊數(shù)據(jù)區(qū)都將并行的分配到P個(gè)計(jì)算節(jié)點(diǎn),從而實(shí)現(xiàn)了對(duì)整個(gè)視頻的幀數(shù)據(jù)并行處理。
[0061]2)通過(guò)SparkContext的參數(shù)共享函數(shù)broadcast在各個(gè)計(jì)算節(jié)點(diǎn)間共享鏡頭分割所需的參數(shù)。在每個(gè)計(jì)算節(jié)點(diǎn),對(duì)每一視頻幀采用差分盒法計(jì)算分形維度,定義第i幀圖像的分形維度為Di,則第i幀與第i+Ι幀的分形維度差fdi = |Di+1-D」。在同一個(gè)鏡頭內(nèi),幀差變化存在于很小范圍內(nèi)。鏡頭邊界幀差應(yīng)遠(yuǎn)大于所屬鏡頭幀差平均值和下一時(shí)間序列鏡頭的幀差平均值。對(duì)于切邊鏡頭,迭代求解出最大幀差fd_,幀前鏡頭的幀差平均值fdbavg,幀后鏡頭的幀差平均值fda avg。如果fdmax > 2*fdb avg且fdmax > 2*fda avg,則判定該幀是切變的鏡頭邊界。對(duì)于漸變鏡頭,當(dāng)漸變未被標(biāo)記時(shí),若fdmax > 2*fdb avg且fdmax < 2*fdaavg,則判定為漸變鏡頭邊界的開(kāi)始幀;如果漸變開(kāi)始幀己被標(biāo)記,若fdmax > 2*fda avg,則判定為漸變鏡頭邊界的結(jié)束幀,從而將視頻按照時(shí)間序列切分為若干鏡頭。
[0062]3)若所有視頻幀處理過(guò)后,視頻每一幀均轉(zhuǎn)化為[幀序號(hào),分形維度]RDD數(shù)據(jù),返回Spark主節(jié)點(diǎn)的結(jié)果是一組時(shí)間序列臨界幀(簡(jiǎn)稱“關(guān)鍵幀”)的幀號(hào)和其場(chǎng)景描述圖像RDD數(shù)據(jù),該RDD數(shù)據(jù)存儲(chǔ)為KeyFrameSce.txt文本文件,此時(shí)整個(gè)文件包含視頻文件關(guān)鍵幀的屬性信息,以便進(jìn)一步調(diào)用。
[0063]第三步:在Spark集群上提取對(duì)象樣本的顏色矩、邊緣以及紋理特征向量,進(jìn)行元學(xué)習(xí)策略訓(xùn)練,形成視覺(jué)詞典;并依據(jù)視覺(jué)詞典對(duì)關(guān)鍵幀進(jìn)行預(yù)測(cè),產(chǎn)生能表征該鏡頭的視覺(jué)單詞。
[0064]I)選取兩萬(wàn)張對(duì)象的各種樣本圖片并提取其底層特征,包括8維的顏色矩、9維邊緣分布直方圖、I維分形維度特征,組成包括顏色、邊緣、紋理在內(nèi)的18維特征向量;由于分形維度能更好的表示圖像特征,這里賦予32%的權(quán)重,其他各維均勻賦予4%的權(quán)重。這樣的一組特征向量就代表了該對(duì)象的視覺(jué)特征。將這些圖片通過(guò)通道管理函數(shù)pipe O分配到一組計(jì)算節(jié)點(diǎn)進(jìn)行特征提取,返回Spark主節(jié)點(diǎn)的結(jié)果是特征向量RDD數(shù)據(jù),將其輸出到文本文件SampleVec.txt中,此時(shí)SampleVec.txt文本文件包含該對(duì)象的特征信息;
[0065]2)將 Hadoop 的 HDFS 上的 SampleVec.txt 文本文件通過(guò) SparkContext 的文件讀取函數(shù)TextFile讀取為Spark集群上的String類型RDD數(shù)據(jù)SampleVecRDD,并將該數(shù)據(jù)分配到P個(gè)計(jì)算節(jié)點(diǎn)。采用基于元學(xué)習(xí)策略對(duì)代表圖片樣本語(yǔ)義內(nèi)容的特征向量進(jìn)行訓(xùn)練。即將4種分類算法即GeneralizedWinnow算法、支持向量機(jī)算法(SVM)、條件隨機(jī)域算法(CRF)和最大熵算法(ME)作為基分類器,圖片實(shí)例Xi(i為η個(gè)圖片的序號(hào)),其表征特征向量為Vec (Xi),正確分類標(biāo)識(shí)為I (Xi),通過(guò)上述4種學(xué)習(xí)算法訓(xùn)練,分別獲得基分類模型 Mgen、MSVM、MKCF、MME,將 4 種算法的預(yù)測(cè)結(jié)果 P (Xi) gen、P (Xi) SVM、P(Xi)10^ P(Xi)Iffi 和 Vec(Xi)、Kxi)為輸入,以CRF為元分類器進(jìn)行二次訓(xùn)練,可得元分類模型Mmrta,如圖5所示。元分類模型Mmrta的表征XML文件可作為該類特征向量的視覺(jué)單詞,將每個(gè)視覺(jué)單詞與文字語(yǔ)義關(guān)聯(lián),即使得每一個(gè)視覺(jué)單詞(XML文件)都與其文字符號(hào)相對(duì)應(yīng),并錄入視覺(jué)單詞庫(kù)。依此類推,對(duì)多種對(duì)象樣本進(jìn)行訓(xùn)練,累積形成視覺(jué)詞典。
[0066]3)將 Hadoop 的 HDFS 上的 KeyFrameVec.txt 文本文件通過(guò) SparkContext 的文件讀取函數(shù)TextFile讀取為Spark集群上的String類型RDD數(shù)據(jù)FrameVecRDD,并將其分配到P個(gè)計(jì)算節(jié)點(diǎn)。類似第三步2)所述,采用基于元學(xué)習(xí)策略對(duì)關(guān)鍵幀的特征向量進(jìn)行預(yù)測(cè)。關(guān)鍵幀實(shí)例Xi (i為η個(gè)視頻關(guān)鍵幀的序號(hào)),其表征特征向量為Vec(Xi),分類標(biāo)識(shí)為I (Xi)。通過(guò)上述4種學(xué)習(xí)算法預(yù)測(cè),將預(yù)測(cè)結(jié)果P (Xi) gen、P (Xi) SVM、P (Xi) ECF>P (Xi) ME和Vec (Xi)輸入分類模型Mmrta,對(duì)照視覺(jué)詞典中的單詞逐一預(yù)測(cè)是否包含該單詞內(nèi)容,如圖6所示。一副關(guān)鍵幀種可包含一個(gè)或多個(gè)視覺(jué)單詞,程序返回Spark主機(jī)的結(jié)果是幀號(hào)、視覺(jué)單詞、對(duì)應(yīng)文字符號(hào)組合RDD數(shù)據(jù),將該RDD數(shù)據(jù)存儲(chǔ)為Word, txt文本文件,以便進(jìn)一步調(diào)用。
[0067]第四步,將視頻中各關(guān)鍵幀對(duì)應(yīng)的視覺(jué)單詞進(jìn)行匯總,通過(guò)Tf模型,實(shí)現(xiàn)視頻基于量化單詞的線性表達(dá),進(jìn)行形成視頻摘要關(guān)鍵詞。
[0068]I) HDFS 上的 Word, txt 文本文件通過(guò) SparkContext 的 TextFile 函數(shù)讀取為 Spark集群上的String類型RDD數(shù)據(jù)FrameSemaRDD。
[0069]2)利用RDD的按鍵值統(tǒng)計(jì)函數(shù)ReduceByKey函數(shù)對(duì)FrameSemaRDD中的視覺(jué)單詞和場(chǎng)景描述單詞進(jìn)行字?jǐn)?shù)統(tǒng)計(jì),結(jié)果為String類型的RDD數(shù)據(jù)SemaCountRDD,此數(shù)據(jù)每一行包含單詞及出現(xiàn)的次數(shù)。
[0070]3)將字?jǐn)?shù)統(tǒng)計(jì)結(jié)果SemaCountRDD數(shù)據(jù)中的視覺(jué)單詞出現(xiàn)次數(shù)除以視頻總幀數(shù),獲得視覺(jué)單詞在整個(gè)視頻中出現(xiàn)的概率,利用RDD的按鍵值排序函數(shù)SortByKey函數(shù)對(duì)概率進(jìn)行排序,然后設(shè)定概率閾值P,將大于P的統(tǒng)計(jì)結(jié)果寫入String類型的RDD數(shù)據(jù)KeyRDD中。通過(guò)Tf模型確定該視覺(jué)單詞在總數(shù)中的權(quán)值,即視覺(jué)單詞在關(guān)鍵幀中出現(xiàn)的次數(shù)越多,那么它與視覺(jué)內(nèi)容相關(guān)性越強(qiáng),其權(quán)值也應(yīng)該越大。
[0071]將KeyRDD 通過(guò) RDD 的 SaveAsTextFile 函數(shù)分別保存為 HDFS 上的 KeyWords.txt。此文件的每一行將包含整個(gè)視頻的關(guān)鍵詞和出現(xiàn)概率。取出現(xiàn)頻率最高的五個(gè)視覺(jué)單詞,并將其對(duì)應(yīng)文字標(biāo)注在視頻名中。
[0072]本發(fā)明提供了一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法,具體實(shí)現(xiàn)該技術(shù)方案的方法和途徑很多,以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。本實(shí)施例中未明確的各組成部分均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
【權(quán)利要求】
1.一種基于Spark的海量視頻語(yǔ)義標(biāo)注方法,其特征在于,包括以下步驟: 步驟1:將海量視頻部署到一組計(jì)算節(jié)點(diǎn)上,通過(guò)Spark集群計(jì)算視頻幀時(shí)間序列的分形維度差值,實(shí)現(xiàn)鏡頭分割,獲取關(guān)鍵幀; 步驟2:在Spark集群上提取對(duì)象的檢測(cè)樣本的顏色矩、邊緣以及紋理特征向量,進(jìn)行元學(xué)習(xí)策略訓(xùn)練,形成視覺(jué)詞典;并依據(jù)視覺(jué)詞典對(duì)關(guān)鍵視頻幀進(jìn)行預(yù)測(cè),產(chǎn)生能表征該關(guān)鍵視頻幀的視覺(jué)單詞; 步驟3:通過(guò)Tf方法對(duì)待測(cè)視頻的視覺(jué)單詞進(jìn)行優(yōu)先排序,將篩選結(jié)果作為該視頻的標(biāo)注。
2.根據(jù)權(quán)利要求1所述的基于Spark的海量視頻數(shù)據(jù)分布式語(yǔ)義標(biāo)注方法,其特征在于,步驟I在Spark集群上實(shí)現(xiàn)視頻分割,劃分海量視頻分布至一組計(jì)算節(jié)點(diǎn),利用分形方法將視頻按時(shí)間序列分割為若干鏡頭,并提取關(guān)鍵幀,具體包括如下步驟: 步驟1-1:轉(zhuǎn)換視頻數(shù)據(jù)格式,將視頻二進(jìn)制數(shù)據(jù)通過(guò)Hadoop自定義輸出流轉(zhuǎn)換為Spark集群可讀取的byte型數(shù)據(jù),并保存到Hadoop分布式系統(tǒng)HDFS上;根據(jù)視頻總巾貞數(shù),利用并行分塊函數(shù)把視頻切分為塊,一個(gè)塊代表一個(gè)視頻幀彈性分布式數(shù)據(jù)集RDD的數(shù)據(jù)對(duì)象ParVideoRDD ;調(diào)用幀處理程序,將數(shù)據(jù)對(duì)象parVideoRDD中的每一數(shù)據(jù)塊都并行的分配到P個(gè)計(jì)算節(jié)點(diǎn),從而實(shí)現(xiàn)對(duì)整個(gè)視頻的幀數(shù)據(jù)并行處理; 步驟1-2:采用差分盒法,計(jì)算每一視頻幀分形維度,通過(guò)時(shí)間序列的分形維度差值,求出切變鏡頭和漸變鏡頭的邊界,從而將視頻分割為一組鏡頭;在此計(jì)算過(guò)程中,通過(guò)Spark在各計(jì)算節(jié)點(diǎn)間的聯(lián)系SparkContext實(shí)現(xiàn)各個(gè)計(jì)算節(jié)點(diǎn)間數(shù)據(jù)共享,使用映射函數(shù)map O完成分配步驟,再使用歸一函數(shù)reduce O完成更新步驟; 步驟1-3:按時(shí)間序列,取每一鏡頭臨界幀作為該鏡頭的關(guān)鍵視頻幀,返回Spark主節(jié)點(diǎn)的結(jié)果是關(guān)鍵幀號(hào)和其場(chǎng)景描述的視頻幀的RDD數(shù)據(jù),將該視頻幀的RDD數(shù)據(jù)存儲(chǔ)為KeyFrameSce.txt文本文件,用于后續(xù)步驟調(diào)用。
3.根據(jù)權(quán)利要求2所述的基于Spark的海量視頻語(yǔ)義標(biāo)注方法,其特征在于,步驟2包括如下步驟: 步驟2-1:截取一組包括待測(cè)對(duì)象的各類圖片,作為該對(duì)象的檢測(cè)樣本;將圖片通過(guò)通道管理函數(shù)pipeO分配到一組計(jì)算節(jié)點(diǎn),根據(jù)關(guān)鍵幀顏色矩、邊緣直方圖以及分形維度特征提取18維特征向量,用于表征該對(duì)象的圖像語(yǔ)義內(nèi)容;返回Spark主節(jié)點(diǎn)的結(jié)果是特征向量RDD數(shù)據(jù),將其輸出到文本文件SampleVec.txt中,此時(shí)SampleVec.txt文本文件包含該對(duì)象的特征信息; 步驟2-2:將分布式文件系統(tǒng)HDFS上的文本文件SampleVec.txt通過(guò)分析類SparkContext的文本讀取函數(shù)TextFile讀取字符串String類型的RDD數(shù)據(jù)SampleVecRDD,并將該數(shù)據(jù)分配到P個(gè)計(jì)算節(jié)點(diǎn),P為大于I的自然數(shù);采用基于元學(xué)習(xí)策略的4種分類算法,包括Generalized Winnow算法、支持向量機(jī)算法、條件隨機(jī)域算法和最大熵算法,對(duì)代表該類對(duì)象的語(yǔ)義內(nèi)容進(jìn)行特征訓(xùn)練,形成代表該類對(duì)象的視覺(jué)單詞,并與文字語(yǔ)義內(nèi)容相關(guān)聯(lián);視覺(jué)單詞是一個(gè)由元分類器表征且與文字語(yǔ)義內(nèi)容存在相應(yīng)映射關(guān)系的XML文件,每一個(gè)XML文件代表一類視覺(jué)單詞; 步驟2-3:重復(fù)步驟2-1和步驟2-2,訓(xùn)練得到一組能夠代表一類對(duì)象的特征的視覺(jué)單詞,與相對(duì)應(yīng)的文字語(yǔ)義內(nèi)容建立映射關(guān)系后,匯聚成視覺(jué)詞典; 步驟2-4:根據(jù)步驟2-1的,將步驟1-3得到的關(guān)鍵視頻幀數(shù)據(jù)通過(guò)通道管理函數(shù)pipeO分配到一組計(jì)算節(jié)點(diǎn),并提取18維特征向量,用于表征該關(guān)鍵視頻幀的語(yǔ)義內(nèi)容;返回Spark主節(jié)點(diǎn)的結(jié)果是關(guān)鍵視頻幀的幀序號(hào)和特征向量RDD數(shù)據(jù),將返回的[幀序號(hào),特征向量RDD數(shù)據(jù)]輸出到文本文件KeyFrameVec.txt中,此時(shí)KeyFrameVec.txt文本文件包含整個(gè)視頻文件關(guān)鍵幀信息; 步驟2-5:根據(jù)步驟2-2,將分布式文件系統(tǒng)HDFS上的文本文件KeyFrameVec.txt通過(guò)SparkContext的文本讀取函數(shù)TextFile函數(shù)讀取字符串String類型RDD數(shù)據(jù)FrameVecRDD,數(shù)據(jù)FrameVecRDD每一行包含一巾貞號(hào)及語(yǔ)義特征向量,并將數(shù)據(jù)FrameVecRDD分配到P個(gè)計(jì)算節(jié)點(diǎn);對(duì)照視覺(jué)詞典,采用元學(xué)習(xí)策略對(duì)代表視頻巾貞語(yǔ)義內(nèi)容的特征向量進(jìn)行預(yù)測(cè),得出該視頻幀所表述的一個(gè)以上的視覺(jué)單詞;返回的結(jié)果是幀序號(hào)、視覺(jué)單詞、對(duì)應(yīng)文字組合的RDD數(shù)據(jù),將該RDD數(shù)據(jù)存儲(chǔ)為Word, txt文本文件,用于后續(xù)步驟調(diào)用。
4.根據(jù)權(quán)利要求3所述的基于Spark的海量視頻語(yǔ)義標(biāo)注方法,其特征在于,步驟3將視頻中各關(guān)鍵幀對(duì)應(yīng)的視覺(jué)單詞進(jìn)行匯總,通過(guò)Tf模型篩選,實(shí)現(xiàn)視頻基于量化單詞的線性表達(dá),形成視頻標(biāo)注,具體包括如下步驟: 步驟4-1:將HDFS上的文本文件Word, txt讀取到Spark集群上,設(shè)待測(cè)視頻所有關(guān)鍵幀共含有M個(gè)視覺(jué)單詞,將這些視覺(jué)單詞按照權(quán)值的大小進(jìn)行排序,權(quán)值范圍O?1,視覺(jué)單詞權(quán)值由Tf模型決定; 步驟4-2:通過(guò)數(shù)據(jù)集RDD的保存文檔函數(shù)SaveAsTextFile將視覺(jué)單詞、對(duì)應(yīng)文字及出現(xiàn)概率保存為HDFS上的文本文件Keywords, txt,取出現(xiàn)頻率最高的五個(gè)視覺(jué)單詞作為該視頻的標(biāo)注。
5.根據(jù)權(quán)利要求3所述的基于Spark的海量視頻語(yǔ)義標(biāo)注方法,其特征在于,所述一組包括待測(cè)對(duì)象的各類圖片為I萬(wàn)至3萬(wàn)張。
【文檔編號(hào)】G06K9/62GK104239501SQ201410459787
【公開(kāi)日】2014年12月24日 申請(qǐng)日期:2014年9月10日 優(yōu)先權(quán)日:2014年9月10日
【發(fā)明者】崔銅, 葛軍 申請(qǐng)人:中國(guó)電子科技集團(tuán)公司第二十八研究所