版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

View File

@@ -0,0 +1,239 @@
namespace OrpaonVision.Model.Training;
/// <summary>
/// 数据集模型。
/// </summary>
public sealed class DatasetModel
{
/// <summary>
/// 数据集ID。
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// 数据集名称。
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 数据集描述。
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 数据集类型。
/// </summary>
public DatasetType Type { get; set; }
/// <summary>
/// 数据集状态。
/// </summary>
public DatasetStatus Status { get; set; }
/// <summary>
/// 数据集路径。
/// </summary>
public string Path { get; set; } = string.Empty;
/// <summary>
/// 数据集格式。
/// </summary>
public string Format { get; set; } = string.Empty;
/// <summary>
/// 总图像数量。
/// </summary>
public int TotalImageCount { get; set; }
/// <summary>
/// 训练图像数量。
/// </summary>
public int TrainImageCount { get; set; }
/// <summary>
/// 验证图像数量。
/// </summary>
public int ValidationImageCount { get; set; }
/// <summary>
/// 测试图像数量。
/// </summary>
public int TestImageCount { get; set; }
/// <summary>
/// 总标注数量。
/// </summary>
public int TotalAnnotationCount { get; set; }
/// <summary>
/// 类别数量。
/// </summary>
public int ClassCount { get; set; }
/// <summary>
/// 类别列表JSON。
/// </summary>
public string ClassListJson { get; set; } = string.Empty;
/// <summary>
/// 训练集比例。
/// </summary>
public double TrainRatio { get; set; }
/// <summary>
/// 验证集比例。
/// </summary>
public double ValidationRatio { get; set; }
/// <summary>
/// 测试集比例。
/// </summary>
public double TestRatio { get; set; }
/// <summary>
/// 数据增强配置JSON。
/// </summary>
public string? DataAugmentationJson { get; set; }
/// <summary>
/// 统计信息JSON。
/// </summary>
public string? StatisticsJson { get; set; }
/// <summary>
/// 版本号。
/// </summary>
public string Version { get; set; } = "1.0.0";
/// <summary>
/// 标签文件路径。
/// </summary>
public string? LabelsFilePath { get; set; }
/// <summary>
/// 配置文件路径。
/// </summary>
public string? ConfigFilePath { get; set; }
/// <summary>
/// 是否已验证。
/// </summary>
public bool IsValidated { get; set; }
/// <summary>
/// 验证时间UTC
/// </summary>
public DateTime? ValidatedAtUtc { get; set; }
/// <summary>
/// 验证人。
/// </summary>
public string? ValidatedBy { get; set; }
/// <summary>
/// 创建人ID。
/// </summary>
public Guid CreatedById { get; set; }
/// <summary>
/// 创建人姓名。
/// </summary>
public string CreatedByName { get; set; } = string.Empty;
/// <summary>
/// 创建时间UTC
/// </summary>
public DateTime CreatedAtUtc { get; set; }
/// <summary>
/// 更新时间UTC
/// </summary>
public DateTime UpdatedAtUtc { get; set; }
/// <summary>
/// 创建人。
/// </summary>
public string CreatedBy { get; set; } = string.Empty;
/// <summary>
/// 更新人。
/// </summary>
public string UpdatedBy { get; set; } = string.Empty;
/// <summary>
/// 备注。
/// </summary>
public string? Remark { get; set; }
}
/// <summary>
/// 数据集类型枚举。
/// </summary>
public enum DatasetType
{
/// <summary>
/// 目标检测。
/// </summary>
ObjectDetection = 0,
/// <summary>
/// 图像分类。
/// </summary>
ImageClassification = 1,
/// <summary>
/// 语义分割。
/// </summary>
SemanticSegmentation = 2,
/// <summary>
/// 实例分割。
/// </summary>
InstanceSegmentation = 3
}
/// <summary>
/// 数据集状态枚举。
/// </summary>
public enum DatasetStatus
{
/// <summary>
/// 草稿。
/// </summary>
Draft = 0,
/// <summary>
/// 准备中。
/// </summary>
Preparing = 1,
/// <summary>
/// 已准备。
/// </summary>
Ready = 2,
/// <summary>
/// 验证中。
/// </summary>
Validating = 3,
/// <summary>
/// 已验证。
/// </summary>
Validated = 4,
/// <summary>
/// 验证失败。
/// </summary>
ValidationFailed = 5,
/// <summary>
/// 已发布。
/// </summary>
Published = 6,
/// <summary>
/// 已停用。
/// </summary>
Disabled = 7
}

