下面我将详细讲解 "yolov5 项目部署+微信小程序前端展示的全过程",该过程主要包括以下几个步骤:
- 数据准备
- 模型训练
- 模型转换
- 模型部署
- 小程序展示
下面我将逐一介绍每个步骤所需的具体操作。
数据准备
首先需要准备训练数据,yolov5 支持的数据格式有图片和标签文件,其中标签文件可以是 .txt
或 .json
格式。我们需要至少准备两个文件夹,一个是存放图片,一个是存放标签文件。
示例:
/images_folder
├── 1.jpg
├── 2.jpg
├── ...
├── 100.jpg
/labels_folder
├── 1.txt
├── 2.txt
├── ...
├── 100.txt
其中标签文件的格式为:
<class_index> <x_center> <y_center> <width> <height>
各字段含义:
- class_index: 物体类别索引,从0开始。注意:要与训练时配置的类别一一对应。
- x_center,y_center: 中心点坐标,相对于图片的宽高。
- width,height:框的宽高,基于图片的宽高比例。
模型训练
接下来要进行模型训练,这里我们选择使用 yolov5
中的 train.py
文件训练模型。训练命令如下所示:
python train.py --data data.yaml --cfg ./models/yolov5s.yaml --weights '' --batch-size 4 --epochs 100
其中,
data.yaml
: 数据的配置文件路径。yolov5s.yaml
: 模型配置文件路径。weights
: 预训练模型的路径。如果没有则置空。batch-size
: 训练批大小。epochs
: 训练的轮数。
模型训练完成后,会得到一个 .pt
文件,可以用于后续转换和部署。
模型转换
为了在前端部署时使用,我们需要将训练好的 .pt
模型转化为 .ptl
格式的模型,并且使用 export.py
文件转换成 onnx
模型。转换命令如下所示:
python export.py --weights xxx.pt --img-size 640 --batch-size 1 --dynamic
其中,
- --weights:指定训练好的模型权重路径。
- --img-size:指定模型收缩后的图像分辨率。
- --batch-size:推理时的批次大小。
- --dynamic:指定是否使用动态图计算图。
转换完成后,会得到一个 yolov5s.onnx
文件,可以用于后续的部署。
模型部署
在部署前,需要先搭建好模型服务环境,一般选择使用 torchserve
进行模型服务。这里我将使用 fastapi
+ torchserve
的方式进行部署。
首先,需要在 torchserve
上注册模型,并设定输入和输出格式。可以使用以下命令进行注册:
curl -X POST http://localhost:8081/models -H 'Content-Type: application/json' -d '{"model_name":"yolov5s", "url":"yolov5s.mar", "batch_size": 1, "max_batch_delay": 1000, "initial_workers": 1, "synchronous": true}'
其中,
model_name
:模型名称。url
:模型文件名。synchronous
:是否使用同步模式,即批量大小为1。
然后将模型 .onnx
文件打包为 .mar
文件,可以使用以下命令:
torch-model-archiver --model-name yolov5s --version 1.0 --model-file yolov5s.onnx --handler image_classifier --extra-files ./models/yolov5s.yaml,./models/data.yaml
其中,
model_file
:转换的模型文件路径。handler
:模型的处理方式,此处使用的是image_classifier
。extra-files
:额外需要的文件。
最后将生成的 .mar
文件上传到 torchserve
上,也可以通过命令行进行上传:
curl -v -X POST "http://localhost:8081/models/yolov5s/1.0?initialWorkers=1&synchronous=true" -T yolov5s.mar
模型部署完成后,可以通过访问 http://localhost:8080/models
查看已经部署的模型。
小程序展示
最后,使用微信小程序作为前端,进行推理结果展示。这里需要将前面步骤中的文件和服务部署到服务器上,并且与小程序进行交互。
示例中使用的是 Python FastAPI 框架作为服务器,下面代码给出了一个示例:
from fastapi import FastAPI, File, UploadFile
from typing import List
import requests
import json
app = FastAPI()
url = 'http://localhost:8080/predictions/yolov5s'
headers = {'Content-Type': 'application/json'}
labels = ["person", "car", "bike", "trunk"]
@app.post("/predict")
async def predict(upload_file: UploadFile):
with open(upload_file.filename, "wb") as buffer:
buffer.write(await upload_file.read())
files = {'file': (upload_file.filename, open(upload_file.filename, 'rb'), 'image/jpeg')}
response = requests.post(url, files=files)
results = response.json()[0]['predictions']
ret = []
for result in results:
x1, y1, x2, y2 = result['bbox']
x_center = (x1 + x2) / 2
y_center = (y1 + y2) / 2
width = x2 - x1
height = y2 - y1
category = labels[result['class_index']]
ret.append({
'x_center': x_center,
'y_center': y_center,
'width': width,
'height': height,
'category': category
})
return {'status': 'ok', 'predict_result': ret}
其中,
upload_file
:上传的文件,可以通过 Postman 进行测试。headers
:把图片转成指定格式,并发送给 TorchServe。
具体实现可以参考官方文档和示例代码。这样,我们就可以在小程序上访问该接口,进行推理并展示结果。
以上就是 yolov5 项目部署+微信小程序前端展示的全过程,其中包含了数据准备、模型训练、模型转换、模型部署和小程序展示等多个步骤。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:yolov5项目部署+微信小程序前端展示的全过程 - Python技术站