feat(boxes): generate_boxes.py 的 --target 默认改为 label

框的类别应该来自人工归类(图片所在目录),分类模型只负责定位。原先默认 predicted,
框的类别取模型 top1 预测,模型分错的图会把错误类别写进标签:boxes_shap 那次预测与
目录一致率 0.9915,约 95 张图的类别因此是错的。

两种取值只在预测与目录不一致的图上有区别,其余图解释的是同一个 logit、框完全相同。
--target predicted 仍保留。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Shaun Zhou
2026-09-15 20:31:40 +08:00
co-authored by Claude Opus 5
parent 7dd0f89d18
commit 32e56cb230
3 changed files with 16 additions and 4 deletions
+5 -3
View File
@@ -30,7 +30,9 @@ images/ 与 labels/ 的对应关系符合本仓库的 YOLO 约定(datasets/yol
所以 `FilmDefectDataset` 能直接读。
默认对**全量**数据生成;`--limit` / `--per-class` 只用于快速试参数。
热力图默认针对模型的 **top1 预测类别**;`--target label` 可改用图片所在目录的标注类别。
热力图与框的类别默认取**图片所在目录的人工标注类别**(`--target label`):类别的真值是人工归类,
分类模型只负责回答"为什么是这个类",也就是框在哪里。`--target predicted` 改用模型的 top1 预测,
这时模型分错的图,框的类别也会跟着错。
"""
from __future__ import annotations
@@ -132,8 +134,8 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--set", nargs="*", default=[], metavar="KEY=VALUE")
parser.add_argument("--device", default=None)
parser.add_argument(
"--target", choices=("predicted", "label"), default="predicted",
help="热力图针对哪个类别:predicted=模型 top1 预测(默认),label=图片所在目录",
"--target", choices=("predicted", "label"), default="label",
help="热力图与框针对哪个类别:label=图片所在目录的人工标注(默认),predicted=模型 top1 预测",
)
parser.add_argument("--threshold", type=float, default=0.4, help="热力图阈值(相对最大值)")