《機器視覺理論與實戰(zhàn)》 課件 第五章 目標檢測算法原理與實戰(zhàn)_第1頁
《機器視覺理論與實戰(zhàn)》 課件 第五章 目標檢測算法原理與實戰(zhàn)_第2頁
《機器視覺理論與實戰(zhàn)》 課件 第五章 目標檢測算法原理與實戰(zhàn)_第3頁
《機器視覺理論與實戰(zhàn)》 課件 第五章 目標檢測算法原理與實戰(zhàn)_第4頁
《機器視覺理論與實戰(zhàn)》 課件 第五章 目標檢測算法原理與實戰(zhàn)_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第五章目標檢測算法原理與實戰(zhàn)

本章知識點目標檢測算法基本原理PaddleDetection框架介紹YOLOv3算法原理AlexNet網(wǎng)絡結(jié)構(gòu)VGG網(wǎng)絡結(jié)構(gòu)GoogLeNet網(wǎng)絡結(jié)構(gòu)PPYOLOE網(wǎng)絡結(jié)構(gòu)檢測與識別模型的部署5.1目標檢測算法CONTENTS5.1.1圖像卷積5.1.2現(xiàn)代卷積神經(jīng)網(wǎng)絡5.1.3注意力機制5.1.4關鍵技術015.1.1圖像卷積5.1.1圖像卷積互相關運算卷積層圖像中目標的邊緣檢測學習卷積核特征映射和感受野互相關運算互相關運算是一種常用的圖像處理操作,用于檢測圖像中的特征信息?;ハ嚓P運算通過在原始圖像上滑動一個卷積核,計算對應位置像素和卷積核的乘積之和,從而獲得特征強度的分布。互相關運算的計算方式如下:1.將卷積核與圖像對應位置的像素相乘。2.將所有乘積結(jié)果求和,得到輸出像素值。需要注意的是,輸出大小略小于輸入大小。這是因為卷積核的寬度和高度大于1,而卷積核只與圖像中每個完全適配的位置進行互相關運算。因此,輸出大小等于輸入大小減去卷積核大小即:

卷積層卷積層是深度學習中常用的層類型之一,用于提取圖像中的特征。卷積層通過在輸入圖像上滑動多個卷積核,計算互相關運算來獲得特征圖。卷積層的計算方式如下:1.定義多個卷積核,每個卷積核都是一個小矩陣,由一組權(quán)重值組成。2.將卷積核與輸入圖像對應位置的像素進行互相關運算,得到特征圖。通過堆疊多個卷積層,可以逐層提取更加抽象和高級的特征。卷積層是目標檢測算法中非常重要的組成部分。卷積層代碼為了實現(xiàn)二維卷積層,可以基于上述定義的corr2d函數(shù)進行編寫。在構(gòu)造函數(shù)init中,需要聲明weight和bias作為兩個模型的參數(shù)。在前向傳播函數(shù)中,可以調(diào)用corr2d函數(shù)并添加偏置。classConv2D(nn.Layer):def__init__(self,kernel_size):super().__init__()self.weight=paddle.ParamAttr(paddle.rand(kernel_size))self.bias=paddle.ParamAttr(paddle.zeros(1))

defforward(self,x):returncorr2d(x,self.weight)+self.bias高度和寬度分別為h和w的卷積核可以被稱為h×w卷積或h×w卷積核。同樣地,帶有h×w卷積核的卷積層也被稱為h×w卷積層。圖像中目標的邊緣檢測邊緣檢測是目標檢測算法中的一項關鍵任務,用于識別圖像中的物體邊緣。邊緣通常指的是圖像中亮度或顏色變化明顯的區(qū)域。常用的邊緣檢測算法有Sobel算子、Prewitt算子、Canny算子等。這些算子可以通過進行卷積運算來提取出圖像中的邊緣信息。下面代碼是一個簡單的應用示例,使用卷積層來檢測圖像中不同顏色的邊緣。首先,構(gòu)造一個大小為6×8像素的黑白圖像,其中中間四列為黑色(0),其他像素為白色(1)。X=paddle.ones((6,8))X[:,2:6]=0X學習卷積核深度學習中的卷積層可以通過學習卷積核的方式來自動提取圖像中的特征。學習卷積核是目標檢測算法中的重要步驟。學習卷積核的過程如下:1.隨機初始化卷積核的權(quán)重值。2.通過反向傳播算法不斷調(diào)整卷積核的權(quán)重值,使得卷積層的輸出能夠最好地匹配訓練數(shù)據(jù)的標簽。3.經(jīng)過多次迭代訓練后,卷積核可以自動學習到可以區(qū)分不同目標的特征。學習卷積核是目標檢測算法中的核心內(nèi)容之一,可以有效提升算法的性能。特征映射和感受野在卷積神經(jīng)網(wǎng)絡中,每個卷積層的輸出被稱為特征映射。特征映射可以看作是對輸入圖像的一種抽象,其中每個像素值代表了相應位置上的特征強度。感受野表示卷積層輸出上的像素與輸入圖像上的像素之間的關系。感受野的大小決定了卷積層對圖像局部信息和全局信息的感知能力。特征映射和感受野是目標檢測算法中的重要概念,能夠幫助理解卷積神經(jīng)網(wǎng)絡的工作原理。025.1.2現(xiàn)代卷積神經(jīng)網(wǎng)絡5.1.2現(xiàn)代卷積神經(jīng)網(wǎng)絡本節(jié)將介紹現(xiàn)代卷積神經(jīng)網(wǎng)絡架構(gòu),這些架構(gòu)在計算機視覺領域發(fā)揮了重要作用,并在ImageNet競賽中取得了優(yōu)異成績。自2010年以來,ImageNet競賽一直是監(jiān)督學習在計算機視覺中的重要標桿,許多模型都曾是該競賽的優(yōu)勝者。本節(jié)將介紹這些占據(jù)主導地位的模型,它們構(gòu)成了現(xiàn)代卷積神經(jīng)網(wǎng)絡的基礎。這些模型包括:1.深度卷積神經(jīng)網(wǎng)絡(AlexNet)它是第一個在大規(guī)模視覺競賽中擊敗傳統(tǒng)計算機視覺模型的大型神經(jīng)網(wǎng)絡;2.使用塊的網(wǎng)絡(VGG)它利用許多重復的神經(jīng)網(wǎng)絡塊;3.含并行連接的網(wǎng)絡(GoogLeNet)它使用并行連結(jié)的網(wǎng)絡,通過不同窗口大小的卷積層和最大匯聚層來并行信息抽取。1.深度卷積神經(jīng)網(wǎng)絡(AlexNet)

