使用tensorflow-serving在docker在虛擬機上【服務器】拉取鏡像的方式進行YOLOv3模型部署,并將檢測結果在windows系統下【客戶端】顯示,現將程序整理記錄下來,
參考代碼:https://github.com/George-2019/tensorflow-serving-yolov3;
https://github.com/Byronnar/tensorflow-serving-yolov3
目錄
demo展示:
權重轉化
影像預測
模型部署
轉化成可部署的saved model格式
docker拉取鏡像
Docker部分記錄(報錯處理)
解決docker 影像顯示問題:
樹莓派上安裝tensorflow問題
安裝
樹莓派開啟攝像頭:
提示h5py不存在
windows遠程樹莓派
demo展示:
$ git clone https://github.com/byronnar/tensorflow-serving-yolov3.git (下載代碼)
代碼下載到根目錄下
$ cd tensorflow-serving-yolov3

將預加載模型放置checkpoint
權重轉化
在checkpoint下解壓模型,在tensorflow-serving-yolov3目錄下運行權重轉換(轉成pb格式),并對yolo框架圖進行凍結
$ cd checkpoint
$ tar -xvf yolov3_coco.tar.gz
$ cd ..
$ python3 convert_weight.py
$ python3 freeze_graph.py
影像預測
$ python3 image_demo_Chinese.py # 中文顯示
$ python3 image_demo.py # 英文顯示
$ python3 images_demo_batch.py # 批量圖片測驗
$ python3 video_demo.py # video_path = 0 代表使用攝像頭
模型部署
轉化成可部署的saved model格式
$ python3 save_model.py
將savedmodel檔案夾里面的yolov3檔案夾復制到tmp檔案下,這里的tmp檔案是根目錄下的檔案,一般進入ubuntu后默認路徑為/home/用戶名/...
進入根目錄,輸入sudo su后再輸入密碼(注意這里的密碼是不顯示的,輸完按回車即可進入root權限用戶)
docker拉取鏡像
Note:在部署之前要先安裝docker,輸入python時,需要輸入python3,即使用python3.x,如果沒有3,則默認的為2.x,且在使用pip安裝命令,也要輸入pip3
$ docker run -p 8501:8501 -p 8500:8500 --mount type=bind,source=/tmp/yolov3/,target=/models/yolov3 -e MODEL_NAME=yolov3 -t tensorflow/serving:1.14.0 &
(運行tensorflow-serving的鏡像,我這里用的1.14版本,如果不指定版本會默認拉取最新的,并做埠映射)【tmp檔案中的yolov3每次虛擬機開機會自動清除,需要重新放置,不然上述命令會報錯】(該命令在根目錄下運行)
###如果需要使用GPU, 請使用Tensorflow-serving-GPU鏡像
$ cd yolov3_tfserving (在tensorflow-serving-yolov3下)

預測
HTTP 介面:
$ python3 http_client.py
GRPC 介面:
$ python3 grpc_client.py
虛擬機做服務器,windows做客戶端進行預測
在實作了上一部分的基礎上,實作windows客戶端的預測,需要做埠映射,
由yolov3_tffserving檔案下運行的http_client.py可知生成的API埠為8501,所以只要客戶端和服務器埠映射即可,
具體步驟:1.打開Vmware虛擬網路設定
打開 Vmware — 點擊「編輯」— 選擇「虛擬網路編輯器」

在彈出框選擇「NAT模式」 — 點擊「更改設定」— 點擊之后可以根據自己需要修改虛擬機網關

點擊「NAT模式」— 選擇「NAT設定」

在「埠轉發」下邊選擇「添加」

虛擬機部分設定完成,接下來是windows部分,打開防火墻設定,選擇高級設定

在左側點擊入站規則,新建入站規則,選擇【埠】,下一步


然后一直點下一步即可,在名稱中寫一個與埠相關的名字即可,
通過以上步驟埠映射即成功,在這里我是將主機的8501和虛擬機的8501進行了映射,也可以進行其他埠的映射,但需要查一下埠是否占用,
打開cmd,切換到本地預測的python程式路徑下并運行即可得出預測結果,如下圖

