2.1 卷積神經網絡原理
卷積神經網絡(Convolutional Neural Network,CNN)是一種前饋人工神經網絡,相較于傳統(tǒng)的人工神經網絡,它具有極強的處理能力,可以直接處理三維圖像中的大量像素數(shù)據,而且具有良好的算法擴展性和特征提取能力,因此在機器視覺領域得到了廣泛的應用。如圖2-1所示CNN包含的運算層通常由池化運算層、卷積運算層,全連接運算層和激活運算層組成的。
卷積神經網絡概念結構圖
(1)卷積層
卷積神經網絡的核心部分之一是卷積層,它利用卷積核來完成大量注入數(shù)據,從而抽取出數(shù)據中的有用內容。卷積核能夠看作是一個過濾器,其大小和形狀能夠參照結合應當需要進行調整。卷積操作是一種將圖像中的像素值與輸入圖像中的每一位像素值進行相乘并求和的方法,這樣就可以獲得一種新的特征值,即卷積特征值。卷積層通過多個卷積核的組合提取不同的特征信息,同時卷積層還可以保持空間信息的局部連接性,使得其在處理圖像時具有較好的魯棒性。單個卷積層的運算公式如式(2-1)所示。
——特征圖的點(x+i,y+j)下的像素值;
k——卷積核的尺寸;
W——輸入特征圖的寬;
H——輸入特征圖的高;
——卷積核對應的權重參數(shù)值;
b——卷積核對應的偏差參數(shù)值;
——激活函數(shù);
——輸入特征圖中以(x,y)為中心點坐標,并且卷積窗口大小為k×k的二維卷積的卷積輸出值。
(2)池化層
池化層也稱為下采樣層,通過降低特征圖維度來降低特征圖冗余度和網絡計算復雜度,有效防止過擬合。 池化層的計算公式如式(2-2)所示。它主要用于降低卷積層的輸出維度,減少計算量和內存占用,同時增強特征的不變性和泛化性。池化層通常包括最大池化和平均池化。最大池化是在一個固定尺寸的矩陣窗口內尋找最大的值作為輸出值,而平均池化則是計算窗口內所有值的平均值作為輸出值。通過多次卷積操作和池化操作,卷積神經網絡能夠逐層提取圖像特征圖,并且不改變其深度。
式中:
——第n層卷積層輸出的第j個特征圖;
——激活函數(shù);
——池化層的池化方式,常用的有平均池化、最大池化、混合池化和隨機池化。
以最大池化方式為例,當池化步長為2時,最大池化的過程如圖2-2所示。
最大池化層概念示意圖
(3)全連接層
全連接層通常作為CNN中的最后一層,將卷積層和池化層提取的特征映射到輸出的類別標簽,是每個節(jié)點與上一層中的節(jié)點相互連接,組成一個全連接的神經網絡層。全連接層通常采用softmax函數(shù)將最終的輸出值映射到不同的標簽上,從而實現(xiàn)分類任務。
除了以上三個基本組件外,卷積神經網絡還包括其他一些重要的技術和概念,如批標準化、Dropout、損失函數(shù)、優(yōu)化算法等。其中,批標準化可以使得神經網絡的訓練更加穩(wěn)定和快速,Dropout可以防止神經網絡過擬合,損失函數(shù)可以衡量神經網絡的訓練效果,優(yōu)化算法可以通過梯度下降等方式對神經網絡的參數(shù)進行更新和優(yōu)化。
在卷積神經網絡中,數(shù)據通常被表示為多維數(shù)組,如二維的圖像數(shù)據、三維的音頻數(shù)據等。對于圖像數(shù)據,通常使用RGB三個通道來表示不同顏色的像素值,因此其維度為寬×高×通道數(shù)。而對于音頻數(shù)據,通常使用頻譜圖或Mel頻譜圖來表示音頻的特征,其維度為時間步數(shù)×頻譜數(shù)。
卷積神經網絡的訓練通常需要大量的數(shù)據和計算資源。為了避免過擬合和提高泛化性能,常常使用數(shù)據增強和正則化等技術來擴充數(shù)據集和減小模型的復雜度。此外,還可以使用預訓練模型和遷移學習等技術來加速訓練和提高模型的準確性。
2.2?YOLOv5s目標檢測網絡模型
YOLOv5s網絡結構圖
YOLOv5(You Only Look Once version?5)是由Jocher在2020年提出的一種基于深度學習的目標檢測網絡,它可以用于對輸入圖像進行實時的目標檢測和分類,在目標檢測方面具有優(yōu)異的性能和精度[80]。YOLOv5目標檢測算法的原理是將輸入圖像分割成不同的網格,對每個網格預測其包含的物體類別和位置。對于YOLOv4、YOLOv5、YOLOv6、YOLOv7、YOLOv8的不同模型用PASCAL VOC數(shù)據集訓練并進行參數(shù)量、運算量和精度的對比,如表2-1所示。
相比于YOLOv3和YOLOv4,YOLOv5的主要創(chuàng)新點在于引入了多種改進方法,包括更輕量級的網絡架構、更高效的特征提取方法、更準確的邊界框預測和更豐富的數(shù)據增強方法等,從而減少了總運算量,提高了檢測準確率和速度;相比較對YOLOv6、YOLOv7和YOLOv8模型的大小和精度,YOLOv5系列的模型更加輕量,而其精度與其他模型僅有細微差距,使其更加適合在邊緣計算硬件平臺部署。
近年來,隨著深度學習網絡模型的發(fā)展,性能得到了極大的提高,同時其參數(shù)量和計算量也得到了極大的增加,這限制了其在資源受限的邊緣計算設備中的嵌入。為了滿足邊緣移動端的武器硬件平臺資源有限條件下對軍用飛機目標檢測的要求,則需要一種兼顧輕量化、平均精度和檢測速度的軍用目標檢測算法,又因為YOLOv5n的參數(shù)量非常少,在硬件部署過程中經過量化會導致檢測效果大幅下滑,故選取參數(shù)量較少而精度僅比YOLOv5m稍低的YOLOv5s作為基準算法。
YOLOv5s的網絡結構采用了一階式的目標檢測模型設計,即在一個卷積神經網絡中同時進行物體的定位和分類。這種結構相比于傳統(tǒng)的兩階式目標檢測模型(如Faster R-CNN)速度更快,但相對精度略低,也更適合部署在邊緣計算設備中。YOLOv5s采用了一種全新的骨干網絡結構,即C3模塊,它可以在不影響網絡深度和寬度的前提下,大大降低計算量和參數(shù)量。如圖2-3所示,YOLOv5s的網絡結構主要分為輸入端、骨干網絡、頭部網絡和檢測層。
2.2.1 輸入端
YOLOv5s網絡模型在輸入端部分主要進行了Mosaic數(shù)據增強、自適應錨框計算和自適應圖像縮放,具體如下所示:
(1)Mosaic數(shù)據增強
為了改善待檢測圖像中的小目標分布不均勻和待檢測目標所在環(huán)境惡劣導致模型在訓練階段的平均精度低的問題,在數(shù)據訓練階段,Mosaic數(shù)據增強方式將從訓練集中隨機選取的4張圖片,然后以裁剪、排布和縮放等方式進行圖片拼接,有效的豐富了輸入端的訓練數(shù)據集,通過以上操作來增強模型對小目標的檢測性能,提高訓練效率,適用于小目標檢測。
(2)自適應錨框計算
YOLO算法中,針對不同數(shù)據集,計算預定義錨框。在網絡訓練中,以真實框位置相對于預設邊框的偏移以進行擬合。網絡在預定義錨框的基礎上輸出新錨點框位置信息,然后與真實框的位置進行比對,計算前后兩個位置信息的差異,再反向更新迭代網絡參數(shù),使其能夠更加精確的定位錨框的位置。
(3)自適應圖像縮放
數(shù)據集中的圖像存在長寬不相同的情況,在網絡訓練中,針對這種情況的做法通常是將原始圖像的比例縮放到同一個尺寸,然后空余部分用灰白色進行填充,再送入網絡中訓練,即可以設置不同尺寸的圖像作為輸入圖像。但如果縮放效果只是單純的縮小,很有可能造成圖片中的信息丟失。
2.2.2骨干網絡
YOLOv5s網絡模型主要采用CBS、C3和SPPF的模塊結構。CBS模塊是由YOLOv5網絡提出的,其目的是為了防止下采樣過程中的信息丟失。C3模塊由三個卷積和一個CSP模塊組成,CSP結構借鑒了CSP網絡的思想,取消了殘差輸出后的卷積模塊,其結構分為兩支,分別為修正單元結構和基本卷積模塊,最后將兩個結構拼接并得到輸出,其目的是通過局部的跨層融合獲得更豐富的特征圖,減少計算量;SPPF模塊將步長固定為5,進行了三次最大池化,每次池化層的輸出特征圖會成為下一個池化層的輸入特征圖,從而減少操作數(shù)。對于CBS、C3和SPPF模塊的具體細節(jié)如下所示:
(1)C3模塊
C3模塊由兩個嵌套的殘差模塊組成。在不影響特征信息的情況下,簡化了模型,減少了卷積模塊的數(shù)量。根據應用位置的不同,C3模塊可分為C3_1_X和C3_2_X。C3_1_X用在Backbone卷積神經網絡部分,包含X個殘差分量;X越大,網絡結構越深。另一方面,C3_2_X應用于 Neck 并包含2X殘差分量,其結構與C3_1_X的不同之處僅在于殘差分量的數(shù)量。增加Resunit的個數(shù)可以增加不同層間反向傳播的梯度值,防止網絡結構更深導致的梯度退化問題。而且,增強了模型提取和融合網絡特征的能力。因此,隨著網絡學習能力的提高,計算量和參數(shù)要求的降低,C3模塊也提高了網絡的目標檢測精度。
(2)CBS模塊
CBS模塊是由卷積層、數(shù)據歸一化層和激活函數(shù)層組成的復合卷積模塊,是很多模塊的重要組成部分。數(shù)據歸一化層主要是對數(shù)據進行歸一化,促進快速收斂,加速網絡。激活函數(shù)層使用SiLU作為新的激活函數(shù),本質上是對激活函數(shù)sigmoid的加權線性組合。SiLU函數(shù)是連續(xù)且平滑的。在更深的模型上,它可以增加模型的非線性并提高檢測精度,它比原始激活函數(shù)LeakyRelu表現(xiàn)更好。它們的表達式如下:
(3)SPPF模塊
如圖2-4所示,SPPF和SPP的模塊都是由三個最大池化層和連接層構成。首先使用CBS模塊將特征圖中的通道數(shù)減半,然后通過最大池化層對其進行下采樣,最大池化層使用串聯(lián)的三個大小為5×5的最大池化而不是并行的三個最大池化在SPP模塊中進一步融合圖像特征,之后將三個最大池化層的輸出結果與圖片的初始特征圖進行疊加,將其局部特征與全局特征進行特征融合,以較小的代價將通道數(shù)變?yōu)樵瓉淼?倍,不僅提高了感受野,還可以解決多目標尺度的問題,即在一定程度上縮放和融合目標圖像特征圖。此外,SPPF模塊還可以將任意維度的特征圖轉化為固定維度的特征向量,以此提高感受野。
2.3.3 頭部網絡
YOLOv5s網絡模型的頭部網絡主要借鑒了PAN網絡的思想,引入了特征金字塔網絡(Feature Pyramid Network,F(xiàn)PN)與路徑聚合網絡(Path Aggregation Network,PAN)的結構。FPN是一種特征金字塔網絡結構,它形式上是自上而下且向上采樣,融合了多種尺度的特征圖,因為網絡的上層比較深,包含的語義信息比較多,這使得底層特征圖的語義信息更加豐富。PAN是一種特征金字塔網絡結構,它形式上是自下而上向下采樣,也融合了多個尺度的特征圖,因為下層的卷積層較少,能夠獲得更多的特征定位信息。FPN和PAN結構通過融合對方處理過的特征圖而相互補充,使輸出的特征圖具有很強的語義特征和很強的定位特征,同時輸出多尺度預測圖。
2.3.4 檢測層
YOLOv5s網絡模型的檢測層采用CIoU_Loss的回歸損失函數(shù)和非極大值抑制(Non-Maximum Suppression,NMS)進行預測以提高模型檢測性能?;貧w損失函數(shù)是一種深度學習中非常重要的評估模型訓練效果的工具,它可以幫助我們將模型快速達到收斂狀態(tài),減少預測誤差。損失函數(shù)越小,說明建模的學習效果越好,可以更有效地提高目標檢測算法網絡建模的準確度和可信度。近年來,回歸損失函數(shù)被研究者重視,并做了很多研究相繼提出了如IoU_Loss、DIoU_Loss、CIoU_Loss、SIoU_Loss等損失函數(shù)。其中IoU_Loss損失函數(shù)的缺點是對圖像尺度不夠靈敏,且只能得到真實邊界框和預測邊界框之間的交疊區(qū)域面積;DIoU_Loss損失函數(shù)把邊界框的中心距離信息引入損失函數(shù)中;CIoU_Loss損失函數(shù)則是在DIOU的研究上,引入了邊界框的尺度。SIoU_Loss損失函數(shù)在CIoU損失函數(shù)的研究上,引入了真實邊界框和預測邊界框之間的向量角度,重新定義了懲罰指標,提高了網絡訓練速度和網絡推理準確度。在選擇最優(yōu)預測邊界框時,采用NMS方法可以去除多余的預測邊界框,當預測邊界框和實際邊界框的重合度高于設定的闕值時,可以認為它是同一類物體,并將最高值所在的預測邊界框最終選擇框。
2.4?基于FPGA的動態(tài)重構技術
基于FPGA的動態(tài)重構技術是一種能夠根據實時應用需求重新配置硬件邏輯的技術。通過使用這種技術設計的動態(tài)重構硬件系統(tǒng)可以在運行時改變其硬件電路結構和性能,以適應不同的應用場景和任務,從而提高應用程序的效率和可靠性。又因為FPGA具備優(yōu)異的可重編程能力來實現(xiàn)硬件邏輯的重構,故通常使用FPGA作為硬件部署平臺。動態(tài)重構技術已經應用在很多技術領域,例如網絡處理、高性能計算、數(shù)字信號處理、信息加密、圖像和視頻處理等。由于動態(tài)重構技術可以根據實時應用需求重新配置硬件邏輯,因此它可以提高系統(tǒng)的效率和靈活性,同時減少開發(fā)和維護成本,因而得到研究者們廣泛的關注。
基于FPGA的動態(tài)重構系統(tǒng)在硬件邏輯層面可分為完全重構和部分重構。完全動態(tài)重構通過FPGA重新配置其所有硬件資源以改變其功能。部分動態(tài)重構(Dynamic Partial Reconfiguration,DPR)將整個FPGA的邏輯區(qū)域分為靜態(tài)邏輯區(qū)域和動態(tài)邏輯區(qū)域,靜態(tài)邏輯區(qū)域就是在FPGA中電路結構固定不變的區(qū)域,動態(tài)邏輯區(qū)域即部分可重構分區(qū),它是FPGA中電路結構可以通過加載和卸載不同硬件配置文件而發(fā)生改變的區(qū)域。在實際硬件部署中,DPR允許通過加載動態(tài)配置文件來修改運行中的FPGA應用,當完整的硬件配置文件配置到FPGA后,通過板上系統(tǒng)加載配置文件的方式來修改FPGA的動態(tài)重構區(qū)域,而不會擾亂和破壞未動態(tài)重構配置的邏輯區(qū)域上正在運行中的工程應用。
部分動態(tài)重構示意圖
動態(tài)部分重構結構示意圖如圖2-5所示,圖中將FPGA區(qū)域分為兩個可重構區(qū)域A和B,每個可重構區(qū)域中分配了足夠的資源空間,通過空間復用的方式映射到A1,A2的可重構模塊,在系統(tǒng)運行的過程中可以動態(tài)的從比特流庫中配置所需要的可重構模塊比特流配置文件,通過這種動態(tài)組合硬件系統(tǒng)的方式構建不同的硬件架構,而不需要讓系統(tǒng)中斷,即可完成不同的硬件計算任務,還能有效的解決了FPGA硬件資源受限的問題。
2.5 ZYNQ軟硬協(xié)同開發(fā)
2.5.1 ZYNQ UltraScale+MPSoC平臺
ZYNQ UltraScale+MPSoC是一款由XILINX公司開發(fā)的高度集成的多處理器片上系統(tǒng)。它所承載的ZYNQ?MPSoC系列芯片采用基于FPGA和ARM處理器的異構架構,擁有可編程性強、低功耗、高性能等特點。該芯片的架構包括ARM Cortex-A53處理器、ARM Cortex-R5處理器和FPGA邏輯,這些模塊可以實現(xiàn)高性能計算、實時控制、硬件加速、接口協(xié)議轉換、數(shù)字信號處理等應用。其PS端的主控制處理器核心采用了ARM Cortex-A53和Cortex-R5架構,能夠運行Linux等操作系統(tǒng)和FreeRTOS等實時操作系統(tǒng)。其中Cortex-A53處理器適用于應用程序處理和控制,而Cortex-R5處理器則適用于實時任務和硬實時控制。兩個處理器能夠協(xié)同工作,提供卓越的性能和實時性。此外,芯片的FPGA邏輯非常靈活,支持多種不同的應用擴展接口。如多個高速串行接口、千兆以太網接口、USB接口和PCIe接口等,可以滿足各種高速通信和數(shù)據傳輸需求。以XILINX KV260 FPGA的邊緣嵌入式計算平臺為例,ZYNQ UltraScale+MPSoC系統(tǒng)架構框圖,如圖2-6所示。
2.5.2 高層次綜合設計
高層次綜合(High-level Synthesis,HLS)是一種自動將用高級語言描述的邏輯結構轉換為低抽象級別語言描述的電路模型的過程。HLS通常使用高級語言,如C、C++和SystemC,這些語言具有更高的抽象性和可操作性,常常沒有時鐘或時序的概念,同時HLS已經被融入到Vitis統(tǒng)一軟件平臺中,能夠通過在Vitis?HLS開發(fā)設計平臺上調用Vitis的視覺庫,加速硬件設計的流程。而低層設計語言如Verilog、VHDL和SystemVerilog則通常用于描述時鐘周期精確的寄存器傳輸級電路模型,這是目前用于ASIC或FPGA設計的最常見的電路建模和描述方法,但是其開發(fā)效率低,設計的復雜度高。
在近幾十年中,特別是在FPGA領域,HLS已經引起了很多關注并得到了快速發(fā)展。近年來,F(xiàn)PGA學術大會上,HLS已作為學界和產業(yè)界最熱點的課題,受到了關注和深入研究。其原因主要有以下幾點:
(1)?采用更高級別的抽象技術來構建集成電路是當今芯片設計發(fā)展的必要步驟。RTL邏輯抽象技術無法滿足當今芯片設計的要求,會給產品設計、測試和集成化提供巨大的挑戰(zhàn)。相比之下,采用更高級的語言,如C和C++,能夠將編碼密度縮小7至10倍,進而大大簡化工程設計,大大提高設計效率。
(2) 對于FPGA,現(xiàn)代FPGA具有大量成熟的固定功能和資源量的IP軟核,可以被Vitis HLS開發(fā)設計工具充分利用。這將簡化綜合算法,提高綜合電路的性能,同時增加IP重用的效率。
(3)?HLS可以為軟件系統(tǒng)和計算工程人員提供一種全新的方式來設計芯片和FPGA,它可以將硬件實現(xiàn)細節(jié)包裝起來,使得軟件系統(tǒng)和工程人員可以更加注重于上層計算的實施,從而更好地發(fā)揮芯片和FPGA的潛力。這意味著,不需要具備底層硬件設計知識的工程師也可以參與到FPGA的設計中來。
2.5.3 深度學習處理單元
深度學習處理單元(Deep Learning Processor Unit,DPU)是一種專門為深度學習任務設計的運算IP核,能夠高效地執(zhí)行深度學習算法[95]。DPU的硬件架構如圖2-7所示,DPU從片外存儲器中取指令來控制計算引擎的運算,這些指令由Vitis AI開發(fā)工具中的AI編譯器生成[96]。AI編譯器將模型映射到高效的指令集,并執(zhí)行復雜的優(yōu)化,如層融合、指令調度,并盡可能地重用片上系統(tǒng)級芯片上的存儲器資源;存儲器用于緩沖輸入、中間和輸出的數(shù)據,以實現(xiàn)高吞吐量和效率;計算引擎采用的是深度流水線設計;處理單元(PE)充分利用了Xilinx器件中的精細顆粒度構建塊,如乘法器、加法器和累加器。
DPU IP核可以配置與卷積單元的并行性相關的各種卷積架構。DPU IP 的架構包括B512、B800、B1024、B1152、B1600、B2304、B3136和B4096。B是DPU大小的符號,后面數(shù)字的大小代表計算并行度,等于每個周期的峰值運算數(shù)。同時,每個周期的峰值操作數(shù)等于 DPU 卷積架構中并行度的三個維度的乘積:像素并行度、輸入通道并行度和輸出通道并行度。并行度越高,消耗的FPGA資源就越多。同時,如果資源充足,F(xiàn)PGA最多可以支持部署三個核心DPU。
DPU架構