LeNet引人關注,但卷積神經(jīng)網(wǎng)絡并未主導。小數(shù)據(jù)集上LeNet效果好,大真實數(shù)據(jù)集上訓練的挑戰(zhàn)仍存。90年代至2012年,神經(jīng)網(wǎng)絡被其他方法超越。數(shù)據(jù)集小、計算資源有限,深度神經(jīng)網(wǎng)絡的訓練方法和架構(gòu)設計有困難和限制。隨著數(shù)據(jù)集增大、計算能力提升和新技術出現(xiàn),卷積神經(jīng)網(wǎng)絡逐漸展現(xiàn)出強大的能力,在更廣泛的領域中取得突破性成果。在計算機視覺領域,神經(jīng)網(wǎng)絡與其他機器學習方法比較不公平。因為卷積神經(jīng)網(wǎng)絡的輸入可以是原始像素值或經(jīng)過簡單預處理的像素值,而傳統(tǒng)機器學習方法通常不會直接使用原始像素作為輸入,而是通過人工設計的特征流水線進行處理。傳統(tǒng)機器學習方法在計算機視覺中的進展主要源于對特征的巧妙設計,學習算法通常是事后解釋的結(jié)果。因此,評估卷積神經(jīng)網(wǎng)絡與傳統(tǒng)方法的性能時,需要考慮它們在特征提取上的差異。隨著深度學習的發(fā)展,神經(jīng)網(wǎng)絡能夠端到端地學習特征表示,在許多計算機視覺任務上取得突出成果。上世紀90年代,已經(jīng)存在一些神經(jīng)網(wǎng)絡加速的方式,但不足以開發(fā)出深層、多通道、多層的卷積神經(jīng)網(wǎng)絡。當時的數(shù)據(jù)集規(guī)模小,一些關鍵的訓練技巧尚未成熟,限制了神經(jīng)網(wǎng)絡的訓練效果和性能。隨著研究的深入,這些問題逐漸得到解決,促進了卷積神經(jīng)網(wǎng)絡的發(fā)展。1.深度卷積神經(jīng)網(wǎng)絡(AlexNet)

AlexNet和LeNet的架構(gòu)非常相似,如圖5-2所示。本書在這里提供的是一個稍微精簡版本的AlexNet,去除了當年需要兩個小型GPU同時運算的設計特點。AlexNet和LeNet的設計理念非常相似,但也存在比較明顯的差異:(1)AlexNet相對于LeNet5來說更深。它由八層組成,包括五個卷積層、兩個全連接隱藏層和一個全連接輸出層。這種更深的網(wǎng)絡結(jié)構(gòu)使得AlexNet能夠?qū)W習到更復雜的特征表示,從而提高了在大規(guī)模圖像數(shù)據(jù)集上的識別性能。(2)AlexNet使用ReLU而不是Sigmoid作為其激活函數(shù)。在AlexNet的初始層,使用了一個11×11的卷積窗口。由于ImageNet中的圖像尺寸通常比MNIST[5]圖像大十倍以上,因此需要更大的窗口來捕捉目標。接著,在第二層中,卷積窗口的尺寸減小為5×5,然后再減小為3×3。此外,在第一、第二和第五層的卷積層之后,引入了最大匯聚層,窗口大小為3×3,步幅為2。另外,AlexNet的卷積通道數(shù)是LeNet的10倍1.小結(jié)(1)AlexNet的架構(gòu)與LeNet相似,但在擬合大規(guī)模的ImageNet數(shù)據(jù)集時使用了更多的卷積層和更多的參數(shù)。(2)盡管AlexNet已經(jīng)被更高效的架構(gòu)所超越,但它在深度網(wǎng)絡發(fā)展中扮演了關鍵角色,標志著從淺層網(wǎng)絡邁向深層網(wǎng)絡的重要一步。(3)盡管AlexNet的代碼只比LeNet多幾行,但學術界花了很多年才接受深度學習這一概念,并開始應用其出色的實驗結(jié)果。(4)Dropout、ReLU和預處理是提高計算機視覺任務性能的其他關鍵步驟。它們的引入使得模型訓練更加穩(wěn)定,激活函數(shù)更簡單有效,而預處理則有助于提取更有用的特征。2.使用塊的網(wǎng)絡(VGG)雖然AlexNet證明了深層神經(jīng)網(wǎng)絡的有效性,但它并沒有提供一個通用的模板來指導后續(xù)新的網(wǎng)絡架構(gòu)設計。類似芯片設計中從晶體管到邏輯元件再到邏輯塊的過程,神經(jīng)網(wǎng)絡架構(gòu)的設計也逐漸變得更加抽象化。研究人員開始從單個神經(jīng)元的層面思考問題,發(fā)展到整個層,現(xiàn)在又轉(zhuǎn)向塊和重復層的模式。塊的概念首先在牛津大學的視覺幾何組VGG(VisualGeometryGroup)網(wǎng)絡中引入。通過使用循環(huán)和子程序,這些重復的架構(gòu)可以很容易地在任何現(xiàn)代深度學習框架的代碼中實現(xiàn)。這種思想將網(wǎng)絡設計變得更加模塊化和可擴展,使研究人員能夠更靈活地構(gòu)建和定制各種網(wǎng)絡架構(gòu)。經(jīng)典卷積神經(jīng)網(wǎng)絡的基本組成部分通常包括以下序列:(1)帶填充的卷積層,以保持分辨率。(2)非線性激活函數(shù),如ReLU。(3)匯聚層,例如最大匯聚層。2.使用塊的網(wǎng)絡(VGG)VGG塊與上述組成類似,由一系列卷積層組成,后面是用于空間下采樣的最大匯聚層。在最初的VGG論文中(SimonyanandZisserman,2014),作者使用了具有3×3卷積核和填充為1(以保持高度和寬度)的卷積層,以及具有2×2匯聚窗口和步幅為2(每個塊后的分辨率減半)的最大匯聚層。

