劉媛媛,王定坤,鄔 雷,黃德昌,朱 路
(華東交通大學(xué) 信息工程學(xué)院,江西 南昌 330013)
病害嚴(yán)重影響植物的外觀和品質(zhì)。一旦發(fā)現(xiàn)植物感染病害,如果能及時(shí)做出應(yīng)對(duì)措施,即可以防止病害的進(jìn)一步擴(kuò)大;因此,對(duì)植物病害的精準(zhǔn)識(shí)別至關(guān)重要。然而,傳統(tǒng)的識(shí)別方法主要依賴于專家的專業(yè)知識(shí)或農(nóng)民的經(jīng)驗(yàn)等,存在效率低、成本高、主觀性強(qiáng)等問題。為了克服這一問題,研究人員引入圖像處理和機(jī)器視覺等技術(shù)對(duì)植物病害進(jìn)行識(shí)別研究。
近年來,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)已成為計(jì)算機(jī)視覺任務(wù)的主要方法,在目標(biāo)識(shí)別、圖像分割、圖像分類等領(lǐng)域取得了顯著的效果。隨著研究的深入,CNN也開始應(yīng)用于農(nóng)業(yè)領(lǐng)域[1-3],如糧食[4-5]、水果[6-7]、蔬菜[8-9]等農(nóng)產(chǎn)品的目標(biāo)檢測(cè)和質(zhì)量評(píng)價(jià)等方面。張建華等[10]將改進(jìn)的VGG-16卷積神經(jīng)網(wǎng)絡(luò)用于棉花病害識(shí)別,對(duì)棉花5種病害的識(shí)別準(zhǔn)確率達(dá)89.51%;楊森等[11]將深度卷積神經(jīng)網(wǎng)絡(luò)Faster R-CNN與復(fù)合特征字典結(jié)合起來,對(duì)3種馬鈴薯病蟲害進(jìn)行識(shí)別,平均準(zhǔn)確率為90.83%。
ResNet作為具有代表性的卷積神經(jīng)網(wǎng)絡(luò)之一[12],有著非常廣泛的應(yīng)用。劉翱宇等[13]在ResNet50網(wǎng)絡(luò)的基礎(chǔ)上引入Focal Loss函數(shù),提出一種基于深度殘差網(wǎng)絡(luò)的玉米病害識(shí)別網(wǎng)絡(luò)TFL-ResNet,并用其對(duì)3種玉米病害進(jìn)行識(shí)別,平均準(zhǔn)確率為98.96%??捉ɡ诘萚14]在ResNet50模型的基礎(chǔ)上,提出了多流高斯概率融合網(wǎng)絡(luò)(multi-stream Gaussian probability fusion network, MPFN)的病蟲害細(xì)粒度識(shí)別模型,該模型在12.2萬(wàn)張、181類病蟲害圖像中的平均準(zhǔn)確率達(dá)到93.18%。上述研究雖然取得了較好的識(shí)別效果,但是模型參數(shù)多、計(jì)算量大。農(nóng)業(yè)物聯(lián)網(wǎng)的終端通常是嵌入式設(shè)備,其計(jì)算資源有限;因此,這些復(fù)雜模型難以直接在終端設(shè)備上部署以識(shí)別植物病害。
ResNet網(wǎng)絡(luò)模型中的一些連接和計(jì)算是冗余或非關(guān)鍵的,因此模型剪枝可以在不顯著降低性能的情況下壓縮冗余,減少模型參數(shù)[15]。Li等[16]提出,在經(jīng)過訓(xùn)練的網(wǎng)絡(luò)上修剪不重要的通道,然后微調(diào)網(wǎng)絡(luò),可以恢復(fù)性能。Changpinyo等[17]在其研究中引入了網(wǎng)絡(luò)稀疏化,雖然網(wǎng)絡(luò)稀疏化導(dǎo)致網(wǎng)絡(luò)性能損失,但能獲得一個(gè)較小的網(wǎng)絡(luò)。為了挖掘結(jié)構(gòu)化剪枝的非重要性部分,還有研究人員采用結(jié)構(gòu)化稀疏正則化進(jìn)行稀疏訓(xùn)練:Wen等[18]提出結(jié)構(gòu)化稀疏性學(xué)習(xí)和對(duì)通道比例因子的稀疏性懲罰;Liu等[19]提出一種簡(jiǎn)單有效的通道剪枝方法——網(wǎng)絡(luò)瘦身(network slimming)。模型剪枝雖然可以減少模型參數(shù),但剪枝后的模型精度往往不如原模型;因此,選擇合適的策略訓(xùn)練預(yù)剪枝模型和重訓(xùn)練剪枝模型也是非常重要的。知識(shí)蒸餾旨在通過教師模型對(duì)學(xué)生模型的損失函數(shù)增加一個(gè)術(shù)語(yǔ),鼓勵(lì)學(xué)生模仿老師的行為,使得知識(shí)從一個(gè)大的教師模型提煉到一個(gè)小的學(xué)生模型[20-21]。Ba等[22]研究表明,如果教師模型的網(wǎng)絡(luò)參數(shù)數(shù)量和學(xué)生模型相同的話,設(shè)計(jì)更淺的學(xué)生模型將使每一層變寬。Romero等[23]使用回歸器連接教師和學(xué)生的中間層,證實(shí)深的學(xué)生模型分類效果更好。Czarnecki等[24]將目標(biāo)函數(shù)的導(dǎo)數(shù)融入神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,使得損失的教師和學(xué)生導(dǎo)數(shù)之間的差異與教師預(yù)測(cè)的差異最小化。He等[25]提出一種有效的語(yǔ)義分割知識(shí)蒸餾方法,在不引入額外參數(shù)或計(jì)算的情況下,能提高學(xué)生模型的能力,并以更少的計(jì)算開銷獲得了更好的結(jié)果。知識(shí)蒸餾將教師模型的知識(shí)遷移到學(xué)生模型中,使學(xué)生模型達(dá)到與教師模型相當(dāng)?shù)男阅堋5绾芜x擇合適的學(xué)生模型網(wǎng)絡(luò)結(jié)構(gòu),幫助該模型更好地學(xué)習(xí)教師模型的知識(shí),是知識(shí)蒸餾需進(jìn)一步研究的問題。總的來看,上述研究的壓縮與加速方法只是單獨(dú)使用,雖然也能夠獲得一定的效果,但都存在各自的局限性。本文融合了這兩種方法,提出一種基于知識(shí)蒸餾和模型剪枝的輕量化模型用于植物病害識(shí)別。通過改進(jìn)ResNet模型,在知識(shí)蒸餾中引入助教網(wǎng)絡(luò)[26]進(jìn)行訓(xùn)練,利用模型剪枝得出輕量化的學(xué)生網(wǎng)絡(luò),再使用助教網(wǎng)絡(luò)和學(xué)習(xí)率倒帶(learning rate rewinding)[27]進(jìn)行重訓(xùn)練。結(jié)果表明,在一定剪枝率下,該方法不僅減小了模型的規(guī)模,也提高了模型的精度,可為實(shí)際農(nóng)業(yè)場(chǎng)景下使用移動(dòng)端識(shí)別植物病害提供可行方案。
本研究所采用的多類植物病害數(shù)據(jù)集為New Plant Diseases Dataset,來源于PlantVillage數(shù)據(jù)集(https://www.kaggle.com)。New Plant Diseases Dataset擁有14類植物,包含26種病害圖像和12種健康圖像(表1),部分?jǐn)?shù)據(jù)集簡(jiǎn)圖如圖1所示。New Plant Diseases Dataset總共由87 867張RGB圖像組成。本實(shí)驗(yàn)將圖像統(tǒng)一調(diào)整為224 pixel×224 pixel×3通道,并將數(shù)據(jù)集依照80%和20%的比例分成訓(xùn)練集和測(cè)試集,訓(xùn)練集和測(cè)試集分別有70 295張和17 572張圖像。
本研究選定的單類植物病害為蘋果葉病害,數(shù)據(jù)集主要由Kaggle競(jìng)賽所用數(shù)據(jù)整理而來,包含4種病害圖像和1種健康圖像,數(shù)據(jù)圖像樣本如圖2所示。蘋果葉數(shù)據(jù)集總共由15 675張RGB圖像組成,本實(shí)驗(yàn)將圖像統(tǒng)一調(diào)整為224 pixel×224 pixel×3通道,并將數(shù)據(jù)集同樣依照80%和20%的比例分成訓(xùn)練集和測(cè)試集,共有12 538張訓(xùn)練集圖片和3 137張測(cè)試集圖片。與New Plant Diseases Dataset相比,蘋果葉病害數(shù)據(jù)集的背景復(fù)雜多樣。
圖2 蘋果葉病害圖像樣本Fig.2 Samples of apple leaf diseases pictures
本文算法包括數(shù)據(jù)預(yù)處理、ResNet網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)、教師網(wǎng)絡(luò)設(shè)計(jì)、助教網(wǎng)絡(luò)設(shè)計(jì)、稀疏化訓(xùn)練、模型通道剪枝,以及結(jié)合學(xué)習(xí)率倒帶和助教網(wǎng)絡(luò)蒸餾進(jìn)行重訓(xùn)練7個(gè)部分(圖3)。以下對(duì)算法中的關(guān)鍵部分進(jìn)行詳細(xì)敘述。
圖3 算法流程圖Fig.3 Algorithm flow chart
1.3.1 ResNet網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)
ResNet是一種跳躍連接和預(yù)激活設(shè)計(jì)的網(wǎng)絡(luò),即一個(gè)層的輸出可以被視為多個(gè)后續(xù)層的輸入,如果直接對(duì)其剪枝會(huì)導(dǎo)致后續(xù)層的不匹配問題;因此,在對(duì)ResNet剪枝之前需要調(diào)整該模型結(jié)構(gòu)。同時(shí),為了在測(cè)試時(shí)減少參數(shù)和節(jié)省運(yùn)行時(shí)間,需要放置一個(gè)通道選擇層(channel selection)鑒別出模型的重要通道,通過保留這些重要通道以提高模型的性能。此外,當(dāng)教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò)之間的差距過大時(shí),還需要引入一個(gè)或多個(gè)合適深度的助教網(wǎng)絡(luò)。本文通過修改殘差塊數(shù)量實(shí)現(xiàn)各種深度的ResNet網(wǎng)絡(luò)。將各種深度的具體網(wǎng)絡(luò)結(jié)構(gòu)整理于表2。
表2 模型結(jié)構(gòu)
對(duì)于輕量網(wǎng)絡(luò),實(shí)驗(yàn)使用ResNet-(9*n+2)網(wǎng)絡(luò)模型,9*n+2表示模型深度,n的大小表示每一層(layer)的殘差塊(residual block)個(gè)數(shù),共有3個(gè)layer。例如,對(duì)于ResNet-56,取n為6;而對(duì)于ResNet-74,n則為8。
對(duì)于復(fù)雜網(wǎng)絡(luò),實(shí)驗(yàn)使用ResNet-(12*n+2)網(wǎng)絡(luò)模型,12*n+2表示模型深度,n表示每一個(gè)layer的殘差塊個(gè)數(shù),共有4個(gè)layer。例如,對(duì)于ResNet-50,取n為4;而對(duì)于ResNet-74,n則為6。
1.3.2 知識(shí)蒸餾
為了獲得更好的輕量化模型性能,本文使用改進(jìn)的ResNet,通過知識(shí)蒸餾策略來訓(xùn)練模型。知識(shí)蒸餾是利用復(fù)雜的教師模型指導(dǎo)簡(jiǎn)單的學(xué)生模型訓(xùn)練,把知識(shí)遷移到學(xué)生模型中,使學(xué)生模型達(dá)到與教師模型相當(dāng)?shù)男阅堋?/p>
知識(shí)蒸餾訓(xùn)練與傳統(tǒng)的模型訓(xùn)練不同。傳統(tǒng)模型使用Softmax作為輸出層以輸出類別概率。當(dāng)Softmax輸出的概率分布熵相對(duì)較小時(shí),負(fù)標(biāo)簽的值都接近0,此時(shí),負(fù)標(biāo)簽對(duì)損失函數(shù)的貢獻(xiàn)非常小,幾乎可以忽略不計(jì)。然而,負(fù)標(biāo)簽也帶有大量的信息,如某些負(fù)標(biāo)簽對(duì)應(yīng)的概率遠(yuǎn)大于其他負(fù)標(biāo)簽,甚至?xí)N(yùn)含比正標(biāo)簽更多的信息。為了獲得更多的負(fù)標(biāo)簽信息,知識(shí)蒸餾在原始Softmax函數(shù)中引入溫度變量T,T值越大,則Softmax的輸出概率分布熵越大,從而使得負(fù)標(biāo)簽攜帶的信息被相對(duì)放大。
(1)
式(1)中:qi為“軟化”后的概率向量;zi為當(dāng)前類的logit值;j為輸出節(jié)點(diǎn)的個(gè)數(shù),即分類的類別個(gè)數(shù);zj為全連接層輸出的每類的logit值。當(dāng)T=1時(shí),該函數(shù)就是原始Softmax函數(shù)。
知識(shí)蒸餾的過程如圖4所示,圖中C表示卷積層,P表示池化層,FC表示全連接層,軟標(biāo)簽表示經(jīng)過調(diào)整的標(biāo)簽值,硬標(biāo)簽表示實(shí)際的標(biāo)簽值(也就是真實(shí)標(biāo)簽),軟預(yù)測(cè)表示經(jīng)過調(diào)整的Softmax輸出向量,硬預(yù)測(cè)表示原始的Softmax輸出向量。知識(shí)蒸餾首先訓(xùn)練教師網(wǎng)絡(luò)模型。教師網(wǎng)絡(luò)中的logit輸出除以T參數(shù)之后做Softmax計(jì)算,得到軟標(biāo)簽值;然后,將數(shù)據(jù)集輸入到學(xué)生網(wǎng)絡(luò)中,重復(fù)教師網(wǎng)絡(luò)相同的操作并得到logit輸出。
C,卷積層;P,池化層,FC,全連接層。下同。C, Convolution layer; P, Pooling layer; FC, Fully connected layer. The same as below.圖4 知識(shí)蒸餾過程示意圖Fig.4 Diagram of knowledge distillation
之后,分成兩步計(jì)算:一是除以與教師模型相同的T參數(shù)之后做Softmax計(jì)算,得到軟預(yù)測(cè),將此輸出與軟標(biāo)簽進(jìn)行比較,用蒸餾損失函數(shù)衡量?jī)蓚€(gè)概率分布的差異;二是做Softmax計(jì)算后,得出硬預(yù)測(cè)值,將硬預(yù)測(cè)值與硬標(biāo)簽進(jìn)行比較,用學(xué)生損失函數(shù)衡量二者之間的差異。兩部分損失函數(shù)相加,得到總的損失函數(shù),計(jì)算公式為
Vloss=(1-a)Vloss-SL+aT2Vloss-KD。
(2)
式(2)中:Vloss為總損失函數(shù)的值;Vloss-SL為學(xué)生損失函數(shù)的值;Vloss-KD為蒸餾損失函數(shù)的值;a為比例系數(shù),是控制兩個(gè)損失函數(shù)的超參數(shù)。當(dāng)a=0時(shí),相當(dāng)于網(wǎng)絡(luò)沒有經(jīng)過蒸餾。
1.3.3 助教網(wǎng)絡(luò)
為了能將模型部署在終端設(shè)備上,學(xué)生網(wǎng)絡(luò)的大小通常是固定的。如果把一個(gè)預(yù)先訓(xùn)練好的大型教師網(wǎng)絡(luò)的知識(shí)提煉到一個(gè)固定的、非常小的學(xué)生網(wǎng)絡(luò),那么其過大的差距將導(dǎo)致知識(shí)提煉的效果不如預(yù)期。為了解決這一問題,本文在教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò)之間,插入一個(gè)中等規(guī)模的助教網(wǎng)絡(luò)(圖5)來彌補(bǔ)它們之間的空白。
助教網(wǎng)絡(luò)是從教師網(wǎng)絡(luò)上提煉出來的,用以扮演老師的角色指導(dǎo)訓(xùn)練學(xué)生。當(dāng)教師模型和學(xué)生模型的差距很大時(shí),還可以讓助教變成新的教師,以此來減小教師模型和學(xué)生模型之間的差距。助教網(wǎng)絡(luò)的方法能夠重復(fù)使用,即在教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò)之間可以存在多個(gè)助教網(wǎng)絡(luò),從而有效解決教師模型和學(xué)生模型規(guī)模差距過大影響蒸餾效率的問題。本文使用知識(shí)蒸餾策略,將教師網(wǎng)絡(luò)模型的軟知識(shí)不斷提煉到一個(gè)或多個(gè)較小的助教網(wǎng)絡(luò)模型中,使得助教網(wǎng)絡(luò)模型的精度更佳。
1.3.4 稀疏化訓(xùn)練
為了減小通道剪枝對(duì)模型效果的影響,模型在通道剪枝之前還需要進(jìn)行稀疏化訓(xùn)練。本文通過對(duì)BN(batch normalization)層[28]的尺度因子γ施加l1正則化來進(jìn)行稀疏化訓(xùn)練。BN層首先對(duì)每一批量的輸入特征進(jìn)行白化操作:
(3)
(4)
然后,進(jìn)行去均值方差操作:
(5)
白化操作雖然能在一定程度上解決梯度過飽和的問題,但會(huì)忽略淺層網(wǎng)絡(luò)學(xué)習(xí)到的信息。為了解決該問題,增加一個(gè)線性變換操作,計(jì)算公式為
(6)
式(6)中:yi為BN層的輸出;γ和β為可訓(xùn)練的仿射變換參數(shù),用于重新縮放和調(diào)整歸一化值。
模型的稀疏化可以在訓(xùn)練時(shí)引入l1正則化進(jìn)行,也可以在訓(xùn)練后通過少量訓(xùn)練加正則化獲得。本文使用后一種方案,即在模型訓(xùn)練后進(jìn)行稀疏正則化訓(xùn)練。在稀疏化訓(xùn)練中,為每個(gè)通道引入一個(gè)尺度因子γ,該比例因子可以與每一個(gè)通道的輸出相乘,然后聯(lián)合訓(xùn)練模型的權(quán)重和尺度因子γ,并對(duì)后者進(jìn)行稀疏正則化。目標(biāo)損失函數(shù)L的計(jì)算公式為
(7)
式(7)中:x為訓(xùn)練輸入;y為訓(xùn)練目標(biāo);W為可訓(xùn)練權(quán)重;λ為平衡前后損失的超參數(shù);Γ為縮放層的參數(shù);g(γ)=|γ|,是對(duì)尺度因子γ的稀疏誘導(dǎo)懲罰;l()代表CNN正常訓(xùn)練的損失。本文使用l1范數(shù),對(duì)于非光滑的l1懲罰項(xiàng),采用次梯度下降法進(jìn)行優(yōu)化。通過稀疏化訓(xùn)練,尺度因子γ在訓(xùn)練過程中逐漸趨近于0。將最接近于0的尺度因子γ所對(duì)應(yīng)的這部分通道剪掉,對(duì)模型效果的影響很小。
1.3.5 通道剪枝
稀疏化后,對(duì)所有的尺度因子γ進(jìn)行統(tǒng)計(jì)和排序,設(shè)定剪枝率。將低于剪枝率比例的尺度因子γ所對(duì)應(yīng)的這部分通道剪掉,即等價(jià)于把相對(duì)不重要的通道剪掉。通道剪枝過程如圖6所示。
圖6 通道剪枝示意圖Fig.6 Diagram of channel pruning
本實(shí)驗(yàn)在剪枝之前已對(duì)模型進(jìn)行了稀疏化訓(xùn)練,這使得在一定限度的剪枝率內(nèi),模型剪枝不會(huì)導(dǎo)致模型性能有太大的損失。通過修剪通道,可以獲得更輕量化的網(wǎng)絡(luò),即更少的參數(shù)和計(jì)算量。值得注意的是,當(dāng)剪枝率過高時(shí),可能產(chǎn)生完全剪枝某一層所有通道的現(xiàn)象,這種情況將完全破壞模型結(jié)構(gòu),從而導(dǎo)致模型性能大大降低。因此,若存在某一層被完全剪枝的情況,應(yīng)保留該層的最大尺度因子所對(duì)應(yīng)的通道,以保證模型的完整性。
1.3.6 重訓(xùn)練
模型剪枝之后,模型的性能通常會(huì)降低;因此,需要重新訓(xùn)練剩余的模型結(jié)構(gòu)以恢復(fù)模型性能,從而解決模型復(fù)雜度與性能矛盾的問題。常用的重訓(xùn)練包括微調(diào)、權(quán)重倒帶(weight rewinding)[29]、學(xué)習(xí)率倒帶。學(xué)習(xí)率倒帶是微調(diào)和權(quán)重倒帶的混合體。與微調(diào)一樣,它使用訓(xùn)練結(jié)束時(shí)的最終權(quán)重值。然而,當(dāng)重新訓(xùn)練t個(gè)epoch時(shí),學(xué)習(xí)率倒帶使用的是訓(xùn)練的最后t個(gè)epoch的學(xué)習(xí)率而不是訓(xùn)練的最終學(xué)習(xí)率。當(dāng)t過小時(shí),學(xué)習(xí)率倒帶等同于微調(diào)。學(xué)習(xí)率倒帶在所有情況下都與權(quán)重倒帶的效果相當(dāng),甚至優(yōu)于權(quán)重倒帶。本實(shí)驗(yàn)使用學(xué)習(xí)率倒帶來代替原本的微調(diào)。由于剪枝前后的網(wǎng)絡(luò)模型結(jié)構(gòu)相似,因此本文創(chuàng)新性地將助教網(wǎng)絡(luò)蒸餾和學(xué)習(xí)率倒帶結(jié)合起來,使用助教學(xué)習(xí)率倒帶進(jìn)行重訓(xùn)練。
實(shí)驗(yàn)采用Python編程語(yǔ)言實(shí)現(xiàn),操作系統(tǒng)是Window 10,GPU是NVIDIA GTX2080TI,顯存11 GB,CUDA 10.0,使用的深度學(xué)習(xí)框架版本為PyTorch 1.10。Android開發(fā)軟件為Android Studio,SDK(軟件開發(fā)工具包)的版本號(hào)為32,PyTorch Android Lite的版本號(hào)為1.10.0。
教師網(wǎng)絡(luò)訓(xùn)練:模型訓(xùn)練中,設(shè)置批次大小(batch)為8,迭代次數(shù)(epoch)為100,初始學(xué)習(xí)率為0.1,當(dāng)epoch達(dá)到50時(shí)設(shè)置學(xué)習(xí)率為0.01,當(dāng)epoch達(dá)到75時(shí)設(shè)置學(xué)習(xí)率為0.001。
助教網(wǎng)絡(luò)訓(xùn)練:設(shè)置溫度變量T為5,比例系數(shù)a為0.5,其他優(yōu)化設(shè)置與教師網(wǎng)絡(luò)訓(xùn)練相同。
稀疏化訓(xùn)練:得到最終的助教網(wǎng)絡(luò)模型后,再通過少量訓(xùn)練加l1正則化獲得稀疏化的模型,此時(shí)少量訓(xùn)練的本質(zhì)是使BN層的γ系數(shù)稀疏化,并且盡量不破壞卷積核權(quán)重的分布,因此訓(xùn)練的迭代次數(shù)不應(yīng)過大。經(jīng)實(shí)驗(yàn)分析后,本文使用0.001作為稀疏率,迭代次數(shù)為60,初始學(xué)習(xí)率設(shè)置為0.1,當(dāng)epoch達(dá)到30時(shí)設(shè)置學(xué)習(xí)率為0.01,當(dāng)epoch達(dá)到45時(shí)設(shè)置學(xué)習(xí)為0.001。其他優(yōu)化設(shè)置與教師網(wǎng)絡(luò)訓(xùn)練相同。
通道剪枝:分別以90%、70%和50%的剪枝率對(duì)ResNet-50、ResNet-26和ResNet-14進(jìn)行修剪。為了保證模型的完整性,保留剪枝因子最大的通道。
重訓(xùn)練:本實(shí)驗(yàn)使用助教網(wǎng)絡(luò)模型來指導(dǎo)學(xué)生網(wǎng)絡(luò)模型的重訓(xùn)練,將助教學(xué)習(xí)率倒帶的迭代次數(shù)設(shè)置為助教網(wǎng)絡(luò)訓(xùn)練的一半,也就是50,前25次使用0.01的學(xué)習(xí)率,后25次使用0.001的學(xué)習(xí)率。其他優(yōu)化設(shè)置與助教網(wǎng)絡(luò)訓(xùn)練相同。
在New Plant Diseases Dataset上,使用ResNet-(12*n+2)網(wǎng)絡(luò)模型,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò)。參照文獻(xiàn)[26]并經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)模型的規(guī)模差距在2倍左右時(shí)效果較好,因此分別使用ResNet-50、ResNet-26和ResNet-14為最終的助教網(wǎng)絡(luò)模型進(jìn)行剪枝,并與同為輕量化設(shè)計(jì)的MobileNetV2模型進(jìn)行對(duì)比。訓(xùn)練流程如圖7所示。
圖7 訓(xùn)練流程圖Fig.7 Training flow chart
在ResNet-50模型上訓(xùn)練得到準(zhǔn)確率為96.29%的模型(表3),剪枝90%后使用學(xué)習(xí)率倒帶得到的模型準(zhǔn)確率為95.65%。對(duì)于教師學(xué)習(xí)率倒帶,把原ResNet-50網(wǎng)絡(luò)當(dāng)作教師網(wǎng)絡(luò),把剪枝90%后的網(wǎng)絡(luò)當(dāng)作學(xué)生網(wǎng)絡(luò),經(jīng)過相同的配置重訓(xùn)練后,模型性能恢復(fù)的效果比學(xué)習(xí)率倒帶更好,甚至超過了原模型的精度,通過教師學(xué)習(xí)率倒帶恢復(fù)模型精度的模型準(zhǔn)確率為96.52%。對(duì)于助教學(xué)習(xí)率倒帶,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò),由教師網(wǎng)絡(luò)提煉出助教網(wǎng)絡(luò)ResNet-50,對(duì)助教網(wǎng)絡(luò)ResNet-50剪枝90%后得出學(xué)生網(wǎng)絡(luò),使用助教網(wǎng)絡(luò)指導(dǎo)學(xué)生網(wǎng)絡(luò)ResNet-50(剪枝后)的重訓(xùn)練,得到準(zhǔn)確率為97.78%的模型,效果與教師學(xué)習(xí)率倒帶相比有明顯提高。
表3 在New Plant Diseases Dataset上的實(shí)驗(yàn)結(jié)果
在ResNet-26模型上訓(xùn)練得到準(zhǔn)確率為95.37%的模型,剪枝70%后使用學(xué)習(xí)率倒帶得到的模型準(zhǔn)確率為91.23%。對(duì)于教師學(xué)習(xí)率倒帶,把原ResNet-26網(wǎng)絡(luò)當(dāng)作教師網(wǎng)絡(luò),而把剪枝70%后的網(wǎng)絡(luò)當(dāng)作學(xué)生網(wǎng)絡(luò),經(jīng)過相同的配置重訓(xùn)練后,模型準(zhǔn)確率為95.66%。對(duì)于助教學(xué)習(xí)率倒帶,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò),由教師網(wǎng)絡(luò)依次提煉出助教網(wǎng)絡(luò)ResNet-50、ResNet-26,對(duì)助教網(wǎng)絡(luò)ResNet-26剪枝70%后得出學(xué)生網(wǎng)絡(luò),使用助教網(wǎng)絡(luò)指導(dǎo)學(xué)生網(wǎng)絡(luò)ResNet-26(剪枝后)的重訓(xùn)練,最終得到準(zhǔn)確率為97.29%的模型。
在ResNet-14模型上訓(xùn)練得到準(zhǔn)確率為91.54%的模型,剪枝50%后使用學(xué)習(xí)率倒帶得到的模型準(zhǔn)確率為90.85%。對(duì)于教師學(xué)習(xí)率倒帶,把ResNet-26網(wǎng)絡(luò)當(dāng)作教師網(wǎng)絡(luò),而把剪枝50%后的網(wǎng)絡(luò)當(dāng)作學(xué)生網(wǎng)絡(luò),經(jīng)過相同的配置重訓(xùn)練后,模型準(zhǔn)確率為91.32%。對(duì)于助教學(xué)習(xí)率倒帶,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò),由教師網(wǎng)絡(luò)依次提煉出助教網(wǎng)絡(luò)ResNet-50、ResNet-26、ResNet-14,對(duì)助教網(wǎng)絡(luò)ResNet-14剪枝50%后得出學(xué)生網(wǎng)絡(luò),使用助教網(wǎng)絡(luò)指導(dǎo)學(xué)生網(wǎng)絡(luò)ResNet-14(剪枝后)的重訓(xùn)練,最終得到準(zhǔn)確率為96.35%的模型。在MobileNetV2模型上訓(xùn)練得到的準(zhǔn)確率為90.90%。
對(duì)比3種深度的模型剪枝實(shí)驗(yàn)發(fā)現(xiàn):ResNet-50剪枝90%比ResNet-14剪枝50%后的參數(shù)量更小,模型效果更佳;使用大模型進(jìn)行大剪枝率的剪枝效果比使用小模型進(jìn)行小剪枝率的剪枝效果更好。因此,先訓(xùn)練大型模型,然后使用模型剪枝來將模型縮小是可行的。
為了將模型移植到移動(dòng)終端,實(shí)驗(yàn)首先將原模型轉(zhuǎn)換為Android可以調(diào)用的模型文件,再對(duì)模型進(jìn)行移動(dòng)終端優(yōu)化,減少模型推理時(shí)間,最終導(dǎo)出lite解釋器版本模型,保存模型,將其移植在Android平臺(tái)上,實(shí)驗(yàn)效果展示如圖8所示,表明模型能夠移植在Android平臺(tái)上并有效運(yùn)行,為嵌入式終端精準(zhǔn)識(shí)別植物病害提供了新方案。
圖8 Android平臺(tái)上識(shí)別多類植物病害數(shù)據(jù)集的效果照片F(xiàn)ig.8 Photos of the identification effect on the multiple plant disease dataset on the Android platform
在蘋果葉病害數(shù)據(jù)集上,使用ResNet-(12*n+2)網(wǎng)絡(luò)模型,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò)、ResNet-26為最終助教網(wǎng)絡(luò)進(jìn)行剪枝,并與MobileNetV2模型進(jìn)行對(duì)比。實(shí)驗(yàn)設(shè)置批次大小為4,其他優(yōu)化設(shè)置與在New Plant Diseases Dataset上的實(shí)驗(yàn)相同。
訓(xùn)練ResNet-26模型,其準(zhǔn)確率為87.09%(表4),剪枝70%后使用學(xué)習(xí)率倒帶得到的模型準(zhǔn)確率為89.10%。對(duì)于教師學(xué)習(xí)率倒帶,把ResNet-26網(wǎng)絡(luò)當(dāng)作教師網(wǎng)絡(luò),而把剪枝70%后的網(wǎng)絡(luò)當(dāng)作學(xué)生網(wǎng)絡(luò),經(jīng)過相同的配置重訓(xùn)練后,模型準(zhǔn)確率為89.32%。對(duì)于助教學(xué)習(xí)率倒帶,訓(xùn)練ResNet-74為教師網(wǎng)絡(luò),由教師網(wǎng)絡(luò)依次提煉出助教網(wǎng)絡(luò)ResNet-50、ResNet-26,對(duì)助教網(wǎng)絡(luò)ResNet-26剪枝70%后得出學(xué)生網(wǎng)絡(luò),使用助教網(wǎng)絡(luò)指導(dǎo)學(xué)生網(wǎng)絡(luò)ResNet-26(剪枝后)的重訓(xùn)練,最終得到準(zhǔn)確率為91.94%的模型。在MobileNetV2模型上訓(xùn)練得到的準(zhǔn)確率為33.57%,模型效果不佳。分析發(fā)現(xiàn),輕量化模型MobileNetV2欠擬合,擬合程度不高,模型簡(jiǎn)單,無(wú)法應(yīng)對(duì)復(fù)雜的任務(wù)。蘋果葉病害數(shù)據(jù)集中的所有病害葉片圖像均在自然光照下拍攝,且背景復(fù)雜,而New Plant Diseases Dataset中的圖像均是在室內(nèi)拍攝,拍攝規(guī)范,背景簡(jiǎn)單。對(duì)比表2和表3數(shù)據(jù)可知,復(fù)雜背景會(huì)影響模型對(duì)植物葉片病害的識(shí)別效果,導(dǎo)致模型識(shí)別的錯(cuò)誤率整體升高。在Androide平臺(tái)上的實(shí)驗(yàn)效果展示如圖9所示。
圖9 Android平臺(tái)上識(shí)別蘋果葉數(shù)據(jù)集的效果照片F(xiàn)ig.9 Photos of the identification effect on the apple leaf data on the Android platform
表4 在蘋果葉病害數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果
稀疏化訓(xùn)練是精度和稀疏度的一個(gè)平衡過程,如何尋找好的策略讓稀疏后的模型在保持高精度的同時(shí)實(shí)現(xiàn)高稀疏度是值得研究的問題,尤其是當(dāng)模型訓(xùn)練的時(shí)間過長(zhǎng)的時(shí)候。
為了訓(xùn)練方便,模型使用更為輕量的ResNet-(9*n+2)訓(xùn)練ResNet-56模型,數(shù)據(jù)集使用CIFAR-10。CIFAR-10是一個(gè)用于識(shí)別普適物體的小型數(shù)據(jù)集,一共包含10個(gè)類別的RGB圖片,每個(gè)圖片的尺寸為32 pixel×32 pixel,每個(gè)類別有6 000張圖像,數(shù)據(jù)集中一共有50 000張訓(xùn)練圖片和10 000張測(cè)試圖片。實(shí)驗(yàn)分別設(shè)置稀疏度為0.000 1和0.001,批次大小為16。其余設(shè)置與在New Plant Diseases Dataset上的實(shí)驗(yàn)相同。
在迭代次數(shù)為200的稀疏化訓(xùn)練中:在0.001的稀疏度下,一開始精度會(huì)有明顯的急劇下降,之后有兩次精度回升的節(jié)點(diǎn)(圖10);在0.000 1的稀疏度下,精度先緩步下降,后期漸趨平穩(wěn)。在迭代次數(shù)分別為100、60、40的稀疏化訓(xùn)練中:在0.001的稀疏度下,一開始精度會(huì)明顯急劇下降,之后有一次精度回升的節(jié)點(diǎn);在0.000 1的稀疏度下,精度先緩步下降,后期漸趨平穩(wěn)。迭代200次后,0.001稀疏度下的訓(xùn)練精度比0.000 1稀疏度下的訓(xùn)練精度高;迭代100次后,0.001和0.000 1稀疏度下的稀疏化訓(xùn)練精度相仿;迭代60或40次,0.001稀疏度下的稀疏化訓(xùn)練精度均比0.000 1稀疏度下的訓(xùn)練精度低。
圖10 不同稀疏度下模型準(zhǔn)確率的變化Fig.10 Dynamic of accuracy under different sparsities
實(shí)驗(yàn)發(fā)現(xiàn),在迭代次數(shù)為200的稀疏化訓(xùn)練中,兩次精度回升剛好對(duì)應(yīng)著兩次學(xué)習(xí)率的調(diào)小變化;在迭代次數(shù)分別為100、60、40的稀疏化訓(xùn)練中,精度回升的位置都對(duì)應(yīng)于迭代次數(shù)的50%,即學(xué)習(xí)率從0.1變化為0.01的時(shí)候。當(dāng)使用大稀疏度時(shí),雖然稀疏較快,但精度掉落得也快,之后隨著訓(xùn)練的進(jìn)行,精度會(huì)有一定的恢復(fù),即前期配合大學(xué)習(xí)率會(huì)加快稀疏,后期改用小學(xué)習(xí)率有助于精度回升;當(dāng)使用小稀疏度時(shí),雖然稀疏較慢,但精度掉得也慢,較為平穩(wěn)。
稀疏過程是個(gè)博弈過程,不僅期望較高的稀疏度,還希望在學(xué)習(xí)率下降后恢復(fù)足夠的精度。經(jīng)對(duì)比,本文使用迭代次數(shù)60、稀疏度0.001來進(jìn)行稀疏化訓(xùn)練。
在模型剪枝中,剪枝率設(shè)置是非常關(guān)鍵的:如果刪除了太少的通道,模型大小的減少非常有限;如果刪除了太多的通道,可能會(huì)對(duì)模型造成嚴(yán)重的破壞,導(dǎo)致模型無(wú)法通過重訓(xùn)練恢復(fù)其準(zhǔn)確性。本文通過在CIFAR-10數(shù)據(jù)集上分別使用ResNet-50和輕量化ResNet-56模型進(jìn)行訓(xùn)練,來分析剪枝率對(duì)模型效果的影響。實(shí)驗(yàn)設(shè)置與在New Plant Diseases Dataset上的實(shí)驗(yàn)相同。
在對(duì)ResNet-56模型和ResNet-50模型的稀疏化訓(xùn)練采用0.001稀疏度、迭代60次完成后,對(duì)ResNet-56分別設(shè)置30%、40%、50%、60%的剪枝率,然后用助教學(xué)習(xí)率倒帶進(jìn)行重訓(xùn)練以恢復(fù)模型性能,恢復(fù)后的準(zhǔn)確率依次為89.54%、91.41%、91.31%、90.19%(表5)??梢郧宄乜吹?剪枝30%時(shí)還有冗余參數(shù),剪枝40%時(shí)效果相對(duì)最好,之后隨著剪枝率上升,模型損傷越來越大。對(duì)ResNet-50模型分別設(shè)置50%、60%、70%、80%的剪枝率,然后用助教學(xué)習(xí)率倒帶進(jìn)行重訓(xùn)練以恢復(fù)模型性能,恢復(fù)后的準(zhǔn)確率依次為85.99%、85.81%、85.59%、85.37%??梢钥闯?在一定的剪枝率內(nèi),剪掉冗余參數(shù)并不會(huì)降低模型精度,但當(dāng)超過一定范圍后,隨著剪枝率的上升,對(duì)模型的損傷也進(jìn)一步提高。
表5 剪枝率對(duì)模型的影響
為了分析ResNet模型對(duì)New Plant Diseases Dataset中不同類別植物病害的識(shí)別效果,以及結(jié)合使用知識(shí)蒸餾和學(xué)習(xí)率倒帶的有效性,本文測(cè)試了模型對(duì)各個(gè)植物病害的識(shí)別結(jié)果(圖11、圖12)。
0,蘋果瘡痂病;1,蘋果黑腐病;2,蘋果銹病;3,健康蘋果;4,健康草莓;5,櫻桃白粉病;6,健康櫻桃;7,玉米灰葉斑病;8,玉米銹病;9,玉米北方葉枯病;10,健康玉米;11,葡萄黑腐病;12,葡萄黑麻疹;13,葡萄葉枯病;14,健康葡萄;15,橘子黃龍病;16,桃菌斑;17,健康桃;18,胡椒鈴菌斑;19,健康胡椒;20,馬鈴薯早疫病;21,馬鈴薯晚疫病;22,健康馬鈴薯;23,健康樹莓;24,健康黃豆;25,南瓜白粉病;26,草莓葉焦病;27,健康草莓;28,番茄細(xì)菌斑;29,番茄早疫病;30,番茄晚疫病;31,番茄葉霉病;32,番茄葉斑病;33,番茄二斑葉螨病;34,番茄輪斑病;35,番茄黃曲葉病;36,番茄花葉病;37,健康番茄。下同。0, Apple scab; 1, Apple black rot; 2, Apple cedar rust; 3, Healty apple; 4, Healthy blueberry; 5, Cherry powdery mildew; 6, Healthy cherry; 7, Maize gray leaf spot; 8, Maize common rust; 9, Maize northern leaf blight; 10, Healthy maize; 11, Grape black rot; 12, Grape black measles; 13, Grape leaf blight; 14, Healthy grape; 15, Orange Huanglongbing; 16, Peach bacterial spot; 17, Healthy peach; 18, Pepper bacterial spot; 19, Healthy pepper; 20, Potato early blight; 21, Potato late blight; 22, Healthy potato; 23, Healthy raspberry; 24, Healthy soybean; 25, Squash powdery mildew; 26, Strawberry leaf scorch; 27, Healthy strawberry; 28, Tomato bacterial spot; 29, Tomato early bilght; 30, Tomato late blight; 31, Tomato leaf mold; 32, Tomato septoria leaf spot; 33, Tomato two-spotted spider mite; 34, Tomato target spot; 35, Tomato yellow leaf curl virus; 36, Tomato mosaic virus; 37, Healthy tomato. The same as below.圖11 模型對(duì)各類病害的識(shí)別準(zhǔn)確率Fig.11 Identification accuracy of ravious diseases by the proposed model
圖12 錯(cuò)誤率最高的4種病害在測(cè)試集上的誤識(shí)別數(shù)量分布Fig.12 Quantity distribution of misidentifications of 4 diseases with the highest error rate
通過助教學(xué)習(xí)率倒帶恢復(fù)的模型比學(xué)習(xí)率倒帶和教師學(xué)習(xí)率倒帶的效果更好。在對(duì)時(shí)間不敏感的情況下,助教學(xué)習(xí)率倒帶與教師學(xué)習(xí)率倒帶相比更有優(yōu)勢(shì)。結(jié)果表明,用助教學(xué)習(xí)率倒帶來代替微調(diào)的方案是可行的,且效果普遍更好。
具體到各類病害上,模型對(duì)玉米灰葉斑病、番茄早疫病、番茄晚疫病和番茄輪斑病的識(shí)別準(zhǔn)確率較低。玉米灰葉斑病很容易與玉米北方葉枯病混淆,后者占前者整體誤識(shí)別數(shù)的大部分(占比72.34%)。究其原因,二者的葉片病斑均是沿葉脈方向擴(kuò)展成長(zhǎng)條斑或呈矩形,病斑顏色為灰褐色,相似度很高,易造成模型誤識(shí)別。番茄早疫病容易被誤識(shí)別為番茄細(xì)菌斑、番茄晚疫病和番茄葉斑病,這幾種病害分別占前者整體誤識(shí)別率的11.11%、35.56%、13.33%。究其原因,番茄早疫病和番茄晚疫病均是在葉尖處顏色開始發(fā)黑并腐爛,癥狀相似,易造成模型的誤識(shí)別。番茄晚疫病也很容易被誤識(shí)別為番茄早疫病。番茄輪斑病容易被誤識(shí)別為番茄細(xì)菌斑、番茄二斑葉螨病或健康番茄,這幾種情況分別占前者整體誤識(shí)別率的11.36%、27.28%和18.19%。其原因是,番茄輪斑病的葉面有紅褐色斑點(diǎn),但并不明顯;番茄二斑葉螨病主要是由二斑葉螨寄生在葉片的背面取食造成,二斑葉螨會(huì)使葉片變成暗褐色,兩者葉片在病害特征上相近,葉片紋理相似,容易誤判。番茄輪斑病的斑點(diǎn)并不明顯,因此也很容易與健康番茄混淆,從而造成模型的誤識(shí)別。
本文針對(duì)卷積神經(jīng)網(wǎng)絡(luò)模型存在冗余參數(shù)和推斷時(shí)間長(zhǎng),難以直接應(yīng)用于嵌入式終端的情況,提出了基于知識(shí)蒸餾和模型剪枝的輕量化模型植物病害識(shí)別方法,并使用改進(jìn)后的ResNet網(wǎng)絡(luò)結(jié)構(gòu)在植物病害數(shù)據(jù)集上進(jìn)行訓(xùn)練。主要結(jié)論如下:1)在知識(shí)蒸餾中引入一個(gè)或者多個(gè)助教網(wǎng)絡(luò),并通過對(duì)助教網(wǎng)絡(luò)進(jìn)行剪枝,可得出合適規(guī)模的學(xué)生網(wǎng)絡(luò)。2)使用大模型進(jìn)行剪枝的效果比小模型直接訓(xùn)練更佳,也比使用小模型進(jìn)行小剪枝率的剪枝效果更優(yōu)。3)學(xué)習(xí)率倒帶的效果優(yōu)于微調(diào),結(jié)合助教網(wǎng)絡(luò)蒸餾,剪枝后的模型性能比原模型更好。4)將原模型轉(zhuǎn)換并保存為Android可以調(diào)用的模型文件,模型能夠移植在Android平臺(tái)上并有效運(yùn)行。5)本方法可以靈活地根據(jù)需求縮減模型的大小,并通過助教學(xué)習(xí)率倒帶恢復(fù)模型性能。在一定程度上對(duì)模型進(jìn)行剪枝,不僅縮減了模型的大小,還提高了模型的性能,為模型應(yīng)用在嵌入式終端上精準(zhǔn)識(shí)別植物病害提供了可行方案。
本文提出的方法在兩種數(shù)據(jù)集中完成實(shí)驗(yàn),其中,New Plant Diseases Dataset的背景簡(jiǎn)單,效果較好;蘋果葉病害數(shù)據(jù)集背景復(fù)雜,受到光照等復(fù)雜環(huán)境的影響,效果相對(duì)略差。但這兩種數(shù)據(jù)集都是由公開數(shù)據(jù)集整理而成的,下一步,可以利用無(wú)人機(jī)或者邊緣設(shè)備采集實(shí)際生活中的植物葉片數(shù)據(jù)進(jìn)行處理和測(cè)試。此外,基于知識(shí)蒸餾和模型剪枝的輕量化模型植物病害識(shí)別可以與傳統(tǒng)或者最新的深度學(xué)習(xí)方法相結(jié)合,以找到最適于邊緣設(shè)備采集植物葉片的方法。