View File

@@ -0,0 +1,345 @@
namespace OrpaonVision.Model.Training;
/// <summary>
/// 训练模型模型。
/// </summary>
public sealed class TrainingModelModel
{
/// <summary>
/// 模型ID。
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// 模型名称。
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 模型描述。
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 模型类型。
/// </summary>
public string ModelType { get; set; } = string.Empty;
/// <summary>
/// 模型架构。
/// </summary>
public string Architecture { get; set; } = string.Empty;
/// <summary>
/// 模型版本。
/// </summary>
public string Version { get; set; } = string.Empty;
/// <summary>
/// 模型状态。
/// </summary>
public ModelStatus Status { get; set; }
/// <summary>
/// 模型路径。
/// </summary>
public string ModelPath { get; set; } = string.Empty;
/// <summary>
/// 权重文件路径。
/// </summary>
public string? WeightsPath { get; set; }
/// <summary>
/// 配置文件路径。
/// </summary>
public string? ConfigPath { get; set; }
/// <summary>
/// 标签文件路径。
/// </summary>
public string? LabelsPath { get; set; }
/// <summary>
/// 输入尺寸。
/// </summary>
public (int Width, int Height) InputSize { get; set; }
/// <summary>
/// 类别数量。
/// </summary>
public int ClassCount { get; set; }
/// <summary>
/// 类别名称列表。
/// </summary>
public string ClassNamesJson { get; set; } = string.Empty;
/// <summary>
/// 模型大小(字节)。
/// </summary>
public long ModelSize { get; set; }
/// <summary>
/// 训练任务ID。
/// </summary>
public Guid TrainingTaskId { get; set; }
/// <summary>
/// 基础模型ID。
/// </summary>
public Guid? BaseModelId { get; set; }
/// <summary>
/// 训练数据集ID。
/// </summary>
public Guid DatasetId { get; set; }
/// <summary>
/// 验证mAP。
/// </summary>
public double ValidationMap { get; set; }
/// <summary>
/// 验证损失。
/// </summary>
public double ValidationLoss { get; set; }
/// <summary>
/// 测试mAP。
/// </summary>
public double TestMap { get; set; }
/// <summary>
/// 测试损失。
/// </summary>
public double TestLoss { get; set; }
/// <summary>
/// 推理速度FPS
/// </summary>
public double InferenceFps { get; set; }
/// <summary>
/// 模型精度JSON。
/// </summary>
public string? AccuracyMetricsJson { get; set; }
/// <summary>
/// 训练历史JSON。
/// </summary>
public string? TrainingHistoryJson { get; set; }
/// <summary>
/// 是否已部署。
/// </summary>
public bool IsDeployed { get; set; }
/// <summary>
/// 部署时间UTC
/// </summary>
public DateTime? DeployedAtUtc { get; set; }
/// <summary>
/// 部署人。
/// </summary>
public string? DeployedBy { get; set; }
/// <summary>
/// 是否为当前版本。
/// </summary>
public bool IsCurrentVersion { get; set; }
/// <summary>
/// 创建人ID。
/// </summary>
public Guid CreatedById { get; set; }
/// <summary>
/// 创建人姓名。
/// </summary>
public string CreatedByName { get; set; } = string.Empty;
/// <summary>
/// 创建时间UTC
/// </summary>
public DateTime CreatedAtUtc { get; set; }
/// <summary>
/// 更新时间UTC
/// </summary>
public DateTime UpdatedAtUtc { get; set; }
/// <summary>
/// 创建人。
/// </summary>
public string CreatedBy { get; set; } = string.Empty;
/// <summary>
/// 更新人。
/// </summary>
public string UpdatedBy { get; set; } = string.Empty;
/// <summary>
/// 备注。
/// </summary>
public string? Remark { get; set; }
}
/// <summary>
/// 模型状态枚举。
/// </summary>
public enum ModelStatus
{
/// <summary>
/// 训练中。
/// </summary>
Training = 0,
/// <summary>
/// 已训练。
/// </summary>
Trained = 1,
/// <summary>
/// 验证中。
/// </summary>
Validating = 2,
/// <summary>
/// 已验证。
/// </summary>
Validated = 3,
/// <summary>
/// 验证失败。
/// </summary>
ValidationFailed = 4,
/// <summary>
/// 已发布。
/// </summary>
Published = 5,
/// <summary>
/// 已部署。
/// </summary>
Deployed = 6,
/// <summary>
/// 已停用。
/// </summary>
Disabled = 7,
/// <summary>
/// 已归档。
/// </summary>
Archived = 8
}
/// <summary>
/// 训练日志模型。
/// </summary>
public sealed class TrainingLogModel
{
/// <summary>
/// 日志ID。
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// 训练任务ID。
/// </summary>
public Guid TrainingTaskId { get; set; }
/// <summary>
/// 轮次。
/// </summary>
public int Epoch { get; set; }
/// <summary>
/// 步骤。
/// </summary>
public int Step { get; set; }
/// <summary>
/// 日志级别。
/// </summary>
public LogLevel LogLevel { get; set; }
/// <summary>
/// 日志消息。
/// </summary>
public string Message { get; set; } = string.Empty;
/// <summary>
/// 训练损失。
/// </summary>
public double? TrainLoss { get; set; }
/// <summary>
/// 验证损失。
/// </summary>
public double? ValidationLoss { get; set; }
/// <summary>
/// 训练mAP。
/// </summary>
public double? TrainMap { get; set; }
/// <summary>
/// 验证mAP。
/// </summary>
public double? ValidationMap { get; set; }
/// <summary>
/// 学习率。
/// </summary>
public double? LearningRate { get; set; }
/// <summary>
/// 额外数据JSON。
/// </summary>
public string? ExtraDataJson { get; set; }
/// <summary>
/// 记录时间UTC
/// </summary>
public DateTime LoggedAtUtc { get; set; }
/// <summary>
/// 创建时间UTC
/// </summary>
public DateTime CreatedAtUtc { get; set; }
}
/// <summary>
/// 日志级别枚举。
/// </summary>
public enum LogLevel
{
/// <summary>
/// 调试。
/// </summary>
Debug = 0,
/// <summary>
/// 信息。
/// </summary>
Info = 1,
/// <summary>
/// 警告。
/// </summary>
Warning = 2,
/// <summary>
/// 错误。
/// </summary>
Error = 3,
/// <summary>
/// 致命错误。
/// </summary>
Fatal = 4
}

