999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析基于FPGA的Mish函數(shù)實(shí)現(xiàn)

2021-02-03 08:40:52肖祥位蔡敬菊徐智勇
科學(xué)與信息化 2021年3期
關(guān)鍵詞:資源

肖祥位 蔡敬菊 徐智勇

1. 中國科學(xué)院光電技術(shù)研究所國家光束控制重點(diǎn)實(shí)驗(yàn)室 四川 成都 610209;2. 中國科學(xué)院光電技術(shù)研究所 四川 成都 610209;3. 中國科學(xué)院大學(xué) 北京 100049

引言

隨著計(jì)算機(jī)處理能力的提高,神經(jīng)網(wǎng)絡(luò)再次成為人工智能領(lǐng)域的研究熱點(diǎn)。目前主流的方式仍然是基于CPU/GPU對算法進(jìn)行實(shí)現(xiàn),但由于神經(jīng)網(wǎng)絡(luò)算法具有龐大的計(jì)算量,使得在傳統(tǒng)平臺上實(shí)現(xiàn)存在實(shí)時(shí)性不強(qiáng)、功耗過高、體積較大等缺陷,極大地限制了神經(jīng)網(wǎng)絡(luò)算法的落地應(yīng)用。因此目前該方向的理論研究和實(shí)際應(yīng)用方面存在著較大的脫節(jié)。現(xiàn)場可編程門陣列(FPGA)可以通過硬件描述語言對電路進(jìn)行描述,可以構(gòu)建大型電路實(shí)現(xiàn)并行計(jì)算。使用FPGA實(shí)現(xiàn)AI算法,極大地加快了計(jì)算速度,提高實(shí)時(shí)性,降低系統(tǒng)功耗。為AI算法落地提供強(qiáng)有力的支撐。

Mish函數(shù)是YOLOv4及其衍生版本里面用得較多的一個(gè)激活函數(shù),是整個(gè)網(wǎng)絡(luò)中實(shí)現(xiàn)非線性運(yùn)算的關(guān)鍵。Mish函數(shù)的使用使得整個(gè)網(wǎng)絡(luò)檢測效果得到了很大程度的提升,它的非單調(diào)平滑性相比于其他激活函數(shù)有著更好的表現(xiàn)。想使用FPGA對YOLOv4及其衍生網(wǎng)絡(luò)加速則不可避免地要在FPGA上實(shí)現(xiàn)Mish函數(shù)。本文首先對Mish函數(shù)進(jìn)行介紹,提出幾種不同的實(shí)現(xiàn)方案,通過對不同方案的對比分析,最終確定以多折線擬合與查找表組合的方式進(jìn)行實(shí)現(xiàn)。并通過對硬件的實(shí)現(xiàn)分析,確定其誤差在較小的范圍,為使用FPGA加速YOLOv4及其衍生網(wǎng)絡(luò)奠定基礎(chǔ)[1]。

1 Mish函數(shù)簡介

卷積神經(jīng)網(wǎng)絡(luò)中激活函數(shù)是對線性卷積輸出的結(jié)果進(jìn)行非線性計(jì)算 以此來模擬神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元模型。Mish函數(shù)則是對卷積層的輸出進(jìn)行非線性激活,以此實(shí)現(xiàn)非線性計(jì)算。Mish函數(shù)的表達(dá)式如下:

Mish函數(shù)是一個(gè)非單調(diào)函數(shù),其函數(shù)圖像如圖1所示。可以看出Mish函數(shù)在輸入值小于-10的時(shí)候函數(shù)值非常接近于0,我們在誤差可以接受的范圍內(nèi)認(rèn)為該函數(shù)值等于0。在輸入值大于4.7的時(shí)候我們可以近似的認(rèn)為該輸出的值和輸入的值是相同的。我們可以看出輸入值從-10到4.7的過程中,輸出是先減小然后逐漸增大的過程。如果是在FPGA上直接實(shí)現(xiàn)Mish函數(shù),則會(huì)涉及指數(shù)運(yùn)算、反正切運(yùn)算以及對數(shù)運(yùn)算。我們都知道這些計(jì)算在硬件上實(shí)現(xiàn)是非常困難的而且還會(huì)消耗大量的計(jì)算資源。這在硬件上實(shí)現(xiàn)整個(gè)YOLOv4算法時(shí)完整的實(shí)現(xiàn)Mish函數(shù)是不可能的。因此我們需要考慮一種簡單、高效的方式來近似Mish的非線性功能。本文通過分析最終采用多折線擬合的形式在硬件上實(shí)現(xiàn)Mish函數(shù)[2]。

圖1 Mish函數(shù)圖像

2 方案選擇

