徐博文,童孟軍.2
(1.浙江農林大學 數(shù)學與計算機科學學院,浙江 杭州 311300;2.浙江農林大學 浙江省林業(yè)智能監(jiān)測與信息技術研究重點實驗室,浙江 杭州 311300)
小麥產(chǎn)量是評估農業(yè)生產(chǎn)力的重要指標之一[1],而其產(chǎn)量統(tǒng)計卻一直是一個難題.世界各地的小麥因其生長環(huán)境的不同,麥穗顆粒大小、顏色、稀疏程度都各不相同,而且緯度、氣候、土壤等因素的不同小麥的種類也各不相同,這些難以調控的因素給小麥的產(chǎn)量統(tǒng)計留下了一個極大的難題,準確地對野外圖像進行小麥麥穗檢測的難度也是成倍增長[2],此外,外觀會因成熟度、顏色、基因型和頭部方向而異.小麥是在世界范圍內種植的,因此小麥的產(chǎn)量統(tǒng)計從來不僅限于一個地區(qū)或一個省市甚至于一個國家,必須考慮不同的品種、種植密度、樣式和田間條件[3-11],因此,為小麥麥穗檢測的模型需要在不同的生長環(huán)境之間進行特征學習并對特征進行概括.
早期對小麥麥穗的檢測還基本處于人工識別階段,計算機發(fā)展后加入了數(shù)學模型進行檢測分析,在神經(jīng)網(wǎng)絡模型被提出后,神經(jīng)網(wǎng)絡同樣也被運用到了小麥的識別中,但是識別率不是特別理想,近幾年隨著機器學習的發(fā)展,機器學習方法也被加入小麥的檢測中,其中深度學習在目標檢測領域受到了許多專家學者的研究,但是對小麥麥穗的檢測識別如今還是少數(shù).目標檢測方法的代表主要是YOLO[12]和Faster R-CNN[13]兩種,其中YOLO方法在檢測速度上優(yōu)勢明顯,但是對小麥這一類小目標數(shù)據(jù)集的檢測效果欠佳,而Faster R-CNN雖然在檢測速度上不如YOLO方法,但是檢測精度卻是大大優(yōu)于YOLO方法,特別是在小麥麥穗這一類小目標的檢測中優(yōu)勢更加明顯,因此本次研究模型選取了Faster R-CNN算法,而傳統(tǒng)的Faster R-CNN模型在針對特定的小目標數(shù)據(jù)集時在檢測速度和精度上還是略有不足,本文將就這兩個方面對模型進行改進,提升模型檢測效率.
本文選取了世界性的小麥麥穗數(shù)據(jù)集——GWHD數(shù)據(jù)集作為基礎數(shù)據(jù)集,同時對數(shù)據(jù)集進行了數(shù)據(jù)擴充形成本次實驗的小麥麥穗數(shù)據(jù)集.本文在特征提取網(wǎng)絡中將VGG16網(wǎng)絡用ResNet50網(wǎng)絡替代,并在Faster R-CNN算法特有的RPN網(wǎng)絡中anchor框的選取引入了K-means聚類算法[14],改變anchor框的固定參數(shù),使其根據(jù)先驗框的形狀和大小生成更適合本數(shù)據(jù)集的anchor框[15],同時對ResNet50網(wǎng)絡引入BiFPN單元進行加權結合.在結束訓練后,對幾個基礎算法和改進后的算法進行了對比,證明其可行性和泛化性能.
實驗中使用的數(shù)據(jù)集為Global Wheat Head Dataset,即全球小麥頭數(shù)據(jù)集,它是由9個研究機構來自7個國家主導:東京大學,日本國立農業(yè)研究所,日本國立環(huán)境研究所,阿爾瓦利斯大學,埃茲大學,薩斯喀徹溫大學,昆士蘭大學,南京農業(yè)大學,羅瑟斯特德研究所.
訓練數(shù)據(jù)集涵蓋了多個區(qū)域,有來自歐洲(法國,英國,瑞士)和北美(加拿大)的3 000多張圖像.測試數(shù)據(jù)包括來自澳大利亞,日本和中國的約1 000張圖像.同時數(shù)據(jù)集由7個標簽數(shù)據(jù)集組成,分別為:usask_1,arvalis_1,arvalis_2,ethz_1,inrae_1,rres_1,arvalis.如圖1所示.
圖1 小麥麥穗數(shù)據(jù)集示例圖Fig.1 Sample graph of wheat head data set
考慮到卷積神經(jīng)網(wǎng)絡在訓練中容易出現(xiàn)過擬合問題,降低了模型的泛化能力,本文通過數(shù)據(jù)增強來降低,具體方法為:翻轉、旋轉、平移、降噪等.通過一系列數(shù)據(jù)增強方法,將圖片從原來的3 423張擴充到了4 556張,以此增加了數(shù)據(jù)集的數(shù)量,使模型的訓練效果更好,另一方面也增加了一些干擾項,如沒有目標的目標檢測框為0的無用圖片,如圖2所示,以此減少過擬合現(xiàn)象.
圖2 小麥麥穗干擾項示例圖Fig.2 Sample graph of wheat head interference term
本文模型實驗環(huán)境如表1所示.
表1 實驗環(huán)境配置參數(shù)表
為證明本文改進算法的可行性,本文中將使用以VGG16、ResNet50為特征提取網(wǎng)絡的兩個基礎模型與改進后的模型進行對比,所有的算法將會采用一樣的評估方法和參數(shù)進行對比,驗證其有效性,訓練過程中的部分參數(shù)設置如表2所示.
表2 實驗參數(shù)設置
關于迭代次數(shù)的設置,是根據(jù)實際模型訓練飽和時的平均次數(shù)來決定,由于數(shù)據(jù)集目標數(shù)較多,一次迭代時間較長,同時再增加迭代次數(shù)最后的檢測結果相差不大,反而可能更差.經(jīng)過大量實驗的驗證,最后將本文數(shù)據(jù)集的模型訓練迭代次數(shù)設置在了300次.
本文將主要針對Faster R-CNN模型進行改進與實驗,它大體上可看成RPN 與 Fast R-CNN的組合,且RPN和Fast R-CNN共享一部分卷積層.將一幅圖像送入Faster R-CNN進行檢測,conv layers代表基礎網(wǎng)絡(例如VGG16、ZF)的卷積層,這部分就是RPN與Fast R-CNN共享的結構.圖像經(jīng)過conv layers得到特征圖;將特征圖送入RPN,得到建議框;將建議框和特征圖一起送入從感興趣池化層開始的剩余網(wǎng)絡結構(Fast R-CNN),得到目標檢測結果.
Faster R-CNN的網(wǎng)絡結構如圖3所示.首先,使用VGG16特征提取網(wǎng)絡得到特征圖.從特征圖之后的一個3×3卷積層開始到生成建議框是RPN特有的層,它完成了從特征圖中提取建議框的工作.從感興趣區(qū)域池化層開始到網(wǎng)絡結束是Fast R-CNN特有的層.盡管Fast R-CNN目標檢測方法是由選擇性搜索模塊和Fast R-CNN兩個模塊組成的,但這兩個模塊并不是一個統(tǒng)一的網(wǎng)絡.而Faster R-CNN卻是一個統(tǒng)一的網(wǎng)絡,它由RPN和Fast R-CNN兩個模塊組成.如果Fast R-CNN需要給定一幅圖像,要同時給出圖像上的關注點,才能進行目標檢測,那么,F(xiàn)aster R-CNN能夠自己在給定圖像上找到關注點,并對關注點進行檢測.
圖3 Faster R-CNN網(wǎng)絡結構Fig.3 Faster R-CNN network structure
1.6.1 ResNet50網(wǎng)絡替換深度卷積神經(jīng)網(wǎng)絡希望通過增加網(wǎng)絡層數(shù)來提高對樣本特征的提取能力,然而事實卻不盡如人意.實驗證明了深層網(wǎng)絡的退化問題:隨著網(wǎng)絡的加深,模型的性能和精確度確實會有所提高,但是當學習程度達到飽和后,精確性卻會突然下降,但并沒有出現(xiàn)過擬合現(xiàn)象,不是過擬合造成的退化問題.而原模型中的VGG16網(wǎng)絡就出現(xiàn)了這個問題,因此本文使用ResNet網(wǎng)絡來代替VGG16網(wǎng)絡.
ResNet團隊通過實驗對此進行了證明:如果迭代次數(shù)相同,20層網(wǎng)絡的誤差率明顯比56層網(wǎng)絡的誤差率低.為了解決這一問題,ResNet團隊提出了深度殘差學習框架.如圖4所示,輸入x得到H(x),說明這一淺層模型只是傳遞了參數(shù)值而沒有進行計算,所以在加深深度后并不影響結果.于是,ResNet提出了另一個映射:H(x)=F(x)+x.如此,參數(shù)可以跳過幾層或多層達到輸入層,進行通過殘差單元的跳層連接.
圖4 ResNet50殘差學習單元Fig.4 ResNet50 residual learning unit
殘差模塊反復堆疊時,會構成不同深度的網(wǎng)絡結構,本文嘗試了ResNet18、ResNet34、ResNet50、ResNet101、ResNet152等不同深度的多種網(wǎng)絡,考慮到要兼顧實驗效果和計算量,最終選用了50層的ResNet50網(wǎng)絡,各深度網(wǎng)絡測試精度與速度對比如表3所示.
表3 各深度ResNet網(wǎng)絡測試結果
1.6.2 ResNet50卷積核改進由于ResNet網(wǎng)絡的第一層都是由7×7的卷積核形成的卷積層,其感受野較大,對圖像提取的特征滿足訓練要求.但在本文研究中,數(shù)據(jù)集通常為小目標檢測,為了更精確地提取細微特征,本文將使用3個3×3的堆疊卷積層替換7×7卷積層.通過這一改動,加深了網(wǎng)絡深度的同時也減少了參數(shù)計算量.同時3個3×3的卷積層的感受野和一個7×7的卷積層是一樣的,同樣能將特征很好地提取并且傳到下一層.因此,改進后的網(wǎng)絡能給模型帶來更好的性能.
用偽代碼來展現(xiàn)改進變量細節(jié)如下:
Kernel_size=7→Kernel_size=3
Stride=2→Stride=2
Padding=3→Padding=1
1.6.3 引入FPN后ResNet50與BiFPN的結合本文采用了ResNet50代替了原有的VGG16作為改進后模型的主干網(wǎng)絡,并與BiFPN相結合實現(xiàn)多尺度的特征提取.ResNet50可以通過更深的網(wǎng)絡深度提高對深層語義特征學習的能力,但是容易丟失圖像中較小目標的細節(jié),從而不利于對目標的像素級分割.為了解決這一問題,本文將雙向加權特征金字塔網(wǎng)絡BiFPN與ResNet50相結合.結合BiFPN后的網(wǎng)絡,利用了其雙路徑的優(yōu)勢,使得深層特征與淺層特征的丟失均減少,且可以采用跳躍連接融合更多的特征,并賦予對模型貢獻率不同的各尺度特征不同的權重系數(shù).
二者結合的方式如圖5所示,其中左側為ResNet50的結構圖,右側為BiFPN網(wǎng)絡的結構圖.
圖5 BiFPN與ResNet50結合方式Fig.5 The combination of BiFPN and ResNet50
BiFPN單元的偽代碼部分如下(以p3為例):
p3_w1 = self.p3_w1_relu(self.p3_w1)
weight = p3_w1 / (torch.sum(p3_w1, dim=0) + self.epsilon)
p3_out=self.conv3_up(self.swish(weight[0]* p3_in + weight[1] * self.p3_upsample(p4_up)))
從偽代碼中可以看出,其實BiFPN單元的功能就是添加了一個簡單的注意力機制,再通過各單元的特征值進行跳躍結合給各個層賦予了不同的權重去融合,讓網(wǎng)絡的注意力集中在更加重要的特征值上,如小麥的麥穗形狀、顏色、平均大小等,而且還減少了一些不必要的層的節(jié)點連接.
1.6.4 引入聚類的anchor算法改進Faster R-CNN模型中設置了9個固定長寬比和大小的anchor框,對于檢測目標較為復雜的數(shù)據(jù)集來說是一個較為合適的選擇,但是針對本文的小目標數(shù)據(jù)集,相對來說顯得略有些不合適,可能不能得到很好的檢測效果.但是要設定新的長寬比的anchor框,光憑人工估算來設定肯定是不合理的,因此本文引入了K-means聚類算法,利用聚類算法遍歷先驗框自適應生成anchor框的長寬比.
步驟1,將所有bounding box的坐標都提取出來;
步驟2,將提取出的bounding box的坐標轉化為框的寬高大小,方便后續(xù)聚類計算;
步驟3,初始化k個anchor box,本文中使用random函數(shù),在所有bounding box中隨機選擇k個值作為k個anchor boxes的初始值;
步驟4,計算每個bounding box與每個anchor box的iou值,傳統(tǒng)的聚類算法是使用歐幾里得距離來衡量差異,如此運行算法的話,在box尺寸比較大的時候,最后算法得到的誤差會很大,所以本文引入iou值用來代替歐幾里得距離,以便適應bounding box的距離計算;
步驟5,在前面一步計算完成后,可以能夠得到每個bounding box對于每個anchor box的誤差d(n,k),通過比較每個bounding box其對于每個anchor box的誤差{d(i,1),d(i,2),…,d(i,k)},取出誤差最小的那個anchor box,將這個bounding box分類給它,對于每個bounding box都需要做這個操作,最后記錄下來每個anchor box有哪些bounding box屬于它;
步驟6,通過上一步的計算,能知道每個anchor box有哪些bounding box是屬于它的,然后對每個anchor box中的bounding box,再求它的寬高中值大小,將其作為anchor box的新尺寸.
步驟7,重復步驟4、5、6,直到bounding box所屬的類與之前的anchor box類完全一致,最后得出我們需要預設的anchor的ratios即寬高比,將其用在anchor中,完成針對本次數(shù)據(jù)集的檢測框初始化.
偽代碼K-means部分具體表示如下:
rows = boxes.shape[0]
distances = np.empty((rows, k))
last_clusters = np.zeros((rows,))
np.random.seed()
clusters = boxes[np.random.choice(rows, k, replace=False)]
while True:
for row in range(rows):
distances[row] = 1 - iou(boxes[row], clusters)
nearest_clusters = np.argmin(distances, axis=1)
for cluster in range(k):
clusters[cluster] = dist(boxes[nearest_clusters == cluster], axis=0)
last_clusters = nearest_clusters
return clusters
2.1.1 對數(shù)平均誤檢率(log-average miss rate)假設N幅圖片中,誤檢窗口為k,單圖像錯誤率(false positive per image,F(xiàn)PPI)為k/N,miss rate(1-R)取該FPPI值對應的最小miss rate.各個FPPI和miss rate的得到方式與AP中得到P、R值的方式一樣,也是得到所有檢測框的置信度,由高到低排列,依次判斷top-n.log-average miss rate的計算方法是在9個FPPI值下(在值域[0.01,1.0]內以對數(shù)空間均勻間隔)的平均miss rate值.
2.1.2 mAP在介紹mAP之前,需要知道幾個樣本概念:TP、TN、FP、FN.
TP,即True Positives,表示樣本被分為正樣本且分配正確.
TN,即True Negatives,表示樣本被分為負樣本且分配正確.
FP,即False Positives,表示樣本被分為正樣本但分配錯誤.
FN,即False Negatives,表示樣本被分為負樣本但分配錯誤.
Precision,即精度,表示被正確分配的正樣本數(shù)占總分配的正樣本數(shù)的比例,公式為:
Recall,即召回率,表示被正確分配的正樣本數(shù)占總正樣本數(shù)的比例,公式為:
mAP,即平均準確率(mean Average Precision),是各類別準確率(AP)的平均值,AP的計算使用了差值平均準確率的評測方法,即Precision-Recall曲線下的面積,AP的計算公式為:
式中:n表示檢測點的個數(shù);Pinterpo(r)代表在召回率為r時準確率的數(shù)值.根據(jù)AP可計算mAP,公式為:
經(jīng)過大量實驗和訓練,每一種訓練方法都訓練到模型的學習能力飽和為止,所以得到的最終結果即是各個方法模型的最好的訓練效果,首先通過對數(shù)平均誤檢率對各模型和數(shù)據(jù)集各種類樣本的訓練情況進行分析,結果如圖6、圖7、圖8所示.
圖6 VGG16-lamr圖Fig 6 VGG16-lamr
圖7 ResNet50-lamr圖Fig.7 ResNet50-lamr
圖8 改進的ResNet50-lamr圖Fig.8 The improved ResNet50-lamr
數(shù)據(jù)集中標簽usask_1、arvalis_1、arvalis_2、ethz_1都是數(shù)據(jù)量比較大的數(shù)據(jù)集,而標簽inrae_1、rres_1、arvalis_3相對來說數(shù)據(jù)量較少.從圖中可以看出針對數(shù)據(jù)量較少的數(shù)據(jù)集VGG16網(wǎng)絡優(yōu)勢更大,但是針對數(shù)據(jù)量較大的數(shù)據(jù)集,VGG16網(wǎng)絡的性能就沒有那么可觀了,相對而言,ResNet50網(wǎng)絡的性能更加出色,從圖中對比可以輕易看出使用ResNet50網(wǎng)絡后,幾個數(shù)據(jù)量較大的數(shù)據(jù)集的對數(shù)平均誤檢率明顯降低,而改進RPN后的模型的對數(shù)平均誤檢率相對于只使用ResNet50網(wǎng)絡的模型又降低了一些.而相對于數(shù)據(jù)量較小的幾個數(shù)據(jù)集來說,更換網(wǎng)絡和改進后的對數(shù)平均誤檢率會有上下浮動,甚至可能會略有增加,可能會導致這個標簽的數(shù)據(jù)集對應的AP略有降低,但是加上幾個數(shù)據(jù)量大的數(shù)據(jù)集后,它的mAP總體來說還是略有升高的,而mAP是檢測一個模型性能最重要的指標之一,能提升mAP而對模型做一些改動是非??扇〉?所以總的對比起來,更換網(wǎng)絡和改進后的模型的性能是更加優(yōu)秀的,優(yōu)于未改進前的網(wǎng)絡模型性能.
根據(jù)各模型的對數(shù)平均誤檢率值可以初步預測改進后的模型性能是最好的,但是最終性能如何還是要比較各模型的mAP值大小,各標簽數(shù)據(jù)集的AP值和各模型的mAP值如圖9、圖10、圖11所示.
圖9 VGG16-mAP圖Fig.9 VGG16-mAP
圖10 ResNet50-mAP圖Fig.10 ResNet50-mAP
圖11 改進的ResNet50-mAP圖Fig.11 The improved ResNet50-mAP
從圖9、圖10、圖11可知,引入ResNet50網(wǎng)絡的模型效果要優(yōu)于VGG16網(wǎng)絡,而改進RPN網(wǎng)絡后的模型效果又要優(yōu)于單純引入ResNet50網(wǎng)絡的模型效果.對于各標簽數(shù)據(jù)集來說,由于數(shù)據(jù)量較小的幾個數(shù)據(jù)集的檢測精度已經(jīng)較高,所以改進后的模型的精度提升了0.5%,略優(yōu)于改進前的模型效果.對于數(shù)據(jù)量較大的幾個標簽數(shù)據(jù)集來說,替換網(wǎng)絡并且改進RPN后的模型的檢測精度有了明顯的提升.檢測精度較高的數(shù)據(jù)集再提升精度對于mAP值的影響也并不是非常大,而檢測精度低的數(shù)據(jù)集經(jīng)過改進后的模型訓練,檢測精度明顯提升,補足了訓練模型對于檢測效果較差的數(shù)據(jù)集的檢測短板,明顯提升的這幾個數(shù)據(jù)集的檢測精度,從而使mAP值也跟著有了明顯的提升.mAP值的提升也明顯說明了改進后模型的可行性.
在比較mAP值大小的同時,本文同樣注意了單個目標的檢測時間和單張圖片的檢測時間,如表4所示.
表4 模型訓練結果表(訓練模型在訓練數(shù)據(jù)集上的測試結果對比)
由表4可知改進后的模型不僅在mAP值上優(yōu)于其他模型,并且在單個目標的檢測速度和單張圖片的檢測速度也比另外的模型要快.這得益于改進RPN網(wǎng)絡后新的anchor寬高比更加適應測試數(shù)據(jù)集,從而減少了調整anchor框的時間,因此最后呈現(xiàn)出的效果就是改進后的模型的檢測時間明顯少于未改進前的基礎模型.
本文提出一種用ResNet50網(wǎng)絡替換VGG16網(wǎng)絡并且對RPN網(wǎng)絡進行改進的Faster R-CNN檢測算法.通過特征提取網(wǎng)絡的替換和結構改進與anchor處理的改進,提升了數(shù)據(jù)集的檢測精度和檢測速度,可以正常識別數(shù)據(jù)集中的7個標簽數(shù)據(jù),并具有較高的置信度.通過實驗結果表明:
(1) 在數(shù)據(jù)集識別精度上,改進后的模型對數(shù)據(jù)集中的7個標簽數(shù)據(jù)集都可以正常識別,并且精度對比使用VGG16作為特征提取網(wǎng)絡的模型高了2.25%,相較于只使用ResNet50作為特征提取網(wǎng)絡的模型精度提升了0.54%.可以看出對于小麥麥穗這類小目標數(shù)據(jù)集,改進模型對重要特征的提取和檢測效果更好,因此檢測精度更高.
(2) 在檢測目標識別速度上,改進后的模型的識別速度明顯優(yōu)于未改進前的幾個基礎模型,無論是從單個目標的識別速度還是單張圖片的識別速度乃至整個數(shù)據(jù)集的識別速度,改進后的模型的識別速度都是占優(yōu)的.可以看出在提高檢測精度的同時,改進模型同樣減少了模型復雜度和計算量,故意忽略了一些不重要的特征,來提高計算速度,因此改進后模型的檢測速度明顯優(yōu)于原模型.
(3) 從識別精度上來看,改進后的模型識別精度僅僅提升了0.54%,但是在原模型的識別精度已經(jīng)在90%以上達到行業(yè)識別標準的情況下,還略有提升,也是非??扇〉?同時在提升識別精度的同時在識別速度上的提升也比較明顯,兩者結合來看,改進后的模型完全可以滿足對小麥麥穗的檢測識別,有助于工廠企業(yè)更好地統(tǒng)計小麥產(chǎn)量,讓訓練模型更好地運用到生產(chǎn)生活中.