5.7 KiB
5.7 KiB
YOLOv8模型配置指南
本系统使用YOLOv8(Ultralytics)进行目标检测推理。
快速开始
1. 准备模型文件
将YOLOv8训练好的模型放到指定位置:
# 模型文件路径
python-inference-service/models/best.pt
2. 准备类别文件(可选)
创建 classes.txt 文件,每行一个类别名称:
# 文件路径
python-inference-service/models/classes.txt
# 内容示例
person
car
truck
bicycle
3. 启动服务
# 使用部署脚本
deploy.bat # Windows
./deploy.sh # Linux/Mac
# 或手动启动
docker-compose up -d
训练YOLOv8模型
如果还没有训练好的模型,可以按以下步骤训练:
1. 安装Ultralytics
pip install ultralytics
2. 准备数据集
创建数据集配置文件 data.yaml:
# 数据集路径
path: /path/to/dataset
train: images/train
val: images/val
# 类别
nc: 4 # 类别数量
names: ['person', 'car', 'truck', 'bicycle'] # 类别名称
3. 训练模型
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt') # n, s, m, l, x 可选
# 训练模型
results = model.train(
data='data.yaml',
epochs=100,
imgsz=640,
batch=16,
device=0 # GPU设备ID,CPU使用'cpu'
)
# 训练完成后,最佳模型保存在 runs/detect/train/weights/best.pt
4. 导出模型
训练完成后,将最佳模型复制到项目中:
# 复制模型文件
cp runs/detect/train/weights/best.pt python-inference-service/models/best.pt
# 创建类别文件
echo "person
car
truck
bicycle" > python-inference-service/models/classes.txt
模型配置
修改模型参数
编辑 python-inference-service/models/yolov8_model.py:
# 置信度阈值
self.conf_threshold = 0.25 # 默认0.25,降低可检测更多目标
# 输入图像尺寸
self.img_size = 640 # 默认640,可改为320、1280等
配置文件
python-inference-service/models/models.json:
[
{
"name": "yolov8_detector",
"path": "models/yolov8_model.py",
"size": [640, 640],
"comment": "YOLOv8检测模型"
}
]
参数说明:
name: 模型名称(API调用时使用)path: 模型包装类路径size: 输入图像尺寸 [宽度, 高度]
多模型配置
如果有多个模型,可以配置多个:
[
{
"name": "person_detector",
"path": "models/person_model.py",
"size": [640, 640]
},
{
"name": "vehicle_detector",
"path": "models/vehicle_model.py",
"size": [640, 640]
}
]
然后为每个模型创建对应的模型文件,参考 yolov8_model.py。
测试模型
本地测试
from ultralytics import YOLO
# 加载模型
model = YOLO('python-inference-service/models/best.pt')
# 测试图像
results = model('test.jpg')
# 显示结果
results[0].show()
# 打印检测结果
for r in results:
print(r.boxes)
API测试
启动服务后,使用curl测试:
# 1. 检查服务健康
curl http://localhost:10080/python-api/health
# 2. 查看可用模型
curl http://localhost:10080/python-api/api/models
# 3. 测试检测(文件上传)
curl -X POST "http://localhost:10080/python-api/api/detect/file" \
-F "model_name=yolov8_detector" \
-F "file=@test.jpg"
性能优化
1. 使用GPU
确保Docker配置了GPU支持:
# docker-compose.yml
python-service:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
2. 选择合适的模型大小
YOLOv8提供多种尺寸:
| 模型 | 参数量 | 速度 | 精度 |
|---|---|---|---|
| YOLOv8n | 3.2M | 最快 | 较低 |
| YOLOv8s | 11.2M | 快 | 中等 |
| YOLOv8m | 25.9M | 中等 | 较高 |
| YOLOv8l | 43.7M | 慢 | 高 |
| YOLOv8x | 68.2M | 最慢 | 最高 |
根据需求选择:
- 实时处理 → 使用
yolov8n.pt或yolov8s.pt - 高精度 → 使用
yolov8l.pt或yolov8x.pt
3. 调整图像尺寸
# 在 yolov8_model.py 中
self.img_size = 320 # 更快但精度降低
# 或
self.img_size = 1280 # 更慢但精度提高
常见问题
Q1: 模型加载失败
错误:FileNotFoundError: best.pt not found
解决:确保模型文件在 python-inference-service/models/best.pt
Q2: GPU不可用
错误:CUDA not available
解决:
1. 检查NVIDIA驱动安装
2. 检查Docker GPU支持
3. 使用 docker run --gpus all 测试GPU
Q3: 检测结果为空
原因:
1. 置信度阈值太高
2. 模型未正确训练
3. 输入图像与训练数据差异大
解决:
1. 降低 conf_threshold
2. 检查模型训练情况
3. 检查输入图像质量
Q4: 推理速度慢
解决:
1. 使用GPU加速
2. 使用更小的模型(如yolov8n)
3. 减小输入图像尺寸
4. 批量处理多张图像
模型版本差异
YOLOv5 vs YOLOv8
本系统已从YOLOv5升级到YOLOv8:
| 特性 | YOLOv5 | YOLOv8 |
|---|---|---|
| 精度 | 较高 | 更高 |
| 速度 | 快 | 更快 |
| API | yolov5 | ultralytics |
| 训练 | 复杂 | 简单 |
迁移说明
如果之前使用YOLOv5模型:
- 使用YOLOv8重新训练(推荐)
- 或使用
garbage_model.py作为模板支持YOLOv5
参考资料
技术支持
如遇问题:
- 查看服务日志:
docker-compose logs python-service - 查看模型加载日志
- 测试模型是否可以本地加载
- 检查环境配置是否正确