引言
YOLOv11 是最新的目标检测模型,以其高效和准确著称,广泛应用于图像分割、姿态估计等任务。本文将详细介绍如何使用 YOLOv11 训练你的第一个目标检测模型,并通过 TorchServe 在本地进行部署,实现模型的快速推理。
环境准备
在开始之前,确保你的开发环境满足以下要求:
Python 版本:3.8 或以上
PyTorch:1.9 或以上
CUDA:如果使用 GPU,加速训练和推理
TorchServe:用于模型的部署和服务
使用 TorchServe 部署模型
1.模型训练
模型训练看这篇: YOLOv11 快速上手:训练你的第一个目标检测模型
2. 导出模型为 TorchScript
将训练好的模型导出为 TorchScript 格式:
模型格式转换看这篇: 一文带你了解 YOLOv11:入门操作与配置详解
3. 创建模型存档
使用 torch-model-archiver 创建模型存档:
torch-model-archiver --model-name sycmore --version 1.0 --serialized-file ./yolo11n.torchscript.pt --handler ./handler.py --extra-files ./handler.py -f
运行完上述命令之后会在当前目录生成一个.mar文件
注意:需要编写一个自定义的 handler.py,用于定义模型的输入和输出处理。
可加Q群从群文件获取handler.py文件,群号:700511185
可加Q提供付费咨询/远程协助,Q:1005270560
4. 启动 TorchServe
将模型存档移动到模型库目录,并启动 TorchServe:
torchserve --start --ncs --model-store ./ --models sycmore.mar
输出如下所示:
(base) [root@k8s-work3 ultralytics]# WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
2024-10-22T11:04:44,293 [WARN ] main org.pytorch.serve.util.ConfigManager - Your torchserve instance can access any URL to load models. When deploying to production, make sure to limit the set of allowed_urls in config.properties
2024-10-22T11:04:44,305 [INFO ] main org.pytorch.serve.servingsdk.impl.PluginsManager - Initializing plugins manager...
2024-10-22T11:04:44,369 [INFO ] main org.pytorch.serve.metrics.configuration.MetricConfiguration - Successfully loaded metrics configuration from /path_to_python_lib/ts/configs/metrics.yaml
2024-10-22T11:04:44,469 [INFO ] main org.pytorch.serve.ModelServer -
Torchserve version: 0.10.0
TS Home: /path_to_python_lib
Current directory: /path_to_project/ultralytics
Temp directory: /tmp
Metrics config path: /path_to_python_lib/ts/configs/metrics.yaml
Number of GPUs: 1
Number of CPUs: 12
Max heap size: 8004 M
Python executable: /path_to_python_bin/python3.10
Config file: N/A
Inference address: http://127.0.0.1:8080
Management address: http://127.0.0.1:8081
Metrics address: http://127.0.0.1:8082
Model Store: /path_to_project/ultralytics
Initial Models: sycmore.mar
Log dir: /path_to_project/ultralytics/logs
Metrics dir: /path_to_project/ultralytics/logs
Netty threads: 0
Netty client threads: 0
Default workers per model: 1
Blacklist Regex: N/A
Maximum Response Size: 6553500
Maximum Request Size: 6553500
Limit Maximum Image Pixels: true
Prefer direct buffer: false
Allowed Urls: [file://.*|http(s)?://.*]
Custom python dependency for model allowed: false
Enable metrics API: true
Metrics mode: LOG
Disable system metrics: false
Workflow Store: /path_to_project/ultralytics
CPP log config: N/A
Model config: N/A
System metrics command: default
5. 测试部署的模型
测试使用图片:
使用 curl 命令测试部署的模型:
curl http://127.0.0.1:8080/predictions/sycmore -T ./VOC2007_171.jpg
输出结果:
[
{
"box": [
[
104.19720458984375,
9.23455810546875,
635.0165405273438,
630.9921875
]
],
"confidence": [
0.7475572824478149
],
"class": "dog"
}
box:检测框的坐标,格式为 [x1, y1, x2, y2],表示检测框的左上角和右下角坐标。
confidence:检测结果的置信度分数,范围为 [0, 1]。
class:检测到的物体类别名称。
6. 停止部署的模型
当不再需要模型服务时,可以停止 TorchServe:
torchserve --stop