FPGA實(shí)現(xiàn)復(fù)雜函數(shù)常用的方法有:泰勒展開法、查表法、多項(xiàng)式擬合法、分段擬合法、CORDIC算法等。泰勒展開法對于復(fù)雜函數(shù)時(shí),要保證精度的前提下往往需要展開成多階函數(shù)才可以進(jìn)行擬合,但是在FPGA中展開階數(shù)越高實(shí)現(xiàn)起來所需要花費(fèi)的乘法器資源也就越多,在神經(jīng)網(wǎng)絡(luò)中Mish函數(shù)的使用往往是并行執(zhí)行多個(gè)相同的乘法,所以在片上DSP資源有限的情況下,我們希望盡可能少的使用DSP,因此使用泰勒展開在實(shí)現(xiàn)Mish函數(shù)來說耗費(fèi)乘法器資源過多。基于查表法的FPGA實(shí)現(xiàn)是實(shí)現(xiàn)復(fù)雜算法最方便最快捷的方式,同時(shí)查表法還可以達(dá)到較高的工作頻率,但是在實(shí)現(xiàn)精度要求較高的場合需要較大位寬才能表示,所以需要耗費(fèi)較大的邏輯資源。基于多項(xiàng)式擬合的方式實(shí)現(xiàn)復(fù)雜算法,是將算法分成若干段,然后用多項(xiàng)式分別進(jìn)行擬合,擬合的效果較好可以達(dá)到較高的精度,但是仍然存在使用乘法器資源較多的不足。基于CORDIC算法的實(shí)現(xiàn)所消耗的資源較少但是耗時(shí)較多而且精度不高。基于分段擬合的方式,采用最小二乘法進(jìn)行擬合,可以將函數(shù)分成較多的小區(qū)間,在每個(gè)區(qū)間分別進(jìn)行擬合,這樣可以保證精度的同時(shí)保證使用乘法器資源較少[5]。

本文則是使用分段擬合的方式將函數(shù)區(qū)間分成若干子區(qū)間進(jìn)行分段擬合,由于保證擬合精度因此分段區(qū)間較多,在硬件實(shí)現(xiàn)上我們將查找表考慮進(jìn)來,使用查找表的方式將每個(gè)擬合函數(shù)的系數(shù)存放在查找表中,實(shí)現(xiàn)較高頻率的讀取,然后在使用一個(gè)乘加器將數(shù)據(jù)進(jìn)行計(jì)算輸出,保證了較高精度的同時(shí)提高了頻率,提升了整體的性能。

3 Mish函數(shù)設(shè)計(jì)

3.1 Matlab擬合

使用matlab對Mish函數(shù)進(jìn)行分段擬合,每段采用最小二乘法進(jìn)行擬合,使得擬合誤差控制在0.001以下。在誤差允許范圍內(nèi)當(dāng)輸入大于4.7時(shí)輸出和輸入相等,當(dāng)輸入在小于-10時(shí)我們可以接受輸出等于零,因此只需擬合[-10,4.7]之間的函數(shù)值。本文將整個(gè)區(qū)間分為43個(gè)小區(qū)間,采用最小二乘法進(jìn)行分段線性擬合[6]。各區(qū)間的擬合如下表所示:

表1 Matlab分段擬合Mish函數(shù)

圖2表示的是輸入?yún)^(qū)間在[-10,10]內(nèi),取點(diǎn)間隔為0.01。采用分段擬合的方式將真實(shí)值與擬合值做差取得擬合誤差,可以看出本文設(shè)計(jì)的分段擬合方案與真實(shí)的Mish函數(shù)非常接近,誤差控制在0.001以下,不會(huì)對結(jié)果產(chǎn)生誤差[7]。

圖2 Mish函數(shù)Matlab擬合誤差曲線

在區(qū)間[-10,10]內(nèi)隨機(jī)取點(diǎn)15個(gè),得到擬合誤差最大在0.0006,低于0.001。符合我們上面的分析。具體擬合誤差如下表2:

表2 Mish函數(shù)隨機(jī)取點(diǎn)擬合結(jié)果

3.2 FPGA實(shí)現(xiàn)

本文采用AC620平臺進(jìn)行設(shè)計(jì)實(shí)現(xiàn),一般而言在軟件層面實(shí)現(xiàn)Mish函數(shù)往往采用32位浮點(diǎn)的形式,但是在FPGA中如果采用浮點(diǎn)計(jì)算則會(huì)消耗大量的浮點(diǎn)乘法器以及大量的邏輯資源,考慮資源使用率以及運(yùn)算速度等因素我們將在FPGA上定點(diǎn)小數(shù)對Mish函數(shù)進(jìn)行實(shí)現(xiàn),有效的兼顧了資源使用、運(yùn)行速度。同時(shí)我們仿真分析采用16位定點(diǎn)小數(shù)的形式實(shí)現(xiàn)Mish函數(shù)不會(huì)對網(wǎng)絡(luò)最終分類結(jié)果產(chǎn)生誤差。因此我們在FPGA上采用16位定點(diǎn)小數(shù)對Mish函數(shù)進(jìn)行實(shí)現(xiàn)[8]。

