當前位置:
首頁 > 新聞 > 騰訊首度開源手機端深度學習框架ncnn,同類cpu框架最快

騰訊首度開源手機端深度學習框架ncnn,同類cpu框架最快

【新智元導讀】 騰訊 AI 三大支柱之一的騰訊優圖實驗室公布了成立以來的第一個開源項目ncnn,這是一個為手機端極致優化的高性能神經網路前向計算框架,無第三方依賴,跨平台,手機端 cpu 的速度快於目前所有已知的開源框架。深度學習+手機端的應用是2017年以來人工智慧領域的一大熱點。新智元日前對項目的負責人nihui進行獨家專訪,從項目開發始終、目的、應用、發展方向等進行請教。文章後半部分,我們帶來ncnn10大重要功能介紹。

【新智元招聘】AI 盛夏,星艦啟航。《新一代人工智慧發展規劃》發布之際,新智元也正式入駐融科資訊中心 B 座,整裝待發。天時地利,星辰大海,我們召喚你——新船員的加入!COO、總編、主筆、內容運營、客戶總監、客戶經理、視覺總監(兼職) 7 大職位招聘全新啟動。點擊文末閱讀原文查看詳情。

簡歷投遞:jobs@aiera.com.cnHR 微信:Dr-wly

GIF/38K

根據新智元獲得的最新消息,騰訊社交網路事業群公布了首個AI開源項目,這同時也是騰訊優圖實驗室的第一個深度學習開源項目——ncnn。github地址:

https://github.com/Tencent/ncnn)

據介紹,ncnn是一個為手機端極致優化的高性能神經網路前向計算框架。ncnn 從設計之初深刻考慮手機端的部屬和使用。無第三方依賴,跨平台,手機端 cpu 的速度快於目前所有已知的開源框架。基於 ncnn,開發者能夠將深度學習演算法輕鬆移植到手機端高效執行,開發人工智慧 APP。以騰訊內部應用為例,ncnn 目前已在QQ,Qzone,微信,天天P圖等上得到應用。

騰訊優圖實驗室是以計算機視覺見長,ncnn的許多應用方向也都在圖像方面,如人像自動美顏,照片風格化,超解析度,物體識別。

新智元此前曾報道,騰訊優圖是騰訊AI的三大核心支柱之一,與微信AI團隊和新成立的騰訊AI Lab共同驅動騰訊的 AI 發展。2017年5月15日,香港中文大學終身教授賈佳亞博士加盟騰訊優圖實驗室,出任傑出科學家。本年度在國際上人臉識別標誌性比賽——LFW 和 MegaFace上,騰訊優圖都拿到了冠軍的成績。優圖實驗室創立於2012年,專註在圖像處理、模式識別、機器學習、數據挖掘等領域開展技術研發和業務落地,至今已有近5年的歷史。

深度學習演算法要在手機上落地,現成的 caffe-android-lib 項目依賴太多,手機上基本不支持cuda,需要個又快又小的前向網路實現。單純的精簡 caffe 等框架依然無法滿足手機 APP 對安裝包大小,運算速度等的苛刻要求。ncnn 作者認為,只有全部從零開始設計才能做出適合移動端的前向網路實現,因此從最初的架構設計以手機端運行為主要原則,考慮了手機端的硬體和系統差異以及調用方式。

騰訊優圖ncnn提供的資料顯示:對比目前已知的同類框架,ncnn是cpu框架中最快的,安裝包體積最小,跨平台兼容性中也是最好的。以蘋果主推的CoreML為例,CoreML 是蘋果主推的 iOS gpu 計算框架,速度非常快,但僅支持 iOS 11 以上的 iphone 手機,落地受眾太狹窄,非開源導致開發者無法自主擴展功能,對開源社區不友好。

ncnn與同類框架對比

為了更深入地了解這一騰訊社交網路事業群公布了首個AI開源項目。在獲得這一消息後,新智元第一時間對項目負責人nihui進行了專訪。

nihui,喜愛C/C++,騰訊優圖實驗室基礎研究組高級研究員,負責圖像和人臉相關的技術研究和軟體開發,非常熱愛開源社區,系騰訊社交網路事業群首個AI開源項目ncnn負責人。

新智元專訪ncnn負責人nihui:跑vgg、googlenet、resnet等模型速度比其他已知的開源框架快2~4倍

新智元:能否介紹一下ncnn的開發過程,作為負責人,你希望這一框架會有怎樣的發展?

nihui:最開始邊學習CNN邊寫點代碼,發現手機上還沒個好用的庫,於是自己動手吧。希望將來ncnn能更加充實些,比如支持更多的網路結構和更多的平台,更快的計算速度,最重要的是,希望有感興趣的開發者能一起改善。

新智元:你認為開源能給騰訊優圖帶來的最大好處是什麼?

nihui:大幅節省學習成本,很多東西有現成的,比自己從零開始做一個方便太多了。

