314 lines
5.7 KiB
Markdown
314 lines
5.7 KiB
Markdown
|
|
# YOLOv8模型配置指南
|
|||
|
|
|
|||
|
|
本系统使用**YOLOv8**(Ultralytics)进行目标检测推理。
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 准备模型文件
|
|||
|
|
|
|||
|
|
将YOLOv8训练好的模型放到指定位置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 模型文件路径
|
|||
|
|
python-inference-service/models/best.pt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 准备类别文件(可选)
|
|||
|
|
|
|||
|
|
创建 `classes.txt` 文件,每行一个类别名称:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 文件路径
|
|||
|
|
python-inference-service/models/classes.txt
|
|||
|
|
|
|||
|
|
# 内容示例
|
|||
|
|
person
|
|||
|
|
car
|
|||
|
|
truck
|
|||
|
|
bicycle
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 启动服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用部署脚本
|
|||
|
|
deploy.bat # Windows
|
|||
|
|
./deploy.sh # Linux/Mac
|
|||
|
|
|
|||
|
|
# 或手动启动
|
|||
|
|
docker-compose up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 训练YOLOv8模型
|
|||
|
|
|
|||
|
|
如果还没有训练好的模型,可以按以下步骤训练:
|
|||
|
|
|
|||
|
|
### 1. 安装Ultralytics
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pip install ultralytics
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 准备数据集
|
|||
|
|
|
|||
|
|
创建数据集配置文件 `data.yaml`:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# 数据集路径
|
|||
|
|
path: /path/to/dataset
|
|||
|
|
train: images/train
|
|||
|
|
val: images/val
|
|||
|
|
|
|||
|
|
# 类别
|
|||
|
|
nc: 4 # 类别数量
|
|||
|
|
names: ['person', 'car', 'truck', 'bicycle'] # 类别名称
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 训练模型
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
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. 导出模型
|
|||
|
|
|
|||
|
|
训练完成后,将最佳模型复制到项目中:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 复制模型文件
|
|||
|
|
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`:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 置信度阈值
|
|||
|
|
self.conf_threshold = 0.25 # 默认0.25,降低可检测更多目标
|
|||
|
|
|
|||
|
|
# 输入图像尺寸
|
|||
|
|
self.img_size = 640 # 默认640,可改为320、1280等
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配置文件
|
|||
|
|
|
|||
|
|
`python-inference-service/models/models.json`:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
[
|
|||
|
|
{
|
|||
|
|
"name": "yolov8_detector",
|
|||
|
|
"path": "models/yolov8_model.py",
|
|||
|
|
"size": [640, 640],
|
|||
|
|
"comment": "YOLOv8检测模型"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
参数说明:
|
|||
|
|
- `name`: 模型名称(API调用时使用)
|
|||
|
|
- `path`: 模型包装类路径
|
|||
|
|
- `size`: 输入图像尺寸 [宽度, 高度]
|
|||
|
|
|
|||
|
|
## 多模型配置
|
|||
|
|
|
|||
|
|
如果有多个模型,可以配置多个:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
[
|
|||
|
|
{
|
|||
|
|
"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`。
|
|||
|
|
|
|||
|
|
## 测试模型
|
|||
|
|
|
|||
|
|
### 本地测试
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
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测试:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 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支持:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# 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. 调整图像尺寸
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 在 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模型:
|
|||
|
|
|
|||
|
|
1. 使用YOLOv8重新训练(推荐)
|
|||
|
|
2. 或使用 `garbage_model.py` 作为模板支持YOLOv5
|
|||
|
|
|
|||
|
|
## 参考资料
|
|||
|
|
|
|||
|
|
- [Ultralytics YOLOv8文档](https://docs.ultralytics.com/)
|
|||
|
|
- [YOLOv8 GitHub](https://github.com/ultralytics/ultralytics)
|
|||
|
|
- [模型训练教程](https://docs.ultralytics.com/modes/train/)
|
|||
|
|
- [推理示例](https://docs.ultralytics.com/modes/predict/)
|
|||
|
|
|
|||
|
|
## 技术支持
|
|||
|
|
|
|||
|
|
如遇问题:
|
|||
|
|
1. 查看服务日志:`docker-compose logs python-service`
|
|||
|
|
2. 查看模型加载日志
|
|||
|
|
3. 测试模型是否可以本地加载
|
|||
|
|
4. 检查环境配置是否正确
|