像AlexNet和LeNet一樣,VGG網(wǎng)絡也可以分為兩個主要部分。第一部分包含卷積層和匯聚層,而第二部分則由全連接層組成。結(jié)構(gòu)如圖5-4所示。2.小結(jié):(1)VGG-11采用了可復用的卷積塊來構(gòu)建網(wǎng)絡。不同的VGG模型可以通過在每個塊中設置不同的卷積層數(shù)和輸出通道數(shù)來定義。(2)使用塊的方式使得網(wǎng)絡的定義變得非常簡潔。通過使用塊,可以有效地設計復雜的網(wǎng)絡結(jié)構(gòu)。(3)在VGG論文中,Simonyan和Ziserman嘗試了多種架構(gòu)。特別是他們發(fā)現(xiàn)深度較大且通道數(shù)較小的卷積(例如3×3的卷積核)比淺層且通道數(shù)較大的卷積更加有效,這個發(fā)現(xiàn)對后續(xù)深度神經(jīng)網(wǎng)絡設計產(chǎn)生了影響。3.含并行連接的網(wǎng)絡(GoogLeNet)2014年的ImageNet圖像識別挑戰(zhàn)賽中,名為GoogLeNet的網(wǎng)絡架構(gòu)獲得了巨大成功。GoogLeNet吸收了NiN中串聯(lián)網(wǎng)絡的思想,并對其進行了改進。該論文的一個關鍵點是解決了選擇合適大小的卷積核的問題。此前的網(wǎng)絡中使用的卷積核從小到1×1,大到11×11不等。而該論文提出了一種觀點,即通過組合不同大小的卷積核可以取得有利效果。本節(jié)將介紹一個稍微簡化的GoogLeNet版本,省略了一些為穩(wěn)定訓練而添加的特殊特性,因為現(xiàn)在有了更好的訓練方法,這些特性已不再必要。在GoogLeNet中,基本的卷積塊被稱為Inception塊,結(jié)構(gòu)如圖5-6所示。3.含并行連接的網(wǎng)絡(GoogLeNet)在圖5-6所示的Inception塊中,包含了四條并行的路徑。前三條路徑使用不同大小的卷積窗口(1×1、3×3和5×5)進行卷積操作,以從不同尺度的空間中提取信息。中間的兩條路徑在輸入上使用1×1的卷積層來減少通道數(shù),以降低模型的復雜度。第四條路徑首先使用3×3的最大匯聚層進行空間下采樣,然后再使用5×5的卷積層進行卷積操作以改變通道數(shù)。這四條路徑的輸出在通道維度上連接起來,形成Inception塊的輸出。在Inception塊中,需要調(diào)整的超參數(shù)通常是每個路徑的輸出通道數(shù)。3.含并行連接的網(wǎng)絡(GoogLeNet)在GoogLeNet網(wǎng)絡中,使用不同大小的濾波器進行特征探測,并為它們分配適當數(shù)量的參數(shù),這種組合可以有效地捕捉不同尺度的圖像細節(jié)。GoogLeNet還引入了Inception塊的概念,其中包含多個并行的卷積路徑,用于在不同尺度上提取特征。通過堆疊多個Inception塊和使用全局平均匯聚層,GoogLeNet能夠更深入地建模復雜的特征,并減少過擬合的風險,這些設計策略使得GoogLeNet在圖像識別任務中取得了出色的表現(xiàn)。GoogLeNet模型結(jié)構(gòu)如圖5-7所示。3.小結(jié):(1) Inception塊通過并行的卷積層和最大匯聚層提取不同尺度的信息,并使用1×1卷積層降低通道維度,從而減小了模型的復雜度。(2) GoogLeNet通過串聯(lián)多個精心設計的Inception塊和其他層來構(gòu)建整個網(wǎng)絡。每個Inception塊中通道數(shù)的分配比例是通過大量實驗在ImageNet數(shù)據(jù)集上確定的,以獲得較好的性能。(3) GoogLeNet及其后續(xù)模型在ImageNet數(shù)據(jù)集上曾是非常有效的模型之一,它在相對較低的計算復雜度下提供了與其他更復雜模型相似的測試精度。這使得GoogLeNet成為了一種高效的選擇,可以在計算資源有限的情況下完成圖像識別任務。035.1.3注意力機制5.1.3注意力機制靈長類動物的視覺系統(tǒng)接收到大量的感官輸入,遠遠超過大腦的處理能力。然而,通過意識的聚焦和專注,它們可以選擇性地將注意力集中在感興趣的物體或信息上。這種能力使得靈長類動物能夠在復雜的視覺環(huán)境中篩選和處理信息,并更好地適應其生存環(huán)境。注意力聚焦和選擇性感知對靈長類動物的進化非常重要。它們能夠?qū)⒆⒁饬性陉P鍵信息上,例如潛在的獵物或潛在的威脅。這種專注和選擇性感知的能力使得它們能夠更有效地捕獲食物、避開危險和與同伴進行交互。對人類而言,注意力的聚焦和專注同樣至關重要。我們面臨著龐大的信息流,但不能同時處理所有的刺激和信息。通過選擇性地關注和處理特定的信息,我們能夠更好地應對復雜的環(huán)境,并取得成功。因此,注意力的能力在生物進化中發(fā)揮了重要的作用,使得靈長類動物和人類能夠在信息爆炸的環(huán)境中有效地感知、選擇和適應。1.多頭注意力

在實踐中,希望模型在給定相同的查詢、鍵和值集合時,能夠?qū)W習到不同的行為,并將這些行為組合成知識,以捕捉序列中不同范圍的依賴關系(如短距離和長距離的依賴關系)。為了實現(xiàn)這一目標,允許注意力機制使用查詢、鍵和值的不同子空間表示是有益的。為了實現(xiàn)這一點,使用獨立學習得到的多組線性投影來變換查詢、鍵和值。然后,這些變換后的查詢、鍵和值被并行地輸入到多個注意力匯聚中。最后,將這些多個注意力匯聚的輸出拼接在一起,并通過另一個可學習的線性投影進行變換,生成最終的輸出。這種設計被稱為多頭注意力。對于多頭注意力,每個注意力匯聚被稱為一個頭。通過使用全連接層實現(xiàn)可學習的線性變換,圖5-9展示了多頭注意力的結(jié)構(gòu)。1.多頭注意力在實現(xiàn)多頭注意力之前,用數(shù)學語言將這個模型形式化地描述出來。給定查詢q、鍵k和值v,每個注意力頭h的計算方法為:多頭注意力的輸出需要經(jīng)過另一個線性轉(zhuǎn)換,它對應著h個頭連結(jié)后的結(jié)果,因此其可學習參數(shù)是

