袁培森 申成吉 徐煥良
(南京農(nóng)業(yè)大學(xué)人工智能學(xué)院, 南京 210095)
菌菇是一種重要的真菌,其種類(lèi)繁多,被廣泛用于生物技術(shù)領(lǐng)域,特別是用于食品、藥物化合物、酶、膳食補(bǔ)充劑和飼料添加劑的生產(chǎn)等[1-2]。全世界大約有150萬(wàn)種真菌[3],已被記載的菌菇及其相關(guān)物種約有13 000種[4],真菌的準(zhǔn)確識(shí)別具有重要的實(shí)際應(yīng)用價(jià)值[5]。表型組學(xué)是生物學(xué)領(lǐng)域近年來(lái)的研究方向之一[6],正在成為繼基因分析之后生物學(xué)研究的重要內(nèi)容[7]。菌類(lèi)表型分類(lèi)研究具有重要的生態(tài)學(xué)意義[8]。
傳統(tǒng)真菌分類(lèi)基于基因組序列,這是真菌生態(tài)學(xué)和多樣性研究的重要組成部分[9]。但是,這種方法代價(jià)高,且效率較低。近年來(lái),菌菇分類(lèi)受到生物學(xué)和信息領(lǐng)域的廣泛關(guān)注,菌菇表型的研究成為生物學(xué)領(lǐng)域研究熱點(diǎn)[10-14]。
HEWITT等[10]研究了真菌活動(dòng)特性和表型異質(zhì)性。HIBBETT等[15]提出了真菌界的綜合系統(tǒng)發(fā)育分類(lèi)。TAYLOR等[16]將核酸變異的系統(tǒng)發(fā)育和種群遺傳學(xué)方法用于鑒定致病真菌的種類(lèi)和種群,并確定了它們?cè)谧匀唤缰械姆敝撤绞健IELINSKI等[17]基于深度學(xué)習(xí)和詞袋的機(jī)器學(xué)習(xí)方法對(duì)真菌的顯微圖像進(jìn)行分類(lèi)。HIBBETT等[14]分析了GenBank核苷酸數(shù)據(jù)庫(kù)中的核糖體RNA內(nèi)部轉(zhuǎn)錄間隔區(qū)(Internal transcribed spacer, ITS)序列,采用聚類(lèi)方法開(kāi)發(fā)了基于環(huán)境序列的菌類(lèi)分類(lèi)系統(tǒng),同時(shí)指出,基于標(biāo)本的方法對(duì)所有種類(lèi)真菌進(jìn)行分類(lèi),難度大、效率低。羅奇[18]針對(duì)卷積神經(jīng)網(wǎng)絡(luò)中存在的空間冗余問(wèn)題,設(shè)計(jì)了一種降梯度卷積訓(xùn)練模型,有效提高了蘑菇圖像分類(lèi)的識(shí)別性能。PETERSEN等[13]指出,形態(tài)學(xué)確定真菌的物種邊界已被證明是不充分的。上述研究均未針對(duì)菌菇的細(xì)粒度識(shí)別進(jìn)行分類(lèi)。GULDBERG等[19]提供了近1 500種野生菌菇種類(lèi)和超過(guò)100 000幅真菌圖像的數(shù)據(jù)集,該數(shù)據(jù)集為菌菇分類(lèi)研究提供了數(shù)據(jù)基礎(chǔ)。
基于圖像的細(xì)粒度分類(lèi)(Fine-grained classification)[20-21]比較困難,細(xì)粒度性質(zhì)導(dǎo)致的小類(lèi)間差異和大類(lèi)內(nèi)差異是難點(diǎn),這在各種實(shí)際場(chǎng)景中廣泛存在[22]。近年來(lái),深度學(xué)習(xí)已成為處理表型數(shù)據(jù)的重要工具[23-25]。深度學(xué)習(xí)以端到端的方式訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò),比傳統(tǒng)方法更有效。采用深度學(xué)習(xí)技術(shù)可以更有效地對(duì)表型數(shù)據(jù)進(jìn)行分類(lèi)和識(shí)別[23,26-27]。深度學(xué)習(xí)技術(shù)為細(xì)粒度分類(lèi)提供了技術(shù)支撐,極大地提升了細(xì)粒度分類(lèi)的質(zhì)量和效率[22,28]。
現(xiàn)有深度學(xué)習(xí)網(wǎng)絡(luò)模型結(jié)構(gòu)復(fù)雜、參數(shù)眾多,深度學(xué)習(xí)模型的訓(xùn)練需要大規(guī)模的數(shù)據(jù),這給深度學(xué)習(xí)技術(shù)模型的訓(xùn)練和應(yīng)用帶來(lái)了困難。遷移學(xué)習(xí)(Transfer learning)[29-30]成為解決該問(wèn)題的新學(xué)習(xí)框架,遷移學(xué)習(xí)可避免數(shù)據(jù)標(biāo)注,并大大提高了學(xué)習(xí)效果,可以在任務(wù)和分布不同的情況下對(duì)模型進(jìn)行訓(xùn)練和測(cè)試。
本文提出基于雙線(xiàn)性Inception-ResNet-v2網(wǎng)絡(luò)和遷移學(xué)習(xí)的菌菇表型識(shí)別方法。利用Inception-ResNet-v2網(wǎng)絡(luò)的圖像特征提取能力,結(jié)合雙線(xiàn)性匯合操作,同時(shí)使用遷移學(xué)習(xí),將ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練的特征及參數(shù)遷移到細(xì)粒度菌菇表型數(shù)據(jù)集上。
細(xì)粒度圖像識(shí)別的特點(diǎn)是類(lèi)內(nèi)差異大,類(lèi)間差異小。圖1是4種菌菇示意圖。圖中同一種類(lèi)菌菇形態(tài)各異,差異非常大。不同種類(lèi)的菌菇卻極為相似,類(lèi)間差異較小。菌菇細(xì)粒度圖像的這一特點(diǎn)使得菌菇細(xì)粒度圖像的精準(zhǔn)識(shí)別難度較大。
雙線(xiàn)性卷積神經(jīng)網(wǎng)絡(luò)(Bilinear convolutional neural network,BCNN)[31]模型是細(xì)粒度圖像識(shí)別中的新技術(shù),它在無(wú)法區(qū)分具有細(xì)微視覺(jué)差異的類(lèi)別計(jì)算方面具有較好的分類(lèi)效果。
BCNN框架如圖2所示,輸入圖像由兩條卷積神經(jīng)網(wǎng)絡(luò)分別進(jìn)行多次卷積和池化操作,得到兩條由CNN網(wǎng)絡(luò)分別提取出的圖像特征,再將CNN網(wǎng)絡(luò)提取出的圖像特征使用bilinear pooling操作匯合到一起形成該圖像的雙線(xiàn)性特征向量,最后對(duì)該雙線(xiàn)性特征向量使用Softmax分類(lèi)器進(jìn)行分類(lèi),得到識(shí)別的類(lèi)別所屬概率。
BCNN[31]包括2個(gè)核心概念:雙線(xiàn)性和反向傳播。
雙線(xiàn)性(Bilinear)是指對(duì)于函數(shù)f(x,y),當(dāng)固定其中一個(gè)參數(shù)x時(shí),函數(shù)f(x,y)對(duì)另一個(gè)參數(shù)y是線(xiàn)性的。本文雙線(xiàn)性模型M由4元組組成。
M=(fA,fB,Pl,C)
(1)
式中fA、fB——特征函數(shù)
Pl——池化函數(shù)C——分類(lèi)函數(shù)
特征函數(shù)f的作用是將輸入圖像和位置映射成c×D的特征,D指深度。輸出特征由每個(gè)位置上的特征通過(guò)矩陣的外積組合而來(lái)。
Bi(L,I,fA,fB)=fA(L,I)TfB(L,I)
(2)
式中L——位置和尺度
I——圖像數(shù)據(jù)
Bi——雙線(xiàn)性函數(shù)
如果兩個(gè)特征函數(shù)提取出的特征維度分別為(K,M)和(K,N),則經(jīng)過(guò)Bilinear雙線(xiàn)性匯合操作后維度變成(M,N)。進(jìn)一步使用求和池化來(lái)綜合各個(gè)位置的特征
(3)
式中Φ(I)——全局圖像特征
l——損失值

