• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于FPGA的目標檢測系統(tǒng)與加速器設計

      2023-06-25 07:42:18吳昱昊
      現(xiàn)代信息科技 2023年7期
      關鍵詞:目標檢測深度學習

      摘? 要:目標檢測作為計算機視覺技術的基礎任務,在智慧醫(yī)療、智能交通等生活場景中應用廣泛。深度學習具有高類別檢測精度、高精度定位的優(yōu)勢,是當前目標檢測的研究重點。由于卷積神經網絡計算復雜度高、內存要求高,使用CPU實現(xiàn)的設計方案已經難以滿足實際應用的需求?,F(xiàn)場可編程邏輯門陣列(FPGA)具有可重構、高能效、低延遲的特點。研究圍繞FPAG硬件設計,選取了YOLOv2算法,并針對該算法設計了對應的硬件加速器,實現(xiàn)了基于FPGA的目標檢測。

      關鍵詞:YOLO;FPGA;目標檢測;深度學習

      中圖分類號:TP391.4? 文獻標識碼:A? ? 文章編號:2096-4706(2023)07-0101-04

      Abstract: As a basic task of computer vision technology, object detection is widely used in smart medicine, intelligent transportation and other life scenes. Deep Learning nowadays becomes the research focus of object detection for its advantages of high precision in class detection and positioning. Due to the great computational complexity and memory requirements, the design scheme implemented by using the CPU has been difficult to meet the needs of practical application. FPGA has the characteristics of reconfigurability, high energy efficiency and low latency. The research focuses on the FPGA hardware design, selects the YOLOv2 algorithm, designs the corresponding hardware accelerator in terms of the algorithm, and realizes the object detection based on FPGA.

      Keywords: YOLO; FPGA; object detection; Deep Learning

      0? 引? 言

      目標檢測技術是計算級視覺任務中的關鍵技術,不僅需要對目標物體進行分類,同時需要準確定位目標物體,一般用紅框標注[1]。

      機器學習技術在目標檢測中的廣泛應用大大提高了計算精度。深度學習方法相比傳統(tǒng)算法優(yōu)勢明顯,為目標檢測算法的研究開辟了新的路徑。目前檢測技術主要分為兩種。One-stage的方法對于輸入的網絡能夠直接回歸得出目標的位置和類別,但可能會損失部分精度。Two-stage的方法是首先在圖像上畫出目標框即目標物體的候選區(qū)域,再計算得到分類與定位[2]。本研究使用的YOLOv2[3]算法是一種One-stage的方法。

      隨著深度學習技術研究的浪潮,復雜、抽象的問題和大量的數(shù)據(jù)使得深度學習的網絡結構變得更加復雜,帶來了巨大的計算量和極高的內存需求[4,5]。在這種情況下,如何在保持低功耗的同時使算法實際應用中具有高速度,逐漸成為研究和討論的熱點。目前,GPU、ASIC和FPGA是深度學習算法加速設計的主流研究方向[3]。GPU在深度學習算法中的加速優(yōu)勢已得到廣泛驗證,但功耗非常高。ASIC芯片功耗低,但在實際應用中機器學習任務有很多變化,ASIC相應的研發(fā)成本非常高。FPGA的功耗比GPU低幾十倍甚至數(shù)百倍。在FPGA上部署深度學習算法可以在毫秒級更新邏輯,其靈活性更適合迭代深度學習算法,以節(jié)省開發(fā)成本。FPGA是深度學習的理想硬件加速選擇[6,7]。

      1? YOLO算法

      傳統(tǒng)的目標檢測算法[1]主要包括以下三步:區(qū)域選擇、特征提取、分類。區(qū)域的確定一般使用滑動窗口的方法,因此這一步驟產生大量冗余窗口,對算法的效率有一定影響。特征將會從所產生的候選區(qū)域中被提取,在深度學習算法被廣泛應用之前,這一步驟往往由手工進行設計。常用的深度學習算法R-CNN主要使用了卷積神經網絡來進行特征提取,并且能夠利用圖片的顏色、紋理、形狀等減少候選區(qū)域。使用這些能夠被計算機識別的特征,選擇合適的分類器,將得到物體的分類結果。

      YOLO[3](you only look once)算法和R-CNN的主要不同點在于這是一種基于回歸的方法,只使用一個卷積神經網絡就可以得到類別和位置,即在獲得候選區(qū)域中的Bounding Box時也同時給出了包含對象的類別。目前,YOLO算法共發(fā)布了7個版本。YOLOv1是整個系列的核心和基石,后續(xù)版本是基于此版本的改進。和YOLOv1相比,YOLOv2使用了全卷積網絡,并且使用了Anchorbox機制。它的卷積層增加了Batch Normalization層,對每層輸入的數(shù)據(jù)做批歸一化處理。卷積層從線性卷積與激活函數(shù)改進為后來常用的線性卷積、BN層和激活函數(shù)。這些改進使得該算法的檢測速度、精度、召回率有了明顯的提高。作者相較第一版本,設計了新的backbone網絡,包含19個卷積層,被命名為DarkNet19。YOLOv3和YOLOv2的基本思想是一樣的,其檢測精度雖然得到了提高,但損失了一定的計算速度。YOLOv4、YOLOv5網絡分支更多,在FPGA上實現(xiàn)有一定難度??紤]實際場景應用,YOLOv2在實時目標檢測方面更有優(yōu)勢,并且已在智慧交通、智能家居等領域取得了良好的應用效果,本研究選擇了YOLOv2算法。

      2? 針對YOLOv2的加速器設計

      2.1? YOLOv2網絡加速框架設計

      根據(jù)YOLOv2[3]網絡特點,設計了如圖1所示的加速器框架。該目標檢測系統(tǒng)包含從圖像輸入到結果輸出的完整流程,由PC和FPGA共同組成,其中FPGA主要負責對神經網絡計算部分的加速。

      如圖所示,圖片的輸入、預處理及輸出部分對于計算的要求較低,這三部分均在PC端實現(xiàn)。Get_region_box 主要用于保存候選框Bounding Box的概率信息和坐標信息,YOLOv2s使用了NMS非極大值抑制算法對這些Bounding Box進行篩選后現(xiàn)實。結合整體計算量考慮,這兩部也在PC端實現(xiàn)。

      YOLO網絡結構中卷積層和池化層交替設置,其中卷積計算中主要包含3×3標準卷積和1×1point-wise卷積,占網絡總體計算量的90%以上。因此卷積層的計算是FPGA實現(xiàn)加速的重點環(huán)節(jié)。YOLOv2在池化層使用的是最大值池化方式,包括上采樣、下采樣、concat操作在內的這些計算是一些輕量級的計算,因此池化層考慮在FPGA上僅做簡單實現(xiàn)。加速器的設計核心是卷積計算加速。

      2.2? 加速器硬件結構

      參考文獻[8],F(xiàn)PGA的硬件結構設計如圖2所示。這種結構的設計主要是應對卷積神經網絡計算吞吐和內存帶寬不匹配的問題。在數(shù)據(jù)傳輸部分,針對YOLOv2模型和FPGA的有限資源,權重及參數(shù)可以存儲在片外存儲器上[9,10]。對于輸入和輸出分別設置了雙緩沖區(qū)(Ping Pong FIFO),使用“乒一乓”的數(shù)據(jù)傳輸機制提高數(shù)據(jù)的傳輸效率。和一個緩沖區(qū)不同,一個緩沖區(qū)通常是是讀取當前部分后才可以繼續(xù)傳輸下一部分,以避免讀取的錯誤?!捌挂慌摇眰鬏攲τ谳斎胼敵龅姆謪^(qū)能夠實現(xiàn)一邊傳輸一邊讀取計算,因此也可以用計算時間覆蓋數(shù)據(jù)傳輸時間,減少整體的程序執(zhí)行時間。在計算部分使用了多個計算引擎(computeengines)并行執(zhí)行,不同的引擎可以用于計算不同的卷積。單個引擎的內部是一個并行乘法單元和一個加法樹。加法樹的最下層為乘法單元,其余為多層加法器,分別用于并行計算卷積操作中的乘法運算求和運算。由此加速了網絡程序的計算速度,一定程度上緩解了內存帶寬和計算吞吐不匹配的問題。

      2.3? 卷積計算

      YOLOv2以卷積神經網絡為基礎,在卷積階段涉及了大量的乘法和加法的計算,該部分計算復雜度高,占了總計算量的90%以上。針對卷積計算,因為片上的計算資源(DSP等)和存儲資源(BRAM等)的有限性,主要考慮采用循環(huán)分塊、循環(huán)展開技術實現(xiàn)并行計算,在循環(huán)的設計中,重點考慮了數(shù)據(jù)的復用,以提高加速器的性能。

      針對1×1卷積,實際上是一個矩陣乘法,使用通用矩陣乘(GEMM)算法優(yōu)化加速,按照分塊矩陣乘法進行設計。一個正常的矩陣乘法的時間復雜度是O(n3),最內重循環(huán)每次需要訪問內存4次。而使用GEMM算法,雖然不能夠減少計算量,但是能夠大大減少訪存次數(shù),從而達到加速的效果。

      直接使用暴力矩陣乘法及一次優(yōu)化的偽代碼如下。矩陣C為矩陣A、矩陣B的乘積,M、N、K分別是A、B矩陣的維度及其對應的三層循環(huán)執(zhí)行次數(shù)。直接使用暴力乘法,內存訪問操作總數(shù)為4 MNK,一次優(yōu)化后內存訪問操作總數(shù)為2 MNK+2 MN。從偽代碼中,可以看出,主要原因是將C[m][n]放到了循環(huán)外面,計算了全部累和之后再對C賦值,從而減少了對C的訪存。

      暴力乘法:

      for (int m = 0; m < M; m++) {

      for (int n = 0; n < N; n++) {

      for (int k = 0; k < K; k++) {

      C[m][n]+= A[m][k] * B[k][n];

      }}}

      一次優(yōu)化:

      for (int m = 0; m < M; m++) {

      for (int n = 0; n < N; n++) {

      float temp = C[m][n];

      for (int k = 0; k < K; k++) {

      temp += A[m][k] * B[k][n];

      }

      C[m][n] = temp;

      }}

      繼續(xù)將輸出的C矩陣在N維度拆分,如拆成1×4的小塊,即使用A矩陣的一行和B矩陣的4列相乘,二次優(yōu)化偽代碼如下。因為在循環(huán)最內側計算使用的矩陣A的元素是一致的,所以可以將A[m][k]讀取到寄存器中,實現(xiàn)4次數(shù)據(jù)復用。同理可以繼續(xù)拆解輸出的M維度,繼續(xù)減少輸入數(shù)據(jù)的訪存。

      二次優(yōu)化:

      for (int m = 0; m < M; m++) {

      for (int n = 0; n < N; n += 4) {

      float temp_m0n0 = C[m][n + 0];

      float temp_m0n1 = C[m][n + 1];

      float temp_m0n2 = C[m][n + 2];

      float temp_m0n3 = C[m][n + 3];

      for (int k = 0; k < K; k++) {

      float temp = A[m][k];

      temp_m0n0 += temp * B[k][n + 0];

      temp_m0n1 += temp * B[k][n + 1];

      temp_m0n2 += temp * B[k][n + 2];

      temp_m0n3 += temp * B[k][n + 3];

      }

      C[m][n + 0] = temp_m0n0;

      C[m][n + 1] = temp_m0n1;

      C[m][n + 2] = temp_m0n2;

      C[m][n + 3] = temp_m0n3;

      }}

      針對3×3標準卷積,主要考慮了輸入輸出通道的并行。輸入通道并行計算特征圖和權重,輸出通道并行計算輸出的的結果或者部分和假設并行度為tn,tm,3×3標準卷積層及展開后的偽代碼如下:

      卷積層偽代碼:

      for(r=0;r<R;r++) {

      for(c=0;c<C;c++) {

      for(to=0;to<M;to++) {

      for(ti=0;ti<N;ti++) {

      for(i=0;i<K;i++) {

      for(j=0;i<K;j++){

      outpu_fm[to][r][c]+=

      weights[to][ti][i][j]*

      input_fm[ti][S*r+i][S*c+j];

      } } } } } }

      循環(huán)展開后偽代碼:

      for(r=0;r<R;r++=tr) {

      for(c=0;c<C;c++=tc) {

      for(to=0;to<M;to++=tm) {

      for(ti=0;ti<N;ti++=tn) {

      for(tile_r=r;tile_r<min(r+tr,R);tile_r++) {

      for(tile_c=c;tile_c<min(c+tc,C);tile_c++){

      for(tile_to=to;tile_to<min(to+tm,M);tile_to++){

      for(tile_ti=ti;tile_ti<min(ti+tn,N);tile_ti++){

      for(i=0;i<K;i++) {

      for(j=0;i<K;j++){

      outpu_fm[to][r][c]+=

      weights[to][ti][i][j]*

      input_fm[ti][S*r+i][S*cl+j];

      } } } } } } } } } }

      2.4? 池化計算

      YOLOv2的池化層使用的池化方法是最大池化(Max-Pooling),主要目的是通過僅保留主要原特征來減少神經網絡的訓練參數(shù)。因此在精度損失可接受的范圍內能夠減少網絡的訓練時間。設置步長2,大小2×2的窗口滑動,選取窗口中的最大值。最大池化層的計算與卷積層計算的循環(huán)結構是類似的,但是卷積層中的乘法及加法運算在池化層中是比較運算,因此池化層計算量相較于卷積層大大減少。在加速器設計中,對池化層僅做簡單設計。該部分逐行從上層的特征圖中讀取數(shù)據(jù),等到緩存區(qū)填滿數(shù)據(jù)后,做并行化池化操作。

      3? 實驗及分析

      3.1? 模型訓練

      研究選擇YOLOv2網絡對加速器進行性能測試。在測試前,首先基于YOLOv2網絡訓練得到了的口罩檢測模型,主要功能為判別人臉是否佩戴口罩。該模型使用了YOLOv2預訓練的權重文件,結合補充的口罩數(shù)據(jù)集(2 000張),在GPU上進行二次訓練得到。補充數(shù)據(jù)集使用了labeling標注的VOC格式數(shù)據(jù)集用于訓練,標注范圍為整個頭部及少量肩膀上部分。該模型對于人臉的檢測準確率為95%,對于佩戴口罩的人臉檢測準確率為81%。

      3.2? 實施過程

      加速器測試平臺使用xilinx的PYNQ-Z2開發(fā)版,以ZYNQ FPGA為核心。該系列集成了FPGA和ARM,頂層封裝使用Python,支持Python進行SoC編程。因此本研究無需設計可編程邏輯電路,采用Jupyter Notebook直接編輯工程代碼。CPU、GPU實驗平臺參數(shù)如表1所示。主要實現(xiàn)方法如下:首先使用xilinx vivado HLS(High Level Synthesis)將c代碼轉換為Verilog代碼,生成IP核;其次在Vivado中導入IP核,生成bit流文件;使用Python語言操作輸入輸出、bit流文件的燒寫等。

      該目標檢測系統(tǒng)的實現(xiàn)主要分為,圖片預處理,網絡檢測(特征提取)以及圖片預測(結果輸出)。其中,圖片預處理及圖片預測部分在PC端實現(xiàn),即由CPU完成。針對網絡檢測的加速部分,實驗分別在FPGA及PC(CPU)上進了比較測試。

      圖片預處理主要包括三個步驟:統(tǒng)一圖片大小、歸一化RGB、壓縮數(shù)據(jù)精度。由Python編寫。對于輸入的大小不一的圖片,統(tǒng)一大小為416 px×416 px。歸一化RGB值的主要目的是用兩個字節(jié)表示一個像素值,消除像素受光照或陰影的影響。壓縮數(shù)據(jù)精度主要將32位浮點數(shù)轉換為16位定點數(shù)表達,損失了部分可以接受的精度,減少fpga片上存儲(BRAM)壓力。FPGA加速測試的網絡檢測部分由C語言編寫,圖片輸入大小設置為416×416,由于YOLOV2是對整張圖片進行處理,因此對圖片進行分割,網格大小設置為13×13,因此輸出cell數(shù)為13×13。由于FPGA片上存儲資源有限,因此實驗需要對輸入數(shù)據(jù)進行分塊,每次加載一塊數(shù)據(jù)到片上緩存。依次讀取tn×tm×batch像素對應的權重文件到片上緩存,特征計算,完成一張輸出特征圖的計算再進行輸出,直至所有特征圖全部輸出。YOLO網絡的計算結果即目標檢測結果在Jupyter Notebook輸出。

      測試結果表面,在FPGA上,單張圖片的前向推理時間為421.3 ms,相比PC(CPU0端1.44秒有明顯的加速效果,可以滿足目標檢測的實時需求。

      4? 結? 論

      典型的深度學習目標檢測算法計算量巨大,部署到資源有限的嵌入式系統(tǒng)中存在一定難度。YOLOv2算法在各個應用領域都有著良好的應用前景。研究首先介紹了YOLOv2算法,并針對該算法,設計了基于FPGA的加速器,并將模型部署到FPGA,得出了實驗推理時間,證明了FPGA加速的有效性。

      參考文獻:

      [1] FANG L,HANGJIANG H E,ZHOU G. Research overview of object detection methods [J].Computer Engineering and Applications,2018,54(13):11-18.

      [2] 趙興博,陶青川.適用于FPGA的輕量實時視頻人臉檢測 [J].現(xiàn)代計算機,2022,28(8):1-8.

      [3] REDMON J,DIVVALA S,GIRSHICK R,et al. You Only Look Once:Unified,Real-Time Object Detection [C]//IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas:IEEE,2016:779-778.

      [4] 周飛燕,金林鵬,董軍.卷積神經網絡研究綜述 [J].計算機學報,2017,40(6):1229-1251.

      [5] 張珂,馮曉晗,郭玉榮,等.圖像分類的深度卷積神經網絡模型綜述 [J].中國圖象圖形學報,2021,26(10):2305-2325.

      [6] 吳艷霞,梁楷,劉穎,等.深度學習FPGA加速器的進展與趨勢 [J].計算機學報,2019,42(11):2461-2480.

      [7] 劉騰達,朱君文,張一聞.FPGA加速深度學習綜述 [J].計算機科學與探索,2021,15(11):2093-2104.

      [8] ZHANG C,LI P,SUN G,et al. Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks [C]//the 2015 ACM/SIGDA International Symposium. Monterey:ACM,2015.

      [9] 裴頌文,汪顯榮.YOLO檢測網絡的FPGA加速計算模型的研究 [J].小型微型計算機系統(tǒng),2022,43(8):1681-1686.

      [10] 胡晶晶.基于FPGA的Faster-RCNN改進算法實現(xiàn)目標檢測 [J].現(xiàn)代計算機,2021,27(30):82-87.

      作者簡介:吳昱昊(1996—),女,漢族,浙江上虞人,助教,碩士研究生,研究方向:深度學習、社會網絡分析。

      猜你喜歡
      目標檢測深度學習
      視頻中目標檢測算法研究
      軟件(2016年4期)2017-01-20 09:38:03
      行為識別中的人體運動目標檢測方法
      MOOC與翻轉課堂融合的深度學習場域建構
      大數(shù)據(jù)技術在反恐怖主義中的應用展望
      深度學習算法應用于巖石圖像處理的可行性研究
      軟件導刊(2016年9期)2016-11-07 22:20:49
      基于深度卷積網絡的人臉年齡分析算法與實現(xiàn)
      軟件工程(2016年8期)2016-10-25 15:47:34
      移動機器人圖像目標識別
      基于P3電位的目標檢測研究
      科技視界(2016年4期)2016-02-22 13:09:19
      布尔津县| 永吉县| 海宁市| 靖安县| 铅山县| 乌兰察布市| 阿瓦提县| 闽侯县| 岳阳县| 金寨县| 尼木县| 同德县| 桑植县| 盖州市| 文昌市| 抚松县| 万安县| 连江县| 昌都县| 盐源县| 枝江市| 洛宁县| 清丰县| 开封县| 宣城市| 杂多县| 乐业县| 广饶县| 射阳县| 新竹市| 丰顺县| 瑞安市| 伊吾县| 阳信县| 舟山市| 手机| 佛坪县| 瑞金市| 清涧县| 华阴市| 哈尔滨市|