:基于這種設計,每個頭都可能會關注輸入的不同部分,可以表示比簡單加權(quán)平均值更復雜的函數(shù)。2.Transformer自注意力同時具有并行計算和最短的最大路徑長度這兩個優(yōu)勢,因此被廣泛使用在深度學習框架的設計中。相比仍然依賴循環(huán)神經(jīng)網(wǎng)絡實現(xiàn)輸入表示的自注意力模型,Transformer完全基于注意力機制,不包含卷積層或循環(huán)神經(jīng)網(wǎng)絡層。雖然Transformer最初是應用于文本數(shù)據(jù)上的序列到序列學習方法,但它已經(jīng)得到了廣泛的推廣和應用,涵蓋了語言、視覺、語音以及強化學習領域。Transformer作為編碼器-解碼器架構(gòu)的一個實例,由編碼器和解碼器組成。不同于基于Bahdanau注意力實現(xiàn)的序列到序列學習模型,在Transformer中,編碼器和解碼器都是由自注意力模塊疊加而成。另外源(輸入)序列和目標(輸出)序列的嵌入表示會加上位置編碼,然后分別輸入到編碼器和解碼器中。這種設計的優(yōu)點是可以更有效地捕捉序列中不同位置之間的交互關系,進而提高模型的性能和效率。Transformer架構(gòu)如圖5-10所示。2.Transformer大體看,Transformer的編碼器由多個相同的層疊加而成,每個層都由兩個子層(表示為sublayer)組成。第一個子層是多頭自注意力聚合,第二個子層是基于位置的前饋網(wǎng)絡。具體來說,在計算編碼器的自注意力時,查詢、鍵和值都來自前一個編碼器層的輸出。受殘差網(wǎng)絡的啟發(fā),每個子層都采用了殘差連接。因此,對于序列中任何位置的任何輸入x,Transformer編碼器都將輸出一個d維表示向量。需要注意的是,在Transformer中,對于序列中任何位置的任何輸入,都需要滿足殘差連接。在殘差連接的加法計算后,緊接著應用層規(guī)范化,因此確保編碼器的輸出向量的一致性。與編碼器類似,Transformer解碼器也是由多個相同的層疊加而成,并采用了殘差連接和層規(guī)范化。除了編碼器中的兩個子層外,解碼器還在這兩個子層之間插入了第三個子層,稱為編碼器-解碼器注意力層。在編碼器-解碼器注意力中,查詢來自前一個解碼器層的輸出,而鍵和值來自整個編碼器的輸出。在解碼器自注意力中,查詢、鍵和值都來自上一個解碼器層的輸出。需要注意的是,解碼器中的每個位置只能考慮該位置之前的所有位置。這種掩蔽注意力保留了自回歸屬性,確保預測只依賴于已生成的輸出詞元。導入代碼如下:2.Transformer為了可視化解碼器的自注意力權(quán)重和“編碼器-解碼器”的注意力權(quán)重,需要完成更多數(shù)據(jù)操作工作,例如用零填充被掩蔽的注意力權(quán)重。值得注意的是,解碼器的自注意力權(quán)重和“編碼器-解碼器”的注意力權(quán)重都有相同的查詢,即以序列開始詞元打頭,再與后續(xù)輸出的詞元共同組成序列2.小結(jié)(1)Transformer是編碼器-解碼器架構(gòu)的一個實踐,盡管在實際情況中編碼器或解碼器可以單獨使用。(2)在Transformer中,多頭自注意力用于表示輸入序列和輸出序列,不過解碼器必須通過掩蔽機制來保留自回歸屬性。(3)Transformer中的殘差連接和層規(guī)范化是訓練非常深度模型的重要工具。(4)Transformer模型中基于位置的前饋網(wǎng)絡使用同一個多層感知機,作用是對所有序列位置的表示進行轉(zhuǎn)換。045.1.4關鍵技術1.圖像增廣圖像增廣技術通過對訓練圖像進行一系列隨機變化,在不影響原有意義的情況下,生成相似但不同的訓練樣本,從而擴大了訓練集的規(guī)模。此外,使用圖像增廣的原因是為了減少模型對某些屬性的依賴,從而提高模型的泛化能力??梢砸圆煌姆绞讲眉魣D像,使得感興趣的對象出現(xiàn)在不同的位置,從而降低模型對對象位置的依賴度。還可以調(diào)整亮度、顏色等因素以降低模型對圖像顏色的敏感度??梢哉f,圖像增廣技術是計算機視覺中不可或缺的一環(huán)。在對常用圖像增廣方法探索時,將使用下面這個尺寸為400×500的圖像作為示例。圖5-14為示例圖。代碼如下:d2l.set_figsize()img=d2l.Image.open('../img/cat1.jpg')d2l.plt.imshow(img);1.圖像增廣大多數(shù)圖像增廣方法都具有一定的隨機性。為了便于觀察圖像增廣的效果,下面定義輔助函數(shù)apply。此函數(shù)在輸入圖像img上多次運行圖像增廣方法aug并顯示結(jié)果。左右翻轉(zhuǎn)圖像通常不會改變對象的類別,因此這是最早且最廣泛使用的圖像增廣方法之一。在接下來的步驟中,使用transforms模塊創(chuàng)建RandomFlipLeftRight實例,使圖像各有50%的幾率向左或向右翻轉(zhuǎn)。翻轉(zhuǎn)圖像如圖5-15所示。代碼如下:apply(img,paddlevision.transforms.RandomHorizontalFlip())1.圖像增廣在示例圖像中,貓出現(xiàn)在圖像的正中央,但并非所有圖像都是如此。為了減少模型對目標位置的敏感度,可以通過對圖像進行隨機裁剪,使物體以不同的比例出現(xiàn)在圖像的不同位置。下面的代碼將隨機裁剪一個面積為原始面積10%到100%的區(qū)域,該區(qū)域的寬高比從0.5到2之間進行隨機取值。然后,該區(qū)域的寬度和高度都被縮放到200像素。在本節(jié)中,除非另有說明,a和b之間的隨機數(shù)指的是在區(qū)間[a,b]中通過均勻采樣獲得的連續(xù)值。裁剪縮放示例如圖5-17所示。代碼如下:shape_aug=paddlevision.transforms.RandomResizedCrop((200,200),scale=(0.1,1),ratio=(0.5,2))apply(img,shape_aug)1.小結(jié)(1)圖像增廣是通過現(xiàn)有的訓練數(shù)據(jù)生成隨機圖像來提高模型泛化能力的一種方法。(2)為了在預測過程中獲得準確結(jié)果,通常只對訓練樣本進行圖像增廣,而不使用帶有隨機操作的圖像增廣。(3)深度學習框架提供了許多不同的圖像增廣方法,這些方法可以同時應用于訓練數(shù)據(jù)。2.目標檢測與邊界框圖像中只有一個主要物體對象的情況下,只需要關注如何識別其類別。然而,在許多情況下,圖像中存在多個感興趣的目標。不僅需要知道它們的類別,還需要獲取它們在圖像中的具體位置。在計算機視覺領域,將這類任務稱為目標檢測(objectdetection)或目標識別(objectrecognition)。目標檢測在許多領域中被廣泛應用。例如,在無人駕駛領域,需要通過識別拍攝到的視頻圖像中的車輛、行人、道路和障礙物的位置來規(guī)劃行駛路徑。機器人也常通過目標檢測任務來檢測感興趣的目標。下面加載本節(jié)將使用的示例圖像,如圖5-19所示。可以看到圖像左邊是一只狗,右邊是一只貓,它們是這張圖像里的兩個主要目標。代碼如下:d2l.set_figsize()img=d2l.plt.imread('../img/catdog.jpg')d2l.plt.imshow(img);在目標檢測中,通常使用邊界框(boundingbox)來描述對象的位置。邊界框的形狀為矩形,由左上角和右下角的x、y坐標決定。另一種經(jīng)常使用的方法是使用邊界框的中心點和寬度、高度來表示。2.目標檢測與邊界框在圖像上添加邊界框之后,可以看到兩個物體的主要輪廓基本在兩個框內(nèi)。運行結(jié)果如圖5-20所示。代碼如下:fig=d2l.plt.imshow(img)fig.axes.add_patch(bbox_to_rect(dog_bbox,'blue'))fig.axes.add_patch(bbox_to_rect(cat_bbox,'red'));2.目標檢測與邊界框2.小結(jié)(1)目標檢測不僅能夠識別圖像中感興趣的物體,還能夠確定它們的位置,通常使用矩形邊界框來表示。(2)通常有兩種常用的邊界框表示方法,一種是用中心點的坐標、寬度和高度表示,另一種則使用左上和右下的坐標來表示,這兩種表示方法之間可以相互轉(zhuǎn)換。3.錨框目標檢測算法通常會在輸入圖像中采樣大量的區(qū)域,然后判斷這些區(qū)域是否包含感興趣的目標,并逐步調(diào)整這些區(qū)域的邊界,以更準確地預測目標的真實邊界框。不同的模型可能會使用不同的區(qū)域采樣方法,本節(jié)介紹其中一種,即以每個像素為中心,生成多個縮放比例和寬高比例不同的邊界框。錨框的方法在下面的multibox_prior函數(shù)中實現(xiàn)。指定輸入圖像、尺寸列表和寬高比,然后此函數(shù)將返回所有的錨框。代碼如下:defmultibox_prior(data,sizes,ratios):in_height,in_width=data.shape[-2:]device,num_sizes,num_ratios=data.ctx,len(sizes),len(ratios)boxes_per_pixel=(num_sizes+num_ratios-1)size_tensor=np.array(sizes,ctx=device)ratio_tensor=np.array(ratios,ctx=device)offset_h,offset_w=0.5,0.5steps_h=1.0/in_height#在y軸上縮放步長