在BCNN中,由于bilinear pooling操作的特性,使得梯度計(jì)算較容易,整個(gè)網(wǎng)絡(luò)的梯度反向傳播也變得簡(jiǎn)單。如果使用A和B來(lái)分別表示兩個(gè)CNN網(wǎng)絡(luò)輸出的特征,A特征的尺寸為L(zhǎng)×M,B特征的尺寸為L(zhǎng)×N,那么經(jīng)過(guò)bilinear pooling后得到的雙線(xiàn)性特征x=ATB的尺寸就為M×N,則兩個(gè)CNN網(wǎng)絡(luò)的梯度為
(4)
整個(gè)BCNN的梯度計(jì)算公式為
(5)
本文選取Inception-ResNet-v2[32]卷積神經(jīng)網(wǎng)絡(luò)模型作為BCNN中的特征提取網(wǎng)絡(luò),借助Inception-ResNet-v2網(wǎng)絡(luò)強(qiáng)大的特征提取能力來(lái)提升菌菇細(xì)粒度分類(lèi)效果。引入Inception-ResNet-v2之后,BCNN整體結(jié)構(gòu)如圖3所示。
首先對(duì)輸入圖像進(jìn)行中心化、歸一化、隨機(jī)裁剪、隨機(jī)水平翻轉(zhuǎn)等預(yù)處理,之后經(jīng)Inception-ResNet-v2網(wǎng)絡(luò)提取特征向量,然后對(duì)提取出的特征向量和其自生的轉(zhuǎn)置操作進(jìn)行雙線(xiàn)性匯合,進(jìn)而得到菌菇圖像各個(gè)位置的雙線(xiàn)性特征矩陣,隨后將雙線(xiàn)性特征矩陣轉(zhuǎn)換為雙線(xiàn)性特征向量,最后Softmax層對(duì)雙線(xiàn)性特征向量進(jìn)行分類(lèi)。
對(duì)于本文的菌菇多分類(lèi)問(wèn)題,類(lèi)別標(biāo)簽y∈{1,2,…,C}。給定測(cè)試樣本x,Softmax層預(yù)測(cè)為類(lèi)別c為C的條件概率為
(6)
式中w——權(quán)重
Inception-ResNet-v2[32]網(wǎng)絡(luò)在ImageNet大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)賽圖像分類(lèi)基準(zhǔn)上取得了較好的效果,其特征提取網(wǎng)絡(luò)的總體結(jié)構(gòu)如圖4所示。Inception-ResNet-v2把Inception[33]和殘差網(wǎng)絡(luò)(ResNet)[34]相結(jié)合,加入了殘差塊,使得參數(shù)能夠通過(guò)網(wǎng)絡(luò)中的捷徑跳過(guò)一些層進(jìn)行傳播,解決在更深層網(wǎng)絡(luò)結(jié)構(gòu)下梯度消失等問(wèn)題。Inception-ResNet-v2使超深層的網(wǎng)絡(luò)訓(xùn)練成為可能,在更深層的網(wǎng)絡(luò)結(jié)構(gòu)下能夠獲得更好的訓(xùn)練效果。
Inception-ResNet-v2網(wǎng)絡(luò)主要包括6部分:①5層卷積層、2層最大池化層和具有4個(gè)分支的Inception模塊。②重復(fù)10次的具有3個(gè)分支的殘差I(lǐng)nception模塊。③連接較簡(jiǎn)單的Inception模塊。④重復(fù)20次的包括兩個(gè)分支的殘差I(lǐng)nception模塊。⑤具有4個(gè)分支的Inception模塊。⑥重復(fù)10次的包括兩個(gè)分支的殘差I(lǐng)nception模塊。最后通過(guò)一個(gè)卷積層得到輸出結(jié)果。
Inception-ResNet-v2特征提取網(wǎng)絡(luò)主要參數(shù)如表1所示,包括卷積層和最大池化層、每個(gè)殘差I(lǐng)nception模塊的合并層、卷積層、殘差層和最后一個(gè)卷積層,每個(gè)卷積層后都連接批歸一化層和ReLU層。輸入圖像尺寸為448×448×3,通過(guò)卷積層增加圖像深度,最大池化層將圖像維度減半,殘差I(lǐng)nception模塊維持圖像維度不變,且每經(jīng)過(guò)一個(gè)殘差I(lǐng)nception模塊,圖像的長(zhǎng)寬減小深度增加,最后輸出圖像尺寸為12×12×1 536,總參數(shù)量為54 336 736。

