在聚类 + 人工归类得到的数据集(data/<集>/<类别名>/*.png)上训练分类模型。 - datasets/classification.py:按目录组织的分类数据集,**逐类分层**切分 train/val (others 只有 65 张,整体随机切很容易让它在验证集里挂零),固定种子可复现 - models/classifier.py:卷积骨架 + 分类头,与 DefectNet 共用 backbone 注册表, 因此自监督产出的 simclr_backbone.pth 可用 init_from 直接初始化; frozen_backbone 可做线性探针 - engine/classification.py:训练循环 + 指标。主指标用 macro-F1 而非准确率—— 数据从 normal 2679 张到 others 65 张差 41 倍,全预测成 normal 也有 24% 准确率; 损失按类别频率加权,避免小类被淹没;输出逐类 P/R/F1 与混淆矩阵 - classify.py:训练/评估入口,--eval-only 可单独评估并导出 eval_report.json - configs/classify/film.yaml:预处理沿用聚类阶段的结论(拉伸 + 逐图标准化)。 抹掉亮度在这里尤其重要:有几类几乎只来自单一原始数据集,不抹掉的话模型可能 靠"认出这是哪个数据集"作弊 - 续训语义与检测/自监督一致:检查点只提供进度,超参以配置为准 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
26 lines
615 B
Python
26 lines
615 B
Python
"""训练 / 评估流程。"""
|
|
|
|
from engine.checkpoint import load_checkpoint, save_checkpoint
|
|
from engine.classification import (
|
|
ClassificationMetric,
|
|
ClassificationTrainer,
|
|
class_weights,
|
|
)
|
|
from engine.evaluator import Evaluator
|
|
from engine.losses import DetectionLoss
|
|
from engine.optim import build_optimizer, build_scheduler
|
|
from engine.trainer import Trainer
|
|
|
|
__all__ = [
|
|
"Trainer",
|
|
"ClassificationTrainer",
|
|
"ClassificationMetric",
|
|
"class_weights",
|
|
"Evaluator",
|
|
"DetectionLoss",
|
|
"build_optimizer",
|
|
"build_scheduler",
|
|
"save_checkpoint",
|
|
"load_checkpoint",
|
|
]
|