steps_w=1.0/in_width#在x軸上縮放步長center_h=(np.arange(in_height,ctx=device)+offset_h)*steps_hcenter_w=(np.arange(in_width,ctx=device)+offset_w)*steps_wshift_x,shift_y=np.meshgrid(center_w,center_h)shift_x,shift_y=shift_x.reshape(-1),shift_y.reshape(-1)w=np.concatenate((size_tensor*np.sqrt(ratio_tensor[0]),sizes[0]*np.sqrt(ratio_tensor[1:])))\*in_height/in_width#處理矩形輸入

h=np.concatenate((size_tensor/np.sqrt(ratio_tensor[0]),sizes[0]/np.sqrt(ratio_tensor[1:])))anchor_manipulations=np.tile(np.stack((-w,-h,w,h)).T,(in_height*in_width,1))/2out_grid=np.stack([shift_x,shift_y,shift_x,shift_y],axis=1).repeat(boxes_per_pixel,axis=0)output=out_grid+anchor_manipulationsreturnnp.expand_dims(output,axis=0)3.錨框為了顯示圖像中以某個像素為中心的所有錨框,定義下面的show_bboxes函數(shù)來在圖像上繪制多個邊界框。代碼如下:defshow_bboxes(axes,bboxes,labels=None,colors=None)代碼中的bboxes變量的x軸和y軸坐標值已經(jīng)分別除以了圖像的寬度和高度。然而,在繪制錨框時,需要將它們的坐標值恢復到原始尺寸。因此,在下面定義了一個bbox_scale變量?,F(xiàn)在,可以繪制出圖像中所有以(250,250)為中心的錨框了。如圖5-21所示,縮放比為0.75,寬高比為1的藍色錨框完美地覆蓋了圖像中的狗。代碼如下:show_bboxes(fig.axes,boxes[250,250,:,:]*bbox_scale,['s=0.75,r=1','s=0.5,r=1','s=0.25,r=1','s=0.75,r=2','s=0.75,r=0.5'])3.錨框在上述內(nèi)容中,提到某個錨框“很好地”覆蓋了圖像中的狗。那么,如果已經(jīng)知道目標的真實邊界框,如何量化這個“好”的程度呢?直觀地說,可以衡量錨框和真實邊界框之間的相似性。杰卡德系數(shù)(JaccardCoefficient)可以用來衡量兩組之間的相似性。給定集合A和B,它們的杰卡德系數(shù)是它們交集的大小除以它們并集的大?。簩嶋H上,可以將任何邊界框的像素區(qū)域視為一個像素集合。通過這種方式,可以通過像素集合之間的杰卡德系數(shù)來測量兩個邊界框的相似程度。對于兩個邊界框,它們的杰卡德系數(shù)通常稱為交并比(IntersectionoverUnion,IoU),即兩個邊界框相交面積與相加面積之比,如下圖5-22所示。交并比的取值范圍在0和1之間:0表示兩個邊界框無重合像素,1表示兩個邊界框完全重合。3.錨框當存在大量錨框時,可能會輸出多個類似的預測邊界框,這些邊界框明顯重疊在同一目標周圍。為了簡化輸出,可以使用非極大值抑制(Non-MaximumSuppression,NMS)算法來合并屬于同一目標的類似預測邊界框。NMS的工作原理是:對于一個預測邊界框B,目標檢測模型會計算每個類別的預測概率。假設最大的預測概率為P,那么B對應的類別即為預測的類別。將P稱為預測邊界框B的置信度(Confidence)。在同一張圖像中,所有預測的非背景邊界框按照置信度從高到低排序,生成一個列表L。然后,通過以下步驟操作L:(1)從L中選取置信度最高的預測邊界框B作為基準,然后將所有與B的loU超過預定閥值e的非基準預測邊界框從L中移除。這時,L保留了置信度最高的預測邊界框,去除了與其太過相似的其他預測邊界框。簡而言之,那些具有非極大值置信度的邊界框被抑制了。(2)從L中選取置信度第二高的預測邊界框B2作為又一個基準,然后將所有與B2的loU大于e的非基準預測邊界框從L中移除。(3)重復上述過程,直到L中的所有預測邊界框都曾被用作基準。此時,L中任意一對預測邊界框的loU都小于閥值e,因此沒有一對邊界框過于相似。(4)輸出列表L中的所有預測邊界框。3.錨框可以在圖像上繪制這些預測邊界框和置信度。預測結(jié)果如圖5-23所示?,F(xiàn)在,可以使用multibox_detection函數(shù)調(diào)用非極大值抑制。在示例張量輸入中,添加了一個維度。請注意,將閾值設置為0.5。輸出結(jié)果的形狀為批量大小、錨框數(shù)量、6。在最內(nèi)層維度中,六個元素提供了同一預測邊界框的輸出信息。第一個元素表示預測的類索引,從0開始(0表示狗,1表示貓)。如果為-1,則表示背景或已在非極大值抑制中被移除。第二個元素是預測邊界框的置信度。其余四個元素分別表示預測邊界框左上角和右下角的(x,y)坐標,范圍在0和1之間。預測結(jié)果圖NMS處理結(jié)果圖3.小結(jié)(1)算法將圖像的每個像素為中心點生成不同形狀的錨框。(2)交并比(IoU)也被稱為杰卡德系數(shù),用于衡量兩個邊界框的相似性,它是相交面積與相并面積的比。(3)在預測期間,可以通過使用非極大值抑制(NMS)來移除類似的預測邊界框,從而簡化輸出。5.2人員摔倒檢測系統(tǒng)CONTENTS5.2.1系統(tǒng)需求分析5.2.2系統(tǒng)結(jié)構(gòu)設計5.2.3算法開發(fā)5.2.4系統(tǒng)測試與部署5.2.1系統(tǒng)需求分析

由于我國人口日益老齡化,老年人的身體健康受到人們的極度重視。然而,目前養(yǎng)老機構(gòu)并沒有得到普及與完善,居家養(yǎng)老將成為一個重要趨勢。大數(shù)據(jù)顯示,意外摔倒是導致60歲以上人群受傷的首要原因。對于無人看護的老人和病人而言,能否及時發(fā)現(xiàn)其摔倒行為直接關系到他們的生命安全。因此,人體摔倒檢測成為目前比較熱門的研究方向之一?;谏疃葘W習的人員摔倒檢測算法相對傳統(tǒng)方式具有精度高、魯棒性強等優(yōu)點,本案例的人員摔倒檢測算法基于目標檢測技術,目標檢測發(fā)展脈絡圖如圖5-1

