在圖像識別這一塊,目前有沒有可以移植到嵌入式設備的深度學習演算法?
一直是在caffe框架下做的相應的深度學習的演算法研究。之前大致的了解了caffe的在嵌入式的應用需要nvidia,另外的自動控制不大清楚其應用,查找這方面資料也很少,所以想在這裡問一下。之前tensorflow出來的時候也說多平台,因為沒有open source,就沒關注了。目前在圖像這一塊的深度學習網路有沒有可以在GPU上訓練出model,然後移植到諸如arm處理器這一類設備上的?
有的。關鍵的問題是設備性能和模型大小之間的平衡,以及移動平台天生的一些限制:比如沒有臍帶電源以及S2機關的情況下,某移動終端只能跑五分鐘。
從軟體上,caffe和我最近在玩的caffe2都可以跨平台地編譯(注意,不一定需要使用GPU哦),tensorflow也準備逐漸提供更完整的跨平台能力,mxnet也提供了ARM上運行的方案,所以可以想見,軟體支持上將來不會有太大的問題。
從計算能力上說,現在的嵌入式平台其實已經不錯了。拋開raspberry pi這樣著眼於低成本hobbyist的平台不說,目前的手機都是多核高主頻的,計算能力完全沒有問題。像jetson TK1和TX1這樣的平台就更不用說,比如說TX1可以以200fps的高速跑AlexNet,而且功耗只有15瓦。我剛開始玩deepnet那會兒,Caffe加K20在台式機跑AlexNet大概是500fps。
總體而言,我覺得嵌入式平台上的機器學習會給很多應用打開更大的想像空間。舉個例子,我去年在Google主推mobile deep learning,一個目前已經推出的應用是谷歌翻譯軟體裡面的自動文字識別和翻譯:http://googleresearch.blogspot.com/2015/07/how-google-translate-squeezes-deep.html (需翻牆)。這些小型的神經網路可以達到傳統演算法所無法企及的準確率,相信將來會有更大,更有意思的應用出來,具體的我就不好說了。
-------------各位認真評論的兄台難道沒有意識到,我寫這一坨純粹是為了抖S2機關的機靈么。。。
難點我認為不在演算法移植。移動端不用做training,主要是要做propagating, 所以問題應該集中在移動端能不能放下並且跑得動很大的network。關於縮小DNN 大小並且保持performance的方法,建議去看看Microsoft 做speech recognition 的大牛Jinyu Li 的一些列paper,應該會很有啟發。
在arm上跑caffe是沒有問題的,有以下兩種方式:
1. 直接使用caffe:
以nvidia-tx1來說,只需稍微調整一下Makefile.config即可順利編譯caffe,caffe的cpu和gpu mode都可正常使用,當然嵌入式系統的速度不比正規的gpu顯卡,如果有速度上的要求,network就不能過於肥大,這在一開始演算法的設計上就要考量。
想提升速度除了從模型下手以外,也可以嘗試caffe fp16半精準度運算,Nvidia/caffe有一個branch把caffe修改成fp16版本,在tx1上實際測試可以有10~20%速度的提升和內存使用量的降低,同時精準度不會下降太多。
參考: http://github.com/NVIDIA/caffe/tree/experimental/fp16
2. 使用opencv3 contrib module
如果想要比較方便地使用caffemodel,opencv有提供contrib module: dnn,可以直接使用opencv讀取caffemodel並作forward,不需另外安裝caffe,在開發板或手機上使用都挺方便的,缺點是有一些caffe layer在opencv_contrib中並沒有被實作。
參考: https://github.com/opencv/opencv_contrib
本回答來自Emotibot影像組張惠棠。
答案是顯然有的,就在你正在刷的安卓裡面,這裡有tensorflow的例子: tensorflow/tensorflow/examples/android at master · tensorflow/tensorflow · GitHub
這裡是例子對應的視頻(翻牆)https://www.youtube.com/watch?v=b0hqhcwDIi4
恰好目前在著手做這方面的工作,稍微做了一下調研。
我總結了一下,限制深度學習在嵌入式設備的應用有三方面因素:
1. 模型參數大,佔用內存大.
解決方案:1. 選用比較小的網路,2. 提高硬體性能 3.模型壓縮 4.優化軟體實現(可以參考mxnet減少內存消耗的一些措施)
2. 高計算量.
解決方案:1. 選用比較小的網路,2. 提高硬體性能(加Tegra) 3.模型壓縮
3. 嵌入式系統相應配套的軟體實現.
解決方案: 對這個問題,等我做過再回答,聽說mxnet移植很方便。
---
ps.
我這邊在打算用嵌入式設備做實時處理視頻的, 等我Tegra 開發板過來後有經驗後再更新答案,歡迎感興趣的同學和我聯繫,一起交流學習。
如何把電腦訓練好的神經網路移植到app上? - ta be 的回答
嵌入式設備性能跟的上嗎。感覺這對性能要求很高,
謝邀。目前設備性能跟不上,只能使用已經訓練好的模型,然後再收集新生的數據,在伺服器,也可理解為在雲端去更新模型
FPGA也可以作為其中的解決方案哪。IP,驅動,SDK就是這個問題的解決思路。我們現在就是這麼做的,效果也不錯。
我也回答一個吧!
App還是毛胚狀態,自己寫的forward.
左上角是最後一層的feature map,下面數字是一幀耗時(ms):
對硬體功耗什麼不是很熟悉,不過caffe移植到arm上早就有人實現了,github上的caffe-android-demo和caffe-android-lib,可以很好幫你解決和並且學習如何移植。不過該版本僅cpu only。若想要gpu支持(非nvidia顯卡,nvidia顯卡直接用官方就有嵌入式caffe用了),需要一個opencl版本的caffe,greentea已經幫我們做好了,caffe的branches上自找,opencl caffe的移植過去並不難,參考caffe-android-lib就可以了,不過gpu的blas,比如(CLBlast和clBLAS的交叉編譯可以參考我在issue裡面的方法和其他人的方法,但是效果如何,各位自己去試)。這樣一個GPU版本的,缺點很多的,包括嵌入式CPU和GPU的計算能力,正如前面 @趙永科所的,自身設備以及caffe實現方式的缺陷導致效果不是很讓人滿意,不過caffe的優點也是很明顯的,所以我認為,嵌入式深度學習的難點不在於caffe平台等的移植,而是優化,PC和嵌入式的架構差別還是很大的,要針對優化。忽略網路壓縮等,僅從現有嵌入式的硬體能力去優化,目前一直在做這方面工作.
題主的是不是想在嵌入式設備上實時處理?arm的運算性能較弱,本菜有用cortex-m4跑過一個小網路用陀螺儀數據識別手勢,圖像的話感覺arm+fpga異構soc來做加速達到實時的效果應該是有可行性的,英偉達推出的TK1和TX1兩款晶元計算性能炸天,但浮點運算能力完全是靠片子上的gpu,gpu畢竟還是有點通用計算單元的味道,用fpga來做出來個網路效果感覺會比gpu更好,而且功耗會更低。目前有好多應用中用zynq這種雙核a9+fpga的片子用來做演算法加速的。然而a9的性能不好,片子里pl資源也不是很多(學生黨買不起高配)。xilinx也要再出一個mpsoc的東東,四個a53核+一個r5核+FPGA+gpu(mali-400),不過這種soc的開發難度不是一般的大-_-#,遠比TK1上移植個caffe
基本能滿足要求的有Tegra TK1/TX1
另外上面有人提到過的Nvidia在CES2015上面展示的是Drive PX,集成了兩個獨立的TX1,其第二代產品將在2016第三季度推出,不過這個平台不論是成本還是功耗都很高,主要是用於車載攝像頭的圖像處理方面
嵌入式不清楚,不過如果移植到ios或者android,以CNN為例開始採用以下的方法:
android:卷積和池化採用RenderScript的並行計算方案,可以參考這篇論文GPU-based Acceleration of Deep Convolutional Neural Networks on
Mobile Platforms。全連接層可以使用RenderScript自帶的ScriptIntrinsicBLAS。
ios:同樣卷積和池化採用metal,矩陣運算採用apple"s accelerate framework
jetson tk1上跑過一次fast R CNN,model用的是caffenet,demo的話2s多一點,大模型跑不動。另外有篇行人識別的論文提到,效果可以達到21fps。
如果單純提高計算能力的話可以利用 NEON 指令或者opencl. 我好奇的是mobile deep learning的應用場景和想像空間到底有多大
首先,caffe就可以在移動平台上跑,曾經把caffe用三星的5422上跑,單個核caffenet一次正向跑了800ms 左右,現在都是8890了;當然,完全可以搞opencl版的,現在高通三星的都支持,caffenet 的模型不做任何改動,幾十搞ms 問題不大。
Caffe 不是為嵌入式設備設計的,直接移植不一定是最優解。嵌入式設備程序優化(或簡化)方法很多,浮點演算法定點化是普遍做法。實際上,工程問題需要工程獅來解,而不是程序猿。
PS:嵌入式設備的處理單元包括但不限於低功耗處理器、數字信號處理器、可編程邏輯器件、微控制器等。
簡單的翻譯了一下CNNdroid這篇論文,大家湊合著看看吧,如果有做移動端深度學習移植的,可以加我微信一起交流。
翻譯的文章鏈接 http://www.jianshu.com/p/b60a216845e8
1.概覽
智能設備和可穿戴設備都將受益於深度學習演算法(比如CNN)的準確性和可擴展性。然而,性能和能耗等現實的問題使得在移動端設備上這類密集計算的演算法變得非常受限。我們開發了CNNdroid這個GPU加速庫,可以在Android設備上實現CNN網路的訓練。通過實驗,CNNdroid在移動設備上實現了60倍速的提升,以及130倍速的節能。CNNdroid這個庫已經開源在Github上,可以從Github項目頁面下載。
2.介紹
智能手機、可穿戴設備、微型機器人、物聯網等越來越多的移動平台都在深度學習的領域找到了相應的應用方向(如圖1)。例如在移動設備上,語音識別和圖像識別等許多App都受益於機器學習的本地演算法。如果允許將模型等數據直接放在客戶端,就可以避免和伺服器的上下行數據交互而導致的網路延遲等體驗的問題。CNN卷積網路在預測的精確性和可擴展性上都取得了很先進的成果,然而像此類密集計算型的網路結構必須依賴硬體級加速才可能在移動設備上得到廣泛的應用。
許多基於深度學習的硬體加速平台都有相應的解決方案了,IBM也正在開發一種用於神經網路的CMOS的晶元,用於在移動設備和物聯網設備上。與此同時,類似的解決方案依然處於早期的研發階段,也並沒有商用到現有的移動設備上。
和基於硬體的加速平台不同的是,GPU已經大規模的商用到現在的移動設備上了,同時在軟體層面的編碼支持也做的非常完善了。利用GPU現成的並行計算能力去實現CNN神經網路在移動端設備上的計算加速是完全可行的。
現存的GPU加速方案的深度學習CNN的開源庫有很多種,都是基於伺服器和桌面平台的[見附錄的6, 7, 8, 9, 10, 11, 12].然而,由於平台架構的差異,簡單的把這些開源庫移植到移動端上,在某些Case下效果是欠佳的(見2.2節)。目前在移動端上,據我們所知,並沒有相應的帶有GPU加速的深度學習計算框架的開源庫,這些庫 [見附錄的13, 14, 15, 16]僅僅能夠利用移動設備的CPU多核計算能力,而這樣局限性很大。
如今,我們提供一個支持GPU加速的開源庫,稱為「CNNdroid」,可以在Android平台用來通過訓練數據集的方式設計和優化CNN的網路。以下是CNNdroid的幾個主要亮點。
1. 支持幾乎所有的CNN的Layer Type(Section 3.1)
2. 兼容Caffe[6]、Torch[7]、Theano[8]這些開源框架在PC平台、伺服器平台上已經訓練好的模型(Section 3.2)
3. 現有的Android App可以快速的加入這個庫,無需額外的軟體依賴(Section 3.3)
4. 開發者可以指定最大的內存消耗(Section 3.4)
5. CNN Layer的GPU和CPU加速均支持(Section 3.5)
6. 自動的硬體條件檢測(Section 3.6)
7. 在移動設備上超過60倍的性能提升以及減少130倍的能耗(Section 4)
剩下的太長,略。詳見
http://www.jianshu.com/p/b60a216845e8
有啊!大把的。arm, dsp,gpu,fpga,很多種的。都有已經上市的晶元產品
不考慮nvidia家的話,目前已經有很多小的框架可以用了,比如darknet,tiny-dnn,ncnn,mxnet。
推薦閱讀:
※深度學習調參有哪些技巧?
※你有哪些deep learning(rnn、cnn)調參的經驗?
※把深度學習作為自己的碩士課題,有什麼可以做的?
※神經網路和深度學習在遊戲設計上是否有應用?
※現在的深度學習的模型越來越大,有個結論是說,大腦的激活是非常稀疏的,對模型參數有什麼好的辦法壓縮嗎?
TAG:機器學習 | 嵌入式系統 | 嵌入式開發 | 深度學習(Deep Learning) | Caffe(深度學習框架) |