用樹莓派4b構(gòu)建深度學(xué)習(xí)應(yīng)用(六)TensorFlow Lite篇

?前言

上回我們建立了 tensorflow 的開發(fā)環(huán)境,跑測(cè)試模型比較方便,但對(duì)于樹莓派來說览绿,還是太龐大了慌洪。僅有 0.3fps 無法滿足實(shí)時(shí)的生產(chǎn)環(huán)境需求顶燕,這篇我們部署一下專門為移動(dòng)端和嵌入式設(shè)備而生的 TensorFlow Lite,并跑幾個(gè)模型冈爹,測(cè)試一下純樹莓派上的極限幀率涌攻。

image
image

TensorFlow Lite 是一組工具,可幫助開發(fā)者在移動(dòng)設(shè)備频伤、嵌入式設(shè)備和 IoT 設(shè)備上運(yùn)行 TensorFlow 模型恳谎。它支持設(shè)備端機(jī)器學(xué)習(xí)推斷,延遲較低憋肖,并且二進(jìn)制文件很小因痛。

TensorFlow Lite 包括兩個(gè)主要組件:

  • TensorFlow Lite 解釋器,它可在手機(jī)岸更、嵌入式 Linux 設(shè)備和微控制器等很多不同類型的硬件上運(yùn)行經(jīng)過專門優(yōu)化的模型鸵膏。

  • TensorFlow Lite 轉(zhuǎn)換器,它可將 TensorFlow 模型轉(zhuǎn)換為高效形式以供解釋器使用怎炊,并可引入優(yōu)化以減小二進(jìn)制文件的大小和提高性能谭企。

轉(zhuǎn)換器一般在主電腦上完成,主要是為了靜態(tài)化計(jì)算圖评肆,轉(zhuǎn)換權(quán)重類型后赞咙,生成 .tflite 文件。而解釋器主要在嵌入式設(shè)備上運(yùn)行糟港,我們這里先在樹莓派上安裝一下 tensorflow lite攀操。

安裝 TensorFlow Lite

1 建立虛擬環(huán)境

python3 -m venv --system-site-packages ~/my_envs/tf_lite

2 安裝 2.1.0 版本

# 可以在官網(wǎng)里下載各個(gè)版本

3 啟用 opencv

cd ~/my_envs/tf_lite/lib/python3.7/site-packages

4 安裝完成

import tflite_runtime.interpreter as tflite
image

配置樹莓派攝像頭

1 測(cè)試攝像頭

先保證攝像頭排線已插入樹莓派的 CSI 接口,并在 raspi-config 里 Interfacing options -> camera 選項(xiàng)里啟用了攝像頭秸抚。

image
# 拍攝照片

看一下目錄里是否有拍攝的 demo.jpg 照片和 vid.h264 視頻文件速和,保證硬件沒有問題。

2 使用 picamera 控制攝像頭

pip install picamera

拍攝一張照片

import picamera

? Tip

一定要記得用完攝像頭后用 camera.close() 關(guān)閉剥汤,或是用 With 子句自動(dòng)釋放資源颠放。否則會(huì)收到 picamera.exc.PiCameraMMALError: Failed to enable connection: Out of resources 的錯(cuò)誤信息,只能 Kill python 進(jìn)程強(qiáng)制釋放了吭敢。

錄制一段視頻

with picamera.PiCamera() as camera:

3 使用 opencv 控制攝像頭

import cv2

? Tip

如果在OpenCV中調(diào)用CSI攝像頭會(huì)出現(xiàn)無數(shù)據(jù)的現(xiàn)象碰凶,這是因?yàn)闃漭芍械腸amera module是放在/boot/目錄中以固件形式加載的,不是一個(gè)標(biāo)準(zhǔn)的V4L2的攝像頭驅(qū)動(dòng),所以加載起來之后會(huì)找不到/dev/video0的設(shè)備節(jié)點(diǎn)欲低。我們?cè)?etc/modules里面添加一行bcm2835-v4l2 就能解決問題辕宏。

$sudo nano /etc/modules
image

添加:bcm2835-v4l2,保存關(guān)閉即可砾莱。

4 查詢其他 usb 視頻設(shè)備

ls -ltrh /dev/video*

使用 jupyter notebook

Jupyter Notebook是一個(gè)開源的Web應(yīng)用程序瑞筐,允許用戶創(chuàng)建和共享包含代碼、方程式腊瑟、可視化和文本的文檔聚假。廣泛的用于各種云平臺(tái)上,為了后續(xù)代碼的可移植性闰非,我們這里先安裝一下膘格。

1 安裝 jupyter

sudo apt install jupyter

2 創(chuàng)建配置文件

創(chuàng)建Jupyter notebook的配置文件jupyter_notebook_config.py,在終端中輸入:

jupyter notebook --generate-config

編輯配置文件 jupyter_notebook_config.py

c.NotebookApp.ip = '127.0.0.1'

c.NotebookApp.open_browser = True

