侯向?qū)?,徐草草,楊井榮
(成都理工大學(xué) 工程技術(shù)學(xué)院 電子信息與計(jì)算機(jī)工程系,四川 樂山 614000)
在植物花卉研究領(lǐng)域,傳統(tǒng)花卉分類方式大多基于人工提取特征,不僅耗時(shí)費(fèi)力,效率低下而且還很容易出錯(cuò);而基于深度學(xué)習(xí)的花卉分類方法,由于能夠自動提取特征且分類準(zhǔn)確率高,因此逐漸受到人們的關(guān)注。全世界已知的花卉種類約40多萬種,面對海量的花卉圖像數(shù)據(jù),基于單機(jī)的處理方式已無法適應(yīng),人們把目光逐漸轉(zhuǎn)向了基于大數(shù)據(jù)的云計(jì)算平臺。Hadoop是目前常見的大數(shù)據(jù)計(jì)算平臺,然而其核心組件MapReduce由于磁盤I/O開銷大、延時(shí)高而無法勝任實(shí)時(shí)、快速迭代的計(jì)算任務(wù)。Spark以其基于內(nèi)存的更高的迭代運(yùn)算效率、結(jié)構(gòu)一體化、功能多元化等優(yōu)勢,正逐步取代MapReduce。
文獻(xiàn)[1]設(shè)計(jì)了一個(gè)8層卷積神經(jīng)網(wǎng)絡(luò),并在Oxford102花卉數(shù)據(jù)集上進(jìn)行了測試,由于模型的深度較淺,分類效果并不理想。文獻(xiàn)[2]通過遷移學(xué)習(xí),對InceptionV3網(wǎng)絡(luò)模型在花卉數(shù)據(jù)集上進(jìn)行微調(diào),對分類準(zhǔn)確率有少量的提升。文獻(xiàn)[3]基于AlexNet遷移學(xué)習(xí)提取花卉特征,采用SVM進(jìn)行花卉的分類,但分類準(zhǔn)確率還有待提高。文獻(xiàn)[4]在Spark的基礎(chǔ)上,利用SVM機(jī)器學(xué)習(xí)算法對小麥病蟲害進(jìn)行分類識別。文獻(xiàn)[5]基于Spark構(gòu)建了一個(gè)分布式的圖像處理系統(tǒng),用于對遙感圖像的處理。文獻(xiàn)[6]在Spark的基礎(chǔ)上,利用K-Means聚類算法對移動用戶的行為軌跡進(jìn)行分析。
該文基于Spark分布式計(jì)算框架,對現(xiàn)有的VGG16模型進(jìn)行改進(jìn),引入選擇性軟注意力機(jī)制即SK(選擇性內(nèi)核)單元,并采用TensorFlowOnSpark技術(shù),實(shí)現(xiàn)花卉圖像特征及模型訓(xùn)練的并行化,降低了模型訓(xùn)練時(shí)間,進(jìn)一步提高了花卉分類的速度及準(zhǔn)確率。
Spark[7-9]是Apache軟件基金會的開源項(xiàng)目,其設(shè)計(jì)理念是一站式解決平臺,Spark發(fā)展至今,逐步形成一個(gè)完整的生態(tài)圈,如圖1所示。
圖1 Spark生態(tài)系統(tǒng)
圖中處于核心地位的計(jì)算層是Spark的內(nèi)存計(jì)算架構(gòu)層。工具層主要包括用于即席查詢的Spark SQL、用于實(shí)時(shí)流處理的Spark Streaming、用于機(jī)器學(xué)習(xí)的MLlib及用于圖處理的GraphX等。存儲層主要是Hadoop的HDFS及HBase組件。資源調(diào)度層主要包括Standalone、YARN、Mesos等模式。Spark具有運(yùn)行速度快、通用性強(qiáng)等優(yōu)勢,現(xiàn)在被很多大型公司使用,例如Amazon、eBay、雅虎、騰訊、淘寶、優(yōu)酷土豆等。
TensorFlowOnSpark[10-11]是對TensorFlow和Spark的無縫集成,TensorFlowOnSpark解決了TensorFlow在Spark和Hadoop集群上分布式的并行執(zhí)行,以及集群間數(shù)據(jù)傳遞的問題。TensorFlowOnSpark可實(shí)現(xiàn)異步和同步訓(xùn)練和推理,支持并行化模型和數(shù)據(jù)處理。TensorFlowOnSpark的架構(gòu)如圖2所示。
圖2 TensorFlowOnSpark的系統(tǒng)架構(gòu)
TensorFlowOnSpark將TensorFlow算法和TensorFlow內(nèi)核封裝到一個(gè)Spark Executor中,通過Spark為每個(gè)Spark Executor啟動相應(yīng)的TensorFlow進(jìn)程,并通過gRPC或RDMA進(jìn)行模型訓(xùn)練、數(shù)據(jù)傳輸和交互。
VGG16[12-14]網(wǎng)絡(luò)的深度為16層,這種較深的網(wǎng)絡(luò)通過逐層的抽象,能夠不斷學(xué)習(xí)由低到高各層的特征,具有更強(qiáng)的非線性表達(dá)能力,能表達(dá)更為豐富的特征,擬合更為復(fù)雜的輸入特征。另外,VGG16網(wǎng)絡(luò)最開始采用64個(gè)3×3卷積核,隨著網(wǎng)絡(luò)的加深,卷積核數(shù)量逐漸從64增加到128、256、512,使其具有較大的網(wǎng)絡(luò)寬度,寬度的增加能使網(wǎng)絡(luò)各層學(xué)習(xí)到更為豐富的顏色、紋理等特征。VGG16網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 VGG16網(wǎng)絡(luò)結(jié)構(gòu)
VGG16存在的問題是每個(gè)卷積層均采用3×3的卷積核,因此不能自適應(yīng)地調(diào)節(jié)感受野的大小,對花卉分類這種精細(xì)化分類問題的分類準(zhǔn)確率不高;此外,瓶頸層后的3個(gè)全連接層使得網(wǎng)絡(luò)的參數(shù)劇增,消耗了過多的計(jì)算機(jī)資源。
該文解決的方法是:首先引入SKNet模塊,SKNet[15]是一個(gè)輕量級的模塊,可以方便地嵌入到其他模塊中。SKNet基于軟注意力機(jī)制,其“選擇性卷積核”(SK)使網(wǎng)絡(luò)能夠從不同的感受野獲取信息,能夠有效提取花瓣、花蕊等細(xì)微的變化,比較適合花卉分類這種精細(xì)化分類問題,并使網(wǎng)絡(luò)的泛化能力變得更強(qiáng)。其次,用全局平均池化層替換VGG16瓶頸層后的3個(gè)全連接層,可以減少參數(shù)的數(shù)量,提高網(wǎng)絡(luò)訓(xùn)練的速度。
改進(jìn)后的VGG16的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,在VGG16的瓶頸層之后加入SK(選擇性內(nèi)核)單元,并用全局平均池化GAP代替之后的3個(gè)全連接層。
圖4 VGG16_SK網(wǎng)絡(luò)結(jié)構(gòu)
圖4中前5段的每個(gè)卷積層中均加入BN層和ReLu激活函數(shù)。其中BN層的作用是加快網(wǎng)絡(luò)的訓(xùn)練和收斂的速度,防止梯度爆炸及梯度消失,提高模型精度;ReLu[16]激活函數(shù)能增強(qiáng)網(wǎng)絡(luò)的非線性、防止梯度消失、減少過擬合并提高網(wǎng)絡(luò)訓(xùn)練的速度。
總體的系統(tǒng)架構(gòu)如圖5所示,左上是由1個(gè)Master節(jié)點(diǎn)和3個(gè)Slaver節(jié)點(diǎn)構(gòu)成的Hadoop及Spark集群。其中Master是主控節(jié)點(diǎn),負(fù)責(zé)整個(gè)集群的正常運(yùn)行,維護(hù)HDFS命名空間、任務(wù)的調(diào)度以及各種參數(shù);Slaver為計(jì)算節(jié)點(diǎn),負(fù)責(zé)接收主節(jié)點(diǎn)的指令以及進(jìn)行狀態(tài)匯報(bào),進(jìn)行相關(guān)矩陣運(yùn)算、權(quán)值更新、數(shù)據(jù)存儲等操作。在分布式文件系統(tǒng)HDFS的支持下,HBASE主要用于存儲相關(guān)的集群參數(shù)及模型參數(shù)。系統(tǒng)管理主要涉及任務(wù)管理和配置管理,其中配置管理負(fù)責(zé)對Hadoop和Spark集群及相關(guān)任務(wù)的參數(shù)進(jìn)行配置;任務(wù)管理主要負(fù)責(zé)接收客戶端的上傳、下載等命令操作。TensorFlowOnSpark主要負(fù)責(zé)花卉分類模型的訓(xùn)練及參數(shù)調(diào)優(yōu)。
圖5 系統(tǒng)架構(gòu)
采用standalone模式搭建Hadoop及Spark集群,整個(gè)集群由4臺虛擬機(jī)組成,虛擬機(jī)均為Centos7操作系統(tǒng),并分別安裝jdk1.8.0_65,hadoop2.7.4,Spark1.6.0,python2.7,tensorflow0.12.1,tensorfl-owonspark1.0.2。其中1臺是Master,另外的3臺虛擬機(jī)為Slaver。
數(shù)據(jù)集采用Oxford102,該數(shù)據(jù)集包括102類西方常見花卉,共有8 189張花卉圖片。由于該數(shù)據(jù)集的數(shù)據(jù)量較小,為了防止過擬合,提高網(wǎng)絡(luò)模型的性能,首先對該數(shù)據(jù)集進(jìn)行隨機(jī)旋轉(zhuǎn)、翻轉(zhuǎn)、平移、裁剪、放縮等操作,通過數(shù)據(jù)增強(qiáng),將Oxford102擴(kuò)充至49 134張。為進(jìn)一步擴(kuò)展花卉的數(shù)據(jù)集,利用爬蟲程序爬取了國內(nèi)較為常見的20種花卉,每種花卉1 000張,共計(jì)20 000張,添加的20種花卉如圖6所示。數(shù)據(jù)增強(qiáng)后的花卉種類是122類,花卉圖片共計(jì)69 134張。
圖6 國內(nèi)20類花卉圖像
(1)為提高訓(xùn)練的效果,加快網(wǎng)絡(luò)模型的收斂,對兩個(gè)數(shù)據(jù)集的花卉圖片按照保持長寬比的方式歸一化,歸一化后的尺寸為224×224×3。
(2)將數(shù)據(jù)增強(qiáng)后的每類花卉圖片數(shù)的70%作為訓(xùn)練集,剩余30%作為測試集。
(3)訓(xùn)練時(shí)保留VGG16經(jīng)ImageNet預(yù)訓(xùn)練產(chǎn)生的用于特征提取的參數(shù),在SK(選擇性內(nèi)核)單元中,路徑數(shù)M設(shè)為2,擴(kuò)張數(shù)D設(shè)為2,組數(shù)G設(shè)為32,其余參數(shù)均使用正態(tài)分布隨機(jī)值進(jìn)行初始化。
(4)采用隨機(jī)梯度下降法優(yōu)化模型,batchsize設(shè)置為32,初始學(xué)習(xí)率設(shè)為0.001,epoch設(shè)為500,學(xué)習(xí)率下降間隔數(shù)設(shè)為50個(gè)epoch,調(diào)整倍數(shù)為0.1。
(1)與常見網(wǎng)絡(luò)模型及引用文獻(xiàn)中的網(wǎng)絡(luò)模型,在Oxford102花卉數(shù)據(jù)集上做了比較,準(zhǔn)確率對比結(jié)果表1所示。
表1 Oxford102上不同網(wǎng)絡(luò)模型分類準(zhǔn)確率對比
對比的結(jié)果顯示,文中模型比常見模型在Oxford102花卉數(shù)據(jù)集上的分類準(zhǔn)確率平均高出近18.5個(gè)百分點(diǎn),這主要因?yàn)長enet-5及Alexnet等網(wǎng)絡(luò)的深度較淺,不能充分學(xué)習(xí)花瓣、花蕊等細(xì)微的特征變化。
文中模型比所引文獻(xiàn)中在Oxford102花卉數(shù)據(jù)集上平均高出近6.9個(gè)百分點(diǎn),這一方面緣于對數(shù)據(jù)進(jìn)行了增強(qiáng),提高了模型的泛化能力和魯棒性,另一方面文中模型中嵌入了SK模塊,能夠有效學(xué)習(xí)花瓣、花蕊等部分的細(xì)節(jié)的信息,從而提高了模型分類的準(zhǔn)確率。
文中模型比未添加SK模塊的VGG16高出近15.3個(gè)百分點(diǎn),這得益于VGG16網(wǎng)絡(luò)加入BN層后,有效防止了梯度爆炸及梯度消失,加快了網(wǎng)絡(luò)的訓(xùn)練和收斂的速度;另外加入SK模塊后使網(wǎng)絡(luò)能夠從不同的感受野獲取多尺度的信息,能夠有效學(xué)習(xí)花瓣、花蕊等部分的細(xì)節(jié)的信息,并使網(wǎng)絡(luò)的泛化能力變得更強(qiáng)。
(2)不同數(shù)據(jù)集下文中模型的分類準(zhǔn)確率對比如表2所示。
表2 不同數(shù)據(jù)集下的分類準(zhǔn)確率對比
從實(shí)驗(yàn)結(jié)果可以看出,本方案在國內(nèi)20類數(shù)據(jù)集上的分類效果最好,這主要是因?yàn)閲鴥?nèi)20類數(shù)據(jù)集的花卉圖片樣本數(shù)量多且樣本種類少,使得網(wǎng)絡(luò)模型能充分學(xué)習(xí)到每類花卉的特征,其次是花卉圖片的清晰度比Oxford102數(shù)據(jù)集上的高。
(3)為研究在應(yīng)對“海量”花卉分類任務(wù)時(shí),節(jié)點(diǎn)數(shù)對Spark集群性能的影響,設(shè)計(jì)并測試了Spark集群在不同節(jié)點(diǎn)數(shù)下,完成相同“海量”花卉分類任務(wù)時(shí)的耗時(shí),共進(jìn)行了5組對比實(shí)驗(yàn),實(shí)驗(yàn)對比結(jié)果如圖7所示。
圖7 不同節(jié)點(diǎn)與圖片數(shù)量下的分類耗時(shí)
對比結(jié)果表明,單節(jié)點(diǎn)下,隨著圖片數(shù)量的增加,內(nèi)存急劇增加,分類測試的耗時(shí)呈非線性向上增長趨勢,隨著節(jié)點(diǎn)數(shù)的增加,分類所需的耗時(shí)越來越趨于線性增長,體現(xiàn)出分布式計(jì)算能將負(fù)載均衡至每個(gè)節(jié)點(diǎn),充分發(fā)揮了每個(gè)節(jié)點(diǎn)的性能,提高了分類的效率。
基于Spark分布式計(jì)算框架,引入選擇性軟注意力機(jī)制,將SK(選擇性內(nèi)核)單元添加至VGG16模型,并采用TensorFlowOnSpark技術(shù),實(shí)現(xiàn)花卉圖像特征及模型訓(xùn)練的并行化,降低了模型訓(xùn)練的時(shí)間。實(shí)驗(yàn)表明,花卉分類的準(zhǔn)確率比未添加SK(選擇性內(nèi)核)單元的VGG16高出近15.3個(gè)百分點(diǎn),實(shí)驗(yàn)還表明,Spark分布式計(jì)算有利于負(fù)載均衡,能發(fā)揮各個(gè)節(jié)點(diǎn)的性能,進(jìn)一步提高了花卉分類的效率。下一步的工作是將SK單元引入Inception、ResNet、DenseNet等深度更深的網(wǎng)絡(luò),以進(jìn)一步提高花卉分類的準(zhǔn)確率。