Docker部分記錄(報錯處理)
拉取鏡像后import cv2報錯:
ImportError: libSM.so.6: cannot open shared object file: No such file or dir
輸入:apt-get install libsm6;
ImportError: libXrender.so.1: cannot open shared object file: No such file or directory
輸入:apt-get install libxrender1
ImportError: libXext.so.6: cannot open shared object file: No such file or directory
輸入:apt-get install libxext-dev
解決docker 影像顯示問題:
解決方法:通過在宿主機(比如我的是Ubuntu18.04)安裝xserver,將docker容器視為客戶端,這樣可以將容器中需要顯示的影像通過掛載的方式顯示在宿主機的螢屏上,簡單的講就是將宿主機的螢屏共享給docker容器.
詳細步驟:
第一步:在宿主機上安裝 xserver
sudo apt install x11-xserver-utils
第二步:在宿主機上修改權限,允許所有用戶訪問顯示介面
xhost +【每次電腦啟動的都要輸入】
出現access control disabled, clients can connect from any host說明操作成功.
第三步:運行Docker鏡像時指定相關引數(這一步最關鍵)
docker run -it -e DISPLAY \
-e QTX11NOMITSHM=1\
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority
--name [container name][image name] bash
運行該命令進入容器后,即可正常使用OpenCV中的imshow()函式來顯示影像.
Docker攝像頭:docker run --device=/dev/video0
樹莓派上安裝tensorflow問題
安裝
樹莓派(arm)框架下安裝tensorflow1.14.0cpu:
可以通過分享的百度網盤安裝:
鏈接:https://pan.baidu.com/s/11JZobbC6K0kKiuiWNTLzUg
提取碼:yxin
其他linux下tensorflow安裝鏈接:piwheels - Links for tensorflow
https://www.piwheels.org/simple/tensorflow/(根據自己的python版本和arm選擇版本下載)
注意:樹莓派采用的arm架構,需要安裝arm架構版的tensorflow
安裝python3的一些依賴
sudo apt update
sudo apt install python3-dev python3-pip python3-venv
sudo apt install libatlas-base-dev # required for numpy
- 更換raspi鏡像源:更換參考:raspbian | 鏡像站使用幫助 | 清華大學開源軟體鏡像站 | Tsinghua Open Source Mirror
- sudo apt-get update
- sudo apt-get upgrade(時間可能會很長)
- 之后會出現檔案管理器閃退的情況,再執行sudo apt full-upgrade,重啟,ok!
- pip3 install grpcio-1.32.0-cp37-cp37m-linux_armv7l.whl
- pip3 install h5py-2.10.0-cp37-cp37m-linux_armv7l
- pip3 install tensorflow-1.14.0-cp37-none-linux_armv7l
樹莓派開啟攝像頭:
sudo raspi-config

將游標移動到攝像頭選項(Camera option)處,并選擇啟用(Enable),在退出 raspi-config 時會要求您重新啟動
raspistill -v -o test.jpg
這個命令將顯示來自攝像頭 5 秒鐘的預覽影像,并且拍攝一張照片,然后保存為檔案 test.jpg,保存在/home/pi的目錄下面,同時顯示出需要相關資訊,
提示h5py不存在
在樹莓派上安裝tensorflow,明明已經安裝了h5py,但還是提示不存在:
解決辦法:numpy可能過高,現安裝的是numpy=1.18.2,h5py=2.10.0
如果換了版本還不行,輸入:sudo apt-get install libhdf5-dev
windows遠程樹莓派
·windows與樹莓派需要同一局域網
·sudo apt install xrdp(沒錯,確實不需要“apt-get”):如果提示更新在更新
sudo apt install tightvncserver(會輸入很多次密碼)
然后就可以用windows遠程桌面了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425035.html
標籤:AI
