卓友勝 劉利
摘要:當(dāng)今的數(shù)字時代,數(shù)據(jù)的增長速度不斷加快,人們面臨著需要高效快速處理大量數(shù)據(jù)的問題,由此誕生分布式計算機(jī)系統(tǒng)框架Hadoop。圖像搜索方面,在海量圖像數(shù)據(jù)的環(huán)境下,基于內(nèi)容的圖像檢索(CBIR)相比傳統(tǒng)基于文本的圖像檢索更具優(yōu)越性。Hadoop適用于圖像文件數(shù)無限大的情況,因此本文在簡單介紹Hadoop之后,詳細(xì)的描述了基于Hdoop的CBIR系統(tǒng)的設(shè)計與實現(xiàn),并給出了系統(tǒng)性能的測試結(jié)果。
關(guān)鍵詞:基于內(nèi)容的圖像檢索;云計算;Hadoop
中圖分類號:TP18 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)27-6318-03
Abstract:Data of growth is accelerating on todays digital era, people facing the problem that fast and efficient processing of large amounts of data. Therefore the distributed computer system framework, Hadoop was born. Under the massive image data environment, content based image retrieval (CBIR) has more advantages than traditional text based image retrieval, Hadoop is applicable to the image file number infinite case. This article introduces Hadoop, then described the implementation of a content based image retrieval system in detail, and gived out the performance test results.
Key words: CBIR; Cloud computiong; Hadoop
基于內(nèi)容的圖像檢索(Content Based Image Retrieval ,CBIR)[1,2]是在1992年的時候提出的,并且很快得到了國內(nèi)外科技人員的廣泛重視和研究。因為傳統(tǒng)的圖像檢索方法是基于文本的,需要人為地對圖像進(jìn)行標(biāo)注并入庫,然后通過關(guān)鍵詞檢索圖像。而基于內(nèi)容的圖像檢索的基本思想是根據(jù)圖像所包含的顏色、紋理、形狀及對象的空間關(guān)系等信息,提取圖像特征,再進(jìn)行特征匹配。然后隨著多媒體技術(shù)的發(fā)展,海量的圖像數(shù)據(jù)對CBIR的存儲和檢索性能都提出了新的挑戰(zhàn)。
Hadoop項目是仿照Google云計算開發(fā)的開源實現(xiàn),基本實現(xiàn)了Google File System的功能。Hadoop是當(dāng)前開源的分布式文件系統(tǒng)技術(shù)和分布式計算技術(shù)中較為完善的一項技術(shù)。Hadoop能對大數(shù)據(jù)的處理的速度進(jìn)行優(yōu)化,適用于CBIR系統(tǒng)[3,4]。因此本文基于Hadoop設(shè)計并實現(xiàn)了一個CBIR系統(tǒng),并對最終實現(xiàn)的系統(tǒng)進(jìn)行了性能測試。測試結(jié)果表明基于Hadoop的CBIR系統(tǒng)相比于傳統(tǒng)的CBIR系統(tǒng),在圖像數(shù)據(jù)比較大的情況下可以提高檢索速度。該文所對系統(tǒng)的實現(xiàn)進(jìn)行了詳細(xì)的描述,可以為搭建Hadoop平臺,以及建立CBIR系統(tǒng)的人員提供參考。
1.3 安裝和配置步驟
下面以Linux終端為例,給出安裝和配置Hdoop步驟:
1) 下載并解壓hadoop:tar -xvf hadoop-1.0.3-bin.tar.gz
2) 進(jìn)入解壓目錄,編輯conf/hadop-env.sh:修改JAVA_HOME(java環(huán)境的位置)。
3) 編輯core-site.xml:fs.default.name,設(shè)置hdfs://localhost:9000。
4) 編輯hdfs-site.xml:dfs.replication,1。(這里1代表數(shù)據(jù)只有一份副本。)
5) 編輯mapred-site.xml:mapred.job.tracker,設(shè)置localhost:9001。
6) 修改host文件,關(guān)聯(lián)主機(jī)名和對應(yīng)的IP地址,并設(shè)置master和slave節(jié)點。(不同Linux的host文件位置不一樣,一般是/etc/hosts)
7) 配置ssh,生成密鑰,使得通過SSH可以免密碼連接另外的Linux。
8) 格式化HDFS:./hadoop namenode -format。(格式化后才能啟動hadoop,否則會環(huán)境啟動失敗。)
9) 使用bin/start-all.sh啟動hadoop。
搭建Hadoop平臺的時候,最麻煩的是SSH的免密碼連接。如果發(fā)現(xiàn)連接不上,請檢查防火墻是否關(guān)閉,SSH是否完整安裝,有沒有獲取Linux的最高權(quán)限等。要配置好所有節(jié)點之后才能啟動hadoop服務(wù),因為啟動的時候要對HDFS進(jìn)行一次格式化,不然的話啟動hadoop會失敗。
2 基于Hadoop的CBIR系統(tǒng)設(shè)計
CBIR系統(tǒng)主要包括圖像的存儲和圖像檢索兩部分,下面分別給出設(shè)計方案。
2.1 圖像存儲
存儲是檢索的基礎(chǔ)。這里使用的數(shù)據(jù)存儲系統(tǒng)用到了Hadoop中的HDFS(Hadoop Distributed Filed System)。使用HDFS的是因為可以增加數(shù)據(jù)的安全性,不會因為個別機(jī)器的損壞而導(dǎo)致系統(tǒng)損壞。其次是使用HDFS可以加快I/O速度,這是至關(guān)重要的。HDFS的特點中,一次寫入多次讀取,適用于這個CBIR系統(tǒng)的機(jī)制。一般在建立索引之后,會有一段時間不會再去建立索引,這段時間進(jìn)行多次搜索也即是多次讀取索引。現(xiàn)在所說的數(shù)據(jù)存儲主要是數(shù)據(jù)庫內(nèi)的存儲。首先需要將要需要進(jìn)行提取特征的圖像上傳到HDFS上,上傳時為每個圖像分配一個唯一ID。整個流程有三步,如圖2所示。
Step 1:Map階段,提取每個圖像的顏色、形狀、紋理特征,并生成縮略圖。把提取后的數(shù)據(jù)作為一行記錄存入HBase中,如提取失敗則記錄圖像ID。
Step 2:Reduce階段,用一個reducer把無效的圖像ID返回到HDFS。
Step 3:讀出無效的ID,返回給用戶。
2.2 圖像檢索
假設(shè)這一段時間內(nèi)只有提交了一張圖片,那么系統(tǒng)需要的就是把這張圖片的特征值與索引的記錄比對,<相似度,ID>作為鍵值對作為map輸出。最后索引中記錄都比較過之后,收集map輸出,排序后返回。
在整個MapReduce任務(wù)過程中,輸入的是存放特征值索引的全部記錄。整個流程的大體步驟有如下幾步,如圖3所示。
Step 1:在Map階段,首先從HDFS的分布式緩存中讀取關(guān)鍵圖像,提取它的特征值,然后與索引中的圖像特征進(jìn)行特征值的比較和相似度的匹配。<相似度,圖像ID>鍵值對,作為map的輸出。
Step 2:對map輸出的所有<相似度,圖像ID>鍵值對,按照相似度的從大到小,進(jìn)行排序和重新劃分,然后再輸入到reducer。
Step 3:在Reduce階段,收集全部的上面說的鍵值對,再對這些鍵值對進(jìn)行相似度的排序,把前面n個鍵值對寫入到HDFS。
Step 4:最后輸出與關(guān)鍵圖像最相似的那些圖像的ID。有了ID就可以顯示圖像。
3 系統(tǒng)性能結(jié)果
系統(tǒng)性能測試的圖片樣本有100,000張左右,源于文獻(xiàn)[5]。此次測試程序只使用了三組數(shù)據(jù)進(jìn)行建立索引和進(jìn)行搜索,測試結(jié)果如表1所示。表示是在一臺計算機(jī)下的三臺虛擬機(jī)上運行的結(jié)果,其中包括一個主節(jié)點和兩個從節(jié)點。
測試結(jié)果顯示在建立索引的時候耗時較長,主要是需要大量的CPU資源。而在搜索圖片的時候也是需要大量的CPU資源,同時需要部分I/O資源。從測試結(jié)果中可以看出,Hadoop平臺上運行CBIR系統(tǒng),存在一定的好處。數(shù)據(jù)規(guī)模較小的時候,基于Hadoop平臺上的CBIR系統(tǒng)和普通PC上運行CBIR系統(tǒng)的效率差不多。隨著圖像的不斷增多,增加存儲的節(jié)點數(shù)量會加快圖像特征提取和存儲的效率;在圖像比較少的情況下,不應(yīng)該采用太多的節(jié)點去進(jìn)行存儲。這里處理速度提高不大的原因是從節(jié)點只有兩個。
4 總結(jié)
Hadoop因具有高可靠性、高拓展性、高效率性和高容錯性等特性深受廣大用戶的歡迎,并在大數(shù)據(jù)處理領(lǐng)域占領(lǐng)了一席之地。對海量圖像數(shù)據(jù)的存儲和訪問,云計算是必不可少的。在本文的實驗中,由于程序的運行是在一臺電腦下的三臺虛擬機(jī)上運行的,所以結(jié)果可能有點出入。但是正是可以從這里看出Hadoop對低配置機(jī)器的包容性。此外在一臺機(jī)設(shè)置一個主節(jié)點、兩個從節(jié)點都可以提高效率,若是在實際的多臺分布式環(huán)境下,效率便能進(jìn)一步提高。因此基于Hadoop建立CBIR系統(tǒng)是實際可行,而且確實可以解決海量圖像數(shù)據(jù)導(dǎo)致CBIR性能降低問題。
參考文獻(xiàn):
[1] 詹洪陳,王懷登,何菁,等.基于內(nèi)容的圖像檢索[J].現(xiàn)代電子技術(shù),2014,37(7):68-70.
[2] 錢晶,高月松.圖像檢索系統(tǒng)中的CBIR 技術(shù)研究[J].電腦知識與技術(shù), 2011,2(2):415-416.
[3] 張學(xué)浪.基于Hadoop的海量圖像檢索關(guān)鍵技術(shù)研究[D].西安:西安農(nóng)林科技大學(xué),2013.
[4] 張良將.基于Hadoop云平臺的海量數(shù)字圖像數(shù)據(jù)挖掘的研究[D]. 上海:上海交通大學(xué),2013.
[5] James Wang.http://wang.ist.psu.edu/wang/.