View File

@@ -0,0 +1,280 @@
namespace OrpaonVision.Model.Training;
/// <summary>
/// 训练任务模型。
/// </summary>
public sealed class TrainingTaskModel
{
/// <summary>
/// 任务ID。
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// 任务名称。
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 任务描述。
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 任务类型。
/// </summary>
public TrainingTaskType TaskType { get; set; }
/// <summary>
/// 任务状态。
/// </summary>
public TrainingTaskStatus Status { get; set; }
/// <summary>
/// 优先级。
/// </summary>
public TrainingPriority Priority { get; set; }
/// <summary>
/// 模型类型。
/// </summary>
public string ModelType { get; set; } = string.Empty;
/// <summary>
/// 基础模型ID。
/// </summary>
public Guid? BaseModelId { get; set; }
/// <summary>
/// 数据集ID。
/// </summary>
public Guid DatasetId { get; set; }
/// <summary>
/// 训练参数JSON。
/// </summary>
public string TrainingParametersJson { get; set; } = string.Empty;
/// <summary>
/// 验证参数JSON。
/// </summary>
public string ValidationParametersJson { get; set; } = string.Empty;
/// <summary>
/// 计划开始时间UTC
/// </summary>
public DateTime? PlannedStartAtUtc { get; set; }
/// <summary>
/// 实际开始时间UTC
/// </summary>
public DateTime? ActualStartAtUtc { get; set; }
/// <summary>
/// 实际结束时间UTC
/// </summary>
public DateTime? ActualEndAtUtc { get; set; }
/// <summary>
/// 计划训练时长(分钟)。
/// </summary>
public int PlannedDurationMinutes { get; set; }
/// <summary>
/// 实际训练时长(分钟)。
/// </summary>
public int ActualDurationMinutes { get; set; }
/// <summary>
/// 当前轮次。
/// </summary>
public int CurrentEpoch { get; set; }
/// <summary>
/// 总轮次。
/// </summary>
public int TotalEpochs { get; set; }
/// <summary>
/// 当前损失值。
/// </summary>
public double CurrentLoss { get; set; }
/// <summary>
/// 最佳损失值。
/// </summary>
public double BestLoss { get; set; }
/// <summary>
/// 当前mAP。
/// </summary>
public double CurrentMap { get; set; }
/// <summary>
/// 最佳mAP。
/// </summary>
public double BestMap { get; set; }
/// <summary>
/// 训练进度0-100
/// </summary>
public double Progress { get; set; }
/// <summary>
/// 输出模型路径。
/// </summary>
public string? OutputModelPath { get; set; }
/// <summary>
/// 日志路径。
/// </summary>
public string? LogPath { get; set; }
/// <summary>
/// 错误消息。
/// </summary>
public string? ErrorMessage { get; set; }
/// <summary>
/// 创建人ID。
/// </summary>
public Guid CreatedById { get; set; }
/// <summary>
/// 创建人姓名。
/// </summary>
public string CreatedByName { get; set; } = string.Empty;
/// <summary>
/// 分配人ID。
/// </summary>
public Guid? AssignedToId { get; set; }
/// <summary>
/// 分配人姓名。
/// </summary>
public string? AssignedToName { get; set; }
/// <summary>
/// 创建时间UTC
/// </summary>
public DateTime CreatedAtUtc { get; set; }
/// <summary>
/// 更新时间UTC
/// </summary>
public DateTime UpdatedAtUtc { get; set; }
/// <summary>
/// 创建人。
/// </summary>
public string CreatedBy { get; set; } = string.Empty;
/// <summary>
/// 更新人。
/// </summary>
public string UpdatedBy { get; set; } = string.Empty;
/// <summary>
/// 备注。
/// </summary>
public string? Remark { get; set; }
}
/// <summary>
/// 训练任务类型枚举。
/// </summary>
public enum TrainingTaskType
{
/// <summary>
/// 目标检测训练。
/// </summary>
ObjectDetection = 0,
/// <summary>
/// 分类训练。
/// </summary>
Classification = 1,
/// <summary>
/// 分割训练。
/// </summary>
Segmentation = 2,
/// <summary>
/// 微调训练。
/// </summary>
FineTuning = 3,
/// <summary>
/// 增量训练。
/// </summary>
Incremental = 4
}
/// <summary>
/// 训练任务状态枚举。
/// </summary>
public enum TrainingTaskStatus
{
/// <summary>
/// 草稿。
/// </summary>
Draft = 0,
/// <summary>
/// 等待中。
/// </summary>
Pending = 1,
/// <summary>
/// 运行中。
/// </summary>
Running = 2,
/// <summary>
/// 已暂停。
/// </summary>
Paused = 3,
/// <summary>
/// 已完成。
/// </summary>
Completed = 4,
/// <summary>
/// 已失败。
/// </summary>
Failed = 5,
/// <summary>
/// 已取消。
/// </summary>
Cancelled = 6
}
/// <summary>
/// 训练优先级枚举。
/// </summary>
public enum TrainingPriority
{
/// <summary>
/// 低。
/// </summary>
Low = 0,
/// <summary>
/// 中。
/// </summary>
Medium = 1,
/// <summary>
/// 高。
/// </summary>
High = 2,
/// <summary>
/// 紧急。
/// </summary>
Urgent = 3
}