一直以來,樹莓派以其良好的社區生態,廣受嵌入式愛好者、創客歡迎。在一些相關的社區上(比如樹莓派實驗室),我們可以看到非常豐富的應用示例及其教程。但在樹莓派上的深度學習應用并不常見,這主要是受到樹莓派計算力的限制,比如之前看到過有人把yolov2原原本本生硬地部署到樹莓派上,結果每一幀檢測耗時高達6分鐘!!作一幀目標檢測花費6分鐘這實在是無法忍受的!
如果是用yolov2-tiny的話會快很多,但耗時依舊接近40秒,參考樹莓派3B上測試YOLO效果 | CSDN
那樹莓派只能跟深度學習無緣了么?那可未必!
Tengine
Tengine 是OPEN AI LAB為嵌入式設備開發的一個輕量級、高性能并且模塊化的引擎。
Tengine在嵌入式設備上支持CPU,GPU,DLA/NPU,DSP異構計算的計算框架,實現異構計算的調度器,基于ARM平臺的高效的計算庫實現,針對特定硬件平臺的性能優化,動態規劃計算圖的內存使用,提供對于網絡遠端AI計算能力的訪問支持,支持多級別并行,整個系統模塊可拆卸,基于事件驅動的計算模型,吸取已有AI計算框架的優點,設計全新的計算圖表示。
編譯安裝開源版Tengine
安裝相關工具
sudo apt-get install git cmake
安裝支持庫
sudo apt-get install libprotobuf-dev protobuf-compiler libboost-all-dev libgoogle-glog-dev libopencv-dev libopenblas-dev
- protobuf 是一種輕便高效的數據存儲格式,這是caffe各種配置文件所使用的數據格式
- boost 是一個c++的擴展程序庫,稍后Tengine的編譯依賴于該庫
- google-glog 是一個google提供的日志系統的程序庫
- opencv 是一個開源的計算機視覺庫
- openblas 是一個開源的基礎線性代數子程序庫
下載&編譯
-
從github上下載最新的開源版Tengine源碼
git clone https://github.com/OAID/Tengine.git
-
切換工作目錄到Tengine
cd Tengine
-
準備好配置文件
Tengine目錄下提供了配置模板makefile.config.example
文件cp makefile.config.example makefile.config
-
修改配置文件
makefile.config
由于開源版的Tengine不支持針對armv7的優化,所以需要用openblas替代實現;
將CONFIG_ARCH_ARM64=y
這一行注釋掉(行首加井號#
)以關閉ARM64架構的優化實現;
解除CONFIG_ARCH_ARM32=y
和CONFIG_ARCH_BLAS=y
這一行解除注釋(刪除行首的井號#
)以開啟BLAS計算庫的實現方式 -
編譯并安裝
make -j4 make install
這里的
-j4
表示開啟四個線程進行編譯
測試
-
下載mobilenet-ssd模型并放置在
Tengine/models
目錄下
下載鏈接(提取碼為57vb):https://pan.baidu.com/s/1LXZ8... -
將工作目錄切換到mobilenet-ssd示例程序的目錄下
cd ~/Tengine/examples/mobilenet_ssd
-
編譯示例程序
cmake -DTENGINE_DIR=/home/pi/Tengine . make
這里
-DTENGINE_DIR
用于為cmake指定環境變量TENGINE_DIR,該變量可以在CMakeLists.txt文件中找到 -
運行示例程序
./MSSD
可以看到對一張照片進行目標檢測,總共耗時1148.32ms
樹莓派開發者版Tengine
開發者版下載地址:Tengine下載 - Tengine開發者中心
-
用樹莓派開發者版Tengine的動態鏈接庫覆蓋掉原先的開源版
動態鏈接庫路徑為:Tengine/install/lib/libtengine.so
編譯時,make會在build目錄下產生libtengine.so動態鏈接庫,而make instll將動態鏈接庫、頭文件等拷貝到install目錄下 -
重新運行mobilenet-ssd的示例程序
可以看到,單幀耗時從1148.32ms下降為286.136ms,速度有了非常明顯的提升!
小試牛刀
用上高性能的樹莓派開發者版Tengine,看看mobilenet-ssd在樹莓派上能表現如何——
-
從 hey-yahei/my_blog/RasPi-Tengine/mobilenet-ssd | github 上下載源碼,并放置在
Tengine/example
目錄下 -
檢查
CMakeLists.txt
文件中TENGINE_DIR變量是否正確指向Tengine路徑 -
執行
cmake .
生成Makefile -
執行
make
編譯程序 -
執行
./MSSD
運行程序
本文開頭我們說道,
直接在樹莓派上配置darknet部署的yolo網絡,yolov2單幀耗時接近6分鐘,yolov2-tiny單幀耗時接近40秒;
而在樹莓派上配置Tengine部署的yolov2網絡,在blas實現下單幀耗時不到8秒(參考利用Tengine在樹莓派上跑深度學習網絡 | songrbb),在針對armv7優化實現的開發者版下單幀耗時甚至不到2秒!
審核編輯 黃昊宇
-
人工智能
+關注
關注
1793文章
47532瀏覽量
239293 -
樹莓派
+關注
關注
117文章
1710瀏覽量
105763 -
深度學習
+關注
關注
73文章
5511瀏覽量
121350 -
Tengine
+關注
關注
1文章
47瀏覽量
2864
發布評論請先 登錄
相關推薦
評論