圖5-1目標檢測發(fā)展脈絡圖5.2.2系統(tǒng)結(jié)構(gòu)設計本案例實現(xiàn)流程如下:1.解壓自定義的數(shù)據(jù)集;2.下載安裝PaddleDetection包;3.自定義數(shù)據(jù)集劃分;4.選擇模型(本次選擇YOLOv3)進行訓練的配置文件說明;5.效果可視化;6.模型評估和預測;7.PaddleDetection預測部署。1.數(shù)據(jù)和環(huán)境準備:首先將完成好標注的圖片(voc格式數(shù)據(jù)集)進行解壓,將下載的數(shù)據(jù)集的壓縮文件解壓到home/aistudio/work目錄,代碼如下:!unzipdata/我的數(shù)據(jù)集.zip-d/home/aistudio/work/

本案例中代碼的版本是release/2.0,需要使用PaddlePaddle2.0.2版本。從gitee中下載PaddleDetection,代碼如下:!gitclone/paddlepaddle/PaddleDetection.git在fork完項目后,只需要執(zhí)行一次該命令即可,不需要每次都git。將當前文件路徑更換為home/aistudio/PaddleDetection,然

后:安裝PaddleDetection依賴。代碼如下:%cd/home/aistudio/PaddleDetection/!pipinstall-rrequirements.txt2.自定義數(shù)據(jù)集劃分本案例中數(shù)據(jù)集使用的從視頻中截取捕獲的人員摔倒圖片以及相機拍攝的摔倒圖片,共1989張圖片以及對應的標簽文件。

在做目標檢測的任務時,通常要用一定的格式來準備數(shù)據(jù)集。圖5-2為數(shù)據(jù)集的目錄,需要準備jpg、png等格式的圖片以及標簽文件,標簽文件在本案例中使用voc格式。在準備自己的數(shù)據(jù)集時可以使用labelimage、labelme等工具進行標注。

圖5-2數(shù)據(jù)集目錄在技術實現(xiàn)的過程中,要將數(shù)據(jù)集劃分為訓練集和驗證集。本案例原始數(shù)據(jù)存在標注錯誤的情況,這部分數(shù)據(jù)需tg掉。將數(shù)據(jù)集按照8:2的比例劃分為訓練集和驗證集,并生成train.txt和val.txt進行訓練。其過程分為以下幾步:

(1)遍歷整個文件夾,包括jpg文件以及xml文件(2)通過判斷圖像的大小是否為0,剔除空數(shù)據(jù)(3)統(tǒng)計數(shù)據(jù)集中的標簽:在準備數(shù)據(jù)時,通常需要一個label_list.txt的文本文件,里面存放所有真實標簽的名字,運行

代碼后,可以得到數(shù)據(jù)總數(shù)和有效數(shù)據(jù)個數(shù):

(4)將有效數(shù)據(jù)隨機劃分訓練集和驗證集,生成的train.txt部分可視化為圖5-3:

圖5-3train.txt文件可視化

可以看出每一行均為一個樣本,包括圖片的路徑和標簽文件的路徑。val.txt結(jié)構(gòu)與其相似。(5)將統(tǒng)計的標簽存放到label_list.txt文件中,生成label_list.txt文件為:運行整個自定義數(shù)據(jù)集劃分程序,可以得到如下結(jié)果:

3.模型訓練

在選擇好模型后,只需要改動對應的配置文件,運行train.py文件,即可實現(xiàn)訓練。本案例中使用YOLOv3模型中的YOLOv3_mobilenet_v3_large_ssld_270e_voc.yml進行訓練。將mobilenet_v3_large作為骨干網(wǎng)絡,達到更輕量的效果。首先找到需要修改的配置文件:configs/YOLOv3/YOLOv3_mobilenet_v3_large_ssld_270e_voc.yml。打開后可以看到依賴的五個子配置文件如下:

_BASE_:[‘../datasets/voc.yml',‘../runtime.yml',‘_base_/optimizer_270e.yml',‘_base_/yolov3_mobilenet_v3_large.yml',‘_base_/yolov3_reader.yml',]

然后根據(jù)實際的需求進行修改,其中:(1)../datasets/voc.yml(數(shù)據(jù)配置文件):主要說明了訓練數(shù)據(jù)和驗證數(shù)據(jù)的路徑。例如:數(shù)據(jù)集格式、分類數(shù)和訓練集路徑、驗證集路徑等。(2)../runtime.yml(運行時配置文件):主要說明了公共的

運行參數(shù)。例如:是否使用GPU、模型保存路徑、迭代輪數(shù)等。(3)_base_/optimizer_270e.yml(優(yōu)化器配置文件):主要說明了學習率和優(yōu)化器的配置。例如:學習率和學習率策略、優(yōu)化器類型等。(4)_base_/YOLOv3_mobilenet_v3_large.yml:(模型配置文件)主要說明了模型、主干網(wǎng)絡的情況。例如:backbone、neck、head、loss、前后處理等。(5)_base_/YOLOv3_reader.yml:(數(shù)據(jù)讀取配置文件)主要

說明了數(shù)據(jù)讀取后的預處理操作:例如resize、數(shù)據(jù)增強等。在設置完所有的配置文件以后,就可以開始進行訓練了。下面的代碼將當前文件路徑更換為home/aistudio/PaddleDetection,通過運行train.py進行訓練,指定訓練配置文件路徑為-cconfigs/YOLOv3/YOLOv3_mobilenet_v3_large_ssld_270e_voc.yml,--eval參數(shù)指定在訓練過程中進行評估,評估在每個snapshot_epoch時開始,每次評估后還會評出最佳mAP模型保存到best_model文件夾下,建議訓練時使用該參數(shù),可以使得完成訓練后快速地找到最好

的模型。如果想縮短訓練時間,可以在_base_/optimizer_270e.yml中將訓練輪數(shù)epoch減小。如果驗證集很大,測試將會比較耗時,建議調(diào)整configs/runtime.yml文件中的snapshot_epoch配置以減少評估次數(shù),或訓練完成后再進行評估。--use_vdl=true開啟可視化功能,--vdl_log_dir=“./output”將生成的日志放在output文件夾下,訓練的代碼如下:

%cd/home/aistudio/PaddleDetection!pythontools/train.py-cconfigs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml--eval--use_vdl=True--vdl_log_dir="./output"

當打開use_vdl開關后,為了方便用戶實時查看訓練過程中狀態(tài),PaddleDetection集成了VisualDL可視化工具。當打開use_vdl開關后,記錄的數(shù)據(jù)包括:loss變化趨勢、mAP變化趨勢等,在BMLCodelab中點擊可視化,如圖5-4所示:

圖5-4可視化界面

選擇訓練時生成的logdir或者模型文件,啟動VisualDL服務,即可查看??梢愿鶕?jù)訓練曲線,進行模型調(diào)優(yōu),選擇output文件夾:

然后啟動服務后可以看到訓練曲線,重點關注bbox-mAP和loss,然后根據(jù)曲線情況進行調(diào)整或者提前終止訓練。曲線如圖5-5和圖5-6所示:

圖5-5bbox-mAP曲線圖5-6loss曲線訓練的部分結(jié)果如圖5-7所示:

圖5-7部分訓練結(jié)果4.模型評估由于邊訓練邊評估,已經(jīng)保存好了最優(yōu)模型,所以在這里可以不進行評估,最優(yōu)模型文件如圖5-8所示:

