← 返回主页

heat2label

把模型内部的热力图变成伪 bounding-box 标注,让图像无需手画每个框就能(预)标注。两条独立的臂——同一思路的两种实现。

演示

预计算演示 · 两个模型都太重、无法在浏览器内运行 · 复现见仓库。两条臂是两个年代的「生成 → 标注」管道:Grad-CAM++ 臂标的是 2023 年 dalle-mini 生成图,DAAM 臂是 SD v1.4 生成 + 打框一体;「两臂对比」再把同一张 SD 生成图分别过两臂(自证 × 他证交叉验证)。选择划分与类别,每类示例并列展示,各走完整「热力图 → 伪框」管线。

评测结果

测试数据集:无公开基准——两臂图像均为 dalle-mini 2023 年生成图(非真实照片),类别取自 COCO 零样本两划分(65/15 与 48/17,共 15 + 17 个类名作为生成 prompt);演示区展示 65/15 中预测正确的 8 类、每类 4 例(精选批 2 + outputs 批 2),DAAM 臂另加驾驶长尾类(motorcyclist、truck)。伪框为定性预标注产出、需人工复核,本页不提供定量标注精度指标。

两条臂是同一思路(热力图 → 伪框)的两种独立实现,下表对比各自的热力图来源、产出形态与适用域。

表 1 · 两臂的热力图来源、产出形态与部署口径对比
Grad-CAM++(cam2label)DAAM(daam2label)
热力图来源ImageNet 预训练 ResNet-101 上的 Grad-CAM++,预测驱动(targets=预测类)Stable Diffusion 交叉注意力(DAAM),文本 prompt 驱动
关键参数ResNet-101(torchvision IMAGENET1K_V1 权重)· 输入 224×224 · Grad-CAM++ 目标层 layer4[-1] · 热力图二值化阈值 170 · targets=预测类(top-1)CompVis/stable-diffusion-v1-4(fp16 + attention slicing)· 采样 30 步 · 生成 512×512 · guidance scale 7.5(diffusers 默认)· DAAM 逐词交叉注意力热力图
是否生成图像本臂代码只打框——所标图像为 dalle-mini 2023 预生成(作者 2023-02 的 wandb 实验 dalle-mini-tables-colab,在仓库外)是——SD v1.4 text2img 生成 + 打框在同一脚本内(demo_daam.py)
适用域COCO 零样本两划分的全部新类(65/15 的 15 类 + 48/17 的 17 类)· 图像均为 dalle-mini 生成图、非 COCO 原图(每类 2 张精选批;65/15 中预测正确的 8 类另加 2 张 outputs 批)与 Grad-CAM 臂相同的类别集(便于直接对比)+ 驾驶长尾附加(motorcyclist、truck)
类别标签 vs 预测类别类别标签是 COCO 划分类名(= dalle-mini 生成 prompt);各例「预测类别」是 ResNet-101 按 ImageNet-1K 词表的识别结果——两者不一一对应(如 train→freight car、cat→Egyptian cat;识别错的类也如实呈现),热力图始终针对预测类别类别标签 = prompt 关键词(keyword),生成与标注同源、天然一致
框类型旋转框(cv2.minAreaRect)画在图上 + label.json(四角点坐标 + 旋转角)轴对齐 bbox → label.json(COCO 风格)
算力CPU 即可(实测 ~0.3s/图 · 3070 宿主机 CPU · 模型加载 ~0.5s 为一次性、不计入单图)建议 CUDA GPU ≥ 8GB(实测 ~4.7s/图 · RTX 3070 8GB · 模型加载 ~292s 为一次性、不计入单图 · 生成阶段含 DAAM 交叉注意力追踪开销)
入口gradcam/cam.py、gradcam/demo_assets.pydemo_daam.py(argparse CLI,--manifest 批量)

计时口径:图题标注分阶段实测值(端到端 = 各阶段之和),硬件与参数统一见上表「关键参数」「算力」两行。Grad-CAM 臂图像本身为 dalle-mini 2023 年生成、生成耗时未记录(输入图题不标计时);DAAM 臂生成耗时计入「SD 生成场景」阶段。

两臂不共享代码,是同一技巧的两种独立实现,并列保留以便对比;产出的每个框都是伪标注、仍需人工复核(定位是预标注 / 数据增强助手,非生产级标注器——与 2026 主流开集检测的实测对比与诚实定位详见仓库 README)。本表对比两臂的产出特征,非定量精度基准。顶部「两臂对比」视图把同一张 SD 生成图分别过两臂,呈现自证 × 他证交叉验证与 Grad-CAM 的 ImageNet 闭集词表限制(生成图复用 DAAM 臂已选 seed;Grad-CAM 行为 demo_assets.py 对该图的实测产出)。

核心方法

热力图来源 Grad-CAM++ 臂 · ResNet-101 · targets=预测类 DAAM 臂 · SD v1.4 逐词交叉注意力 · prompt 驱动 框拟合方式 Grad-CAM++ 臂 · 轮廓 + minAreaRect → 旋转框 DAAM 臂 · BFS 岛提取 → 轴对齐框 [x1,y1,x2,y2] 图像 模型前向 热力图 阈值化 区域 label.json COCO 风格伪框
输入 / 数据 · DAAM 臂 模型推理 / 后处理 Grad-CAM++ 臂 输出 / 结果

图 1 · 两臂共享管线:图像 → 模型前向 → 热力图 → 阈值化 → 区域 → 框(两臂只在热力图来源与框拟合方式上不同)

两条臂共享同一条管线,只在「热力图从哪来」和「服务什么域」上不同。

输入输出:Grad-CAM++ 臂——输入一张已有图像,输出 label.json(类名 → 旋转框四角点 + 旋转角);DAAM 臂——输入文本 prompt,一趟输出 512×512 生成图 + label.json(类名 → [x1,y1,x2,y2] 轴对齐框);两臂对比——输入同一张 SD 生成图,输出两臂伪框交叉验证。

表 2 · 两臂方法细节
臂方法细节
Grad-CAM++ImageNet 预训练 ResNet-101 → Grad-CAM++ 类激活热力图(targets=预测类)→ 阈值化 → cv2.minAreaRect 拟合旋转框 → 输出 label.json(四角点坐标 + 旋转角)
DAAMSD v1.4 text2img 从简单 prompt 直接生成场景 → 逐词交叉注意力热力图(DAAM)→ 阈值化 + BFS 岛提取 → 目标类的轴对齐伪框 → 输出 label.json(类名 → [x1,y1,x2,y2] 轴对齐框列表)
两臂对比同一张 SD 生成图 → DAAM 自证(prompt 关键词注意力)+ Grad-CAM++ 他证(ResNet 预测类),交叉验证生成质量