使用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

其他linuxtensorflow安装链接:piwheels - Links for tensorflowhttps://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

  1. 更换raspi镜像源:更换参考:raspbian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
  2. sudo apt-get update
  3. sudo apt-get upgrade(时间可能会很长)
  4. 之后会出现文件管理器闪退的情况,再执行sudo apt full-upgrade,重启,ok!
  5. pip3 install grpcio-1.32.0-cp37-cp37m-linux_armv7l.whl
  6. pip3 install h5py-2.10.0-cp37-cp37m-linux_armv7l
  7. 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.2h5py=2.10.0

                 如果换了版本还不行,输入:sudo apt-get install libhdf5-dev

windows远程树莓派 

·windows与树莓派需要同一局域网

·sudo apt install xrdp(没错,确实不需要“apt-get”):如果提示更新在更新

 sudo apt install tightvncserver(会输入很多次密码)

然后就可以用windows远程桌面了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