這兩個(gè)去除注釋财松,監(jiān)聽本機(jī)端口地址 127.0.0.1 即可瘪贱。

3 配置虛擬環(huán)境到 jupyter 內(nèi)

pip install ipykernel

用 python -m ipykernel install --user --name 虛擬環(huán)境名 --display-name Jupyter中要顯示的名字,來綁定已有的虛擬環(huán)境游岳。

# 配置 pytorch 環(huán)境

4 啟動(dòng) notebook政敢,切換不同的環(huán)境

jupyter notebook

菜單里 服務(wù) -> 改變服務(wù) -> 列出了所有的虛擬環(huán)境。

image

Tensorflow Lite 應(yīng)用

1 克隆官方示例

git clone https://github.com/tensorflow/examples --depth 1

2 圖像分類應(yīng)用

首先安裝依賴包胚迫,再下載一個(gè) MobileNet 模型文件和分類標(biāo)簽文件到 tmp 目錄中喷户。

cd examples/lite/examples/image_classification/raspberry_pi

3 在 notebook 中運(yùn)行一下推理

jupyter notebook

我們新建一個(gè) classify_picamera.ipynb 文件,讀入tflite模型访锻,

labels = load_labels('/tmp/labels_mobilenet_quant_v1_224.txt')

調(diào)用 interpreter.invoke() 來推理褪尝,

def classify_image(interpreter, image, top_k=1):

最后在 opencv 的窗口來展示一下分類結(jié)果。

with picamera.PiCamera(resolution=(640, 480), framerate=30) as camera:
image

速度還是比較快的期犬,130ms一幀河哑,能達(dá)到大約是7-8fps,準(zhǔn)確率也很高龟虎,可見提升還是很明顯的璃谨。這既得益于 MobileNet 的小巧,也得益于 tflite 的精簡(jiǎn)模型的加速鲤妥,可達(dá)到準(zhǔn)實(shí)時(shí)的效果佳吞。

4 目標(biāo)檢測(cè)應(yīng)用

cd examples/lite/examples/object_detection/raspberry_pi

下載一個(gè) MobileNet ssd v2 模型文件和 coco 標(biāo)簽文件到 tmp 目錄中。

5 在 notebook 中運(yùn)行一下推理

jupyter notebook

我們新建一個(gè) detect_picamera.ipynb 文件棉安,讀入tflite模型底扳,

labels = load_labels('/tmp/coco_labels.txt')

調(diào)用 interpreter.invoke() 來推理,

def detect_objects(interpreter, image, threshold):

獲得標(biāo)注目標(biāo)贡耽,轉(zhuǎn)換標(biāo)注框和類別標(biāo)簽

def annotate_objects(annotator, results, labels):

最后用 opencv 合并一下視頻流和標(biāo)注層衷模,在 cv2 窗口展示鹊汛。

with picamera.PiCamera(
image

180-200ms一幀,5 fps左右阱冶,工作量上升了些刁憋,所以比分類任務(wù)稍慢了一些,這應(yīng)該已達(dá)到樹莓派 4代的極限熙揍。若要再提升性能职祷,就要用上 intel 神經(jīng)棒或 google coral 這類 usb 擴(kuò)展資源了氏涩。

安裝包和源碼下載

image

本期相關(guān)文件資料届囚,可在公眾號(hào)后臺(tái)回復(fù):“rpi06”,獲取下載鏈接是尖。

下一篇

我們將在 tersorflow lite 上****意系,
做一些有趣的應(yīng)用,
敬請(qǐng)期待...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饺汹,一起剝皮案震驚了整個(gè)濱河市蛔添,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兜辞,老刑警劉巖迎瞧,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逸吵,居然都是意外死亡凶硅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門扫皱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來足绅,“玉大人,你說我怎么就攤上這事韩脑∏饴瑁” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵段多,是天一觀的道長(zhǎng)首量。 經(jīng)常有香客問我,道長(zhǎng)进苍,這世上最難降的妖魔是什么加缘? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮琅捏,結(jié)果婚禮上生百,老公的妹妹穿的比我還像新娘。我一直安慰自己柄延,他們只是感情好蚀浆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布缀程。 她就那樣靜靜地躺著,像睡著了一般市俊。 火紅的嫁衣襯著肌膚如雪杨凑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天摆昧,我揣著相機(jī)與錄音撩满,去河邊找鬼。 笑死绅你,一個(gè)胖子當(dāng)著我的面吹牛伺帘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忌锯,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼伪嫁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了偶垮?” 一聲冷哼從身側(cè)響起张咳,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似舵,沒想到半個(gè)月后脚猾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砚哗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年龙助,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片频祝。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泌参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出常空,到底是詐尸還是另有隱情沽一,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布漓糙,位于F島的核電站铣缠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏昆禽。R本人自食惡果不足惜蝗蛙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醉鳖。 院中可真熱鬧捡硅,春花似錦、人聲如沸盗棵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至喷屋,卻和暖如春琳拨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屯曹。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工狱庇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恶耽。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓密任,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驳棱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子批什,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350