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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 增强的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" 检测逻辑,以实现完整的功能覆盖。