使用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 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
- 更换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://blog.csdn.net/z240626191s/article/details/122959566