0
本文作者: 叢末 | 2018-09-13 15:08 |
隨著這幾年神經(jīng)網(wǎng)絡(luò)和硬件(GPU)的迅猛發(fā)展,深度學(xué)習(xí)在包括互聯(lián)網(wǎng),金融,駕駛,安防等很多行業(yè)都得到了廣泛的應(yīng)用。然而在實際部署的時候,許多場景例如無人駕駛,安防等對設(shè)備在功耗,成本,散熱性等方面都有額外的限制,導(dǎo)致了無法大規(guī)模應(yīng)用深度學(xué)習(xí)解決方案。
近日,在雷鋒網(wǎng) (公眾號:雷鋒網(wǎng)) AI 研習(xí)社第 2 期職播間上,地平線初創(chuàng)人員黃李超就介紹了 AI 芯片的背景以及怎么從算法角度去設(shè)計適合嵌入式平臺高效的神經(jīng)網(wǎng)絡(luò)模型,并應(yīng)用于視覺任務(wù)中。之后地平線的 HR 也進行了招聘宣講,并為大家進行了招聘解讀。公開課回放視頻網(wǎng)址:http://www.mooc.ai/course/537/thread?page=3?=aitechtalkhuanglichaokhuanglichao
黃李超:本科畢業(yè)于中山大學(xué),在帝國理工碩士畢業(yè)之后于 2014 年加入了百度深度學(xué)習(xí)研究院,期間研發(fā)了最早的基于全卷積網(wǎng)絡(luò)的目標(biāo)檢測算法——DenseBox,并在 KITTI、FDDB 等特定物體檢測數(shù)據(jù)集上長期保持第一名。 2015 年,他作為初創(chuàng)人員加入地平線,現(xiàn)研究方向包括深度學(xué)習(xí)系統(tǒng)研發(fā),以及計算機視覺中物體檢測,語義分割等方向。
分享主題:面向低功耗 AI 芯片上視覺任務(wù)的神經(jīng)網(wǎng)絡(luò)設(shè)計
分享提綱:
1. 介紹當(dāng)前 AI 芯片概況,包括現(xiàn)有的深度學(xué)習(xí)硬件發(fā)展情況,以及為何要為神經(jīng)網(wǎng)絡(luò)去設(shè)計專用芯片。
2. 從算法角度,講解如何設(shè)計高性能的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),使其既滿足嵌入式設(shè)備的低功耗要求,又滿足應(yīng)用場景下的性能要求。
3. 分享高性價比的神經(jīng)網(wǎng)絡(luò),在計算機視覺領(lǐng)域的應(yīng)用,包括實時的物體檢測,語義分割等。
4. 地平線 2019 年最全的校招政策解讀。
雷鋒網(wǎng) AI 研習(xí)社將其分享內(nèi)容整理如下:
今天,我將從以下三個方面來進行分享:
第一,當(dāng)前 AI 芯片發(fā)展的現(xiàn)狀。這里的 AI 芯片并不是單指狹義的 AI 專用芯片,而是指廣義上包括 GPU 在內(nèi)所有可以承載 AI 運算的硬件平臺。
第二,在嵌入式設(shè)備的環(huán)境下如何設(shè)計高效的神經(jīng)網(wǎng)絡(luò)。這里我使用的案例都選自業(yè)界中比較重要的一些工作——也有一部分來自我們的地平線。同時這一節(jié)大部分的工作都已經(jīng)落地到實際應(yīng)用場景。
第三,算法+硬件在計算機應(yīng)用上的一些成果。
介紹 AI 芯片之前,先介紹 AI 的大環(huán)境。大家都知道現(xiàn)在是機器學(xué)習(xí)時代,其中最具代表性的是深度學(xué)習(xí),它大大促進圖像、語音、自然語言處理方面的發(fā)展,同時也給很多行業(yè)帶來了社會級的影響。例如在社交網(wǎng)絡(luò)的推薦系統(tǒng)、自動駕駛、醫(yī)療圖像等領(lǐng)域,都用到了神經(jīng)圖像技術(shù),其中,在圖像醫(yī)療,機器的準(zhǔn)確率甚至大大超過了人類。
從整個互聯(lián)網(wǎng)發(fā)展的情況來看,我們先后經(jīng)歷了 PC 互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)時代,而接下來我們最有可能進入一個智能萬物互聯(lián)的時代。PC 時代主要解決信息的聯(lián)通問題,移動互聯(lián)網(wǎng)時代則讓通訊設(shè)備小型化,讓信息聯(lián)通變得觸手可及。我相信在未來,所有的設(shè)備除了能夠互聯(lián)之外,還能擁有智能:即設(shè)備能夠自主感知環(huán)節(jié),并且能根據(jù)環(huán)境做出判斷和控制?,F(xiàn)在我們其實看到了很多未來的雛形,比如無人車、無人機、人臉開卡支付等等。不過,要讓所有設(shè)備都擁有智能,自然會對人工智能這一方向提出更多要求,迎接更多的挑戰(zhàn),包括算法、硬件等方面。
大規(guī)模運用深度學(xué)習(xí)需要去應(yīng)對很多挑戰(zhàn)。首先從算法和軟件上看,如果把 AI 和深度學(xué)習(xí)用在某個行業(yè)中,需要對這個行業(yè)的場景有深入的理解。場景中也有很多痛點需要去解決,但是是否一定要用深度學(xué)習(xí)去解決呢?在特定場景下,往往需要具備能耗比、性價比的解決方案,而不是一個僅僅能夠刷數(shù)據(jù)集的算法。隨著這幾年算法的快速發(fā)展,人們對 AI 的期望也在不斷提高,算法的發(fā)展是否能跟上大家的期望,這也是一個問題。
從硬件上看,當(dāng)前硬件的發(fā)展已經(jīng)難以匹配當(dāng)前深度學(xué)習(xí)對于計算資源的需求,特別是在一些應(yīng)用場景中,成本和功耗都是受限的,缺少低成本、低功耗、高性能的硬件平臺直接制約了 AI 技術(shù)和深度學(xué)習(xí)方案的大規(guī)模應(yīng)用,這也是我們地平線致力于解決的行業(yè)難題。
接下來我們介紹一下 AI 硬件的一些情況。大家都知道,最早神經(jīng)網(wǎng)絡(luò)是運行在 CPU 上的。但是 CPU 并不能非常高效地去運行神經(jīng)網(wǎng)絡(luò),因為 CPU 是為通用計算而設(shè)計的,而且其計算方式以串行為主——雖然一些運行指令可以同時處理較多數(shù)據(jù)。除此之外,CPU 在設(shè)計上也花了很多精力去優(yōu)化多級緩存,使得程序能夠相對高效地讀寫數(shù)據(jù),但是這種緩存設(shè)計對神經(jīng)網(wǎng)絡(luò)來講并沒有太大的必要。另外,CPU 上也做了很多其他優(yōu)化,如分支預(yù)測等,這些都是讓通用的運算更加高效,但是對神經(jīng)網(wǎng)絡(luò)來說都是額外的開銷。所以神經(jīng)網(wǎng)絡(luò)適合用什么樣的硬件結(jié)構(gòu)呢?
在講這個問題之前,我們先從神經(jīng)網(wǎng)絡(luò)的特性說起:
第一,神經(jīng)網(wǎng)絡(luò)的運算具有大規(guī)模的并行性,要求每個神經(jīng)元都可以獨立并行計算;
第二,神經(jīng)網(wǎng)絡(luò)運算的基本單元主要還是相乘累加,這就要求硬件必須有足夠多的運算單元;
第三,神經(jīng)元每一次運算都會產(chǎn)生很多中間結(jié)果,這些中間結(jié)果最后并不會復(fù)用,這就要求設(shè)備有足夠的帶寬。一個理想的設(shè)備,它應(yīng)該有就比較大的片上存儲,并且?guī)捯惨銐?,這樣才能放下網(wǎng)絡(luò)的權(quán)重和網(wǎng)絡(luò)的輸入;
第四,由于神經(jīng)網(wǎng)絡(luò)對計算的精度并沒有那么敏感,所以在硬件設(shè)計的時候可以使用更簡單的數(shù)據(jù)類型,比如整型或者 16bit 的浮點數(shù)。因此,這幾年大家使用的神經(jīng)網(wǎng)絡(luò)解決方案,都是 CPU+比較適合于神經(jīng)網(wǎng)絡(luò)運算的硬件(可以是 GPU、DSP、FPGA、TPU、ASIC 等)組成異構(gòu)的計算平臺。
最常用的方案是 CPU+GPU,這個是深度學(xué)習(xí)訓(xùn)練的一個標(biāo)配,好處是算力和吞吐量大,而且編程比較容易,但是它存在的問題是,GPU 的功耗比較高,延遲比較大,特別是在應(yīng)用部署領(lǐng)域的場景下,幾乎沒有人會用服務(wù)器級別的 GPU。
應(yīng)用場景下用的更多的方案是 FPGA 或者 DSP,它們功耗比 GPU 低很多,但是相對的開發(fā)成本較大。DSP 依賴專用的指令集,它也會隨著 DSP 的型號變化有所差異。FPGA 則是用硬件語言去開發(fā),開發(fā)難度會更大。其實也有一起企業(yè)會用 CPU+FPGA 去搭建訓(xùn)練平臺,來緩解 GPU 訓(xùn)練部署的功耗問題。
雖然剛剛提了很多神經(jīng)網(wǎng)絡(luò)加速的解決方案,但是最合適的還是 CPU+專用芯片。我們需要專用 AI 芯片的主要原因是: 雖然現(xiàn)在的硬件工藝不斷在發(fā)展,但是發(fā)展的速度很難滿足深度學(xué)習(xí)對計算力的需求。其中,最重要有兩點:
第一,過去人們認(rèn)為晶體管的尺寸變小,功耗也會變小,所以在相同面積下,它的功耗能保持基本不變,但其實這條定律在 2006 年的時候就已經(jīng)終結(jié)了
第二點,我們熟悉的摩爾定律其實在這幾年也已經(jīng)終結(jié)了。
我們可以看到芯片在這幾年工藝的發(fā)展變得越來越慢,因此我們需要依靠專門的芯片架構(gòu)去提升神經(jīng)網(wǎng)絡(luò)對計算平臺的需求。
最著名的的一個例子就是 Google 的 TPU,第一版在 2013 年開始開發(fā),歷時大約 15 個月。TPU 里面使用了大量乘法單元,有 256*256 個 8 位的乘法器;片上有 28MB 的緩存,能夠存儲網(wǎng)絡(luò)的參數(shù)和輸入。同時,TPU 上的數(shù)據(jù)和指令經(jīng)過 PCN 總線一起發(fā)過來,然后經(jīng)過片上內(nèi)存重新排布,最后計算完放回緩沖區(qū),最后直接輸出。第一版 TPU 有 92TOPS 的運算能力,但是只針對于神經(jīng)網(wǎng)絡(luò)的前向預(yù)測,支持的網(wǎng)絡(luò)類型也很有限,主要以多層感知器為主。
而在第二版的 TPU 里面,已經(jīng)能夠支持訓(xùn)練、預(yù)測,也能夠使用浮點數(shù)進行訓(xùn)練,單個 TPU 就有 45TFLOPS 的算力,比 GPU 要大得多。
其實我們地平線也研發(fā)了專用的 AI 芯片,叫做 BPU,第一代從 2015 年開始設(shè)計,到 2017 年最終流片回來,有兩個系列——旭日和征程系列,都針對圖像和視頻任務(wù)的計算,包括圖像分類、物體檢測、在線跟蹤等,作為一個神經(jīng)網(wǎng)絡(luò)協(xié)處理器,側(cè)重于嵌入式的高性能、低功耗、低成本的方案。
比較值得一提的是,我們在我們的 BPU 架構(gòu)上設(shè)計了彈性的 Tensor Core,它能夠把圖像計算所需要的基本單元,常用操作例如卷積、Pooling 等硬件化,非常高效地去執(zhí)行這些操作。中間通過數(shù)據(jù)路由橋(Data Routing Bridge)從片上讀取數(shù)據(jù),并負(fù)責(zé)數(shù)據(jù)的傳輸和調(diào)度,同時,整個數(shù)據(jù)存儲資源和計算資源都可以通過編輯器輸出的指令來執(zhí)行調(diào)度,從而實現(xiàn)更靈活地算法,包括各種類型的模型結(jié)構(gòu)以及不同的任務(wù)。
總的來說,CPU+專用硬件是當(dāng)前神經(jīng)網(wǎng)絡(luò)加速的一個較好的解決方案。針對專用硬件,我們可以根據(jù)功耗、開發(fā)容易度和靈活性進行排序,其能耗跟其他兩者(開發(fā)容易度和靈活性)是相互矛盾的——芯片的能效比非常高,但是它的開發(fā)難度和靈活度最低。
說了這么多硬件知識,接下來我們討論怎么樣從算法角度,也就是從神經(jīng)網(wǎng)絡(luò)設(shè)計的角度去談怎么加速神經(jīng)網(wǎng)絡(luò)。相信這個也是大家比較關(guān)心的問題。
我們先看 AI 解決方案,它從數(shù)據(jù)處理的方式可以分為云端 AI 和前端 AI。云端 AI 是說我們把計算放在遠程服務(wù)器上去執(zhí)行,然后把結(jié)果傳到本地,這個就要求設(shè)備能夠時刻連接網(wǎng)絡(luò)。前端 AI 是指設(shè)備本身就能夠進行計算,不需要聯(lián)網(wǎng),其在安全性、實時性、適用性都會比云端 AI 更有優(yōu)勢,而有一些場景下,也只能使用嵌入式的前端 AI 去解決。
嵌入式前端的場景落地難點在于功耗、成本和算力都是有限的。以網(wǎng)絡(luò)攝像頭即 IP Camera 為例,它通過網(wǎng)線供電,所以功耗只有 12.5 瓦,而常用的嵌入式 GPU——Nvidia TX2,為 10-15 瓦。另外這個 TX2 雖然在計算資源、算力方面都比較強,能達到 1.5T,但它的價格是 400 美元,對于很多嵌入式方案來說都是不可接受的。因此要做好前端嵌入式方案,我們需要在給定的功耗、算力下,最大限度地去優(yōu)化算法和神經(jīng)網(wǎng)絡(luò)模型,達到符合場景落地的需求。
我們加速神經(jīng)網(wǎng)絡(luò)的最終目標(biāo)是:讓網(wǎng)絡(luò)在保持不錯的性能下,盡量去降低計算代價和帶寬需求。常用的一些方法有:網(wǎng)絡(luò)量化、網(wǎng)絡(luò)減支和參數(shù)共享、知識蒸餾以及模型結(jié)構(gòu)優(yōu)化,其中,量化和模型結(jié)構(gòu)優(yōu)化是目前看來最有效的方式,在業(yè)界也得到比較廣泛的應(yīng)用。接下來會重點講一下這幾個方法。
第一個是量化,它是指將連續(xù)的變量通過近似從而離散化。其實在計算機中,所有的數(shù)值表示都是離散化的,包括浮點數(shù)等,但是神經(jīng)網(wǎng)絡(luò)中的量化,是指用更低 bit 的數(shù)字去運行神經(jīng)網(wǎng)絡(luò),而是不是直接使用 32bit 的浮點數(shù)(去運行神經(jīng)網(wǎng)絡(luò))。近幾年的一些研究發(fā)現(xiàn),其實數(shù)值表達的精度對神經(jīng)網(wǎng)絡(luò)并沒有太大的影響,所以常用的做法是使用 16bit 的浮點數(shù)去代替 32bit 的浮點數(shù)來進行計算,包括訓(xùn)練和前項預(yù)測。這個在 GPU 以及 Google 的 TPU 第二代中已經(jīng)被廣泛采用。此外,我們甚至發(fā)現(xiàn),用半精度浮點數(shù)去訓(xùn)練數(shù)據(jù),有時候還能得到更好的識別性能。實際上,量化本身就是對數(shù)據(jù)集正則化的一種方式,可以增加模型的泛化能力。
此外,我們還可以將數(shù)據(jù)精度進行進一步壓縮使用,將 8 bit 的整數(shù)作為計算的計算單元,包括訓(xùn)練和前項預(yù)測,這樣帶寬就只有 32bit 浮點數(shù)的四分之一,這類方法近年來也有不少工作,且已被業(yè)界所采用,比如 Tensorflow Lite 已經(jīng)支持訓(xùn)練時模擬 8bit 整數(shù)的運算,部署時真正采用 8 bit 整數(shù)去代替,其在浮點和圖像分類的性能上相當(dāng)。我們地平線也有類似的工作,訓(xùn)練工具也是用 Int 8 bit 去訓(xùn)練、預(yù)測,并且我們的芯片支持 MXNet 和 TensorFlow 框架訓(xùn)練出來的模型。
能不能把精度壓得更低呢,4 bit、2bit 甚至 1 bit?也是有的,但是會帶來精度的極大損失,所以沒被采用。
量化神經(jīng)網(wǎng)絡(luò)模型分為神經(jīng)網(wǎng)絡(luò)的權(quán)重量化、神經(jīng)網(wǎng)絡(luò)特征的量化。權(quán)重量化對于結(jié)果輸出的損失比較小,特征量化其實對模型的輸出損失會比較大,另外,大模型和小模型的量化造成的損失也不一樣,大模型如 VGG16、AlexNet 這種網(wǎng)絡(luò)模型,量化后幾乎沒有損失;而小模型則會有一些損失。現(xiàn)在 8bit 參數(shù)和特征量化可以說是一個比較成熟的方案,基本上可以做到跟浮點一樣好,并且對硬件也更加友好。下面這個表,是在 Image Net 數(shù)據(jù)集上的進行的量化結(jié)果的評測,也是 Google Tensorflow Lite 的量化方案與我們地平線內(nèi)部的量化方案的一個對比。
我們可以看到,無論是哪一家的方案,損失其實都非常小,其中,小模型 MobileNet 0.25 在 Image Net 的損失方面,Google 在 1.6% 左右,而我們的量化方案能夠維持在 0.5% 以內(nèi)。同時我們這個量化方案在 2016 年就已經(jīng)成熟了,而 Google 的去年才放出來,從這個角度上講,我們這方面在業(yè)界內(nèi)是領(lǐng)先的。
除了量化,模型加速還可以通過模型剪枝和參數(shù)共享實現(xiàn)。一個典型的案例就是韓松博士的代表性工作——Deep Compression。減支可以是對整個卷積核、卷積核中的某些通道以及卷積核內(nèi)部任意權(quán)重的剪枝,這里就不多說,大家有興趣可以去看一下原論文。
與網(wǎng)絡(luò)量化相比,剪枝和參數(shù)共享從應(yīng)用角度上來看,并非一個好的解決方案。因為關(guān)于剪枝方面的研究,現(xiàn)在這些論文在大模型上做的比較多,所以在大模型上效果比較好,但是在小模型上的損失比較大,當(dāng)然我們這里說的小模型是比 MobileNet 等模型更小的一些模型。另外,剪枝所帶來的數(shù)據(jù)稀疏(任意結(jié)構(gòu)稀疏),通常需要一個明顯的稀疏比例才能帶來一個實質(zhì)性的的加速。結(jié)構(gòu)化的稀疏加速比相對更容易達到,但是結(jié)構(gòu)化的稀疏比較難訓(xùn)練。同時從硬件角度上講,如果要高效地運行稀疏化的網(wǎng)絡(luò)結(jié)構(gòu)或者帶共享的網(wǎng)絡(luò),就要專門設(shè)計硬件去支持它,而這個開發(fā)成本也比較高。
知識蒸餾也是很常用的壓縮模型方法,它的思想很想簡單,用一個小模型去學(xué)習(xí)一個大模型,從而讓小模型也能實現(xiàn)大模型的效果,大模型在這里一般叫 Teacher net,小模型叫 Student net,學(xué)習(xí)的目標(biāo)包括最終輸出層,網(wǎng)絡(luò)中間的特征結(jié)果,以及網(wǎng)絡(luò)的連接方式等。知識蒸餾本質(zhì)上是一種遷移學(xué)習(xí),只能起到錦上添花的作用,比直接用數(shù)據(jù)去訓(xùn)練小模型的效果要好。
最后講一講模型結(jié)構(gòu)優(yōu)化,它是對模型加速最有效的方式。下圖可以看到從最初的 AlexNet 到今年的 MobileNetV2,參數(shù)已經(jīng)從原來的 240MB 縮小到 35MB,模型的計算量也有了一定的減少,但是在圖像分類的準(zhǔn)確率上,從 57% 提到到了 75%,模型結(jié)構(gòu)優(yōu)化最直接的方式就是,有經(jīng)驗的工程師去探索小模型結(jié)構(gòu),而這些年來也有通過機器去進行搜索模型結(jié)構(gòu)的工作。
接下來講一下在模型結(jié)構(gòu)優(yōu)化中,怎么去設(shè)計一個高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它需要遵循的一些基本原則。
首先,要糾正幾個誤區(qū):第一,是不是小模型跑得比大模型快?這個顯然是不成立,我們可以看下圖中 Google Net 和 AlexNet 箭頭指向的方向,AlexNet 顯然大一些,但它比 Google Net 跑得快一些,計算量更小一些。第二,網(wǎng)絡(luò)計算量小是不是就跑得更快呢?其實也不是,因為最終的運行速度取決于計算量和帶寬,計算量只是決定運行速度的一個因素。
所以說,一個好的、跑起來比較快的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),必須要平衡計算量和帶寬的需求,這里我們跟隨 ShuffleNetV2 論文的一些觀點——雖然這個并不是我們的工作,但是文章寫得很好,其中有不少觀點也和我們在模型結(jié)構(gòu)優(yōu)化過程中得到的一些結(jié)論是一樣的。在分析的時候,我們以 1x1 的卷積為例,假設(shè)所有的參數(shù)和輸入輸出特征都可以被放到緩存當(dāng)中,我們需要特別關(guān)注的是卷積的計算量——用 FLOPs(Float-Point Operations) 即浮點數(shù)的操作次數(shù)去表述,帶寬用 MAC(Memorry Access Cost) 即內(nèi)存訪問的次數(shù)去表示。同時,我們需要額外關(guān)注的是帶寬和計算量的比。對于嵌入式的設(shè)備來講,帶寬往往是瓶頸。拿 Nvidia 的嵌入式平臺 TX2 為例,它的帶寬比上計算力大概是 1:26。
第一,要分析一下輸入通道數(shù)、輸出通道數(shù)以及輸入大小對帶寬和計算量的影響,ShuffleNetV2 提出的準(zhǔn)則第一條是,在同等的計算量下、輸入通道數(shù)和輸出通道數(shù)下,帶寬是最節(jié)省的,公式為:。其實輸入通道、輸出通道和輸入大小任意一個過小的話,對帶寬都會產(chǎn)生不友好的影響,并且會花很多時間去讀取參數(shù)而不是真正去計算。
第二,卷積中 Group 的個數(shù)又對性能有什么影響呢?ShuffleNetV2 這篇文章指出,過多的 Group 個數(shù)會增加單位計算量的帶寬,我們可以看到計算量的帶寬和 Group 的個數(shù)近似為正比。從這一點上來看,MobileNet 里頭的 Depthwise Convolution 實際上是一個帶寬需求量非常大的操作,因為帶寬和計算量的比值接近于 2。而實際運用的時候,只要帶寬允許,我們還是可以適當(dāng)增加 GROUP 個數(shù)來節(jié)省計算量,因為很多時候,帶寬實際上是沒有跑滿的。
第三,ShuffleNetV2 說到的第三條準(zhǔn)則是,過度的網(wǎng)絡(luò)碎片化會降低硬件的并行度,這就是說,我們需要思考 operator 的個數(shù)對于最后運行速度的影響。其實 ShuffleNetV2 這種觀點不夠嚴(yán)謹(jǐn),準(zhǔn)確來說,我們需要把 operator 分為兩類:一類是可以并行的(如左圖),兩個框可以并行計算,concat 的內(nèi)存也可以提前分配好;另一類是必須串行去進行計算,沒有辦法并行的 operator 則會降低硬件的并行度。對于硬件來說,可以并行的 operator 可以通過指令調(diào)度來充分利用硬件的并行能力。從這條準(zhǔn)測上看,DenseNet 這種網(wǎng)絡(luò)結(jié)構(gòu)在應(yīng)用實際上非常不友好。它每次的卷積操作計算量很小,而且每次計算需要依賴先前所有的結(jié)果,操作之間不能并行化,跑起來很慢。另外,太深的網(wǎng)絡(luò)跑起來也比較慢。
最后,ShuffleNetV2 也指出,Element-wise 對于速度的影響也是不可忽視的——一定程度上可以這么說。因為 Element-wise 雖然計算量很小,但是它的帶寬需求比較大。其實如果把 Element-wise 的操作和卷積結(jié)合在一起,那么 Element-wise 的操作對最后帶寬帶來的影響幾乎為 0。常用的例子是,我們可以把卷積、激活函數(shù)和 BN 放在一起,這樣的話,數(shù)據(jù)可以只讀一次。
講到這里,我們做一下總結(jié),設(shè)計高效的神經(jīng)網(wǎng)絡(luò),我們需要盡可能讓 operator 做并行化計算,同時去減少帶寬的需求,因為最后的速度由帶寬和計算量共同決定的,所以這兩者哪個存在瓶頸,都會制約運行速度。
過去優(yōu)化神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)往往依靠非常有經(jīng)驗的工程師去調(diào)參,我們能不能直接讓機器去自動搜尋網(wǎng)絡(luò)結(jié)構(gòu)呢?
其實也是可以的,比如說 Google 前段時間進行一項工作叫 NASNet,就是通過強化學(xué)習(xí),把圖像分類的準(zhǔn)確率和網(wǎng)絡(luò)本身的計算量作為反饋,去訓(xùn)練網(wǎng)絡(luò)結(jié)構(gòu)生成器,讓網(wǎng)絡(luò)結(jié)構(gòu)生成器去生成比較好的網(wǎng)絡(luò)結(jié)構(gòu)。
Google 的這項工作大概用了 450 GPUs 和 4 天,搜索出了性能和計算量都還不錯的網(wǎng)絡(luò)結(jié)構(gòu),這兩個圖是網(wǎng)絡(luò)結(jié)構(gòu)的基本單元。然而,通過我們之前的分析,它這兩個基本單元肯定是跑不快的,因為操作太零碎,而且很多操作沒有辦法并行。所以對于搜索網(wǎng)絡(luò)結(jié)構(gòu),考慮真實的運行速度是一個更合適的選擇。所以就有了后續(xù)的工作,叫做 MnasNet。
Google 這次直接把手機上的運行速度作為強化網(wǎng)絡(luò)的反饋。我們可以看到用這種方法搜索出來的網(wǎng)絡(luò)結(jié)構(gòu)合理很多,同時性能也比之前稍微好一些。
在同時期,我們也有進行了類似的工作——RENAS,它實際上借鑒了 NASNet,但我們側(cè)重于去解決搜索效率低下的問題。和 NASNet 不同,我們采用進化算法搜索網(wǎng)絡(luò)結(jié)構(gòu),同時用強化學(xué)習(xí)去學(xué)習(xí)進化的策略。工作方式的鏈接放在上面,大家感興趣也可以去看一下。
RENAS 的一個優(yōu)點是,它的網(wǎng)絡(luò)搜索的效率要高得多:我們用了 4GPU 和 1.5 天就搜出比 NASNet 更好的結(jié)構(gòu)。不過它的缺點也跟 NASNet 一樣,都用了計算量作為一個衡量指標(biāo),因此它搜索出來的所有結(jié)果只是計算量低,但是運行速度并不一定特別快。
講了這么多,最后我們可以展示一下,經(jīng)過優(yōu)化后的網(wǎng)絡(luò)在主流視覺任務(wù)上的應(yīng)用效果:
最常見的圖像級別的感知任務(wù)比如圖像分類、人臉識別等,由于它們輸入比較小,所以整體計算量并不大,對于網(wǎng)路的效率要求也沒有那么苛刻。而在圖像分類以外的工作比如物體檢測 語義分割等等,它們的輸入比圖像分類大得多,往往在 1280x720 這種分辨率或者更大的分辨率。MobileNet 或者 ShuffleNet 在這個分辨率下的計算量,還是挺高的。另外在物體檢測、語義分割的問題當(dāng)中,尺度是一個要考慮的因素,所以我們在設(shè)計網(wǎng)絡(luò)的時候,要針對尺度問題做一些額外的配置,包括并引入更多分支,調(diào)整合適的感受野等等。
對于物體檢測、語義分割任務(wù),我們專門設(shè)置了一個網(wǎng)絡(luò)結(jié)構(gòu),它的大概樣子如上圖中的右圖所示,特點是我們使用了很多跨尺度的特征融合模塊,使網(wǎng)絡(luò)能夠處理不同尺度的物體,另外,我們這個網(wǎng)絡(luò)的基本單元都遵循了簡單、高效的原則,用硬件最友好、最容易實現(xiàn)的操作去組建基本模塊。
我們在一些公開數(shù)據(jù)集上測試了這個模型的性能,主要有兩個數(shù)據(jù)集,一個是 Cityscapes,它是語義分割數(shù)據(jù)集,圖像分辨率很大,原始圖像分辨率為 2048x1024,標(biāo)注有 19 類。在這些數(shù)據(jù)集上,我們的網(wǎng)絡(luò)跟曠世最新的一篇論文 BiSeNet 做比較——BiSeNet 是目前能夠找到的在語義分割領(lǐng)域中速度最快的一個方法,它的計算在右邊的表格中,其中的計算模型*Xception39 在 640x320 的分辨率,大概需要 2.9G 的計算量,而我們的一個小模型在同等規(guī)模的輸入下,達到幾乎一樣的效果,只需要 0.55G 的計算量。
同時,在性能上,——語義分割里面我們用 mIoU 作為指標(biāo),在 2048x1 024 的分辨率下,我們稍微大一點點的網(wǎng)絡(luò)跟 Xception39 非常接近。我們的網(wǎng)絡(luò)還在 KITTI 數(shù)據(jù)集上做了一個測試,它的分辨率大概為 1300x300 多,特別是車和人的檢測任務(wù)上所表現(xiàn)出來的性能,和 Faster RCNN,SSD,YOLO 等常見的方法的模型相比,具有非常高的性價比。
下面展示一下我們算法在 FPGA 平臺上實施的一個 Demo。
我們這個網(wǎng)絡(luò)同時去做物體檢測和語義分割,以及人體姿態(tài)估計。FPGA 也是我們第二代芯片的一個原型,第二代芯片年底會流片回來,單塊芯片性能會是 FPGA 這個平臺的 2-4 倍。這個數(shù)據(jù)是在美國的拉斯維加斯采集的,除了人體姿態(tài)的檢測,我們還做了車載三維關(guān)鍵點定位,它的運行速度可以達到實時,也作為我們重要的產(chǎn)品在車廠中使用。Demo 只是我們工作的冰山一角,我們還有很多其他的方向的工作,比如智能攝像頭、商業(yè)場景下的應(yīng)用,目標(biāo)是為萬物賦予智能,從而讓我們的生活更美好。這是我們的宣傳片,相信大家在進職播間的時候都已經(jīng)看過了。
最后回歸本次做直播的一項非常重要的目的——校招。我們今年的校招馬上要開始了,接下來由 HR 姐姐來介紹一下地平線招聘的情況。
大家好,我是地平線負(fù)責(zé)招聘的 HR 趙紅娟,接下來我來整體介紹一下公司的情況以及校招流程。
地平線(「公司」)是國際領(lǐng)先的嵌入式人工智能(「AI」)平臺的提供商。公司基于自主研發(fā)人工智能芯片和算法軟件,以智能駕駛,智慧城市和智慧零售為主要應(yīng)用場景,提供給客戶開放的軟硬件平臺和應(yīng)用解決方案。經(jīng)過三年的發(fā)展,地平線現(xiàn)在有 700-800 的正式員工,加上實習(xí)生,大概有 900 人左右。同時,公司 70% 多的員工都是研發(fā)人員,我們的平均工業(yè)界經(jīng)驗為 7 年左右。
我們公司的技術(shù)團隊實力雄厚,除了國內(nèi)的各大廠之外,同時也有來自如 Facebook、華為、高通等國際知名企業(yè)的成員。目前,我們的業(yè)務(wù)橫跨「軟+硬,端+云」領(lǐng)域,后續(xù)會持續(xù)深耕嵌入式人工智能。
目前,我們也對已經(jīng)確立的業(yè)務(wù)方向內(nèi)部做了一個總結(jié)歸類,叫「一核三翼」,「核」是指我們的芯片,應(yīng)用到智能駕駛、智慧城市和智慧零售三個領(lǐng)域。其中,智慧城市主要是泛安防領(lǐng)域——這是一個非常有潛力的市場,而我們的智慧零售的具體方向是基于我們嵌入式人工智能芯片技術(shù),將線下零售數(shù)據(jù)線上化、數(shù)據(jù)化,為零售管理者提供多層次解決方案。
下面進入關(guān)鍵點,即我們希望什么樣的同學(xué)加入?用幾個詞來概括就是:Dedicated、 Hands-on、 Team working。
我們能夠提供給大家什么呢?這也是大家比較感興趣的點。我將從職位、工作地點和福利三個方向講一下。
職位方向有算法、軟件、芯片、硬件、產(chǎn)品五大方向。
工作地點,總部在北京,同時在、南京、上海、廈門、深圳、杭州、硅谷都有 office,大家可以選擇自己喜歡的城市。
福利則包括:
1. 拿到校招 Offer 的同學(xué),畢業(yè)前能來地平線實習(xí),可以享受到跟畢業(yè)以后正式員工相同的薪酬標(biāo)準(zhǔn);
2. 試用期結(jié)束以后,所有畢業(yè)生統(tǒng)一組織轉(zhuǎn)正答辯,根據(jù)轉(zhuǎn)正答辯成績有推薦大家去參加各種國際頂級會議,或者前往硅谷工作或參觀等諸多開眼界的機會。
3. 針對大家從學(xué)生到職場人的轉(zhuǎn)型,我們會提供升級版地平線大學(xué),助力職業(yè)生涯發(fā)展。地平線大學(xué)分為必修課和選修課,同時會有常用的禮儀方面的培訓(xùn)
4. 其他福利其他公司可能都有,但是我們公司會更貼心,比如電競椅、升降桌,補充醫(yī)療、入職&年度體檢、全天零食供應(yīng)、餐補、交通補、租房補貼、帶薪年假 10 天、產(chǎn)假 6 個月、陪產(chǎn)假 15 天、多彩 offsite、各種興趣社團等等。
最后,我們附上校招通關(guān)秘籍:
宣講學(xué)校:東南大學(xué)、哈爾濱工業(yè)大學(xué)、華中科技大學(xué)、南京大學(xué)、清華大學(xué)、上海交通大學(xué)、西安交通大學(xué)、浙江大學(xué)、中國科學(xué)技術(shù)大學(xué)和 中國科學(xué)院大學(xué)等十所學(xué)校。
校招流程:宣講會當(dāng)天筆試,當(dāng)晚出筆試成績,隔天進行面試,面試通過就會發(fā)錄用意向書,十一后發(fā)正式 Offer。
簡歷投遞方式:包括網(wǎng)申和宣講會現(xiàn)場投簡歷。
總之,地平線非常重視校招生及其培養(yǎng),希望給大家更好的發(fā)展空間,培養(yǎng)一代又一代的地平線人,為公司創(chuàng)造更大的價值,為科技進步貢獻自己的力量!
下面是中科院站的宣講群二維碼,歡迎同學(xué)們前來圍觀。
分享結(jié)束后,兩位嘉賓還對同學(xué)們提出的問題進行了回答,大家可以移步社區(qū)(http://www.gair.link/page/blogDetail/8437)進行詳細了解。
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請到雷鋒網(wǎng) AI 研習(xí)社社區(qū)觀看。關(guān)注微信公眾號:AI 研習(xí)社(okweiwu),可獲取最新公開課直播時間預(yù)告。
附:問答環(huán)節(jié)
技術(shù)類問題:
1.地平線之前應(yīng)該基于 FPGA 做過一些駕駛輔助相關(guān)的產(chǎn)品吧?實時性大概可以做到多少?第二代芯片在此基礎(chǔ)上能夠提升 2~4 倍嗎?
做過,能做到 20 幀每秒以上。是的。
2.地平線在車道檢測上有沒有比較好的方案?
如果你感興趣的話,可以來地平線參觀參觀,一起聊一聊。
3.輕量級網(wǎng)絡(luò)模型有哪些?
有一些專門討論輕量級網(wǎng)絡(luò)的文章,比如 MobileNet 和 ShuffleNet 這類文章,都會提供計算量和性能的指標(biāo),直接拿來用就可以了。文章也會提供一些物體檢測和語義分割的 baseline,你可以把輕量級網(wǎng)絡(luò)稍微改造一下,就可以用在這些任務(wù)上。
4.地平線有相關(guān) Paper 發(fā)表嗎?
地平線內(nèi)部工作可以分為兩類,一類是探索性的工作,這部分工作我們會有實習(xí)生發(fā)表一些論文;另一類是優(yōu)化的工作,并沒有發(fā)表論文。
5.貴公司現(xiàn)在都是專用芯片?以后有可能有通用芯片賣給用戶跑自己的模型嗎?
自己訓(xùn)練的網(wǎng)絡(luò)當(dāng)然能在我們自己的芯片上跑,在芯片上跑是我們訓(xùn)練網(wǎng)絡(luò)最重要的一個目的。但是,我們以后也會公開,兼容去跑一些其他的模型。
6.Tensorflow 和騰訊的嵌入式優(yōu)化有什么區(qū)別?
Tensorflow 的系統(tǒng)和社區(qū)很龐大,相關(guān)知識文檔和模型也比較完善,騰訊的這個嵌入式設(shè)備上優(yōu)化得很好,可能比 Tensorflow 好一些,輕量級一些,看大家的取舍吧。
7.產(chǎn)品落地需要考慮小目標(biāo)檢測嗎?
小目標(biāo)檢測這個問題在產(chǎn)品落地的時候肯定是需要考慮的,因為很多時候車輛檢測任務(wù),客戶對你的算法需求是檢測到 100 米甚至 150 米的車,而在常規(guī)的廣角攝像頭下,檢測的圖像大概只有十幾的像素了。
校招相關(guān)問題:
1.招 2020 屆應(yīng)屆生嗎?
當(dāng)然可以,非常歡迎。2020 屆同學(xué)可以先申請實習(xí),以后可以參加 2020 屆的校招。我們明年會在夏天安排招聘會,專門針對 2020 屆畢業(yè)生。并且,我們長期招聘實習(xí)生。
2.社招有嗎?社招有筆試嗎?
也有,大家可以通過網(wǎng)申投遞。一般情況下,社招沒有筆試,但是針對工程專業(yè)的同學(xué),我們會考察你們的代碼功底。
3.杭州有什么崗位?是新開的分部嗎?
明年在杭州開設(shè) office,大部分職位都是開放的,目前我們沒有職位的限制
4.工程院和研究院有崗位嗎?
工程院在北京和南京都有職位,南京研究院也在招實習(xí)生。
5.具體職位要求是什么?
具體職位要求大家可以去我們發(fā)布的職位招聘網(wǎng)站上看一下。
附上校招網(wǎng)申地址:http://hobot.zhiye.com/Campus
6.非 985 學(xué)校的學(xué)術(shù)要嗎?有學(xué)歷要求嗎?
我們對所有學(xué)校的學(xué)生都開放,不限大家是本科生、研究生以及是否 985 院校畢業(yè)生,關(guān)鍵看大家的實力,我們有筆試和面試的環(huán)節(jié)對大家進行考察。
7.廈門招算法工程師嗎?
廈門有招算法工程師,但是會跟北京的算法工程師有一些區(qū)別,深度學(xué)習(xí)的算法工程師集中在北京。
9.是否有面試機會?
是否有機會面試要取決于大家的筆試成績。
10.什么時候到華科進行校招?
我們會在公眾號(HorizonRobotics)上同步行程。
11.校招安排在什么時間?
最早的一場是在號 2018 年 9 月 12 日 18:00,國科大中關(guān)村校區(qū)教學(xué)樓 S101 報告廳 (數(shù)學(xué)所西側(cè) 經(jīng)管學(xué)院教學(xué)樓內(nèi))。后續(xù)站次安排會在微信公眾號(HorizonRobotics)及時更新。
12.中科院畢業(yè)生去得多嗎?
我們公司中科院來的工程師應(yīng)該是最多的。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。