張 舒 苗玉彬
(上海交通大學機械與動力工程學院 上海 200240)
葡萄果粒大小和糖含量等果實品質是每天生長積累的結果,精細確定果實發育關鍵階段的灌溉指標,合理調控果實在不同生長階段對不同程度水分脅迫的反應,可以調控樹體營養生長與生殖生長之間的平衡,獲得較高的經濟產量和品質。植物水勢、蒸騰速率、液流、莖干直徑和果粒大小變化等果樹需水信號是指導灌溉的基礎指標,其中通過視覺測量實時獲取果粒幾何尺寸和晝夜變化規律對于生產操作更有實踐意義[1-3]。但由于在自然場景中葡萄果穗普遍存在果粒重疊現象,如何準確檢測邊緣輪廓成為亟待解決的問題。
利用視覺測量技術實時獲取葡萄果粒的幾何尺寸和晝夜變化規律對灌溉等生產操作具有很強的實踐指導意義[1-3]。但由于自然場景中葡萄果穗普遍存在果粒重疊現象,準確檢測果粒邊緣輪廓成為亟待解決的難題。在果粒的輪廓檢測和分割問題上,國內外相關文獻基于傳統機器視覺技術進行了若干研究并取得了一定成果。
針對非完整果粒的輪廓檢測和分割問題,國內外相關文獻基于傳統機器視覺技術進行了若干研究并取得了一定成果。金燕[4]利用改進的Hough變換對葡萄果粒進行分割,但精度較低,且在葡萄重疊的情況下容易漏檢。Arefi等[5]利用分水嶺算法對重疊番茄進行分割,識別準確率達到96.36%,但易造成過分割。謝忠紅等[6]提出了基于凹點搜索的重疊果粒目標定位和檢測方法,但多果粘連重疊時會造成輪廓識別丟失。項榮等[7]提出了一種基于邊緣曲率分析的重疊番茄識別方法,對輕微遮擋的重疊番茄識別準確率達到90.9%,但是當果實遮擋率較高時,識別準確率降低。王巧華等[8]利用曲率角、突變點等特征提取葡萄果粒大小尺寸。總之,傳統機器視覺方法雖然在一定程度上對葡萄、番茄等重疊果實的分割處理取得了較好的效果,但仍具有以下局限性:(1) 傳統果粒分割過程通常是多階段的,需進行繁冗的前、后處理步驟,效率較低。由于大多數前、后處理步驟不具有普適性,當環境參數或果實顏色發生變化時,處理流程中的相關參數需要反復進行微調以達到最佳效果。(2) 復雜背景下,常規檢測算法對圖像偽邊緣、噪點抵抗能力較弱,果實的準確測量易受干擾。(3) 對存在重疊現象的果實而言,重疊部分的邊緣通常難以檢測,結果可能存在邊緣不明顯、不連續或缺失等問題。
近年來,神經網絡和深度學習發展迅速,在圖像處理上顯現了巨大的優越性。通過神經網絡對目標物體的輪廓進行高維度特征提取,使復雜條件下重疊果實的輪廓特征提取成為可能。目前,基于深度學習的邊緣檢測算法主要分為兩類,一類是基于局部區域的輪廓檢測算法,標志性的算法如N4-field[9]、DeepEdge[10]和DeepContour[11]等。其核心思想是以像素為中心提取像素塊,通過CNN提取特征,將特征與真實輪廓比較并輸出像素塊對應像素為輪廓的概率。上述算法能夠較好地識別物體輪廓,但由于存在局部區域采樣,計算時間較長,也增加了空間成本。另一類是端到端的輪廓檢測算法,代表性的算法有HED[12]、RCF[13]、CEDN[14]等。其主要思想是利用CNN直接預測圖像中每個像素點是否為輪廓的概率,與第一類算法相比,流程簡單高效,檢測精度較高。
本文在HED網絡的基礎上,首先改進網絡結構使其融合更多卷積層的輸出,改進原有損失函數以提升輪廓檢測的精度和完整度,減少結果中噪點與偽邊緣的干擾。同時還對不同光照條件的葡萄果實分別進行輪廓檢測實驗,以驗證算法輪廓提取的有效性。
HED網絡通過自動學習豐富的圖像層次來解決邊緣檢測中產生的歧義問題,它對圖像中每個像素進行標記,能夠對整幅圖像進行端到端的訓練和預測。HED網絡能檢測出圖像中絕大多數邊緣,但檢測出的邊緣較厚、存在毛刺現象,對于圖像顏色對比度較低的物體邊緣還會產生漏檢現象,影響了后續的葡萄表型參數測量精度。針對上述問題,考慮對HED網絡的各個部分進行針對性改進:(1) 引入更多側輸出網絡結構,融合更多不同層次的邊緣預測圖,從而更有利于提取細節特征;(2) 通過引入Dice損失函數[16]改進原有加權交叉熵損失函數,從而有效地提高邊緣清晰度;(3) 利用多尺度邊緣預測提高輪廓的準確度。算法的流程如圖1所示。

