You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.2 KiB
Markdown

# 增强的YOLO结果解析功能
## 问题解决
用户提到分类任务中 results.csv 文件格式不同,可能没有 mAP50-95 指标。现已增强解析功能以支持多种任务类型。
## 主要改进
### 1. 增强的 `parseResultsCsv` 方法
现在支持不同任务类型的CSV格式解析
#### 分类任务 (classify)
- **主要指标**accuracy, top1_acc, top5_acc
- **CSV格式示例**
```
epoch,train/loss,val/loss,metrics/accuracy,metrics/top1_acc,metrics/top5_acc
0,1.234,0.987,0.8521,0.8521,0.9543
```
- **解析逻辑**
- 优先解析 `accuracy` 作为主要准确率
- 同时记录 Top-1 和 Top-5 准确率
- 保存格式:`accuracy:0.8521`
#### 检测任务 (detect)
- **主要指标**precision, recall, mAP50, mAP50-95
- **CSV格式示例**
```
epoch,train/box_loss,train/cls_loss,train/dfl_loss,metrics/precision,metrics/recall,metrics/mAP50,metrics/mAP50-95
0,0.123,0.456,0.789,0.8521,0.7432,0.8123,0.7654
```
- **保存格式**`precision:0.8521,recall:0.7432,map:0.7654`
#### 分割任务 (segment)
- **主要指标**:同检测任务
- **处理方式**:与检测任务相同
### 2. 新增方法
#### `parseGenericResults`
- 用于处理未知任务类型
- 通用解析逻辑,尝试识别常见的指标名称
#### `saveClassificationAccuracyToDatabase`
- 专门用于保存分类任务的准确率
- 区别于检测/分割任务的保存方法
### 3. 智能任务类型识别
```java
String taskType = config.getTaskType();
if (taskType == null) {
taskType = "detect"; // 默认为检测任务
}
```
根据 `YoloConfig.taskType` 自动选择合适的解析策略。
## 集成状态
### ✅ 已完成的集成
1. **训练任务 (trainAsync)** - 完全集成
2. **检测 "Results saved to"** - 所有任务类型都支持
3. **多任务类型解析** - 支持分类、检测、分割
### ⚠️ 待完成的集成
虽然代码逻辑已经增强,但以下方法中的 "Results saved to" 检测还需要添加:
1. **验证方法 (validate)** - 需要在日志读取循环中添加检测
2. **预测方法 (predict)** - 需要在日志读取循环中添加检测
## 使用示例
### 分类任务输出
```
检测到YOLO结果保存路径: D:\data\train\classify\runs\classify\train1
分类任务解析到准确率(Accuracy): 0.8521
分类任务解析到Top-1准确率: 0.8521
分类任务解析到Top-5准确率: 0.9543
已保存分类任务准确率到数据库 - 训练ID: 12345, 准确率: accuracy:0.8521
```
### 检测任务输出
```
检测到YOLO结果保存路径: D:\data\train\detect\runs\detect\train1
检测/分割任务解析到识别率 - Precision: 0.8521, Recall: 0.7432, mAP: 0.7654
已保存识别率到数据库 - 训练ID: 12346, 识别率: precision:0.8521,recall:0.7432,map:0.7654
```
## 数据库字段格式
### 分类任务
```sql
rate: "accuracy:0.8521"
```
### 检测/分割任务
```sql
rate: "precision:0.8521,recall:0.7432,map:0.7654"
```
## 错误处理
- 如果CSV解析失败不会影响任务完成状态
- 支持部分指标解析,即使某些字段缺失
- 详细的日志记录便于调试
## 下一步
需要为 `validate``predict` 方法添加相同的 "Results saved to" 检测逻辑,以实现完整的功能覆盖。