侯向寧,徐草草,楊井榮
(成都理工大學 工程技術學院 電子信息與計算機工程系,四川 樂山 614000)
在植物花卉研究領域,傳統花卉分類方式大多基于人工提取特征,不僅耗時費力,效率低下而且還很容易出錯;而基于深度學習的花卉分類方法,由于能夠自動提取特征且分類準確率高,因此逐漸受到人們的關注。全世界已知的花卉種類約40多萬種,面對海量的花卉圖像數據,基于單機的處理方式已無法適應,人們把目光逐漸轉向了基于大數據的云計算平臺。Hadoop是目前常見的大數據計算平臺,然而其核心組件MapReduce由于磁盤I/O開銷大、延時高而無法勝任實時、快速迭代的計算任務。Spark以其基于內存的更高的迭代運算效率、結構一體化、功能多元化等優勢,正逐步取代MapReduce。
文獻[1]設計了一個8層卷積神經網絡,并在Oxford102花卉數據集上進行了測試,由于模型的深度較淺,分類效果并不理想。文獻[2]通過遷移學習,對InceptionV3網絡模型在花卉數據集上進行微調,對分類準確率有少量的提升。文獻[3]基于AlexNet遷移學習提取花卉特征,采用SVM進行花卉的分類,但分類準確率還有待提高。文獻[4]在Spark的基礎上,利用SVM機器學習算法對小麥病蟲害進行分類識別。文獻[5]基于Spark構建了一個分布式的圖像處理系統,用于對遙感圖像的處理。文獻[6]在Spark的基礎上,利用K-Means聚類算法對移動用戶的行為軌跡進行分析。
該文基于Spark分布式計算框架,對現有的VGG16模型進行改進,引入選擇性軟注意力機制即SK(選擇性內核)單元,并采用TensorFlowOnSpark技術,實現花卉圖像特征及模型訓練的并行化,降低了模型訓練時間,進一步提高了花卉分類的速度及準確率。
Spark[7-9]是Apache軟件基金會的開源項目,其設計理念是一站式解決平臺,Spark發展至今,逐步形成一個完整的生態圈,如圖1所示。

圖1 Spark生態系統
圖中處于核心地位的計算層是Spark的內存計算架構層。工具層主要包括用于即席查詢的Spark SQL、用于實時流處理的Spark Streaming、用于機器學習的MLlib及用于圖處理的GraphX等。存儲層主要是Hadoop的HDFS及HBase組件。資源調度層主要包括Standalone、YARN、Mesos等模式。Spark具有運行速度快、通用性強等優勢,現在被很多大型公司使用,例如Amazon、eBay、雅虎、騰訊、淘寶、優酷土豆等。
TensorFlowOnSpark[10-11]是對TensorFlow和Spark的無縫集成,TensorFlowOnSpark解決了TensorFlow在Spark和Hadoop集群上分布式的并行執行,以及集群間數據傳遞的問題。TensorFlowOnSpark可實現異步和同步訓練和推理,支持并行化模型和數據處理。TensorFlowOnSpark的架構如圖2所示。

圖2 TensorFlowOnSpark的系統架構
TensorFlowOnSpark將TensorFlow算法和TensorFlow內核封裝到一個Spark Executor中,通過Spark為每個Spark Executor啟動相應的TensorFlow進程,并通過gRPC或RDMA進行模型訓練、數據傳輸和交互。
VGG16[12-14]網絡的深度為16層,這種較深的網絡通過逐層的抽象,能夠不斷學習由低到高各層的特征,具有更強的非線性表達能力,能表達更為豐富的特征,擬合更為復雜的輸入特征。另外,VGG16網絡最開始采用64個3×3卷積核,隨著網絡的加深,卷積核數量逐漸從64增加到128、256、512,使其具有較大的網絡寬度,寬度的增加能使網絡各層學習到更為豐富的顏色、紋理等特征。VGG16網絡結構如圖3所示。

圖3 VGG16網絡結構
VGG16存在的問題是每個卷積層均采用3×3的卷積核,因此不能自適應地調節感受野的大小,對花卉分類這種精細化分類問題的分類準確率不高;此外,瓶頸層后的3個全連接層使得網絡的參數劇增,消耗了過多的計算機資源。
該文解決的方法是:首先引入SKNet模塊,SKNet[15]是一個輕量級的模塊,可以方便地嵌入到其他模塊中。SKNet基于軟注意力機制,其“選擇性卷積核”(SK)使網絡能夠從不同的感受野獲取信息,能夠有效提取花瓣、花蕊等細微的變化,比較適合花卉分類這種精細化分類問題,并使網絡的泛化能力變得更強。其次,用全局平均池化層替換VGG16瓶頸層后的3個全連接層,可以減少參數的數量,提高網絡訓練的速度。
改進后的VGG16的網絡結構如圖4所示,在VGG16的瓶頸層之后加入SK(選擇性內核)單元,并用全局平均池化GAP代替之后的3個全連接層。