新智元:ncnn為什麼會選擇純C++實現,這樣有什麼好處?如何應對不同平台開發者的需求?

nihui:我喜歡寫C++,C++較接近底層,能控制幾乎所有資源,運行代價小。目前主要是面向android和ios的,實際上只要有C++編譯器就可以。

新智元:為什麼在計算硬體上選擇CPU而不是GPU?

nihui:CPU的兼容性很好,但是各種各樣的GPU功能支持都不一樣,不容易實現,比如ios的metal和android的opencl。不否認GPU會更快,但GPU優化很複雜,想寫一個通用的GPU路徑很難,總之我做不出來。

新智元:TensorFlow現在已經是Github上最受歡迎的深度學習開源框架,同樣提供手機端的部署,你們和它們相比最大的優勢在哪些地方?如何跟它競爭,贏得開發者?

nihui:ncnn在手機上更快。實際上沒有什麼競爭關係,TensorFlow側重訓練,ncnn側重部署。

新智元:vgg、googlenet、resnet等模型在NCNN上的性能表現如何?你們有做過測試嗎?

nihui:都可以跑,速度比其他已知的開源框架快2~4倍,而且我們已經在基於這些主流模型的修改版實現智能應用了

新智元:以大家熟知的微信為例,ncnn可以如何得到應用?

nihui:ncnn支撐著一些優圖提供的演算法,例如人臉相關的應用。

新智元:能否列舉更多應用的列子,特別是圖像處理方面,性能表現如何?

nihui:人像自動美顏,照片風格化,超解析度,物體識別等等,對於小型的網路模型可以跑到實時。

新智元:手機端的成功應用,如果要延伸到其他終端,比如智能家居上,會面臨哪些問題?你們未來會不會在這些方向上做突破?

nihui:有cpu的地方ncnn都可以跑起來。智能家居的硬體環境不清楚,如果也是arm的話,移植下應該就可以了。

新智元:為什麼要從頭開發一個在手機端部署的神經網路框架?這是否意味著雲端部署有其不可避免的缺陷?未來,雲端和終端會如何發展?如何分工?

nihui:AR,VR都需要實時性,雲端即使再快也無法實時,所以終端部署是很有必要的。雲端適合處理大數據,比如推薦系統,安全系統,終端適合實時化的應用場景,比如智能機器人,無人駕駛。

新智元:除了ncnn,優圖後續還有什麼開源計劃?

nihui:優圖還有些不錯的圖像和AI相關的項目,沒有確實的計劃,大概想開源就開源了吧。

新智元:據介紹,ncnn應用到微信、QQ等騰訊的產品中,我們知道,騰訊的其他部門,比如騰訊也有自己的AI開發團隊,那麼你們之間的研究會存在重合嗎?優圖為騰訊其他部門提供技術支持的模式是怎樣的?

nihui:騰訊不同部門各有自己側重的研究方向,騰訊優圖是騰訊內部專註於圖像處理、模式識別、機器學習、數據挖掘等領域的核心技術團隊,主要基於整個騰訊的社交網路平台,為QQ、QQ空間 、QQ音樂、財付通、微眾銀行等提供圖像和模式識別技術支持。

ncnn10大功能

1. 支持卷積神經網路,支持多輸入和多分支結構,可計算部分分支

ncnn 支持卷積神經網路結構,以及多分支多輸入的複雜網路結構,如主流的 vgg、googlenet、resnet、squeezenet 等。計算時可以依據需求,先計算公共部分和 prob 分支,待 prob 結果超過閾值後,再計算 bbox 分支。如果 prob 低於閾值,則可以不計算 bbox 分支,減少計算量。

2.無任何第三方庫依賴,不依賴BLAS/NNPACK等計算框架

ncnn 不依賴任何第三方庫,完全獨立實現所有計算過程,不需要 BLAS/NNPACK 等數學計算庫。

3.C++實現,跨平台,支持android ios

ncnn 代碼全部使用 C/C++ 實現,跨平台的 cmake 編譯系統,可在已知的絕大多數平台編譯運行,如 Linux,Windows,MacOS,Android,iOS 等。由於 ncnn 不依賴第三方庫,且採用 C++ 03 標準實現,只用到了 std::vector 和 std::string 兩個 STL 模板,可輕鬆移植到其他系統和設備上。

4. ARM NEON彙編級良心優化,計算速度極快

ncnn 為手機端 CPU 運行做了深度細緻的優化,使用 ARM NEON 指令集實現卷積層,全連接層,池化層等大部分 CNN 關鍵層。對於寄存器壓力較大的 armv7 架構,手工編寫 neon 彙編,內存預對齊,cache 預緩存,排列流水線,充分利用一切硬體資源,防止編譯器意外負優化。

測試手機為 nexus 6p,android 7.1.2。

5. 精細的內存管理和數據結構設計,內存佔用極低

