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