圖4 VGG16_SK網絡結構
圖4中前5段的每個卷積層中均加入BN層和ReLu激活函數。其中BN層的作用是加快網絡的訓練和收斂的速度,防止梯度爆炸及梯度消失,提高模型精度;ReLu[16]激活函數能增強網絡的非線性、防止梯度消失、減少過擬合并提高網絡訓練的速度。
總體的系統架構如圖5所示,左上是由1個Master節點和3個Slaver節點構成的Hadoop及Spark集群。其中Master是主控節點,負責整個集群的正常運行,維護HDFS命名空間、任務的調度以及各種參數;Slaver為計算節點,負責接收主節點的指令以及進行狀態匯報,進行相關矩陣運算、權值更新、數據存儲等操作。在分布式文件系統HDFS的支持下,HBASE主要用于存儲相關的集群參數及模型參數。系統管理主要涉及任務管理和配置管理,其中配置管理負責對Hadoop和Spark集群及相關任務的參數進行配置;任務管理主要負責接收客戶端的上傳、下載等命令操作。TensorFlowOnSpark主要負責花卉分類模型的訓練及參數調優。

圖5 系統架構
采用standalone模式搭建Hadoop及Spark集群,整個集群由4臺虛擬機組成,虛擬機均為Centos7操作系統,并分別安裝jdk1.8.0_65,hadoop2.7.4,Spark1.6.0,python2.7,tensorflow0.12.1,tensorfl-owonspark1.0.2。其中1臺是Master,另外的3臺虛擬機為Slaver。
數據集采用Oxford102,該數據集包括102類西方常見花卉,共有8 189張花卉圖片。由于該數據集的數據量較小,為了防止過擬合,提高網絡模型的性能,首先對該數據集進行隨機旋轉、翻轉、平移、裁剪、放縮等操作,通過數據增強,將Oxford102擴充至49 134張。為進一步擴展花卉的數據集,利用爬蟲程序爬取了國內較為常見的20種花卉,每種花卉1 000張,共計20 000張,添加的20種花卉如圖6所示。數據增強后的花卉種類是122類,花卉圖片共計69 134張。

圖6 國內20類花卉圖像
(1)為提高訓練的效果,加快網絡模型的收斂,對兩個數據集的花卉圖片按照保持長寬比的方式歸一化,歸一化后的尺寸為224×224×3。
(2)將數據增強后的每類花卉圖片數的70%作為訓練集,剩余30%作為測試集。
(3)訓練時保留VGG16經ImageNet預訓練產生的用于特征提取的參數,在SK(選擇性內核)單元中,路徑數M設為2,擴張數D設為2,組數G設為32,其余參數均使用正態分布隨機值進行初始化。
(4)采用隨機梯度下降法優化模型,batchsize設置為32,初始學習率設為0.001,epoch設為500,學習率下降間隔數設為50個epoch,調整倍數為0.1。
(1)與常見網絡模型及引用文獻中的網絡模型,在Oxford102花卉數據集上做了比較,準確率對比結果表1所示。

表1 Oxford102上不同網絡模型分類準確率對比
對比的結果顯示,文中模型比常見模型在Oxford102花卉數據集上的分類準確率平均高出近18.5個百分點,這主要因為Lenet-5及Alexnet等網絡的深度較淺,不能充分學習花瓣、花蕊等細微的特征變化。
文中模型比所引文獻中在Oxford102花卉數據集上平均高出近6.9個百分點,這一方面緣于對數據進行了增強,提高了模型的泛化能力和魯棒性,另一方面文中模型中嵌入了SK模塊,能夠有效學習花瓣、花蕊等部分的細節的信息,從而提高了模型分類的準確率。
文中模型比未添加SK模塊的VGG16高出近15.3個百分點,這得益于VGG16網絡加入BN層后,有效防止了梯度爆炸及梯度消失,加快了網絡的訓練和收斂的速度;另外加入SK模塊后使網絡能夠從不同的感受野獲取多尺度的信息,能夠有效學習花瓣、花蕊等部分的細節的信息,并使網絡的泛化能力變得更強。
(2)不同數據集下文中模型的分類準確率對比如表2所示。

表2 不同數據集下的分類準確率對比
從實驗結果可以看出,本方案在國內20類數據集上的分類效果最好,這主要是因為國內20類數據集的花卉圖片樣本數量多且樣本種類少,使得網絡模型能充分學習到每類花卉的特征,其次是花卉圖片的清晰度比Oxford102數據集上的高。
(3)為研究在應對“海量”花卉分類任務時,節點數對Spark集群性能的影響,設計并測試了Spark集群在不同節點數下,完成相同“海量”花卉分類任務時的耗時,共進行了5組對比實驗,實驗對比結果如圖7所示。

圖7 不同節點與圖片數量下的分類耗時
對比結果表明,單節點下,隨著圖片數量的增加,內存急劇增加,分類測試的耗時呈非線性向上增長趨勢,隨著節點數的增加,分類所需的耗時越來越趨于線性增長,體現出分布式計算能將負載均衡至每個節點,充分發揮了每個節點的性能,提高了分類的效率。
基于Spark分布式計算框架,引入選擇性軟注意力機制,將SK(選擇性內核)單元添加至VGG16模型,并采用TensorFlowOnSpark技術,實現花卉圖像特征及模型訓練的并行化,降低了模型訓練的時間。實驗表明,花卉分類的準確率比未添加SK(選擇性內核)單元的VGG16高出近15.3個百分點,實驗還表明,Spark分布式計算有利于負載均衡,能發揮各個節點的性能,進一步提高了花卉分類的效率。下一步的工作是將SK單元引入Inception、ResNet、DenseNet等深度更深的網絡,以進一步提高花卉分類的準確率。