在 ncnn 設計之初已考慮到手機上內存的使用限制,在卷積層、全連接層等計算量較大的層實現中,沒有採用通常框架中的 im2col + 矩陣乘法,因為這種方式會構造出非常大的矩陣,消耗大量內存。因此,ncnn 採用原始的滑動窗口卷積實現,並在此基礎上進行優化,大幅節省了內存。在前向網路計算過程中,ncnn 可自動釋放中間結果所佔用的內存,進一步減少內存佔用。

內存佔用量使用 top 工具的 RSS 項統計,測試手機為 nexus 6p,android 7.1.2。

6. 支持多核並行計算加速,ARM big.LITTLE cpu調度優化

ncnn 提供了基於 openmp 的多核心並行計算加速,在多核心 cpu 上啟用後能夠獲得很高的加速收益。ncnn 提供線程數控制介面,可以針對每個運行實例分別調控,滿足不同場景的需求。針對 ARM big.LITTLE 架構的手機 cpu,ncnn 提供了更精細的調度策略控制功能,能夠指定使用大核心或者小核心,或者一起使用,獲得極限性能和耗電發熱之間的平衡。例如,只使用1個小核心,或只使用2個小核心,或只使用2個大核心,都盡在掌控之中。

7. 整體庫體積小於500K,並可輕鬆精簡到小於300K

ncnn 自身沒有依賴項,且體積很小,默認編譯選項下的庫體積小於 500K,能夠有效減輕手機 APP 安裝包大小負擔。此外,ncnn 在編譯時可自定義是否需要文件載入和字元串輸出功能,還可自定義去除不需要的層實現,輕鬆精簡到小於 300K。

8. 可擴展的模型設計,支持8bit量化和半精度浮點存儲,可導入caffe模型

ncnn 使用自有的模型格式,模型主要存儲模型中各層的權重值。ncnn 模型中含有擴展欄位,用於兼容不同權重值的存儲方式,如常規的單精度浮點,以及佔用更小的半精度浮點和 8bit 量化數。大部分深度模型都可以採用半精度浮點減小一半的模型體積,減少 APP 安裝包大小和在線下載模型的耗時。ncnn 帶有 caffe 模型轉換器,可以轉換為 ncnn 的模型格式,方便研究成果快速落地。

9. 支持直接內存零拷貝引用載入網路模型

在某些特定應用場景中,如因平台層 API 只能以內存形式訪問模型資源,或者希望將模型本身作為靜態數據寫在代碼里,ncnn 提供了直接從內存引用方式載入網路模型的功能。這種載入方式不會拷貝已在內存中的模型,也無需將模型先寫入實體的文件再讀入,效率極高。

10. 可註冊自定義層實現並擴展

ncnn 提供了註冊自定義層實現的擴展方式,可以將自己實現的特殊層內嵌到 ncnn 的前向計算過程中,組合出更自由的網路結構和更強大的特性。

* 本文為新智元原創報道,未經授權請勿轉載。

【號外】新智元正在進行新一輪招聘,飛往智能宇宙的最美飛船,還有N個座位

點擊閱讀原文可查看職位詳情,期待你的加入~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

新智元百人會:七高手縱論人機交互與終端智慧化現狀與痛點
谷歌官方CVPR最強總結:5位主席21篇論文,最關注數據
CVPR專題:大規模視覺理解競賽WebVision冠軍分享
自然語言處理領軍人劉兵:沒有終身學習,機器不可能智能|新智元專訪
科技部:歡迎谷歌、亞馬遜等人工智慧領先企業在華設立研發機構

TAG:新智元 |

您可能感興趣

阿里首次開源深度學習框架X-Deep Learning
Github 項目推薦 | 微軟開源 MMdnn,模型可在多深度學習框架間轉換
caffe 深度學習 框架的建立
Facebook又放大招!開源框架Pythia讓深度學習更高效
從 Google Trends,看各大深度學習框架使用熱度
Github熱門圖深度學習源碼與框架
阿里深度學習框架開源了!無縫對接TensorFlow、PyTorch
Facebook開源機器人框架PyRobot,擁有獨立API,輕鬆上手快速實踐
Facebook開源視覺、語言多任務深度學習框架——Pythia
Keras作者力推開源框架Lore:15分鐘搞定深度學習模型從配置到部署
開源項目精選:機器學習開源框架 TensorFlow
谷歌推出開源強化學習框架Dopamine
不甘落後Tensorflow,微軟另闢蹊徑發布新型深度學習框架
Facebook 最新開源框架 PyRobot,開闢 AI 機器人研究新紀元
TensorFlow與PyTorch之爭,哪個框架最適合深度學習
深度學習框架最新排名,TensorFlow一家獨大!
Facebook開源 時間序列預測框架 Prophet
吊打OpenAI!谷歌重磅開源強化學習框架Dopamine
用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
類Keras的PyTorch 深度學習框架——PyToune