这是一个YOLOv5的云端部署代码,其存在的主要目的是为了解决将YOLOv5训练出来的权重或者官方权重简单快速的部署上云服务或者Docker中,并且可以通过POST请求在任意代码中调用(如Java、Python、Android…)。
- 环境要求:python3和YOLOv5官方指定环境
- 设备要求:Windows(GPU/CPU)、Linux(GPU/CPU)
.
├── Serving_model # 模型文件夹
│ └── commodity
│ └── 1 # 版本
│ └── weights.pt # 权重
├── clear.bat # Windows环境下清理服务缓存
├── clear.sh # Linux环境下清理服务缓存
├── config.yaml # 配置文件
├── detector.py # YOLOv5的封装
├── images # 测试图和POST案例
│ ├── bus.jpg
│ ├── post.py # POST案例
│ └── zidane.jpg
├── models # YOLOv5文件夹
├── server.py # 云端部署主Server启动文件
├── static # 静态网页相关内容
│ ├── css
│ │ └── overall.css
│ ├── icon
│ │ └── favicon.png
│ └── js
│ ├── jquery-1.11.1.min.js
│ └── main.js
├── templates
│ └── Index.html # 静态页面
└── utils # YOLOv5工具文件夹
使用
- 面包多-【源码】YOLOv5云端API部署
- 修改配置文件config.yaml:
# 未解释内容不要做修改!!!
HOST: localhost # 本地测试为localhost,云端部署为0.0.0.0
PORT: 8090 # 根据需求指定端口,默认8090
FOLDER: ['caches', 'results','results_json']
CACHE_FOLDER: caches
RESULTS_FOLDER: results
ALLOWED_EXTENSIONS: ['png', 'jpg', 'jpeg']
MYDEVICE: '0' # 使用的设备('0':代表使用GPU;'cpu':代表使用CPU)
IMG_SIZE: 640 # 输入图片大小640
THRESHOLD: 0.6 # 置信度
DIR_PATH: Serving_model/commodity/
- 修改server.py:
# 第101到114行,确定某种场景下使用后,删除另外一种方式即可
'''
方式一运行,调试情景下使用
app.run()中可以接受两个参数,分别是threaded和processes,用于开启线程支持和进程支持。
1.threaded : 多线程支持,默认为False,即不开启多线程;
2.processes:进程数量,默认为1.
'''
app.run(host=cfg['HOST'], port=cfg['PORT'], debug=False, threaded=True, processes=1)
'''
方式二运行,部署情景下使用
'''
# server = pywsgi.WSGIServer((cfg['HOST'],cfg['PORT']),app)
# server.serve_forever()
- 启动服务:
# 确认自己安装好python3环境,其他环境同YOLOv5官方指定环境
python server.py
输出
============================================
Model Version:1,Use Model Weight:/weights.pt
============================================
YOLOv5 2022-2-9 torch 1.10.1+cu102 CUDA:0 (NVIDIA GeForce GTX 1050, 4096MiB)
Fusing layers...
Model Summary: 213 layers, 7225885 parameters, 0 gradients, 16.5 GFLOPs
* Serving Flask app 'server' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://localhost:8090/ (Press CTRL+C to quit)
-
服务启动后,在浏览器访问(与配置文件
config.yaml
中的HOST
和POST
保持一致访问):http://127.0.0.1:8090
即可 -
测试发送post请求:
# 进入images文件夹下,修改post.py即可
import requests
import json
url = 'http://127.0.0.1:8090/detect'
files = {'file': open('./bus.jpg', 'rb')}
r = requests.post(url, files=files)
print(r.text)
# 之后运行这个post.py文件
输出:
{
"img_info": {
"bus-04": {
"confidence": 0.849,
"label": "bus",
"xmax": 810,
"xmin": 13,
"ymax": 789,
"ymin": 223
},
"person-01": {
"confidence": 0.896,
"label": "person",
"xmax": 810,
"xmin": 672,
"ymax": 878,
"ymin": 395
},
"person-02": {
"confidence": 0.87,
"label": "person",
"xmax": 346,
"xmin": 221,
"ymax": 867,
"ymin": 408
},
"person-03": {
"confidence": 0.852,
"label": "person",
"xmax": 248,
"xmin": 49,
"ymax": 912,
"ymin": 390
}
},
"img_url": "static\caches\ba26d4fff86a4143a00daf058ee458eb.jpg",
"result_url": "static\results\ba26d4fff86a4143a00daf058ee458eb.jpg",
"status": 1,
"time": "1.6179s"
}
- 更换为你自己训练的模型:
请注意,我们的API服务默认支持YOLOv5 version6.1训练出来的权重,其他版本训练出来的权重,需要调整相应的文件,即
modules
和utils
文件夹为对应版本即可!
将你自己训练的模型重新命名为:weights.pt
,在Serving_model\commodity
文件夹下新建一个最新的数字文件夹(例如Serving_model\commodity
文件夹下有一个1
文件夹,你可以新建一个2
文件夹),将weights.pt
放入到新建的这个数字文件夹。
这里我们的server.py里面会自动检测大数字的文件夹并且调用其权重。这里2比1大因此会优先调用2文件夹中的权重。
- 重复上述步骤4-6即可完成自己项目的本地部署和测试。
- 云端部署与本地部署无差异。
前面我们说到将YOLOv5做成了API服务,参数解释如下:
发送参数 | 解释 |
---|---|
file | 二进制读取的图片 |
参数 | 解释 |
---|---|
status | 1 - 成功检测到目标;0 - 未检测到目标 |
img_url | 上传的图片在云端存储地址 |
result_url | 模型检测绘制的图片的云端存储地址 |
result_json | 模型检测信息的云端存储地址 |
img_info | 返回多个物体的检测类别、置信度、xywh值 |
time | 模型预测该张图片的时间 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)