本文采用有符號數(shù)的數(shù)據(jù)進(jìn)行計(jì)算,因此輸入輸出數(shù)據(jù)第一位為符號位。輸入數(shù)據(jù)進(jìn)行量化的過程中將輸入數(shù)據(jù)同時(shí)擴(kuò)大2048倍,將所有的輸入值進(jìn)行量化取整以便作為FPGA的輸入。同時(shí)也將擬合的所有折線進(jìn)行擴(kuò)大2048倍并將所有系數(shù)通過四舍五入的形式取整。將這些系數(shù)通過建表的方式預(yù)先存儲(chǔ)在FPGA內(nèi)部,當(dāng)不同輸入進(jìn)來的時(shí)候,對應(yīng)輸出相應(yīng)的系數(shù)參與計(jì)算。這樣極大地保證了系統(tǒng)運(yùn)行的速度與穩(wěn)定性。量化以及誤差修正處理后Mish函數(shù)在FPGA平臺的擬合函數(shù)表達(dá)式如下表3:

表3 FPGA擬合Mish函數(shù)

運(yùn)算過程中使用的是有符號數(shù),因此在輸入值進(jìn)行量化時(shí),將負(fù)數(shù)的輸入值以補(bǔ)碼的形式進(jìn)行表示。而在擬合折線的函數(shù)表達(dá)式中,對輸入值擴(kuò)大了2048倍,因此需要對其進(jìn)行右移11位還原為原輸入大小才不會(huì)對輸出結(jié)果產(chǎn)生影響[3]。

圖3 FPGA擬合Mish函數(shù)誤差曲線

如圖3所示,表示了在FPGA上實(shí)現(xiàn)Mish函數(shù)的誤差,這跟圖2相比有一定的差距,差距主要來源于量化過程中的四舍五入以及對輸入數(shù)據(jù)的截位處理所產(chǎn)生的誤差。但根據(jù)圖3所示的誤差中可以看出,用FPGA擬合后的Mish函數(shù)絕對誤差仍然低于0.002。這對我們進(jìn)行神經(jīng)網(wǎng)絡(luò)的分類精度不會(huì)帶來太大的差別。這與表3隨機(jī)抽取的15個(gè)數(shù)據(jù)表示結(jié)果一致,從表3我們可以看出只有少數(shù)點(diǎn)誤差在0.0013左右,但是總體都低于0.002。綜合分析對Mish函數(shù)采用上述擬合方案,總體誤差較小均控制在0.002以下,對神經(jīng)網(wǎng)絡(luò)輸出結(jié)果無影響[4]。

表4 Mish函數(shù)隨機(jī)取點(diǎn)FPGA擬合結(jié)果

具體實(shí)現(xiàn)流程框圖如下圖3:

圖4 Mish函數(shù)流程框圖

由上圖可以看出我們在卷積層輸出特征后需要經(jīng)過Mish激活函數(shù),而激活函數(shù)具體實(shí)現(xiàn)是將擬合的多段折線系數(shù)存在查找表中,依據(jù)輸入數(shù)據(jù)的大小,自動(dòng)匹配對應(yīng)的系數(shù)進(jìn)行輸出,輸出查找表數(shù)據(jù)送入乘加器中實(shí)現(xiàn)激活函數(shù)擬合,最終輸出結(jié)果。modulsim仿真結(jié)果如圖4所示,我們可以看出完成一次擬合只需要三個(gè)時(shí)鐘周期,第一個(gè)時(shí)鐘通過查表取出對應(yīng)的系數(shù),第二個(gè)時(shí)鐘周期用于系數(shù)與輸入之間的乘法,第三個(gè)時(shí)鐘則進(jìn)行常數(shù)相加。因此在這種設(shè)計(jì)模式下只需要三個(gè)時(shí)鐘周期即可完成一次輸入輸出。整體資源使用情況如圖5所示,我們可以看到整體使用邏輯資源較少,而且每次激活運(yùn)算只使用一個(gè)DSP資源。這對于神經(jīng)網(wǎng)絡(luò)加速來說是非常有利的。采用本文的設(shè)計(jì)方案在消耗較少資源的情況下可以實(shí)現(xiàn)較高的并行度,能更好地提升整體運(yùn)算速度[9]。