表1 Inception-ResNet-v2特征提取網(wǎng)絡(luò)主要層的參數(shù)
通過(guò)Inception-ResNet-v2提取出的特征長(zhǎng)度與寬度均為12,特征深度為1 536。對(duì)特征向量進(jìn)行雙線(xiàn)性匯合操作首先需要將三維的特征向量重塑為二維的特征向量,進(jìn)而得到144×1 536的特征向量。接下來(lái)將特征向量轉(zhuǎn)置得到1 536×144維的特征向量,使用原特征向量與轉(zhuǎn)置后的特征向量進(jìn)行矩陣外積,即雙線(xiàn)性匯合操作,得到維度為1 536×1 536的雙線(xiàn)性特征向量。將雙線(xiàn)性特征向量展平為2 359 296維的一維雙線(xiàn)性特征向量,加上符號(hào)平方根變換和L2正則化層,隨后使用全連接層和式(6)的Softmax進(jìn)行多分類(lèi)。
遷移學(xué)習(xí)[30]用于解決網(wǎng)絡(luò)結(jié)構(gòu)較為復(fù)雜、參數(shù)量較大且訓(xùn)練需要大量時(shí)間的問(wèn)題,菌菇細(xì)粒度遷移學(xué)習(xí)示意圖如圖5所示。
本文使用具有約1 419萬(wàn)幅圖像的ImageNet數(shù)據(jù)集作為源域訓(xùn)練遷移學(xué)習(xí)模型,該數(shù)據(jù)集包含2萬(wàn)多類(lèi)。通過(guò)將ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練好的模型權(quán)重遷移到本文模型上,不僅能夠降低所需的數(shù)據(jù)量,還能獲得更快的訓(xùn)練速度和更好的收斂性能。
預(yù)訓(xùn)練模型從Keras預(yù)訓(xùn)練模型庫(kù)中取得,訓(xùn)練過(guò)程分為2個(gè)步驟:①固定Inception-ResNet-v2網(wǎng)絡(luò)加載在ImageNet數(shù)據(jù)集上得到的預(yù)訓(xùn)練參數(shù),只允許訓(xùn)練最后的全連接層隨機(jī)初始化的參數(shù)。②待網(wǎng)絡(luò)收斂后,再對(duì)Inception-ResNet-v2網(wǎng)絡(luò)的參數(shù)使用較小的學(xué)習(xí)率進(jìn)行微調(diào)進(jìn)行優(yōu)化。
首先預(yù)訓(xùn)練Inception-ResNet-v2網(wǎng)絡(luò)參數(shù)的原因在于添加的全連接層是隨機(jī)初始化的,會(huì)產(chǎn)生較大的損失值進(jìn)而產(chǎn)生較大的梯度。因此在全連接層收斂之后再使用較小的學(xué)習(xí)率微調(diào)(Fine-tunning)整個(gè)模型。
訓(xùn)練的第1階段只更新全連接層的參數(shù),該階段結(jié)束后,修改學(xué)習(xí)率和學(xué)習(xí)率衰減這兩個(gè)參數(shù),最后進(jìn)行所有網(wǎng)絡(luò)層參數(shù)的微調(diào)。訓(xùn)練全連接層時(shí)第1階學(xué)習(xí)率η1設(shè)置為1.0,第1階衰減學(xué)習(xí)率λ1為1×10-8;微調(diào)所有層時(shí)第1階學(xué)習(xí)率η2設(shè)置為1×10-3,第2階段衰減學(xué)習(xí)率λ2設(shè)置為1×10-9;兩個(gè)階段的動(dòng)量β均為0.9,批尺寸為8,迭代次數(shù)為100。
因此本文使用隨機(jī)梯度下降(Stochastic gradient descent, SGD)[35]算法作為優(yōu)化器。由于自適應(yīng)學(xué)習(xí)率算法會(huì)根據(jù)梯度的變化自動(dòng)更新學(xué)習(xí)率,從而改變希望保留的預(yù)訓(xùn)練特征。
硬件環(huán)境:QuadCore Intel Core i7-7700 3.60 GHz;內(nèi)存48 GB; nVIDIA GeForce GTX 1060 GPU 6 GB。
軟件環(huán)境:Windows 10操作系統(tǒng);Python 3.7;TensorFlow 1.13.1和Keras 2.2.4。
本文采用的數(shù)據(jù)集為開(kāi)源菌菇數(shù)據(jù)集Fungi[19]和個(gè)人數(shù)據(jù)集,開(kāi)源菌菇數(shù)據(jù)集Fungi部分示例圖像如圖6所示,該數(shù)據(jù)集環(huán)境復(fù)雜,背景中有草地、林地等多種干擾物,本文共選擇了14個(gè)類(lèi)別,共1 343幅圖像。個(gè)人數(shù)據(jù)集為自行采集,包括4個(gè)菌菇類(lèi)別,共1 074幅圖像。部分示例如圖7所示。2個(gè)數(shù)據(jù)集樣本分布如表2、3所示。

