胡文杰,雷兵強(qiáng)
(咸陽(yáng)職業(yè)技術(shù)學(xué)院 陜西 咸陽(yáng) 712000)
目前,基于深度神經(jīng)網(wǎng)絡(luò)的計(jì)算機(jī)視覺(jué)技術(shù)通過(guò)模擬生物視覺(jué),使用經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型來(lái)執(zhí)行多項(xiàng)任務(wù),例如圖像分類(lèi)、圖像分割和目標(biāo)檢測(cè)等。計(jì)算機(jī)視覺(jué)的主要應(yīng)用領(lǐng)域是無(wú)人駕駛,幾乎所有的路徑規(guī)劃和無(wú)人化控制都需要借助計(jì)算機(jī)視覺(jué)技術(shù)來(lái)實(shí)現(xiàn),通過(guò)將基于神經(jīng)網(wǎng)絡(luò)的計(jì)算機(jī)視覺(jué)任務(wù)的結(jié)果輸入到路徑規(guī)劃、導(dǎo)航算法中,求得最優(yōu)和避障路徑。如果在無(wú)人機(jī)上加載一個(gè)有效的計(jì)算機(jī)視覺(jué)系統(tǒng)和決策系統(tǒng),那么無(wú)人機(jī)將擁有與人類(lèi)相仿的眼睛和大腦,在多維復(fù)雜的環(huán)境中,可以實(shí)時(shí)有效地檢測(cè)到周?chē)奈矬w并進(jìn)行目標(biāo)檢測(cè)、物體分類(lèi)、障礙物劃分、危險(xiǎn)等級(jí)劃分等處理,從而在路徑規(guī)劃問(wèn)題上及時(shí)做出最佳決策。
計(jì)算機(jī)視覺(jué)包含許多復(fù)雜的任務(wù),這些任務(wù)可以切分為語(yǔ)義分割、實(shí)例分割、圖像分類(lèi)和目標(biāo)檢測(cè)等基本任務(wù)。它們的簡(jiǎn)單定義如圖1所示。
圖1 計(jì)算機(jī)視覺(jué)任務(wù)
(1)語(yǔ)義分割需要預(yù)測(cè)所輸入圖像的每個(gè)像素屬于哪種類(lèi)型的標(biāo)簽。
(2)實(shí)例分割還需要在語(yǔ)義分割的基礎(chǔ)上確定同一類(lèi)型不同個(gè)體的具體個(gè)數(shù)。
(3)圖像分類(lèi)需要預(yù)測(cè)圖像中物體的類(lèi)別。
(4)目標(biāo)檢測(cè)需要在圖像分類(lèi)的基礎(chǔ)上進(jìn)一步識(shí)別物體的位置。
目標(biāo)檢測(cè)是一項(xiàng)比較實(shí)用且極具挑戰(zhàn)性的計(jì)算機(jī)視覺(jué)任務(wù),可以看作是圖像分類(lèi)和目標(biāo)定位的結(jié)合。給定一張圖片,目標(biāo)檢測(cè)系統(tǒng)需要識(shí)別圖片中指定對(duì)象的類(lèi)別并給出其位置。由于圖片中物體的數(shù)量是不確定的,而且還要給出物體的精確位置,所以目標(biāo)檢測(cè)比分類(lèi)任務(wù)更加復(fù)雜。隨著計(jì)算機(jī)視覺(jué)技術(shù)的不斷發(fā)展,目標(biāo)檢測(cè)已滲透到航天航空、智能交通、農(nóng)業(yè)、高空安防、物流、森林防火等各個(gè)領(lǐng)域。由于在復(fù)雜的場(chǎng)景中,存在檢測(cè)對(duì)象種類(lèi)繁多、維度復(fù)雜等情況,常用的目標(biāo)檢測(cè)算法會(huì)出現(xiàn)精確度和完整度低等問(wèn)題。近年來(lái),隨著深度學(xué)習(xí)的不斷發(fā)展,各式各樣基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法被陸續(xù)提出。卷積神經(jīng)網(wǎng)絡(luò)可以實(shí)現(xiàn)數(shù)據(jù)的自主訓(xùn)練學(xué)習(xí),更新參數(shù)得到一個(gè)比較準(zhǔn)確的模型?;诰矸e神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法可以分為兩大類(lèi):一類(lèi)是基于Region Proposal 的R-CNN(Region-Conventional Neural Network)雙步目標(biāo)檢測(cè)算法,包括R-CNN、Fast R-CNN、FasterR-CNN 等;另一類(lèi)是單步目標(biāo)檢測(cè)算法,包括YOLO(You Look Only Once)、SSD 等,其發(fā)展如圖2所示。
圖2 目標(biāo)檢測(cè)主流算法發(fā)展史
自2012年Alex net 贏得ImageNet 比賽以來(lái),卷積神經(jīng)網(wǎng)絡(luò)(CNN)已成為圖像分類(lèi)的基準(zhǔn)。CNN 方法在ImageNet 挑戰(zhàn)中的表現(xiàn)優(yōu)于人類(lèi)。最近,CNN 在對(duì)圖像中物體的檢測(cè)、分割和識(shí)別方面取得了巨大成功。例如,基于CNN 的方法應(yīng)用于車(chē)輛檢測(cè)、醫(yī)學(xué)圖像檢測(cè)等計(jì)算機(jī)視覺(jué)任務(wù)中。雙步目標(biāo)檢測(cè)算法分兩步執(zhí)行,首先是利用選擇算法或卷積神經(jīng)網(wǎng)絡(luò)生成候選區(qū)(Region Proposal),然后將候選區(qū)送入網(wǎng)絡(luò)結(jié)構(gòu)中提取特征,最終生成檢測(cè)目標(biāo)的位置和類(lèi)別。Faster Region-based CNN(Faster R-CNN)是一種基于CNN 的雙步目標(biāo)檢測(cè)算法,其結(jié)構(gòu)圖如圖3所示。
圖3 Faster R-CNN 算法結(jié)構(gòu)
單步目標(biāo)檢測(cè)算法不用生成候選區(qū),把圖像分為M×M個(gè)網(wǎng)格單元后,使用卷積神經(jīng)網(wǎng)絡(luò)直接預(yù)測(cè)不同對(duì)象的類(lèi)別和位置。在雙步目標(biāo)檢測(cè)算法中,由于生成一些候選區(qū)花費(fèi)了不少的時(shí)間,故其檢測(cè)速度比單步目標(biāo)檢測(cè)算法要慢,但準(zhǔn)確率卻相對(duì)較高。單目標(biāo)檢測(cè)算法是在圖片直接劃分的網(wǎng)格上進(jìn)行的,因此其檢測(cè)速度較快。早期的雙步目標(biāo)檢測(cè)算法在檢測(cè)精確度上不夠理想,經(jīng)過(guò)不斷的改進(jìn)和完善,這一問(wèn)題慢慢得以解決,尤其是YOLOv5 算法在很大程度上提高了目標(biāo)檢測(cè)的精確度。
按照網(wǎng)絡(luò)深度和網(wǎng)絡(luò)寬度的不同,YOLOv5 可以分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文使用YOLOv5s,其網(wǎng)絡(luò)結(jié)構(gòu)最為小巧,圖像推理速度最快(高達(dá)0.007 s)。采用COCO 數(shù)據(jù)集進(jìn)行測(cè)試,YOLOv5s 的推理速度可以達(dá)到140 FPS,其他版本的推理速度優(yōu)于谷歌于2018年推出的Efficient Net。YOLOv5 的網(wǎng)絡(luò)結(jié)構(gòu)包括Input、Backbone、Neck、Output,它們之間的關(guān)系如圖4所示。
圖4 YOLOv5s 網(wǎng)絡(luò)結(jié)構(gòu)
下面介紹YOLOv5s 的主要組成部分:
(1)輸入端。輸入端完成對(duì)輸入數(shù)據(jù)的預(yù)處理,主要涉及對(duì)圖片進(jìn)行統(tǒng)一大小、增強(qiáng)、翻轉(zhuǎn),色域變化等操作。YOLOv5 的輸入端采用Mosaic 數(shù)據(jù)增強(qiáng)的方法并且以隨機(jī)縮放、隨機(jī)裁剪、隨機(jī)排布的方式對(duì)原數(shù)據(jù)和增強(qiáng)數(shù)據(jù)進(jìn)行拼接,再將拼接結(jié)果傳入卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行學(xué)習(xí),因此其對(duì)小目標(biāo)的檢測(cè)具有很好的檢測(cè)效果。
(2)Backbone(網(wǎng)絡(luò)主干)。Backbone 在不同圖像細(xì)粒度上聚合并形成基于圖像特征的卷積神經(jīng)網(wǎng)絡(luò),其主要包含F(xiàn)ocus、CSP 和SPP。Backbone 的第一層是Focus,從高分辨率圖像中周期性抽出像素點(diǎn)并將其重構(gòu)到低分辨率的圖像中,提高每個(gè)點(diǎn)感受野,并減少原始信息的丟失,該模塊的目的主要是減少計(jì)算量從而加快檢測(cè)速度。YOLOv5 默認(rèn)640×640×3 的輸入,先將其復(fù)制四份,通過(guò)切片操作將這四個(gè)圖片切分成四個(gè)320×320×3 的切片,然后連接這四個(gè)切邊,再通過(guò)64 核的卷積層進(jìn)行卷積操作,生成320×320×64 的輸出,最后再通過(guò)激活函數(shù)將結(jié)果輸入到下一個(gè)卷積層。YOLOv5s 的CSP 結(jié)構(gòu)用于將原輸入分成兩個(gè)分支,分別對(duì)兩個(gè)分支進(jìn)行卷積操作使得通道數(shù)減半,再對(duì)其中一個(gè)分支進(jìn)行Bottleneck*M操作,然后拼接兩個(gè)分支,使得BottlenneckCSP 的輸入與輸出大小相同,從而使網(wǎng)絡(luò)模型學(xué)習(xí)到更多的特征,提高目標(biāo)檢測(cè)的精確度。YOLOv5 中的CSP 有兩種結(jié)構(gòu)CSP1_X 和CSP2_X。SPP(Spatial Pyramid Pooling)模塊(即空間金字塔池化模塊)先采用4 種不同大小的卷積核進(jìn)行最大池化操作,再進(jìn)行張量拼接,從而使最終的輸入特征保持一致。
(3)YOLOv5s 的Neck 部分仍然采用FPN+PAN 進(jìn)行采樣,但是它在YOLOv4 的基礎(chǔ)上做了優(yōu)化改進(jìn),采用CSPnet 設(shè)計(jì)的CSP2 結(jié)構(gòu),以此加強(qiáng)網(wǎng)絡(luò)特征融合能力。Neck 主要用于增強(qiáng)模型對(duì)不同縮放尺度對(duì)象的檢測(cè),使其能夠識(shí)別出不同大小的同一個(gè)物體。YOLOv5 采用CSP2結(jié)構(gòu)替代YOLOv4 中的部分CBL 模塊,其具體結(jié)構(gòu)如圖5所示。
圖5 YOLOv5s 的Neck 結(jié)構(gòu)
(4)Output YOLOv5 采用GIoU_Loss 作為損失函數(shù),GIoU_Loss 解決了無(wú)法區(qū)分Prediction Box 與Ground Truth Box 相交的問(wèn)題,增加了相交尺度的衡量手段,緩解了單純IOU_Loss 時(shí)存在的一些問(wèn)題。CIOU_Loss 在DIOU_Loss的基礎(chǔ)上增加了一個(gè)影響因子,將Prediction Box 和Ground Truth Box 的長(zhǎng)寬比也考慮在內(nèi)。即CIOU_Loss 將GT 框的重疊面積、中心點(diǎn)距離和長(zhǎng)寬比全部納入考慮范圍。
強(qiáng)化學(xué)習(xí)(Reinforcement Learning,RL)是指agent 在與環(huán)境的交互中,通過(guò)狀態(tài)值的改變不斷調(diào)整的action,從而獲取最大價(jià)值的無(wú)監(jiān)督學(xué)習(xí)。RL 已經(jīng)廣泛應(yīng)用于無(wú)人機(jī)和自主系統(tǒng)的決策確定(尤其是路徑規(guī)劃和導(dǎo)航任務(wù)),Agent 與環(huán)境的交互如圖6所示。
圖6 RL 中Agent 與環(huán)境交互結(jié)構(gòu)
深度強(qiáng)化學(xué)習(xí)是指將深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)相結(jié)合處理復(fù)雜多維度環(huán)境中遇到的問(wèn)題。深度強(qiáng)化學(xué)習(xí)有機(jī)結(jié)合了深度學(xué)習(xí)的感知能力和強(qiáng)化學(xué)習(xí)的決策能力,并可根據(jù)輸入的圖像直接控制決策過(guò)程。它是一種更接近于人類(lèi)思維的人工智能方法。此外,深度強(qiáng)化學(xué)習(xí)的最新技術(shù)已經(jīng)擴(kuò)展到解決自主系統(tǒng)路徑規(guī)劃的難題中。
實(shí)驗(yàn)流程及優(yōu)化效果如下:
(1)搭建Anaconda 集成開(kāi)發(fā)環(huán)境。Anaconda 是一個(gè)開(kāi)源的包、環(huán)境管理器,可以用于在同一個(gè)機(jī)器上安裝不同版本的軟件包及其依賴(lài),并能夠在不同的環(huán)境之間切換:
1)下載并安裝Anaconda 開(kāi)源軟件;
2)為提高Anaconda 中所創(chuàng)建環(huán)境安裝指定軟件的速度,配置Anaconda 下載通道為清華鏡像路徑,命令如圖7所示。
圖7 配置Anaconda 下載通道命令
3)配置YOLOv5s 的工程環(huán)境進(jìn)行目標(biāo)檢測(cè)任務(wù)時(shí),務(wù)必要注意各軟件包版本的兼容性。在本項(xiàng)目中,在requirement.txt 文件中指定了對(duì)于各個(gè)軟件版本的要求,具體要求為:
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
tensorboard>=2.4.1
seaborn>=0.11.0
pandas
thop
pycocotools>=2.0
(2)使用YOLOv5s網(wǎng)絡(luò)模型訓(xùn)練數(shù)據(jù)并對(duì)訓(xùn)練結(jié)果(例如精確度、閾值等)進(jìn)行相關(guān)分析,最后優(yōu)化YOLOv5s 網(wǎng)絡(luò)模型:
1)將無(wú)人機(jī)拍攝的照片或視頻中截取的照片作為訓(xùn)練數(shù)據(jù),在數(shù)據(jù)被訓(xùn)練之前,首先進(jìn)行resize 的操作,將訓(xùn)練數(shù)據(jù)調(diào)整為720×720 大小的圖片;
2)配置YOLOv5s 配置文件conf.yaml 中的參數(shù),指定訓(xùn)練數(shù)據(jù)的文件路徑;
3)運(yùn)行應(yīng)用程序train.py 訓(xùn)練數(shù)據(jù);
4)對(duì)運(yùn)行結(jié)果進(jìn)行分析并優(yōu)化YOLOv5s 模型相關(guān)參數(shù)的設(shè)置。
(3)運(yùn)用優(yōu)化后的YOLOv5s 模型和參數(shù)值對(duì)測(cè)試圖像進(jìn)行目標(biāo)檢測(cè):
1)將無(wú)人機(jī)拍攝的照片或視頻中截取的照片作為訓(xùn)練數(shù)據(jù),在數(shù)據(jù)被訓(xùn)練之前,首先進(jìn)行resize 的操作,將訓(xùn)練數(shù)據(jù)調(diào)整為720×720 大小的圖片;
2)配置YOLOv5s 配置文件conf.yaml 中的參數(shù),指定訓(xùn)練數(shù)據(jù)的文件路徑;
3)運(yùn)行應(yīng)用程序test.py 訓(xùn)練數(shù)據(jù)。
(4)將計(jì)算機(jī)視覺(jué)任務(wù)的處理結(jié)果輸入到深度強(qiáng)化學(xué)習(xí)決策算法中,選擇合適的策略算法,獲取預(yù)期價(jià)值。
鑒于傳統(tǒng)位置固定的攝像頭、照相機(jī)所拍攝的圖像和視頻采集設(shè)備采集的視頻角度單一、畫(huà)面不全的弊端,本項(xiàng)目將圖像、視頻采集設(shè)備安裝在無(wú)人機(jī)上,在無(wú)人機(jī)飛行的過(guò)程中實(shí)時(shí)動(dòng)態(tài)采集數(shù)據(jù),這些設(shè)備的位置會(huì)隨環(huán)境和需要發(fā)生動(dòng)態(tài)改變,能更為準(zhǔn)確地模擬和創(chuàng)建真實(shí)的環(huán)境模型。其次,將基于神經(jīng)網(wǎng)絡(luò)模型的計(jì)算機(jī)視覺(jué)任務(wù)的有效輸出結(jié)果作為強(qiáng)化學(xué)習(xí)中路徑規(guī)劃問(wèn)題的狀態(tài)輸入,而不是直接使用采集到的原始圖片和視頻,從而提高了強(qiáng)化學(xué)習(xí)策略算法的執(zhí)行效率和精確度。