圖1 輪廓檢測流程
如圖2所示,本文HED模型的主干網絡以VGG16的主干網絡為基礎,共有13個卷積層,分為五個階段,其中第一、二階段各有兩個卷積層,最后三個階段各有三個卷積層,每個階段的卷積核大小均為3×3。每個階段中最后一個卷積層引入了2×2最大池化層,由于池化層的下采樣作用,圖像每經過一個階段,其面積縮小為原圖像的四分之一,所以在后續的圖像融合中,需要對每個階段的側輸出圖像進行上采樣,以獲得與原圖像相同大小的邊緣預測圖。側輸出負責預測圖像的邊緣圖,各個階段的邊緣圖進行上采樣后進行融合以得到最終的邊緣圖。

圖2 改進的HED網絡結構
改進后的模型與常規HED網絡不同的地方是:常規HED僅在每個階段的最后一個卷積層引出側輸出層,這種結構沒有充分利用其他卷積層含有的邊緣信息。為此,本文將第三階段至第五階段中所有的卷積層均連入側輸出層,以充分利用神經網絡中的高維度特征圖。以第三階段為例,每個卷積層分別引出側輸出層,卷積核尺寸為1×1,通道深度為25。每個階段產生的特征圖疊加后連接1×1-1的卷積層。上采樣采用雙線性插值方法將預測圖還原到原圖大小,即得到該階段的邊緣預測圖。將五個階段的特征圖進行融合可以輸出最終的邊緣圖。
在一般的二分類問題中,通常使用交叉熵函數作為卷積神經網絡的損失函數。由于圖像的絕大部分像素都屬于非邊緣像素,邊緣/非邊緣像素點的分布非常不平衡[17],因此一般的交叉熵損失函數難以訓練模型。為解決此問題,HED網絡使用了加權交叉熵損失函數:
(1)
式中:Y+和Y-分別表示圖片中邊緣像素的集合與非邊緣像素的集合;β=|Y-|/|Y+|,1-β=|Y+|/|Y|;X為輸入的圖片;Pr(yj|X;W,w)由像素點j經過Sigmoid函數(σ(·))計算得到。
加權交叉熵損失函數中的權重系數β能夠解決圖片像素分布不平衡所帶來的訓練不收斂問題,但β的引入會造成預測結果中邊緣不清晰。為了解決權重系數引起的矛盾,這里引入Dice系數作為損失函數:
(2)
式中:G是圖像的實際邊緣圖;P是預測圖;pi和gi分別表示在預測圖和實際邊緣圖中第i點像素的像素值。
#Dice損失函數實現如下:
smooth=1
inputs=torch.sigmoid(preds)
input_flat=inputs.view(-1)
target_flat=edges.view(-1)
intersecion=input_flat*target_flat
unionsection=input_flat.pow(2).sum()+target_flat.pow(2).sum()+smooth
dice_loss=unionsection/(2*intersecion.sum()+smooth)
Dice系數是邊緣預測圖和實際邊緣圖相似性的度量,其作為損失函數時,比較的是邊緣像素預測值與實際值的相似度大小,并進一步最小化它們在訓練集上的差距。因而使用Dice系數時,圖片像素分布的不平衡問題得以解決,模型在收斂的同時能預測更加細薄、準確的邊界。在模型的實際訓練中,將加權交叉熵損失函數和Dice損失函數結合可以得到更好的效果:
L(P,G)=αLD(P,G)+(1-α)Lw(P,G)
(3)
式中:LD(P,G)是Dice損失函數;Lw(P,G)是加權交叉熵損失函數。
葡萄果實在監測圖像中通常以小尺度的形式存在,為了更精確地識別葡萄果實輪廓,在模型測試階段使用了圖像金字塔以增強模型在不同尺度下對葡萄輪廓特征的表達能力。具體來說,將圖片輸入網絡之前通過雙線性插值方式調整圖像的大小,從而構建一個圖像金字塔,每幅圖像分別輸入到模型中進行獨立的預測。然后使用雙線性插值將所有得到的邊緣概率圖通過上采樣調整為原始圖像的大小。最后將這些圖像進行融合得到最終預測圖,如圖3所示。