表2 本文所用的Fungi數(shù)據(jù)集樣本分布
為了增加樣本數(shù)量,對(duì)圖像進(jìn)行隨機(jī)翻轉(zhuǎn)、隨機(jī)亮度變換、隨機(jī)對(duì)比度變換預(yù)處理。歸一化是為了降低幾何變換對(duì)圖像的影響。處理之后兩個(gè)數(shù)據(jù)集的圖像數(shù)量分別為4 029、3 141幅,尺寸為128×128×3。訓(xùn)練集、驗(yàn)證集和測(cè)試集按照8∶1∶1的比例分割。

表3 本文所用的個(gè)人數(shù)據(jù)集樣本分布
使用準(zhǔn)確率(Accuracy)、精度(Precision)、召回率(Recall)、F1值(F1-Score)作為評(píng)價(jià)指標(biāo)評(píng)估本文算法性能。
上述指標(biāo)主要針對(duì)二分類(lèi)問(wèn)題,而本文的多分類(lèi)問(wèn)題,需將各個(gè)類(lèi)別的性能指標(biāo)進(jìn)行綜合。宏平均是指所有類(lèi)別的評(píng)價(jià)指標(biāo)的算術(shù)平均值,由此可得宏精度、宏召回率、宏F1值。
本文方法在Fungi數(shù)據(jù)集上,訓(xùn)練集和驗(yàn)證集上的損失值與迭代次數(shù)的關(guān)系如圖8所示。
由圖8可以看出,訓(xùn)練集和驗(yàn)證集上的損失值隨著迭代次數(shù)的增加而降低,訓(xùn)練集中損失值從0.64左右降低到0.04左右,驗(yàn)證集中損失值從0.55降低到0.4左右。
在Fungi數(shù)據(jù)集上,訓(xùn)練集和驗(yàn)證集中的識(shí)別精度與迭代次數(shù)的關(guān)系如圖9所示。
從圖9中可以看出,隨著迭代次數(shù)的增加,訓(xùn)練集和驗(yàn)證集上的準(zhǔn)確率逐步增大。訓(xùn)練集在迭代次數(shù)大于15之后趨于穩(wěn)定,準(zhǔn)確率為98%左右;驗(yàn)證集上的識(shí)別精度在迭代次數(shù)為18時(shí)達(dá)到最大,準(zhǔn)確率為93%。
利用宏精度、宏召回率、宏F1值3個(gè)指標(biāo)對(duì)比InceptionV3[33]和VGG[36]網(wǎng)絡(luò)性能,其網(wǎng)絡(luò)模型參數(shù)如表4所示。