評估時運行eval.py程序,需要指定評估配置文件路徑與被評估的模型的路徑,代碼如下:

圖5-8最優(yōu)模型文件4.模型評估由于邊訓練邊評估,已經(jīng)保存好了最優(yōu)模型,所以在這里可以不進行評估,最優(yōu)模型文件如圖5-8所示:

評估時運行eval.py程序,需要指定評估配置文件路徑與被評估的模型的路徑,代碼如下:

圖5-8最優(yōu)模型文件4.模型評估由于邊訓練邊評估,已經(jīng)保存好了最優(yōu)模型,所以在這里可以不進行評估,最優(yōu)模型文件如圖5-8所示:

評估時運行eval.py程序,需要指定評估配置文件路徑與被評估的模型的路徑,代碼如下:

圖5-8最優(yōu)模型文件%cd/home/AIStudio/PaddleDetection/!python-utools/eval.py-cconfigs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml\-oweights=output/yolov3_mobilenet_v3_large_ssld_270e_voc/best_model.pdparams得到評估結(jié)果如圖5-9所示:可以看到mAP為82.54%,平均FPS為24.79。

圖5-9評估結(jié)果YOLOv3介紹YOLOv3是一種基于深度學習技術的目標檢測算法,由JosephRedmon等人于2018年提出。相對于之前的版本,YOLOv3在檢測精度和速度方面取得了顯著提升,廣泛應用于領域如人臉識別和物體識別。它的改進包括更深的網(wǎng)絡結(jié)構(gòu)、多尺度檢測策略、FPN特征金字塔、AnchorBoxes、多個輸出層、IoU閾值等??傮w來說,YOLOv3在檢測精度和速度方面有了顯著提升,適用于實時場景下高效的目標檢測。

5.2.3算法開發(fā)YOLOv3整體結(jié)構(gòu)如圖5-10所示:1.Backbone骨干網(wǎng)絡Backbone用于提取特征,經(jīng)典的YOLOv3中使用的是

圖5-10YOLOv3整體結(jié)構(gòu)圖Darknet-53特征提取網(wǎng)絡,由52個卷積層和1個全連接層構(gòu)成,如圖5-11所示:圖5-11Backbone結(jié)構(gòu)2.Head圖5-12為輸出層結(jié)構(gòu):

圖5-12輸出層結(jié)構(gòu)YOLOv3整個網(wǎng)絡輸入416*416的圖片,中間過程可以看作一個黑箱模型,輸出三個尺度的特征圖:13*13*255、26*26*255、52*52*255,三個輸出的深度都是255。3.Neck圖5-13為Neck網(wǎng)絡,可以實現(xiàn)不同層次的特征融合。將小尺度的特征經(jīng)過CBL和上采樣操作獲得大一級尺度的特征,并且通過張量拼接將同尺度的特征融合到一起,使網(wǎng)絡既能發(fā)揮深層網(wǎng)絡特化抽象語義的信息,也可以充分發(fā)揮淺層網(wǎng)絡像素結(jié)構(gòu)底層細粒度的

信息。

圖5-13Neck將模型輸出的三個尺度的預測框中的85個參數(shù)與對應的標簽值進行擬合,用損失函數(shù)進行反向傳播和梯度下降,迭代更新網(wǎng)絡參數(shù)。YOLOv3測試過程如圖5-15所示:

圖5-15YOLOv3測試過程由于有三個特征圖,所以需要對三個特征圖分別進行預測。三個特征圖一共可以產(chǎn)生13*13*3+26*26*3+52*52*3=10647個預測框坐標以及對應的類別和置信度。測試時,選取一個置信度閾值,過濾低閾值box,經(jīng)過NMS,消除各個類別重疊較大的預測框,輸出整個網(wǎng)絡的預測結(jié)果。

系統(tǒng)測試PaddleDetection給出的模型預測腳本是infer.py,可以通過此腳本,使用訓練好的模型對指定圖片進行推理預測。

5.2.4系統(tǒng)測試與部署PaddleDetection提供了兩種預測方式,單張圖片預測和以一個文件夾中的圖片進行預測。使用-infer_img=demo/xxx.jpg為單張圖片進行預測,使用-infer_dir=demo為用一個文件夾進行預測,其中demo是放置測試圖片的地方。測試時需要指定預測配置文件、預測用到的模型和預測的圖像路徑,代碼如下:!pythontools/infer.py-cconfigs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml\-oweights=/home/aistudio/work/best_model.pdparams\--infer_img=/home/aistudio/work/我的數(shù)據(jù)集/people_2029.jpg預測結(jié)果如圖5-16所示:

對測試的圖片結(jié)果進行可視化,代碼如下:圖5-16預測結(jié)果%matplotlibinlineimportmatplotlib.pyplotaspltimportcv2infer_img=cv2.imread("output/people_2029.jpg")plt.figure(figsize=(10,10))plt.imshow(cv2.cvtColor(infer_img,cv2.COLOR_BGR2RGB))plt.show()可以得到圖5-17的測試圖片:

圖5-17測試圖片

系統(tǒng)部署PaddleDetection提供了PaddleInference、PaddleServing、Paddle-Lite多種部署形式,本案例中使用PaddleInference部署。在模型訓練過程中保存的模型文件包含前向預測和反向傳播過程,實際部署則不需要反向傳播,因此需要將模型導成部署需要的模型格式。PaddleDetection中提供了tools/export_model.py腳本來導出模型,消除了冗余參數(shù),方便后面的模型部署。將模型導出,默認存儲于PaddleDetection/output_inference目錄,代碼如下:

%cd/home/AIStudio/PaddleDetection!pythontools/export_model.py-cconfigs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml\-oweights=/home/AIStudio/work/best_model.pdparams導出的推理模型文件結(jié)構(gòu)如圖5-18所示:圖5-18

推理模型文件結(jié)構(gòu)得到推理數(shù)據(jù)如圖5-19所示:

圖5-19推理數(shù)據(jù)包括推理時間、檢測目標id、置信度以及預測框的坐標、保存結(jié)果路徑等。使用下面的代碼進行Benchmark測試:!pythondeploy/python/infer.py--model_dir=output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc\--image_file=/home/AIStudio/work/我的數(shù)據(jù)集/people_1125.jpg

\--use_gpu=True--run_benchmark=True可以得到圖5-20的結(jié)果,推理時間減小到了6.83ms。