圖4 modulsim仿真結(jié)果

圖5 FPGA實(shí)現(xiàn)Mish函數(shù)整體資源利用

4 結(jié)束語

YOLOv4及其衍生版本中,Mish作為激活函數(shù)是至關(guān)重要的一步,它的優(yōu)異性能是其他激活函數(shù)無法替代的。欲使用FPGA加速YOLOv4及其衍生版本,則不可避免地要在FPGA上實(shí)現(xiàn)Mish函數(shù)。本文簡單介紹了神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù)Mish,采用分段擬合的方式對該函數(shù)進(jìn)行擬合并在FPGA平臺上對其進(jìn)行實(shí)現(xiàn)。對實(shí)現(xiàn)結(jié)果與實(shí)際結(jié)果進(jìn)行誤差分析,絕對誤差控制在0.002以內(nèi),對神經(jīng)網(wǎng)絡(luò)輸出結(jié)果不會(huì)產(chǎn)生影響。提出一種多折線擬合的方式實(shí)現(xiàn)Mish函數(shù),所使用邏輯資源較少,運(yùn)算速度快,適合在高并行度的神經(jīng)網(wǎng)絡(luò)中使用。對使用FPGA加速YOLOv4以及其他使用Mish函數(shù)作為激活函數(shù)的網(wǎng)絡(luò)有一定的參考價(jià)值。

猜你喜歡
資源
讓有限的“資源”更有效
污水磷資源回收
基礎(chǔ)教育資源展示
崛起·一場青銅資源掠奪戰(zhàn)
一樣的資源,不一樣的收獲
我給資源分分類
資源回收
做好綠色資源保護(hù)和開發(fā)
資源再生 歡迎訂閱
資源再生(2017年3期)2017-06-01 12:20:59
激活村莊內(nèi)部治理資源
決策(2015年9期)2015-09-10 07:22:44
主站蜘蛛池模板: 五月婷婷导航| 中文无码影院| 亚洲无码91视频| 国产美女丝袜高潮| 无码高潮喷水在线观看| 黄色国产在线| 中文天堂在线视频| 欧美中文字幕无线码视频| 欧美三级视频在线播放| 亚洲精品国产综合99| 强奷白丝美女在线观看| 欧美日韩高清在线| 在线观看精品自拍视频| 欧美一区日韩一区中文字幕页| 播五月综合| 国产99视频精品免费视频7| 天堂网亚洲系列亚洲系列| 精品国产美女福到在线不卡f| 欧美日韩理论| 国产亚洲精久久久久久久91| 无码内射中文字幕岛国片| 国产国语一级毛片| 色综合久久88色综合天天提莫| 亚洲福利视频网址| 青青热久免费精品视频6| 亚洲国产综合自在线另类| 97国产精品视频自在拍| 欧美精品成人| 91精品啪在线观看国产| 免费国产在线精品一区| 丝袜美女被出水视频一区| 黄色片中文字幕| 久久青青草原亚洲av无码| 自拍亚洲欧美精品| 一本大道香蕉久中文在线播放| 日本手机在线视频| 国产99精品久久| 亚洲欧洲日韩综合| 婷婷伊人久久| 好吊色妇女免费视频免费| 精品三级网站| 亚洲欧美精品一中文字幕| 亚洲免费三区| 成人亚洲视频| 色色中文字幕| 国产福利小视频高清在线观看| 内射人妻无码色AV天堂| 91区国产福利在线观看午夜| 六月婷婷精品视频在线观看| 天天躁狠狠躁| 一级毛片在线播放免费| 国产成人三级在线观看视频| 国产第八页| 一区二区三区四区日韩| 亚洲欧美日韩中文字幕一区二区三区| 老色鬼欧美精品| 久久永久精品免费视频| 在线观看精品国产入口| 呦女亚洲一区精品| 特级aaaaaaaaa毛片免费视频| 国产美女在线免费观看| 99中文字幕亚洲一区二区| 青草视频久久| 国产一区成人| 欧美中文字幕在线视频| 天天操天天噜| 国产女主播一区| 爱色欧美亚洲综合图区| 国产美女叼嘿视频免费看| 日韩无码视频播放| 亚洲色图欧美在线| 国产拍在线| 国产精品自拍合集| 国产精品夜夜嗨视频免费视频| 国产第四页| 97se亚洲| 国产午夜人做人免费视频中文 | 中文国产成人精品久久一| 亚洲色成人www在线观看| 91无码人妻精品一区二区蜜桃| 久久精品无码一区二区国产区| 黄色网页在线播放|