鄧相舟,張榮福
(上海理工大學(xué) 光電信息與計算機(jī)工程學(xué)院,上海 200093)
在現(xiàn)代生物制藥行業(yè)中,菌落經(jīng)培養(yǎng)和誘變后將產(chǎn)生數(shù)以萬計的單克隆菌落樣本,其中僅有一小部分是符合要求的高性能菌落。為提高挑選通量[1],需借助菌落挑選設(shè)備。目前這類設(shè)備是通過光學(xué)系統(tǒng)成像和圖像處理來獲得菌落的位置坐標(biāo)、面積、周長等二維特征,并進(jìn)行分類、定位和挑選[2],但只能獲得菌落二維位置信息。
由于培養(yǎng)皿中注入的培養(yǎng)基體積不一,導(dǎo)致菌落距離探針的距離存在差異:如果探針下降太深,針頭可能直接觸碰培養(yǎng)皿底部而造成培養(yǎng)皿破裂或針頭彎曲;但探針下降過淺,會因為無法觸及菌落表面而造成菌落漏選。因此對菌落進(jìn)行深度估計能夠有效地解決這些問題,另外,菌落的形態(tài)、紋理等信息同樣可以通過深度估計來進(jìn)行提取。
在圖像處理中,通常采用雙目立體匹配[3]來進(jìn)行深度估計,該方法需要經(jīng)過相機(jī)標(biāo)定、圖像匹配、深度計算等過程,存在對設(shè)備要求較高、實時計算量大等問題。近年來,隨著深度學(xué)習(xí)在計算機(jī)視覺領(lǐng)域的飛速發(fā)展,出現(xiàn)了基于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)[4]的單目深度估計方法。這類方法舍棄了一定的精度,具有計算量小、泛化性強(qiáng)等優(yōu)點(diǎn),同時應(yīng)用場景也更加普遍。基于CNN進(jìn)行單目圖像深度估計的方法分為兩種,即監(jiān)督學(xué)習(xí)方法和非監(jiān)督學(xué)習(xí)方法。在監(jiān)督學(xué)習(xí)方法的應(yīng)用方面:Eigen等[5]證明了使用圖像和其對應(yīng)的深度圖構(gòu)建神經(jīng)網(wǎng)絡(luò)的有效性;Shelhamer等[6]提出的FCN網(wǎng)絡(luò)用卷積層替換了全連接層,在圖像分割與深度估計上取得了顯著的成果;此外,Laina等[7]基于殘差網(wǎng)絡(luò)[8]的結(jié)構(gòu)對網(wǎng)絡(luò)進(jìn)行改進(jìn),取得了精度更高的結(jié)果。但這類方法需要獲取大量的圖片所對應(yīng)的深度真值作為約束,成本較高,且獲取大量數(shù)據(jù)的工作實現(xiàn)起來比較困難。而對于無監(jiān)督學(xué)習(xí)方法,只需要對雙目圖像進(jìn)行訓(xùn)練,例如Garg等[9]采用的利用雙目視差關(guān)系對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練的方法。這一類方法對環(huán)境、設(shè)備條件要求較低,是最貼近實際情況、應(yīng)用最靈活的方法。
菌落挑選儀配備的單目相機(jī)用于挑選前對目標(biāo)菌落進(jìn)行信息的提取。為了在不改變現(xiàn)有挑選儀設(shè)備硬件結(jié)構(gòu)的情況下,提取菌落的深度信息,同時考慮到挑選所需的實時性要求,本文基于殘差網(wǎng)絡(luò)設(shè)計了一種改進(jìn)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),提出基于遷移學(xué)習(xí)的單目菌落深度提取算法。
常用的立體匹配方法需要通過左、右雙目圖像匹配特征點(diǎn)來得到深度,根據(jù)雙目視覺的幾何原理,可以得到深度值z[3]的表達(dá)式
式中:B為雙目相機(jī)投影中心的間距;f為相機(jī)焦距;xl和xr分別為相同物體在左右兩個不同相機(jī)中成像的坐標(biāo),兩者之差即為視差d。CNN可以通過卷積運(yùn)算,模擬出圖像與視差間的關(guān)系,從而在預(yù)測時使用單幅圖像得到視差d。菌落挑選儀結(jié)構(gòu)如圖1所示,挑選儀使用機(jī)械臂控制探針的移動,通過單目相機(jī)采集菌落圖像,圖像經(jīng)計算機(jī)處理后獲得符合使用單目圖像進(jìn)行深度估計的場景。
圖1 挑選儀設(shè)備結(jié)構(gòu)圖Fig. 1 Structural diagram of selecting equipment
為滿足菌落挑選需求,需要搭建更深層的神經(jīng)網(wǎng)絡(luò)來獲取精度更高的深度信息。因此,引入殘差網(wǎng)絡(luò)ResNet作為編碼網(wǎng)絡(luò)的基礎(chǔ)網(wǎng)絡(luò)。殘差網(wǎng)絡(luò)由多個提取特征的殘差塊(Resblock)組成,殘差模塊的計算形式為
式中:x為模塊輸入;H(x) 為模塊輸出;F(x)為殘差函數(shù)。殘差模塊結(jié)構(gòu)如圖2所示,網(wǎng)絡(luò)訓(xùn)練轉(zhuǎn)換為學(xué)習(xí)殘差函數(shù)F(x) 。這樣的結(jié)構(gòu)讓網(wǎng)絡(luò)對微小的變化更靈敏,解決了深層網(wǎng)絡(luò)的梯度消失、爆炸以及退化問題。通過這種方式可以搭建更深層的神經(jīng)網(wǎng)絡(luò),加強(qiáng)網(wǎng)絡(luò)的前向傳播,提取更加豐富的圖像信息。
然而深層的網(wǎng)絡(luò)結(jié)構(gòu)也帶來了一些問題,隨著網(wǎng)絡(luò)層數(shù)的增加,整體的深度預(yù)測精度有所提高,但網(wǎng)絡(luò)會逐漸丟失淺層的語義信息,并且殘差網(wǎng)絡(luò)有初期降維較快的特點(diǎn),使得這一問題表現(xiàn)得更加嚴(yán)重。這對于提取菌落的表面特征有一些不利的影響,如果僅僅基于殘差網(wǎng)絡(luò)的最后一層特征進(jìn)行深度估計,會導(dǎo)致輸出的深度圖由于缺少淺層的語義信息,造成菌落形態(tài)特征丟失、邊緣輪廓模糊化等問題。為了解決這個問題,本文采用了多尺度的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn),將編碼網(wǎng)絡(luò)的淺層特征通過橫向連接的方式整合到解碼網(wǎng)絡(luò)中,達(dá)到保留淺層語義信息的效果。解碼網(wǎng)絡(luò)的主體是上采樣和卷積層相結(jié)合UpConv層,即先進(jìn)行上采樣然后進(jìn)行卷積運(yùn)算。上采樣的主要目的是用插值的方式放大圖像,然后通過卷積層使圖像特征更加的平滑。將殘差塊和UpConv層相同尺度的特征通過橫向連接整合,整體網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,圖中C為Conv卷積層,R代表殘差網(wǎng)絡(luò)層,Up代表UpConv層。通過這種組網(wǎng)方式,使解碼網(wǎng)絡(luò)融合編碼網(wǎng)絡(luò)中淺層的語義信息,并在最后基于不同尺度進(jìn)行了深度估計,使得網(wǎng)絡(luò)在提升性能的同時保證了菌落表面特征的相對完整性。
圖2 殘差模塊結(jié)構(gòu)圖解Fig. 2 Structural diagram of residual module
圖3 深度估計網(wǎng)絡(luò)結(jié)構(gòu)圖Fig. 3 Deep estimation network structure diagram
網(wǎng)絡(luò)的輸入選定為雙目圖像中的左視圖Il,網(wǎng)絡(luò)的輸出為預(yù)測的視差d。訓(xùn)練時利用輸出視差和右視圖Ir,通過雙線性采樣的方式重構(gòu)出新的左視圖,用重構(gòu)的左視圖與原左視圖Il的損失作為約束,將網(wǎng)絡(luò)訓(xùn)練為輸出視差d的可靠模型。本文使用SSIM損失函數(shù)計算左視圖與原左視圖Il的損失,SSIM損失函數(shù)用于度量兩幅圖像之間的結(jié)構(gòu)相似性,SSIM損失越大代表著圖像的視覺效果更好。SSIM損失對亮度和色彩的變化可能會更遲鈍,但是可以較好地保持高頻信息。L1范數(shù)損失函數(shù),也被稱為最小絕對值偏差,則可以較好地比對顏色亮度特征。因此,損失函數(shù)采用SSIM損失[10]與L1損失的結(jié)合,即
式中:N為圖像像素點(diǎn)個數(shù);α為比例系數(shù);為原左視圖Il中坐標(biāo)點(diǎn) (i,j) 處的值;為重構(gòu)出的新左視圖中坐標(biāo)點(diǎn) (i,j) 處的值。
利用挑選儀實驗平臺來獲取實驗需要的菌落數(shù)據(jù),由于真實的菌落樣本過于單一,這樣訓(xùn)練出來的網(wǎng)絡(luò)缺少泛化性,因此本文選用了模擬菌落來做數(shù)據(jù)填充,以提高數(shù)據(jù)樣本的多樣性。對相機(jī)進(jìn)行標(biāo)定以獲得相機(jī)參數(shù),并對圖像對進(jìn)行校正,最終獲得兩百對圖片作為菌落數(shù)據(jù)集,如圖4所示,圖中顯示了三個菌落樣本的左視圖和右視圖。
圖4 菌落數(shù)據(jù)集圖像Fig. 4 Colony dataset images
由于菌落圖像數(shù)據(jù)量較為有限,直接用這些數(shù)據(jù)從頭訓(xùn)練神經(jīng)網(wǎng)絡(luò)效果較差,還會導(dǎo)致過擬合、網(wǎng)絡(luò)的泛化性能不足等問題,所以本文選擇使用遷移學(xué)習(xí)[11]的方法來訓(xùn)練網(wǎng)絡(luò)。遷移學(xué)習(xí)在解決一個問題時,先將使用到的知識儲存起來,再將其應(yīng)用到一個具有一定相關(guān)性的領(lǐng)域中,可以用少量的有標(biāo)簽的數(shù)據(jù)建立一個可靠的模型,然后對目標(biāo)領(lǐng)域數(shù)據(jù)進(jìn)行預(yù)測。這是一個遷移已有的知識來支撐起可靠模型的方法,是解決目標(biāo)任務(wù)中存在標(biāo)簽的訓(xùn)練數(shù)據(jù)不足的方法。
網(wǎng)絡(luò)的訓(xùn)練分為兩步來完成。首先用KITTI數(shù)據(jù)集[12]對網(wǎng)絡(luò)進(jìn)行預(yù)訓(xùn)練,KITTI數(shù)據(jù)集包含大量的經(jīng)過校正的雙目圖像對,實驗中挑選出5 000對圖像,其中90%用作訓(xùn)練集,10%用作驗證集,通過訓(xùn)練可以有效地提取圖像特征并建立深度估計的模型。下一步使用準(zhǔn)備的菌落數(shù)據(jù)對預(yù)訓(xùn)練的網(wǎng)絡(luò)進(jìn)行Fine-tune訓(xùn)練,使網(wǎng)絡(luò)針對菌落數(shù)據(jù)進(jìn)行調(diào)整,以此來建立一個針對菌落的可靠的深度估計模型。
為了驗證所用方法的有效性,我們基于Python語言,結(jié)合Facebook公司的深度學(xué)習(xí)框架PyTorch搭建了網(wǎng)絡(luò)。在網(wǎng)絡(luò)訓(xùn)練過程中,以圖像對的形式進(jìn)行數(shù)據(jù)增強(qiáng),例如:以隨機(jī)概率對圖像對進(jìn)行翻轉(zhuǎn);隨機(jī)改變圖像對的亮度、對比度和飽和度,提高模型的泛化能力與魯棒性。網(wǎng)絡(luò)的輸入尺寸為512×256。用KITTI數(shù)據(jù)集訓(xùn)練時,采用Adam損失函數(shù)優(yōu)化器[13],初始學(xué)習(xí)率設(shè)置為1×10-4。訓(xùn)練設(shè)定的batch size為8,最大迭代次數(shù)設(shè)定為100 000次。以經(jīng)過KITTI數(shù)據(jù)集預(yù)訓(xùn)練的模型作為基礎(chǔ),使用菌落數(shù)據(jù)對模型進(jìn)行Fine-tune訓(xùn)練,此時網(wǎng)絡(luò)整體已經(jīng)位于局部最優(yōu)點(diǎn)附近,迭代訓(xùn)練較少的次數(shù)即可收斂。設(shè)定初始學(xué)習(xí)速率與batch size不變,訓(xùn)練集大小為200,訓(xùn)練最大迭代次數(shù)為5 000次。
為了對網(wǎng)絡(luò)的性能進(jìn)行量化評估,將本文訓(xùn)練的網(wǎng)絡(luò)與現(xiàn)有的單目深度估計網(wǎng)絡(luò)在KITTI數(shù)據(jù)集上進(jìn)行對比,采用文獻(xiàn)[5,14]等常用經(jīng)典的衡量指標(biāo)對實驗結(jié)果進(jìn)行評估,這些指標(biāo)的形式如下:
絕對值平均相對誤差為
式中:di為像素點(diǎn)i的估計深度值;為標(biāo)簽深度值;T為所有測試圖像的像素點(diǎn)數(shù)目總和。
均方根誤差為
對數(shù)均方根誤差為
某一閾值t下的預(yù)測準(zhǔn)確率,即預(yù)測結(jié)果中滿足如下條件的像素占所有像素的百分比為
式中:δ為像素點(diǎn)i的估計深度值di與標(biāo)簽深度值的比值;t為閾值,小于該閾值為預(yù)測正確,大于該閾值為預(yù)測錯誤。
各性能指標(biāo)對比如表1所示,前三列為損失值,數(shù)值越低說明訓(xùn)練結(jié)果越好,后三列為不同閾值t下的準(zhǔn)確率,t1、t2、t3分別表示閾值t為1.25、1.252、1.253時的結(jié)果,數(shù)值越高說明預(yù)測結(jié)果越準(zhǔn)確,較優(yōu)的結(jié)果加粗標(biāo)出。從表中可以看出,本文改進(jìn)的網(wǎng)絡(luò)在誤差和準(zhǔn)確率上均有一定優(yōu)勢,證明了網(wǎng)絡(luò)結(jié)構(gòu)的有效性,網(wǎng)絡(luò)相對于傳統(tǒng)網(wǎng)絡(luò)模型有更好的結(jié)果。
視差圖的質(zhì)量直接反映了算法的性能,圖5列出了使用不同方法得到的3種菌落圖像。圖中第二列為Eigen等[5]所用的方法估計的深度圖,使用的基礎(chǔ)網(wǎng)絡(luò)為VGG16,網(wǎng)絡(luò)相對較淺,從圖中可以辨識出菌落的大致位置,但是邊緣輪廓比較模糊,算法精度也有待提高。第三列為Laina等[7]所用的方法得到的結(jié)果,雖然他們也使用了殘差網(wǎng)絡(luò)獲得了更加出色的結(jié)果,但是由于深層網(wǎng)絡(luò)所帶來的影響,導(dǎo)致輸出的深度圖并不理想,從圖中無法辨識出菌落的位置、形態(tài)等。最后一列為本文算法得到的結(jié)果,預(yù)測的深度圖保留了較為完整的細(xì)節(jié)特征,圖中可以辨識出菌落所在位置,相對以前的單目估計方法在性能上也有所提升,實驗結(jié)果證實了本文方法的可行性與有效性。
表1 基于 KITTI 數(shù)據(jù)集上的實驗結(jié)果對比Tab. 1 Comparison of experimental results on KITTI dataset
圖5 視差圖效果對比Fig. 5 Comparison of disparity map effects
本文針對菌落挑選中的菌落深度提取問題,提出了一種基于遷移學(xué)習(xí)的單目深度恢復(fù)方法。該方法基于無監(jiān)督的深度估計方法和遷移學(xué)習(xí)的思路,對傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改進(jìn)與優(yōu)化,將編碼網(wǎng)絡(luò)中不同尺度的特征進(jìn)行整合,在減少誤差、提高準(zhǔn)確率的同時,保證了菌落表面特征的完整性。實驗結(jié)果表明,本文的深度提取算法具有可行性并在性能上有所提升。算法沒有使用成本較高的真實深度數(shù)據(jù)進(jìn)行訓(xùn)練,而是使用比較容易獲得的雙目圖像對,得到了能夠預(yù)測視差的網(wǎng)絡(luò)模型,提取了菌落的深度信息并保留了表面特征,對菌落挑選儀的自動化挑選工作有一定幫助。
盡管提出的方法對菌落挑選精度有一定的提高,但由于菌落挑選環(huán)境的復(fù)雜性和培養(yǎng)皿表面的不確定性,菌落挑選儀的自動化挑選工作還有很多方面可以做,后面會進(jìn)一步關(guān)注多任務(wù)網(wǎng)絡(luò)與菌落三維重建方向的研究。