
2024史上最全,视频流目标检测,模型部署教程
模型部署超详细教程,零基础小白。
2024史上最全,视频流目标检测,模型部署教程
引言
深度学习的应用已经深入我们生活的方方面面,典型的chatgpt大语言模型,以及对目标的检测与识别,碍于本地算力的局限性,同时也有深度学习项目落地的成本问题,越来越多的模型选择在服务器部署,在提高算力,节约计算成本的同时也使得工程成本的降低。本文主要以虚拟机为例,讲解如何利用 tensorflow-serving 部署深度学习模型处理视频类型数据。
对于tensorflow-serving框架的搭建,有两种办法:第一种是基于dockers拉取镜像的方式,这里的镜像会包含比较完整的我们会使用到的库。第二种是基于linux系统本地的搭建,过程稍微复杂一点,需要额外安装curl等其他的资源库,本文介绍第一种方法。
第一步 安装虚拟机
这里我使用的是centos7,这里不展开讲解安装虚拟机的教程,家人们可以自行查阅网上资料
下载docker
卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
复制指令到命令行,显示complete说明卸载成功。
安装
- 安装关于docker的依赖环境
因为我之前已经安装了相关依赖,这里就没有进行重新安装
yum -y install yum-utils device-mapper-persistent-data lvm2
- 设置国内镜像源下载
这里使用阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 开始安装docker
- 更新包索引
yum makecache fast
- 安装docker
yum -y install docker-ce
- 启动docker 服务
systemctl start docker
- 开启开机自启动(可选)
systemctl enable docker
okok,到现在我们已经把docker安装完成,下载我们来搭建tensorflow-serving 框架。
搭建ensorflow-serving框架
tensorflow-serving 的镜像
官方网址,https://hub.docker.com,通过官网安装一般来说很慢,国内有很多的docker下载的镜像,这里我们现在官网上找到自己需要的镜像,如我们这次需要下载的tensorflow/serving
我们记住这条安装指令,并在其前面加上一个镜像网址这是网站
我这里使用dockerpull.com
所以我们的指令就是:
# 不指定版本默认下载最新的版本
docker pull dockerpull.com/tensorflow/serving
这里下载可能会有一点慢,大家耐心等待,gpu版本体积高达10G是cpu版本的20倍
输入指令
docker images
可以查看我们下载好的镜像
- 给docker镜像改名字
#docker tag id 仓库:标签
docker tag 5f tensorflow/serving:latest
#此时会用不同名但是相同id的两个镜像 此时我们删除其中一个
docker rmi dockerpull.com/tensorflow/serving:latest
利用finalShell上传我们的模型tensorflow类型的模型文件
使用finalShell 连接我们的服务器,并上传指定格式的模型文件到虚拟机,这里我们需要记住模型存放的位置。
使用final上传tensorflow格式保存的模型,放到指定位置。
**
**
创建模型容器
创建一个tensorflow-serving 容器,并指定模型的名称以及模型的名称和模型的位置。
docker run -itd --net host -p 8501:8501 -v $PWD/yolo5_model:/models/model --name tf tensorflow/serving:latest --model_name=yolo5_model --model_base_path=/models/model
$PWD/yolo5_model:/models/model
pwd表示当前路径,我的模型文件就在当前路径的yolo5_model文件夹下
models/model是在容器中的映射路径
-itd 表示在后台运行,-it表示在当前进程运行。
测试模型是否部署成功
curl http://localhost:8501/v1/models/yolo5_model
显示ok表示部署成功。
默认暴露的端口号:如果使用http 协议请求 使用8501端口,如果使用grpc协议 暴露的端口号为8500端口,关于端口的知识大家可以自行了解,这里可以简单理解为每个端口运行一个应用,如果这个端口正在被其他应用程序占用,我们将无法使用这个端口,所以,在这里的端口映射时,即使指定了端口,当指定端口被占用时,也将应用默认的端口号。
final step — 客户端请求服务器的服务
借助服务器强大的算力解决本地算力的不足,将庞大参数的计算放在服务器上。本地只进行轻量化的运算。最终再对返回的结果做进一步的处理
第一种使用http协议进行请求
#server_url = 'http://192.168.47.3:8501/v1/models/yolo5_model:predict' 换成自己本机的ip
data = json.dumps({
"signature_name": "serving_default", # Depends on your model signature
"instances": img.tolist()
})
headers = {"content-type": "application/json"}
json_response = requests.post(server_url, data=data, headers=headers)
predictions = json.loads(json_response.text)['predictions']
请求延时高,存在1-2秒的请求延时
使用grpc 协议提高传输效率
# server_url = '192.168.47.3:8500' # grpc 这时默认的端口号是8500
channel = grpc.insecure_channel(server_url) # 建立 gRPC 通道
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
request = predict_pb2.PredictRequest()
request.model_spec.name = 'yolo5_model' # 模型名称
request.model_spec.signature_name = 'serving_default' # 签名名称
request.inputs['images'].CopyFrom(tf.make_tensor_proto(img)) # 添加输入数据
response = stub.Predict(request, timeout=10.0) # 设置超时
predictions = tf.make_ndarray(response.outputs['output']) # 解析输出
帧率相对较快。
更多推荐
所有评论(0)