圖5-20Benchmark測試結(jié)果5.3無人機航拍小目標檢測系統(tǒng)CONTENTS5.3.1系統(tǒng)需求分析5.3.2無人機小目標算法開發(fā)015.3.1系統(tǒng)需求分析1.概述基于深度學習的無人機航拍小目標檢測算法是目前應用廣泛且效果良好的一種方法。其主要基于深度學習的卷積神經(jīng)網(wǎng)絡模型,通過對訓練樣本的學習和優(yōu)化,實現(xiàn)對無人機航拍圖像中小目標的自動檢測和識別?;谏疃葘W習的無人機航拍小目標檢測算法具有精度高、魯棒性強等優(yōu)點,能夠在不同場景下實現(xiàn)對不同類別的小目標的檢測和識別,如車輛、行人等。同時,該算法也存在一些挑戰(zhàn),如訓練數(shù)據(jù)量少、光照條件差等問題,需要進行進一步的優(yōu)化和改進。為了提高基于深度學習的無人機航拍小目標檢測算法的性能,近年來涌現(xiàn)出了一些新的算法和技術,如:1.多尺度檢測。2.多任務學習。3.數(shù)據(jù)增強。4.交互式學習。5.跨域遷移學習??傊?,基于深度學習的無人機航拍小目標檢測算法是一個廣泛研究和應用的領域,未來隨著硬件設備的升級和算法的不斷優(yōu)化,該算法將在更多場景下得到應用和推廣。2.國內(nèi)外研究現(xiàn)狀無人機航拍小目標檢測算法是近年來國內(nèi)外研究的熱點之一,目前研究現(xiàn)狀:1.國外:基于深度學習的無人機航拍小目標檢測算法已經(jīng)得到廣泛應用。例如,美國的“ProjectMaven”項目就是通過利用深度學習算法實現(xiàn)無人機航拍圖像中的目標檢測和識別。歐洲的“MINERVA”項目也是利用無人機航拍圖像實現(xiàn)對地面目標的自動檢測和跟蹤。同時,在學術界也涌現(xiàn)出了一些優(yōu)秀的研究工作,如FasterR-CNN、YOLO等模型的提出和改進,以及對多任務學習、跨域遷移學習等領域的探索和應用。2.國內(nèi):隨著無人機技術的不斷發(fā)展,基于深度學習的無人機航拍小目標檢測算法也逐漸成為了研究的熱點之一。研究主要集中在算法的改進和優(yōu)化上,如利用多尺度檢測、數(shù)據(jù)增強、交互式學習等方法來提高算法的性能和魯棒性。此外,還有一些研究工作關注無人機航拍小目標檢測算法的實際應用,如利用該算法實現(xiàn)對城市交通、森林防火等領域的監(jiān)測和預警。2.國內(nèi)外研究現(xiàn)狀總體來說,國內(nèi)外在無人機航拍小目標檢測算法的研究方面取得了不少進展,但仍然面臨著一些挑戰(zhàn)和難題,如算法的精度和魯棒性、實時性等,需要進行進一步的研究和改進。小目標檢測算法發(fā)展情況如圖5-55所示。3.小目標定義小目標的定義并沒有一個統(tǒng)一的標準,不同場景和數(shù)據(jù)集可能有不同的劃分方式。小目標的定義主要有兩種方式:1.基于相對尺度的定義:即從目標與圖像的相對比例這一角度對小目標進行定義。對于一個針對小目標的數(shù)據(jù)集,同一類別中所有目標實例的相對面積(即邊界框面積與圖像面積之比)在0.08%~0.58%之間的目標視為小目標。2.基于絕對尺度的定義:即從目標絕對像素大小這一角度考慮對小目標進行定義。例如,MSCOCO數(shù)據(jù)集將分辨率小于32×32像素的目標視為小目標。基于相對尺度和絕對尺度的定義各有優(yōu)缺點,前者可以適應不同場景和分辨率下的圖像,但難以評估模型對不同尺度目標的檢測性能;后者可以方便地比較不同算法在同一數(shù)據(jù)集上針對小目標檢測精度,但忽略了圖像本身尺寸和場景復雜程度等因素。本案例將COCO數(shù)據(jù)集下定義的小目標作為標準。025.3.2無人機小目標算法開發(fā)1.數(shù)據(jù)集介紹VisDrone2019數(shù)據(jù)集是由天津大學等團隊開源的一個大型無人機視角的數(shù)據(jù)集,官方提供的數(shù)據(jù)中訓練集為6471張、驗證集為548張。提供了11個類,分別是:'pedestrian','people','bicycle','car','van','truck','tricycle','awning-tricycle','bus','motor','others',其中others是非有效目標區(qū)域,本案例中予以忽略。其數(shù)據(jù)標注展示如圖5-56所示:2.PPYOLOE介紹PPYOLOE是基于PPYOLO做的一系列改進和升級,是單階段Anchor-free模型,超越了多種流行的YOLO模型,取得了較好的性能。PPYOLO有一系列模型,包括s、m、l和x,可以通過width_multiplier和depth_multiplier配置。同時避免使用諸如deformableconvolution或者matrixnms之類的特殊算子,以使其能輕松地部署在多種硬件上,因此對部署非常友好。PPYOLOE由以下方法組成:(1) 可擴展的backbone和neck(2) TaskAlignmentLearning(3) EfficientTask-alignedheadwithDFL和VFL(4) SiLU激活函數(shù)2.PPYOLOE介紹PPYOLOE整體結(jié)構(gòu)如圖5-57所示(s尺度模型):2.1Backbone基礎網(wǎng)絡采用自研的CSPRepResNet結(jié)構(gòu),主要是在ResNet的基礎上,參考CSPNet和RepVGG進行了改進。改進點如圖5-58所示:2.1BackboneCSPNet采用兩個分支實現(xiàn)了特征的跨階段融合,通過將梯度的變化從頭到尾集成到特征圖中,大幅降低計算量的同時可以保證準確率。RepVGG結(jié)構(gòu)在VGG的基礎上進行改進,主要的思路包括是在VGG網(wǎng)絡的Block塊中加入了Identity和殘差分支,相當于把ResNet網(wǎng)絡中的精華應用到VGG網(wǎng)絡中。模型推理階段,通過Op融合策略將所有的網(wǎng)絡層都轉(zhuǎn)換為3×3卷積,便于網(wǎng)絡的部署和加速。改進對比如圖5-59所示。2.2HeadHead部分采用了TOOD的思想,也就是T-Head,主要包括Cls_Head和Loc_Head。具體來說,T-head首先在FPN特征基礎上進行分類與定位預測,然后TAP基于所得任務,通過計算,將信息對齊;最后T-head根據(jù)從TAP傳回的信息自動調(diào)整分類概率與定位預測。分類與回歸頭如圖5-60所示。2.2Head由于分類和回歸這兩個任務的預測都是基于這個交互特征來完成的,但是兩個任務對于特征的需求是不一樣的,因此設計了一個layerattention來為每個任務單獨調(diào)整特征。這個部分的結(jié)構(gòu)也很簡單,可以理解為是一個channel-wise的注意力機制。由此得到了對于每個任務單獨的特征,然后再利用這些特征生成所需要的類別或者定位的特征圖。圖5-61為檢測頭原理圖。2.3樣本匹配匹配策略選用了ATSS和TAL。ATSS指出One-StageAnchor-Based和Center-BasedAnchor-Free檢測算法間的差異主要來自于正負樣本的選擇,基于此提出ATSS(AdaptiveTrainingSampleSelection)方法,該方法能夠自動根據(jù)GT的相關統(tǒng)計特征選擇合適的AnchorBox作為正樣本,在不帶來額外計算量和參數(shù)的情況下,能夠大幅提升模型的性能。TOOD提出了TaskAlignmentLearning(TAL)來顯式的把2個任務的最優(yōu)Anchor拉近,這是通過設計一個樣本分配策略和任務對齊loss來實現(xiàn)的。樣本分配計算每個Anc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論