圖3 多尺度輪廓預測
多尺度輪廓預測代碼如下:
scale=[0.5,1,1.5]
for k in range(0,len(scale)):
im=cv2.resize(image_in,None,fx=scale[k],fy=scale[k],interpolation=cv2.INTER_LINEAR)
im=im.transpose((2,0,1))results=model(torch.unsqueeze(torch.from_numpy(im).cuda(),0))
result=torch.squeeze(results[1].detach()).cpu().numpy()
fuse=cv2.resize(result,(W,H),interpolation=cv2.INTER_LINEAR)
multi_fuse+=fuse
multi_fuse=multi_fuse/len(scale)
實驗于2019年在上海交通大學現代農業工程訓練中心大棚(31°11′N,121°29′E)進行。圖像采集選用OLYMPUS SP-510UZ相機, 其CCD感光尺寸為1/2.5英寸,具有定時拍照功能。系統采用高頻環形熒光光源以獲得高對比度清晰圖像,并采用時間繼電器控制光源開關,以減少光源持續照明對葡萄生長可能產生的影響。
選擇的供試葡萄品種為陽光玫瑰。圖4(a)、圖4(b)和圖4(c)分別為側光、順光和逆光條件下的膨大期陽光玫瑰果實照片。測試時在順光、逆光、側光三種條件下分別拍攝50幅照片,圖像分辨率為3 072像素×2 304像素(相機默認分辨率),圖像格式為三通道RGB。在順光和逆光條件下,由于光照條件不佳,圖像中分布有椒鹽噪聲。

(a) 陽光玫瑰(側光) (b) 陽光玫瑰(順光) (c) 陽光玫瑰(逆光)
訓練測試所用計算機的主要配置為Intel Core(TM) i5-7300HQ CPU@2.50 GHz、4 GB顯存的GPU GeForce GTX 1050Ti和16 GB RAM。程序由Python 3.6編寫并調用CUDA 10.1、Cudnn 7.5.1、OPENCV運行。
模型使用VGG16作為主干網絡。優化器采用隨機梯度下降法,優化器的Mini-Batch過大會降低訓練速度,并且GPU資源也無法負擔,Mini-Batch過小則會導致收斂困難,經過參數調優,將Mini-Batch設置為4。為了加快訓練速度并防止過擬合,學習率(learning rate)設置1E-6,動量(Momentum)設置為0.9,權重衰減值(decay)設置2E-4,每迭代5 000次學習率減小10倍[12]。通過比較不同α下模型的準確率,將損失函數中的α設為0.3。
采集不同背景、環境條件下的單粒陽光玫瑰葡萄照片共100幅,相機默認拍攝像素為3 072像素×2 304像素。為了提高模型訓練的效率,參照BSDS-500圖像分割數據集的尺寸,將圖片統一縮小為384像素×544像素,利用人工方式對葡萄輪廓進行標記,并生成樣本的實際輪廓照片,如圖5所示。
為了擴充訓練樣本,將葡萄分割數據集與伯克利分割數據集BSDS-500[18]合并,共600幅圖片,其中:400幅用于訓練模型;100幅用于驗證模型;100幅用于測試模型。為避免訓練過程中出現過擬合對數據集進行了增強,將400幅圖片通過旋轉、縮放、翻轉的方式擴充96倍,具體方法是每隔22.5°旋轉一次、放大1.5倍、縮小1倍、左右鏡像翻轉。增強后的數據集達到38 400幅圖片。
最終模型一共訓練了25 000次,耗時27 h,其損失值變化如圖6所示。可以看出模型在前2 000次迭代中損失值下降較快,收斂迅速。在10 000次迭代后損失值趨于穩定。在模型訓練中,迭代次數增大模型的損失值會降低,但過多的訓練可能會導致模型過擬合,需對訓練得到的模型進行評估。本文采用全局最佳(ODS)、單圖最佳(OIS)、平均精度(AP)作為圖像邊緣檢測指標,其中全局最佳指所有測試集圖片采用同一個固定閾值時的檢測得分;單圖最佳指對測試集中每一幅圖片采用最佳閾值時的檢測得分。邊緣檢測前,需先對邊緣預測圖進行非極大值抑制(NMS)[19],然后利用Edge box[20]進行指標測試。

圖6 損失值隨迭代次數的變化曲線
為了對比原始HED網絡結構與改進HED網絡結構的邊緣檢測效果,在測試集上分別進行檢測,測試指標為ODS、OIS與AP。為了控制變量,網絡均采用優化的損失函數,參數α設定為0.6。對邊緣進行細化處理。檢測結果如表1所示。可以看出,改進HED結構在三項指標評分上均高于原始模型結構,其中:ODS提高了0.02;OIS提高了0.015。AP提高了0.003。改進模型的精度得到了一定提升。

表1 不同網絡結構檢測結果對比
模型訓練完成后需要對其參數進行調整,以提高模型性能。本節將ODS與OIS作為模型參數評價指標,比較損失函數不同α參數下模型的性能,以獲得最優模型。
由圖7可知,當α=0時,融合損失函數損失退化為加權交叉熵損失函數。當α在0~0.6范圍內增大時,模型準確率隨之上升。當α>0.6后,模型精度反而下降。損失函數參數α=0.6時,模型的ODS、OIS和AP指標分別達到0.801、0.817和0.817,模型表現最好。

