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