設(shè)計目的與應(yīng)用
隨著人工智能的發(fā)展,神經(jīng)網(wǎng)絡(luò)正被逐步應(yīng)用于智能安防、自動駕駛、醫(yī)療等各行各業(yè)。目標(biāo)識別作為人工智能的一項重要應(yīng)用也擁有著巨大的前景,隨著深度學(xué)習(xí)的普及和框架的成熟,卷積神經(jīng)網(wǎng)絡(luò)模型的識別精度越來越高。有名的LeNet-5手寫數(shù)字識別網(wǎng)絡(luò),精度達(dá)到99%,AlexNet模型和VGG-16模型的提出突破了傳統(tǒng)圖像識別算法,GooLeNet和ResNet推動了卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用。
但是神經(jīng)網(wǎng)絡(luò)的發(fā)展也給我們帶來了更多挑戰(zhàn),權(quán)重參數(shù)越來越多,計算量越來越大導(dǎo)致了復(fù)雜的模型很難移植到移動端或嵌入式設(shè)備中,且嵌入式環(huán)境對功耗、實時性、存儲都有著嚴(yán)格的約束。因此如何將卷積神經(jīng)網(wǎng)絡(luò)部署到嵌入式設(shè)備中是一件非常有意義的事情。目前神經(jīng)網(wǎng)絡(luò)在傳統(tǒng)嵌入式設(shè)備上絕大部分是基于ARM平臺,神經(jīng)網(wǎng)絡(luò)在ARM上部署時存在的巨大問題是算力的不足。GPU主要應(yīng)用于神經(jīng)網(wǎng)絡(luò)訓(xùn)練階段,對環(huán)境和庫的依賴性較大,國內(nèi)技術(shù)積累較弱,難以實現(xiàn)技術(shù)自主可控。ASIC 是為特定需求而專門定制優(yōu)化開發(fā)的架構(gòu),靈活性較差,缺乏統(tǒng)一的軟硬件開發(fā)環(huán)境,開發(fā)周期長且造價極高。所以,基于FPGA的硬件加速平臺是時候發(fā)揮它的優(yōu)勢了。FPGA由于獨(dú)特的架構(gòu),被廣泛的應(yīng)用與實時信號處理、圖像處理領(lǐng)域,其并行性也為卷積神經(jīng)網(wǎng)絡(luò)提供了巨大算力。
傳統(tǒng)的RTL開發(fā)FPGA流程相比緩慢,不如軟件的開發(fā)效率高,所以HLS運(yùn)營而生,使用高層次語言來進(jìn)行轉(zhuǎn)換為底層的硬件代碼,極大的加快開發(fā)進(jìn)程。因此項目選用HLS工具來實現(xiàn)算法中的加速IP核,將SSD目標(biāo)檢測網(wǎng)絡(luò)移植到FPGA硬件平臺上, 對于硬件加速過程中的算法并行性,在本設(shè)計中主要采用兩個方式:對層內(nèi)的運(yùn)算并行化,將多個通道的數(shù)據(jù)進(jìn)行分塊,每一塊內(nèi)的通道同時進(jìn)行運(yùn)算,最后將結(jié)果累加在一起。對于模塊的運(yùn)算采用HLS并行優(yōu)化,對數(shù)組核循環(huán)添加優(yōu)化指令進(jìn)行優(yōu)化。整個系統(tǒng)采用PYNQ的軟件框架來實現(xiàn),為SSD目標(biāo)檢測算法提供了硬件加速方案,充分發(fā)揮了FPGA的并行性。
SSD目標(biāo)檢測算法原理
SSD于2016年提出,是經(jīng)典的單階段目標(biāo)檢測模型之一。它的精度可以媲美FasterRcnn雙階段目標(biāo)檢測方法,速度卻達(dá)到了59FPS(512x512,TitanV),單階段目標(biāo)檢測方法的目標(biāo)檢測和分類是同時完成的,其主要思路是利用CNN提取特征后,均勻地在圖片的不同位置進(jìn)行密集抽樣,抽樣時可以采用不同尺度和長寬比,物體分類與預(yù)測框的回歸同時進(jìn)行,整個過程只需要一步,所以其優(yōu)勢是速度快。
SSD采用的主干網(wǎng)絡(luò)是VGG網(wǎng)絡(luò),VGG是由Simonyan 和Zisserman在文獻(xiàn)《Very Deep Convolutional Networks for Large Scale Image Recognition》中提出卷積神經(jīng)網(wǎng)絡(luò)模型,其名稱來源于作者所在的牛津大學(xué)視覺幾何組(Visual Geometry Group)的縮寫。該模型參加2014年的 ImageNet圖像分類與定位挑戰(zhàn)賽,取得了優(yōu)異成績:在分類任務(wù)上排名第二,在定位任務(wù)上排名第一。
圖1.VGG16網(wǎng)絡(luò)結(jié)構(gòu)
這里的VGG網(wǎng)絡(luò)相比普通的VGG網(wǎng)絡(luò)有一定的修改,主要修改的地方就是:
1、將VGG16的FC6和FC7層轉(zhuǎn)化為卷積層。
2、去掉所有的Dropout層和FC8層;
3、新增了Conv6、Conv7、Conv8、Conv9。
圖2.SSD主干網(wǎng)絡(luò)結(jié)構(gòu)
上圖展示了SSD的主干網(wǎng)絡(luò)結(jié)構(gòu),整個網(wǎng)絡(luò)為全卷積網(wǎng)絡(luò)結(jié)構(gòu),SSD將VGG16的兩個全連接層轉(zhuǎn)換成了普通的卷積層,池化層POOL5由原來的stride=2,kernel大小2x2變成stride=1,kernel大小3x3,為了不改變特征圖大小同時獲得更大的感受野,Conv6改為空洞卷積,diliation=6,輸入的圖片經(jīng)過了改進(jìn)的VGG網(wǎng)絡(luò)(Conv1->fc7)和幾個另加的卷積層(Conv6->Conv9)進(jìn)行特征提取。
從圖2我們可以看出,SSD將conv4_3、conv7、conv6_2、conv7_2、conv8_2、conv9_2都連接到了最后的檢測分類層做回歸,6個特征圖分別預(yù)測不同大小和長寬比的邊界框,具體細(xì)節(jié)如圖3。
圖3.SSD特征提取網(wǎng)絡(luò)
SSD為每個檢測層都預(yù)定義了不同大小的先驗框(prior boxes),Conv4_3、Conv8_2和Conv9_2分別有4個先驗框,而Conv7、conv7_2和Conv8_2分別有6種先驗框,即對應(yīng)于特征圖上的每個像素,都會生成4或6個prior box.
在淺層的神經(jīng)網(wǎng)絡(luò)里,只能看到圖片的細(xì)節(jié)和紋理信息,就如管中窺豹。隨著網(wǎng)絡(luò)層數(shù)的加深,相當(dāng)于把圖片往后移動一段距離。這樣才能夠感知到圖片的整體信息。低層卷積可以捕捉到更多的細(xì)節(jié)信息,高層卷積可以捕捉到更多的抽象信息。低層特性更關(guān)心“在哪里”,但分類準(zhǔn)確度不高,而高層特性更關(guān)心“是什么”,但丟失了物體的位置信息。SSD正是利用不同尺度檢測圖片中不同大小和類別的目標(biāo)物體,獲得了很好的效果。
作品展示
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605427 -
SSD
+關(guān)注
關(guān)注
21文章
2887瀏覽量
117729 -
人工智能
+關(guān)注
關(guān)注
1796文章
47643瀏覽量
239861 -
卷積神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
4文章
367瀏覽量
11896
發(fā)布評論請先 登錄
相關(guān)推薦
評論