李 昱,王俊雄,黃伍德
(1.上海交通大學(xué) 船舶與海洋工程學(xué)院,上海 201100;2.上海船舶設(shè)備研究所,上海 200031)
自主式水下機(jī)器人(Autonomous Underwater Vehicle, AUV)在海事研究和海洋開發(fā)領(lǐng)域具有廣闊的應(yīng)用前景,在水下信息獲取、精確打擊和“非對(duì)稱情報(bào)戰(zhàn)”等方面也有廣泛應(yīng)用,現(xiàn)已成為世界各國(guó)研究的重要內(nèi)容[1]。AUV 需通過(guò)導(dǎo)航系統(tǒng)實(shí)現(xiàn)高精度自主導(dǎo)航,其基本慣性導(dǎo)航系統(tǒng)一般采用捷聯(lián)式慣導(dǎo)。由于工作環(huán)境的限制和慣性器件產(chǎn)生的固有漂移誤差的影響,單一的導(dǎo)航設(shè)備無(wú)法滿足AUV 長(zhǎng)期高精度導(dǎo)航的需求,需采用組合導(dǎo)航系統(tǒng)。AUV 在遠(yuǎn)距離端一般采用水聲引導(dǎo)的方法或慣性導(dǎo)航系統(tǒng)與多普勒速度計(jì)程儀組合導(dǎo)航的方法接近目標(biāo)物,對(duì)導(dǎo)航精度的要求并不高,近距離端導(dǎo)航定位才是AUV 進(jìn)行水下目標(biāo)探測(cè)的關(guān)鍵[2]。目前,用于進(jìn)行水下測(cè)量的傳感器有慣性導(dǎo)航傳感器、聲吶傳感器和視覺傳感器等,其中:慣性導(dǎo)航傳感器測(cè)出的是物標(biāo)與水下機(jī)器人的相對(duì)位置,由于累計(jì)誤差的產(chǎn)生,測(cè)量精度會(huì)隨著時(shí)間的推移而下降,一般應(yīng)用于水下遠(yuǎn)距離端的導(dǎo)航中;聲吶傳感器分為長(zhǎng)基線、短基線和超短基線等3 種,其測(cè)量精度較低,不適用于復(fù)雜的水下環(huán)境;視覺傳感器具有成本低、體積小、運(yùn)動(dòng)方式靈活等特點(diǎn),適用于局部的精確定位,是近幾年各國(guó)重點(diǎn)研究的傳感器。AUV 的水下視覺引導(dǎo)一般是通過(guò)攝像機(jī)獲取目標(biāo)物信息,由此進(jìn)行目標(biāo)物識(shí)別和測(cè)距定位[3]。
水下目標(biāo)自動(dòng)識(shí)別是目前水下識(shí)別技術(shù)的一個(gè)主要研究方向,如何對(duì)圖像進(jìn)行特征提取是目標(biāo)識(shí)別領(lǐng)域的一項(xiàng)重要研究?jī)?nèi)容。當(dāng)前卷積神經(jīng)網(wǎng)絡(luò)[4]廣泛應(yīng)用于物體檢測(cè)、動(dòng)作識(shí)別和圖像分類識(shí)別等領(lǐng)域中,能有效提取特征,其性能遠(yuǎn)優(yōu)于傳統(tǒng)方法。基于卷積神經(jīng)網(wǎng)絡(luò)的視覺導(dǎo)航系統(tǒng)能使AUV自主識(shí)別目標(biāo)物,大幅提升其圖像特征提取和圖像識(shí)別能力,實(shí)現(xiàn)對(duì)近距離目標(biāo)物的精準(zhǔn)定位[5-6]。本文搭建一種AUV系統(tǒng)平臺(tái),通過(guò)試驗(yàn)獲取水下矩形木框和三角形木框圖像,根據(jù)LeNet-5神經(jīng)網(wǎng)絡(luò)框架模型[7-10]設(shè)計(jì)一種13層卷積神經(jīng)網(wǎng)絡(luò),完成水下矩形木框和三角形木框的二分類試驗(yàn)。
本文設(shè)計(jì)的AUV 主要由樹莓派主機(jī)(Raspberry Pi)、PIXHAWK 飛控板、電池倉(cāng)及外殼、蓄電池、螺旋槳推進(jìn)器、無(wú)刷電機(jī)驅(qū)動(dòng)板、三軸陀螺儀模塊、溫度/深度等傳感器、水泵、攝像頭、電力貓模塊和水上通信模塊組成,可通過(guò)地面站和手機(jī)APP 的控制實(shí)現(xiàn)水下航行,其前置攝像頭可通過(guò)電力貓模塊向手機(jī)傳輸視頻數(shù)據(jù),顯示在水下拍攝的圖像。Raspberry Pi 體積小,易于安裝,具有豐富的硬件接口,易于開發(fā);攝像頭可通過(guò)有線方式或插入無(wú)線網(wǎng)卡的方法實(shí)現(xiàn)與水下機(jī)器人控制系統(tǒng)的連接。因此,本文采用搭載4 核Broadcom BCM2836 芯片的Raspberry Pi 搭建AUV 系統(tǒng)平臺(tái)。AUV 系統(tǒng)結(jié)構(gòu)圖見圖1。
圖1 AUV 系統(tǒng)結(jié)構(gòu)圖
1.2.1 AUV 水下視覺硬件系統(tǒng)
AUV 水下視覺系統(tǒng)是AUV 獲得水下環(huán)境視覺信息所采用的主要工具,是AUV 設(shè)計(jì)的一項(xiàng)重要內(nèi)容。本文設(shè)計(jì)的水下拍攝實(shí)現(xiàn)原理為將攝像頭通過(guò)USB(Universal Serial Bus)接口與Raspberry Pi 連接,待Raspberry Pi 經(jīng)設(shè)定程序開機(jī)之后,采用Python 編程驅(qū)動(dòng)攝像頭工作。選用的攝像頭型號(hào)為USBFHD06H,像素尺寸為12.8×11.6,最高有效像素可達(dá)2000×1121,可輸出的圖像格式有H264、MJPEG 和YUV2,工作電壓為5V(直流),工作電流為140~190mA。
該攝像頭通過(guò)USB 連接Raspberry Pi(見圖2),由此獲得電源,同時(shí)在Raspberry Pi 的控制指令下進(jìn)行開啟或關(guān)閉;攝像頭可初步滿足工作的控制要求,拍攝精度滿足水下攝像的要求。
此外,由于水下光線不夠充足,在AUV 的攝像頭兩端分別加裝照明燈裝置,為AUV 水下拍攝工作提供充足的光源,攝像機(jī)通過(guò)水下密封罩安裝于AUV 正前方。圖3 為AUV 視覺系統(tǒng)整體安裝模型圖。
圖2 USBFHD06H 攝像頭及其與Raspberry Pi 連接圖
圖3 AUV 視覺系統(tǒng)整體安裝模型圖
1.2.2 AUV 水下視覺軟件系統(tǒng)
Raspberry Pi 沒有預(yù)裝操作系統(tǒng),需先將操作系統(tǒng)下載到SD 卡上,由SD 卡導(dǎo)入Raspberry Pi,重啟之后完成操作系統(tǒng)安裝。Raspbian 是Raspberry Pi 特有的基于Debian 的操作系統(tǒng),其硬件驅(qū)動(dòng)程序根據(jù)Raspberry Pi 的硬件優(yōu)化,可為Raspberry Pi 提供一個(gè)穩(wěn)定、快速的系統(tǒng)平臺(tái)。基于在固件、核心成分和應(yīng)用等方面的改進(jìn),Raspbian 是較為適合普通用戶使用的操作系統(tǒng)。Raspbian 預(yù)搭載的編程開發(fā)環(huán)境是Python語(yǔ)言,其具有完善的標(biāo)準(zhǔn)庫(kù),且易于編程。
OpenCV 是一個(gè)開源的跨平臺(tái)計(jì)算機(jī)視覺庫(kù),可在Linux、Windows 和MacOS 操作系統(tǒng)上運(yùn)行,支持跨平臺(tái)使用,具有輕量級(jí)和高效的優(yōu)點(diǎn),可提供大量圖像特征檢測(cè)方面的算法函數(shù),執(zhí)行效率較高,使用方便,可支持Raspberry Pi 運(yùn)行的Raspbian 操作系統(tǒng),并使用Python 語(yǔ)言做開發(fā)語(yǔ)言。
TensorFlow 是谷歌基于DistBelief 研發(fā)的新一代人工智能學(xué)習(xí)的開源系統(tǒng),是張量從流圖的一端流動(dòng)到另一端的計(jì)算過(guò)程,可將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳送到人工智能神經(jīng)網(wǎng)絡(luò)中進(jìn)行分析和處理,具有完備的標(biāo)準(zhǔn)庫(kù),廣泛應(yīng)用于語(yǔ)言識(shí)別和圖像識(shí)別中,與Python 語(yǔ)言兼容。
本文在Raspberry Pi 上安裝Raspbian 操作系統(tǒng),并安裝編譯器GCC4.3、QT4.5 和OpenCV 3.4 軟件工具包。本文所述水下識(shí)別系統(tǒng)在Linux 操作系統(tǒng)下利用QT 庫(kù)開發(fā)圖形界面,以O(shè)penCV 圖像處理庫(kù)為基礎(chǔ),通過(guò)對(duì)庫(kù)中提供的相關(guān)函數(shù)進(jìn)行處理獲取數(shù)據(jù)集,結(jié)合Tensorflow 對(duì)獲取的數(shù)據(jù)集進(jìn)行分類處理。
在水下搭建三角形木框和矩形木框試驗(yàn)平臺(tái)(見圖4),在AUV 航行過(guò)程中對(duì)矩形木框和三角形木框進(jìn)行拍攝,圖像采集模塊可通過(guò) cvCaptureFromCam()函數(shù),從攝像機(jī)中得到水下矩形木框和三角形木框圖像。
通過(guò)cvCaptureFromAVI()函數(shù)調(diào)用從本地保存的圖像文件;通過(guò)cvSetCaptureProperty()函數(shù)對(duì)返回的圖像進(jìn)行結(jié)構(gòu)設(shè)置。通過(guò)start()函數(shù)開啟定時(shí)器,每隔一段時(shí)間調(diào)用一次自定義函數(shù);通過(guò)cvGrabFrame()函數(shù),從視頻流中獲取一幀圖像并進(jìn)行存儲(chǔ);通過(guò)cvRetrieveFrame()函數(shù)對(duì)存儲(chǔ)的圖像進(jìn)行處理和顯示。程序流程見圖5。
圖4 水下矩形木框和三角形木框試驗(yàn)平臺(tái)
圖5 程序流程
目前AUV 水下對(duì)接塢站口一般為三角形和矩形,因此在水池中搭建矩形木框和三角形木框試驗(yàn)平臺(tái),通過(guò)上述過(guò)程,從不同角度進(jìn)行拍攝,共獲取1340 張圖像,部分?jǐn)?shù)據(jù)集見圖6。
圖6 水下拍攝部分?jǐn)?shù)據(jù)集
本文采用卷積神經(jīng)網(wǎng)絡(luò)對(duì)矩形木框和三角形木框進(jìn)行分類,數(shù)據(jù)集來(lái)自于AUV 在水下采集的三角形木框和矩形木框圖像,采用1340 個(gè)像素為100×100 的RGB 圖像,在此基礎(chǔ)上設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)格圖(見圖7)。
圖7 卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)格圖
本文設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)共有13 層,有關(guān)矩形木框和三角形木框識(shí)別的詳細(xì)過(guò)程如下。
1) 輸入層:采用雙線性插值算法對(duì)原始輸入圖像進(jìn)行縮放處理,將圖像的像素縮放為100×100。
2) Conv1-Relu1 層:該層是一個(gè)特征提取層,利用32 個(gè)5×5 的卷積核對(duì)原始圖像進(jìn)行卷積計(jì)算,提取特征,并獲得32 個(gè)像素為100×100 的特征圖。在第一層卷積層,采用32 個(gè)像素為5×5 的卷積核對(duì)輸入層像素為100×100 的圖像進(jìn)行卷積計(jì)算,提取特征,卷積核步長(zhǎng)設(shè)置為1,采用圖像邊緣自動(dòng)補(bǔ)零的方法對(duì)輸入圖像進(jìn)行卷積計(jì)算,最終得到32 個(gè)像素為100×100 的特征圖。本文擬采用ReLU 激活函數(shù)對(duì)卷積結(jié)果進(jìn)行激活,提高模型收斂的速度,計(jì)算式為
式(1)中:X 為輸入圖像,Y1為Conv1-Relu1 層輸出特征圖;ω 為卷積核;b1為偏置項(xiàng)。制造噪聲,增強(qiáng)魯棒性,最終得到Conv1-Relu1 層特征圖。
3) Max-pooling 層:該層是子采樣層,對(duì)Conv1-Relu1 層得到的32 個(gè)像素為100×100 的特征圖進(jìn)行二次特征提取。本文采用32 個(gè)像素為2×2 的卷積核分別對(duì)Conv1-Relu1 層得到的32 個(gè)像素為100×100 的特征圖進(jìn)行卷積計(jì)算。卷積核移動(dòng)步長(zhǎng)為2,采用圖像邊緣不自動(dòng)補(bǔ)零的方法,最終得到32 個(gè)像素為50×50的特征子圖,計(jì)算式為
式(2)中:Xij為Conv1-Relu1 層輸出特征圖;Y2為Max-pooling 層輸出特征圖;b 為偏置項(xiàng)。式(2)采用2 倍速對(duì)特征圖進(jìn)行縮放,縮小的速度過(guò)快會(huì)使得到的特征圖過(guò)于粗糙,縮小的速度過(guò)慢會(huì)使計(jì)算量過(guò)大。為得到更多的圖像細(xì)節(jié)[13],一般將縮放因子設(shè)為2;為能有效控制特征圖的縮放速度,之后子采樣過(guò)程的縮放因子也都設(shè)為2。
4) Conv2-Relu2 層:為更好地提取出圖像的局部特征,擴(kuò)展神經(jīng)元的感受野,對(duì)Max-pooling 層得到的特征子圖像進(jìn)行二次卷積操作,該層采用64 個(gè)像素為5×5 的卷積核,移動(dòng)步長(zhǎng)為1,圖像邊緣自動(dòng)補(bǔ)零,遍歷整個(gè)特征子圖,最終得到64 個(gè)像素為50×50 的特征圖。通過(guò)前2 層操作之后,神經(jīng)元的感受野較原始輸入圖像擴(kuò)展為10×10,經(jīng)過(guò)該層操作之后,每個(gè)神經(jīng)元的感受野又增加5 倍,擴(kuò)展為50×50,同時(shí)特征圖個(gè)數(shù)也增加1 倍,增加至64 個(gè)。
5) Max-pooling 層:該層同樣為子采樣層,對(duì)Conv2-Relu2 層得到的64 個(gè)像素為50×50 的特征圖進(jìn)行二次特征提取。為控制圖像的縮放速度,同樣采用64 個(gè)像素為2×2 的卷積核,卷積核移動(dòng)步長(zhǎng)為2,采用圖像邊緣不自動(dòng)補(bǔ)零的方法,對(duì)遍歷Conv2-Relu2 層得到的64 個(gè)像素為50×50 的特征圖進(jìn)行卷積計(jì)算,最終得到64 個(gè)像素為50×50 的特征子圖。
6) Conv3-Relu3 層:為增加卷積神經(jīng)網(wǎng)絡(luò)的深度,提高分類的準(zhǔn)確性,繼續(xù)采用128 個(gè)像素為3×3 的卷積核遍歷上一層得到的特征圖,卷積核的移動(dòng)步長(zhǎng)同樣設(shè)為1,采用邊緣自動(dòng)補(bǔ)零的方法對(duì)上一層得到的特征圖進(jìn)行卷積操作,得到128 個(gè)像素為25×25 的特征圖,增加了卷積神經(jīng)網(wǎng)絡(luò)的深度。
7) 其余卷積層和池化層:經(jīng)過(guò)Conv1-Relu1 層、Max-pooling 層、Conv2-Relu2 層、Max-pooling 層和Conv3-Relu3 層卷積和池化之后,提取的特征已具有表達(dá)能力,但其抽象能力依然不夠,在試驗(yàn)中,當(dāng)卷積神經(jīng)網(wǎng)絡(luò)只使用前幾層時(shí),獲得的正確精度分類只有45%。為使提取的特征更加抽象,更具有表達(dá)能力,在卷積神經(jīng)網(wǎng)絡(luò)中增加卷積層和池化層[11],增加卷積神經(jīng)網(wǎng)絡(luò)的深度,利用圖7 所示的卷積神經(jīng)網(wǎng)絡(luò)對(duì)木框和三角框進(jìn)行分類,得到的分類精度大幅上升,最終得到128 個(gè)像素為6×6 的特征圖。
8) 全連接層和softmax 分類輸出層:經(jīng)過(guò)8 層卷積和池化操作之后,得到128 個(gè)像素為6×6 的特征圖,為了將分布式特征圖映射到樣本標(biāo)記空間內(nèi),降低特征位置對(duì)分類的影響[12],采用3 層全連接層,將上一層得到的特征圖像組合成列向量,最后通過(guò)softmax 函數(shù)對(duì)圖像進(jìn)行分類。
本文使用的圖像數(shù)據(jù)集來(lái)自于在水下從不同角度對(duì)矩形木框和三角形木框進(jìn)行拍攝得到的圖片,共有1340 張。試驗(yàn)基于Linux 操作系統(tǒng),通過(guò)OpenCV 和TensorFlow 軟件完成二分類。
通過(guò)上述卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練和測(cè)試,經(jīng)過(guò)4 層卷積層和池化層對(duì)圖像進(jìn)行特征提取,采用三段式全連接方式對(duì)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,結(jié)果見圖8。在FC1 層,輸入的神經(jīng)元數(shù)量為4608 個(gè),輸出的神經(jīng)元數(shù)量為1024 個(gè),對(duì)權(quán)重進(jìn)行dropout 函數(shù)操作和L2 正則化,避免出現(xiàn)過(guò)擬合現(xiàn)象,采用ReLU 激活函數(shù)進(jìn)行激活;在FC2 和FC3 層,同樣對(duì)權(quán)重進(jìn)行dropout 函數(shù)操作和L2 正則化,分別將神經(jīng)元縮減為512 個(gè)和2 個(gè),F(xiàn)C3 層輸出數(shù)據(jù)經(jīng)過(guò)softmax 層,采用softmax 函數(shù)對(duì)輸入進(jìn)行二分類。由圖8 可知:訓(xùn)練損失隨著訓(xùn)練迭代次數(shù)的增多而減少,測(cè)試準(zhǔn)確率隨之提高;當(dāng)訓(xùn)練迭代的次數(shù)達(dá)到一定數(shù)值時(shí),測(cè)試的準(zhǔn)確率和損失相對(duì)處于一個(gè)平穩(wěn)的狀態(tài);在此次試驗(yàn)中,經(jīng)過(guò)90 次訓(xùn)練迭代之后,網(wǎng)絡(luò)基本收斂,網(wǎng)絡(luò)迭代了100 次,卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)優(yōu)化之后的訓(xùn)練損失值為0.058,準(zhǔn)確率達(dá)到99.18%。
圖8 訓(xùn)練結(jié)果圖
本文設(shè)計(jì)了AUV 視覺硬件系統(tǒng),選用搭載4 核Broadcom BCM2836 芯片的Raspberry Pi,選用型號(hào)為USBFHD06H 的攝像頭,通過(guò)USB 與Raspberry Pi 連接,基于Raspbian 系統(tǒng),在水下搭建矩形木框和三角形木框試驗(yàn)平臺(tái)。在AUV 航行過(guò)程中,通過(guò)攝像頭采集木框平臺(tái)圖像,通過(guò)OpenCV 獲取水下圖像,通過(guò) cvCaptureFromCam()函數(shù)進(jìn)行圖像采集,通過(guò)cvCaptureFromAVI()函數(shù)調(diào)用從本地保存的圖像文件,通過(guò)cvSetCaptureProperty()函數(shù)對(duì)返回的圖像進(jìn)行結(jié)構(gòu)設(shè)置并制作數(shù)據(jù)集,通過(guò)start()函數(shù)開啟定時(shí)器,每隔一段時(shí)間調(diào)用一次自定義函數(shù),通過(guò)cvGrabFrame()函數(shù)從視頻流中獲取一幀圖像并進(jìn)行存儲(chǔ),通過(guò)cvRetrieveFrame()函數(shù)對(duì)存儲(chǔ)的圖像進(jìn)行處理和顯示,并結(jié)合Tensorflow 將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于AUV 中。在LeNet-5 神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,增加卷積層的深度,擴(kuò)展全連接層,設(shè)計(jì)一種13 層的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行水下目標(biāo)識(shí)別,分別利用4 層卷積層和池化層對(duì)圖像進(jìn)行特征提取,采用卷積神經(jīng)網(wǎng)絡(luò)獲取水下目標(biāo)特征,采用3 層全連接層對(duì)水下拍攝的木框和三角框進(jìn)行訓(xùn)練分類,分別對(duì)卷積神經(jīng)網(wǎng)絡(luò)權(quán)重進(jìn)行dropout 函數(shù)操作和L2 正則化,通過(guò)試驗(yàn),在進(jìn)行100 次迭代訓(xùn)練之后,水下目標(biāo)識(shí)別的準(zhǔn)確率達(dá)到了99.18%。