search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

【騰訊優圖首度開源深度學習框架ncnn】主打手機端,同類cpu框架最快

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

簡歷投遞:[email protected] -wly

1 新智元原創

作者:胡祥傑

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

根據新智元獲得的最新消息,騰訊社交網路事業群公布了首個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與同類框架對比

對比caffetensorflowncnnCoreML
計算硬體cpucpucpugpu
是否開源
手機計算速度很快極快
手機庫大小較大
手機兼容性很好僅支持 ios11

為了更深入地了解這一騰訊社交網路事業群公布了首個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 等數學計算庫。

caffe-android-lib+openblasncnn
boost gflags glog lmdb openblas opencv protobuf

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 的前向計算過程中,組合出更自由的網路結構和更強大的特性。

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



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