YOLO26生产环境部署:Docker集成与API封装指南

1. 镜像环境说明

本镜像基于 YOLO26 官方代码库 构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。适用于快速搭建目标检测、姿态估计等视觉任务的生产级服务。

  • 核心框架: pytorch == 1.10.0
  • CUDA版本: 12.1
  • Python版本: 3.9.5
  • 主要依赖: torchvision==0.11.0, torchaudio==0.10.0, cudatoolkit=11.3, numpy, opencv-python, pandas, matplotlib, tqdm, seaborn 等。

该镜像已配置好 Conda 虚拟环境 yolo,避免依赖冲突,确保模型运行稳定。所有 Ultralytics 工具链均已完成安装,支持从命令行或 Python API 直接调用。


2. 快速上手

2.1 激活环境与切换工作目录

在使用前,请先激活 Conda 环境:

conda activate yolo

为便于代码修改和持久化存储,建议将默认路径下的源码复制到工作区:

cp -r /root/ultralytics-8.4.2 /root/workspace/
cd /root/workspace/ultralytics-8.4.2

此操作可确保后续训练、推理文件保存在用户可控目录中,避免容器重启后数据丢失。


2.2 模型推理

通过修改 detect.py 实现自定义推理任务。以下是一个标准示例:

# -*- coding: utf-8 -*-
"""
@Auth :落花不写码
@File :detect.py
@IDE :PyCharm
@Motto :学习新思想,争做新青年
"""

from ultralytics import YOLO

if __name__ == '__main__':
    # Load a model
    model = YOLO(model=r'yolo26n-pose.pt')
    model.predict(
        source=r'./ultralytics/assets/zidane.jpg',
        save=True,
        show=False,
    )
参数说明:
  • model:指定模型权重路径,支持 .pt 格式文件,如 yolo26s.ptyolo26n-pose.pt
  • source:输入源路径,可为图片、视频文件路径,或摄像头编号(如 0 表示默认摄像头)。
  • save:是否保存结果图像,默认 False;设为 True 将输出至 runs/detect/predict/ 目录。
  • show:是否实时显示检测窗口,服务器环境下建议设为 False

执行推理命令:

python detect.py

推理完成后,结果图像将自动保存,终端会打印检测框坐标、类别及置信度信息。


2.3 模型训练

要进行自定义数据集训练,需准备符合 YOLO 格式的标注数据,并更新 data.yaml 文件。

数据集配置示例(data.yaml):
train: /root/workspace/datasets/mydata/images/train
val: /root/workspace/datasets/mydata/images/val

nc: 80
names: ['person', 'bicycle', 'car', ...]

确保路径正确指向训练集与验证集图像目录,nc 为类别数量,names 为类名列表。

训练脚本 train.py 示例:
# -*- coding: utf-8 -*-
"""
@Auth :落花不写码
@File :train.py
@IDE :PyCharm
@Motto :学习新思想,争做新青年
"""
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    # 加载模型结构
    model = YOLO(model='/root/workspace/ultralytics-8.4.2/ultralytics/cfg/models/26/yolo26.yaml')
    # 可选:加载预训练权重
    model.load('yolo26n.pt')
    
    # 开始训练
    model.train(
        data=r'data.yaml',
        imgsz=640,
        epochs=200,
        batch=128,
        workers=8,
        device='0',  # 使用 GPU 0
        optimizer='SGD',
        close_mosaic=10,  # 前10轮关闭 Mosaic 数据增强
        resume=False,
        project='runs/train',
        name='exp',
        single_cls=False,
        cache=False,
    )

启动训练:

python train.py

训练过程中,日志和检查点将保存在 runs/train/exp/ 目录下,包括 weights/best.ptlast.pt

⚠️ 注意:若从头训练且无强先验知识,不建议加载预训练权重,以免限制收敛方向。


2.4 下载训练结果

训练结束后,可通过 SFTP 工具(如 Xftp)将模型文件下载至本地。

操作方式:

  • 打开 Xftp,连接当前服务器。
  • 在右侧导航至 /root/workspace/ultralytics-8.4.2/runs/train/exp/weights/
  • 双击 best.pt 或拖拽整个文件夹到左侧本地路径完成下载。

对于大文件,建议先压缩再传输以提升效率:

