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

樹莓派的學(xué)習(xí)設(shè)計(jì)方案合集

樹莓派pico入門學(xué)習(xí)筆記(一)

樹莓派4b學(xué)習(xí)筆記

開源硬件創(chuàng)客 15個酷應(yīng)用玩轉(zhuǎn)樹莓派 (工業(yè)智能新技術(shù)系列)

超實(shí)用!玩轉(zhuǎn)樹莓派攻略!

評論