圖7 不同α參數對應的模型性能變化

(4)
(5)
(6)
式中:X為模型輸出的輪廓預測圖;Y為圖像的實際輪廓圖;TP為果粒像素正確劃分的個數;FN為果粒像素被錯誤劃分為背景像素的個數;Count(X)為模型輸出的輪廓預測圖中邊緣像素總個數。本文利用人工標記方法對葡萄輪廓進行評估。
3.3.1不同光照角度的檢測對比實驗
自然環境中光照條件變化多樣,會對葡萄邊緣檢測的效果產生影響。為了探究葡萄邊緣檢測的最佳光照條件,本節實驗將拍攝葡萄時的光照角度作為控制變量,比較在側光、順光、逆光下不同算法的邊緣檢測效果。本文取側光、順光、逆光條件下的葡萄圖像各60幅,總計180幅圖像,研究對比不同光照條件對算法檢測效果的影響,如圖8所示。

(a) 原圖
可以看出,側光下葡萄果粒邊緣清晰易分,表面光照均勻,邊緣檢測比較容易。逆光條件下,果粒表面光照強度較弱,邊緣比較模糊,重疊部分的邊緣難以用肉眼分辨。順光條件下,反光導致果粒表面部分區域形成白色亮斑,部分邊緣與背景顏色相近,難以區分。
由圖8可以看出,本文算法檢測出的重疊葡萄邊緣銳利顯著,側光條件下輪廓完整性較高,逆光和順光條件下未遮擋葡萄果粒輪廓識別完整,但內部被遮擋時果粒輪廓存在一定缺失。Canny算法檢測出的葡萄輪廓銳利,缺點是會引入較多噪點和偽邊緣,在順光和逆光環境下噪聲更加明顯。常規HED算法能夠基本檢測出不同光照條件下的葡萄輪廓,缺點是邊緣不清晰、邊界豐厚,對后續表型測量的準確性造成影響。DeepEdge算法檢出結果存在較多輪廓丟失現象。
由表2可以看出,本文算法的Dice系數高于其他算法0.06以上,查全率高于其他算法0.02以上。不同光照條件下模型預測葡萄輪廓的冗余率比其他算法低2百分點至19百分點。在側光條件下,不同算法的Dice系數和查全率高于在逆光和順光條件下的檢測結果。

表2 四種算法對不同光照條件下葡萄的實驗結果
3.3.2果實生長速率監測
葡萄生長周期中存在兩個快速生長期,這兩個時期是果實發育的關鍵時期。研究表明果實第一次快速生長期的水分虧缺會造成果實品質和產量的下降,且這種影響即使在后期進行充分灌水也是不可恢復的;而過多的水分供給又容易造成新梢的過旺生長,對果實的膨大不利[23]。葡萄果實生長帶來的投影面積變化趨勢能夠反映葡萄的生長狀態和階段,通過監測果粒面積變化可以為灌溉時機的選擇提供依據。本文以陽光玫瑰為例,研究檢測其果實生長過程中的面積變化。對封閉的葡萄果實輪廓,采用區域生長法計算輪廓內部像素個數。若存在輪廓不連續的情況,則利用人工標記的方式在輪廓上選取至少5個像素點,并利用最小二乘橢圓擬合算法對缺失輪廓部分進行擬合,再利用區域生長法計算果實投影面積。
測試獲取的陽光玫瑰葡萄花后13天至成熟期的葡萄果實面積變化曲線如圖9所示。可以看出果粒大小變化規律呈現雙“S”曲線,測量值的變化趨勢基本符合實際值。從花后到硬核期30天果實增長速度較快,隨后變慢,從花后50天開始再次快速生長,真實反映了果實的兩個快速生長期。

圖9 葡萄生長過程中果粒大小變化
1) 本文提出一種改進的HED檢測模型,通過在網絡中引入更多的側輸出,融合更多特征圖提高檢測精度,引入Dice系數改進損失函數,提升邊緣圖的質量,算法獲取了更高質量、更完整的葡萄邊緣輪廓圖。模型在驗證集上ODS和OIS分別達到0.801和0.817。
2) 與Canny、HED和DeepEdge算法在不同光照條件下的檢測結果相比,改進后算法的Dice系數高于其他算法近5百分點,查全率高于其他算法近5百分點。在復雜背景下,算法輪廓檢測的冗余率更低,產生的葡萄輪廓預測圖含有的非目標輪廓或噪聲數量更少,對復雜背景下的重疊葡萄檢測優勢較為明顯。
3) 對陽光玫瑰葡萄果粒投影面積進行了連續的生長監測,生長曲線符合雙“S”型規律。本文研究成果為有效監測葡萄生長階段、實現準確灌溉提供了參考依據。