tar -czf best_model.tar.gz runs/train/exp/weights/best.pt

3. 已包含权重文件

镜像内置常用 YOLO26 系列权重文件,位于项目根目录,包括:

  • yolo26n.pt
  • yolo26s.pt
  • yolo26m.pt
  • yolo26l.pt
  • yolo26x.pt
  • yolo26n-pose.pt

这些模型覆盖分类、检测、姿态估计等多种任务,可直接用于推理或微调,节省手动下载时间。

查看权重文件列表:

ls *.pt

4. Docker 集成部署方案

为实现生产环境标准化部署,推荐使用 Docker 容器化封装 YOLO26 服务。

4.1 编写 Dockerfile

FROM nvcr.io/nvidia/pytorch:23.10-py3

# 设置工作目录
WORKDIR /app

# 复制代码与权重
COPY . .

# 创建 Conda 环境并安装依赖
RUN conda create -n yolo python=3.9.5 -y && \
    conda run -n yolo pip install ultralytics opencv-python flask gunicorn

# 暴露服务端口
EXPOSE 5000

# 启动 Flask API 服务
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

4.2 构建镜像

docker build -t yolo26-inference .

4.3 运行容器

docker run -d --gpus all -p 5000:5000 --name yolo-service yolo26-inference

使用 --gpus all 确保容器能访问 GPU 资源,提升推理速度。


5. API 封装:构建 RESTful 推理服务

使用 Flask 封装 YOLO26 模型为 HTTP 接口,便于前端或其他系统调用。

5.1 创建 app.py

from flask import Flask, request, jsonify, send_file
from ultralytics import YOLO
import cv2
import os
import uuid

app = Flask(__name__)
UPLOAD_FOLDER = '/app/uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

# 加载模型
model = YOLO('yolo26s.pt')

@app.route('/predict', methods=['POST'])
def predict():
    if 'file' not in request.files:
        return jsonify({'error': 'No file uploaded'}), 400
    
    file = request.files['file']
    filepath = os.path.join(UPLOAD_FOLDER, f"{uuid.uuid4()}.jpg")
    file.save(filepath)

    # 执行推理
    results = model(filepath)
    result_path = results[0].save_dir  # 获取保存路径
    output_img = os.path.join(result_path, os.path.basename(filepath))
    
    # 返回检测结果图像
    return send_file(output_img, mimetype='image/jpeg')

@app.route('/health', methods=['GET'])
def health():
    return jsonify({'status': 'healthy', 'model': 'yolo26s'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

5.2 API 接口说明

  • POST /predict

    • 功能:上传图像并返回检测结果图
    • 请求格式:multipart/form-data,字段名为 file
    • 响应:处理后的图像(含边界框)
  • GET /health

    • 功能:健康检查接口
    • 响应:JSON 格式状态信息

5.3 测试 API

使用 curl 测试:

curl -X POST http://localhost:5000/predict \
     -F "file=@./test.jpg" \
     --output result.jpg

成功后将在本地生成 result.jpg,包含检测框和标签。


6. 生产优化建议

6.1 性能调优

  • 批处理推理:对多张图像合并为 batch 输入,提高 GPU 利用率。
  • TensorRT 加速:使用 engine 格式模型提升推理速度。
  • 异步处理队列:结合 Celery + Redis 实现高并发请求排队机制。

6.2 安全性增强

  • 添加 JWT 认证中间件保护 API 接口。
  • 使用 Nginx 反向代理并启用 HTTPS。
  • 限制上传文件类型与大小,防止恶意攻击。

6.3 日志与监控

  • 集成 Prometheus + Grafana 监控 GPU 使用率、QPS、延迟等指标。
  • 记录每次请求的输入、输出与耗时,便于问题追踪。

7. 总结

本文详细介绍了 YOLO26 在生产环境中的完整部署流程,涵盖:

  • 基于官方镜像的快速启动与训练推理实践;
  • 权重管理与数据集配置方法;
  • Docker 容器化封装策略;
  • 使用 Flask 构建 RESTful API 的具体实现;
  • 高可用、高性能部署的最佳实践建议。

通过上述方案,开发者可在短时间内将 YOLO26 模型投入实际业务场景,支撑智能安防、工业质检、行为识别等应用。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