训练体系整合与标注单阶段化

- 标注:AI 预标注直写 labels_json(去候选确认两阶段);重叠去重(minIoU);全量标注按钮
- 训练:脚本迁移入 server/training/(Go 化 prepare_yolo/analyze_rfdetr,保留 train_server.py);tflite 产物自检并入训练流程(check_tflite)
- 数据目录/权重不进 git;.gitignore 迁移至仓库根
This commit is contained in:
2026-08-26 18:22:56 +08:00
parent 4f39e85882
commit a0b115d954
108 changed files with 10877 additions and 798 deletions
+45
View File
@@ -0,0 +1,45 @@
package common
import (
"context"
"crypto/sha256"
"encoding/hex"
"path/filepath"
"strconv"
"github.com/gogf/gf/v2/frame/g"
)
// 训练体系运行时数据布局(config.yml app.datasetDir,默认 ./workspace,挂载持久化、不提交 git):
//
// datasets/<name>/ 数据集图片(平铺,文件名唯一,标注存 DB dataset_image.labels_json
// models/<name>/ latest.tflite 当前生效副本(无存档,客户端固定下载)
// trainings/<taskId>/ 训练产物(best.tflite + artifact.zip
//
// 训练机与 Go 服务器异机时,数据集经 training 通道同步(见 common/training_runner.go)。
// DatasetDir 训练体系运行时数据根目录:config.yml app.datasetDir(默认 ./workspace
func DatasetDir(ctx context.Context) string {
return g.Cfg().MustGet(ctx, "app.datasetDir", "./workspace").String()
}
// DatasetImagesDir 某数据集图片目录
func DatasetImagesDir(ctx context.Context, datasetName string) string {
return filepath.Join(DatasetDir(ctx), "datasets", datasetName)
}
// DatasetModelsDir 某数据集模型目录
func DatasetModelsDir(ctx context.Context, datasetName string) string {
return filepath.Join(DatasetDir(ctx), "models", datasetName)
}
// TrainingArtifactsDir 某训练任务产物目录(拉回的 best.tflite + artifact.zip
func TrainingArtifactsDir(ctx context.Context, taskId int64) string {
return filepath.Join(DatasetDir(ctx), "trainings", strconv.FormatInt(taskId, 10))
}
// Sha256Hex 计算文件内容 SHA-256 十六进制(模型版本校验用)
func Sha256Hex(data []byte) (string, error) {
sum := sha256.Sum256(data)
return hex.EncodeToString(sum[:]), nil
}