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.

85 lines
2.9 KiB
Markdown

# YOLO 训练结果解析功能说明
## 功能概述
`YoloOperationServiceImpl.java` 中新增了自动检测和解析 YOLO 训练结果的功能,当训练日志中出现 "Results saved to" 时,系统会:
1. **自动提取保存路径**:从日志中解析出类似 `D:\data\train\1231_5\runs\train\train18` 的路径
2. **解析识别率信息**:从保存路径中的 `results.csv` 文件或其他日志文件中提取精度、召回率、mAP 等指标
3. **保存到数据库**:将路径和识别率信息保存到 `TrainResultDO` 表中
## 新增方法
### 1. `detectAndParseResultsSaved(String logLine, YoloConfig config, Integer trainId)`
- 检测日志中是否包含 "Results saved to" 或 "Saved to" 关键字
- 调用后续方法进行路径提取和识别率解析
### 2. `extractSavedPath(String logLine)`
- 使用正则表达式从日志行中提取保存路径
- 支持多种格式,如带引号、带统计信息等
### 3. `parseAccuracyFromSavedPath(String savedPath, YoloConfig config, Integer trainId)`
- 查找保存目录中的 `results.csv` 文件
- 解析 CSV 文件中的最后一行(最新结果)
- 提取 precision、recall、mAP50、mAP50-95 等指标
### 4. `parseResultsCsv(File csvFile, YoloConfig config, Integer trainId)`
- 解析 YOLO 生成的 `results.csv` 文件
- CSV 格式通常为:`epoch, train/box_loss, train/cls_loss, train/dfl_loss, metrics/precision, metrics/recall, metrics/mAP50, metrics/mAP50-95`
### 5. `saveAccuracyToDatabase(Integer trainId, double precision, double recall, double map)`
- 将解析到的识别率保存到数据库
- 格式:`precision:0.8521,recall:0.7432,map:0.8123`
## 集成位置
`trainAsync` 方法中,已经集成到日志读取循环中:
```java
if (stdoutLine != null) {
// ... 现有代码 ...
// 检测 "Results saved to" 并解析路径和识别率
detectAndParseResultsSaved(stdoutLine, config, trainId);
}
if (stderrLine != null) {
// ... 现有代码 ...
// 检测 "Results saved to" 并解析路径和识别率
detectAndParseResultsSaved(stderrLine, config, trainId);
}
```
## 预期输出格式
当 YOLO 训练完成时,日志中会出现类似内容:
```
Results saved to D:\data\train\1231_5\runs\train\train18
```
系统会自动:
1. 提取路径:`D:\data\train\1231_5\runs\train\train18`
2. 查找并解析该目录下的 `results.csv` 文件
3. 保存路径和识别率到数据库
## 注意事项
1. **文件权限**:确保 Java 进程有权限访问 YOLO 保存的文件
2. **CSV 格式**:依赖 YOLO 标准的 `results.csv` 输出格式
3. **异步处理**:识别率解析不会阻塞训练过程
4. **错误处理**:解析失败不会影响训练完成状态
## 数据库字段
保存的识别率格式:
```sql
-- TrainResultDO 表的 rate 字段
precision:0.8521,recall:0.7432,map:0.8123
```
路径字段:
```sql
-- TrainResultDO 表的 path 字段
D:\data\train\1231_5\runs\train\train18
```