表4 網(wǎng)絡(luò)模型參數(shù)
試驗(yàn)結(jié)果如表5所示。從表5中可以看出,本文方法的宏精度達(dá)到了87.15%,宏召回率為85.71%,宏F1值為85.82%。

表5 Fungi數(shù)據(jù)集上識(shí)別結(jié)果
從試驗(yàn)結(jié)果來(lái)看,與其他3種方法相比,本文方法的宏精度較VGG16、VGG19和InceptionV3分別提升了2.15、1.29、2.15個(gè)百分點(diǎn);宏召回率分別提升了1.59、1.59、1.58個(gè)百分點(diǎn);宏F1值分別提升了2.06、2.07、2.05個(gè)百分點(diǎn)。
在個(gè)人數(shù)據(jù)集上的識(shí)別結(jié)果如圖10所示。由圖10可知,本文方法的宏精度、宏召回率和宏F1值分別為93.94%、93.33%和93.29%。
從圖10中可以看出,本文方法的識(shí)別結(jié)果比InceptionV3優(yōu),但VGG網(wǎng)絡(luò)在此數(shù)據(jù)集上的識(shí)別結(jié)果較差,宏精度、宏召回率、宏F1值都在30%以下,試驗(yàn)表明,本文方法在兩個(gè)菌菇數(shù)據(jù)集上的細(xì)粒度分類(lèi)效果較好。
為實(shí)現(xiàn)細(xì)粒度菌菇表型在線(xiàn)識(shí)別,本文在使用TensorFlow和Keras機(jī)器學(xué)習(xí)框架進(jìn)行模型訓(xùn)練的基礎(chǔ)上,使用Flask框架作為網(wǎng)頁(yè)的后端服務(wù),前端網(wǎng)頁(yè)使用Bootstrap UI框架,將訓(xùn)練好的模型移植至Web端,以實(shí)現(xiàn)對(duì)細(xì)粒度菌菇表型的在線(xiàn)識(shí)別。
在線(xiàn)識(shí)別處理過(guò)程為:上傳本地圖像,網(wǎng)頁(yè)顯示要識(shí)別的菌菇圖像,然后使用canvas渲染圖像并將圖像轉(zhuǎn)換為base64編碼。前端通過(guò)XMLHttpRequest對(duì)象向后端發(fā)送POST請(qǐng)求,將圖像的base64編碼傳遞給后端。后端使用Flask框架的request對(duì)象接收Http請(qǐng)求,獲取后端傳來(lái)的base64編碼。刪除base64編碼的前綴,然后將編碼轉(zhuǎn)換回圖像。將圖像轉(zhuǎn)換為RGB模型,使用類(lèi)型文件中保存的數(shù)據(jù)集均值和方差對(duì)圖像進(jìn)行預(yù)處理,并將圖像尺寸裁剪為128像素×128像素。使用訓(xùn)練好的模型進(jìn)行預(yù)測(cè),獲得Top 5的結(jié)果,并用Flask框架的jsonify返回預(yù)測(cè)所屬的名稱(chēng)的概率。前端網(wǎng)頁(yè)顯示后端傳來(lái)的預(yù)測(cè)結(jié)果,查詢(xún)結(jié)果示例如圖11所示。
基于雙線(xiàn)性卷積神經(jīng)網(wǎng)絡(luò)框架提出了一種基于遷移學(xué)習(xí)和Inception-ResNet-v2網(wǎng)絡(luò)的細(xì)粒度菌菇表型識(shí)別方法。通過(guò)Inception-ResNet-v2網(wǎng)絡(luò)提取菌菇圖像特征,結(jié)合雙線(xiàn)性匯合操作,采用遷移學(xué)習(xí)方法將ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練的特征遷移到細(xì)粒度菌菇表型數(shù)據(jù)集上,在開(kāi)源數(shù)據(jù)集和個(gè)人數(shù)據(jù)集上識(shí)別精度分別達(dá)到了87.15%和93.94%,實(shí)現(xiàn)了基于Flask框架的細(xì)粒度菌類(lèi)表型在線(xiàn)識(shí)別。
農(nóng)業(yè)機(jī)械學(xué)報(bào)2021年7期