Skip to content

Latest commit

 

History

History
364 lines (249 loc) · 13.2 KB

File metadata and controls

364 lines (249 loc) · 13.2 KB

Count Anything

文本引导的跨域目标计数通用模型

Project Page Hugging Face Model Hugging Face Demo arXiv Paper Paper PDF Contact Email

English | 中文

Count Anything 海报图

count-anything-vis.mp4

✨Play with the demo: 🔗Huggingface Demo

News

  • 2026-07-20: 📊 我们新增了 LocateAnything-3BCLOC-v1.1 上的评测结果。相比该模型,Count Anything 在完整测试集和全部六个领域的计数性能上依旧保持显著领先。
  • 2026-07-02: 🔥 我们发布了 CLOC-v1.1 标注更新。具体来说,我们对CLOC Test集标注进行了更细致的人工审查,删除或重新标注了少量具有明显噪声的样本,以提供更准确的计数性能评估。
  • 2026-05-29: 📄 论文已发布于 arXiv:Count Anything

Overview 概览

本仓库介绍 Count Anything,这是一种用于跨域文本引导目标计数的通用模型。给定一张图像和一条自然语言查询,Count Anything 会返回一个实例级的目标点集合,其基数即为计数结果。这一表述方式将类别条件计数与具有可解释性的空间定位统一起来。

跨域文本引导计数

  • 研究跨域文本引导目标计数,其中用户可以通过类别名称或自然语言查询来指定目标。
  • 构建 CLOC,即 Cross-domain Large-scale Object Counting 数据集,将多种公开数据源重新组织为一个统一的计数基准。
  • 覆盖六个视觉域:General Scene、Remote Sensing、Histopathology、Cellular Microscopy、Agriculture 和 Microbiology。

双粒度实例枚举

  • 采用离散实例点作为最终预测形式,而不是将密度图作为最终输出。
  • 使用 Region-level Sparse Counter(RSC) 为大目标和稀疏目标提供目标级锚定。
  • 使用 Pixel-level Dense Counter(PDC) 通过密集点预测捕获小目标、拥挤目标和弱边界目标。

点中心监督与互补融合

  • 将异构标注,包括 boxes、points、polygons、masks、rotated boxes 和 label maps,转换为计数点以及可选的边界框。
  • 使用点中心监督,使每个有效实例都由一个点进行监督;只有在存在可靠边界框标注时,才使用边界框。
  • 以无参数方式通过 Complementary Count Fusion(CCF) 结合 RSC 和 PDC,在抑制重复计数的同时保留二者的互补性。

Count Anything 在 CLOC 上进行训练与评估。CLOC 包含约 22 万张图像、619 个类别和 1500 万个目标实例。大量实验表明,Count Anything 具备较强的计数准确性和多域泛化能力,并显著优于现有开放世界计数方法。

主要结果

CLOC-v1.1

更新后的 CLOC-v1.1 评测加入了 LocateAnything-3B。该模型是近期提出的视觉语言定位模型,支持开放集合目标检测以及复杂场景中的密集多目标检测。Count Anything 在完整测试集和全部六个领域的计数性能上均保持显著领先。

包含 LocateAnything-3B 的 CLOC-v1.1 结果对比表

CLOC

论文中的 CLOC 主要结果对比表

可视化结果

Count Anything 定性可视化结果

快速开始

1. 环境配置

创建 conda 环境并安装依赖:

conda create -n countanything python=3.12 -y
conda activate countanything
pip install -r requirements.txt

依赖列表有意保持最小化。如果默认的 pip 解析器没有选择你所需的 CUDA 版本,请安装与你本机 CUDA 版本匹配的 PyTorch 和 torchvision 构建版本。

2. 权重准备

如果只进行推理、验证或测试复现,只需要发布的 CountAnything checkpoint。请从 Hugging Face 下载 count_anything.pt

下载后,请将文件放置到:

checkpoints/count_anything.pt

单独验证和测试配置会直接加载 checkpoints/count_anything.pt

如果需要从 SAM3 初始化训练或微调 CountAnything,则还需要下载 SAM3 官方预训练权重。由于权限和再分发限制,本仓库不直接提供 SAM3 官方预训练权重。请访问 SAM3 官方 Hugging Face 页面:

Hugging Face

下载 SAM3 预训练权重 sam3.pt,并放置到:

pretrained/sam3.pt

请注意,应下载 SAM3 的权重,而不是 SAM3.1 的权重。期望的文件名是:

sam3.pt

默认情况下,训练配置会使用 pretrained/sam3.pt 初始化模型。

3. 数据准备

本仓库默认使用 CLOC 数据集。数据集准备文档会说明如何下载 CLOC 标注包、可直接发布的增强图片包,以及各个源数据集的原始图片。请先按照数据集准备文档完成数据组织,再运行训练或评估。

🔥 CLOC-v1.1 标注更新。 我们额外提供 cloc_annotations_v1.1.zip,对部分 CLOC 标注进行了人工复查;对于人工确认存在漏标、错标或明显标注噪声的标注记录,我们进行了移除或重新标注,以减少标注噪声。该标注包已添加到 data/README.md 中原有的 Google Drive 和百度网盘下载链接中,可通过同一组链接下载。具体见 data/README.md

💡 数据可用性声明。 由于 CLOC 使用的部分原始数据集受 license 和再分发限制约束,我们无法直接公开完整的 CLOC 图片数据集,只能引用这些数据源。我们发布了由重新标注流程生成的 CLOC annotation 文件,以及可再分发的部分增强图片。若要复现完整的 CLOC 数据集,请按照 data/README.md 下载原始图片,并完成预处理、重建和路径审计步骤。此外,我们也可以提供已经处理好的、开箱即用的完整 CLOC 数据集;如有需要,请通过邮件联系我们进行申请。

默认配置期望训练、验证和测试标注位于:

data/annotations/train_split_expanded_by_class.json
data/annotations/val_split_expanded_by_class.json
data/annotations/test_split_expanded_by_class.json

每条样本对应一个图像-类别计数任务。标注文件应提供图像路径、类别文本,以及该类别对应的 point / bbox 标注。图像文件的实际位置由标注中的 image_path 字段指定。

数据集目录形式如下:

data/
  annotations/        # CLOC train/val/test JSON
  images/             # 原始数据集下载和解压目录
  augmented/          # CLOC 标注引用的增强图片
  tools/              # 数据转换、增强图片重建和审计脚本
  README.md           # English dataset preparation guide

完整的数据集构建、原始数据集下载、格式转换、增强图片重建和路径审计流程,请参考 data/README.md

如果你的数据目录不同,请修改:

config/count_anything_train_cloc.yaml
config/count_anything_val_cloc.yaml
config/count_anything_test_cloc.yaml

中的 paths.train_annotation_filepaths.val_annotation_file,使其指向本地标注文件。

4. 训练

训练直接通过 train.sh 启动:

CUDA_VISIBLE_DEVICES=0,1,2,3 \
NUM_GPUS=4 \
bash train.sh

默认情况下,train.sh 使用:

config/count_anything_train_cloc.yaml

该配置对应本文主要模型设置:使用 SAM3 预训练权重初始化,启用 RSC、PDC 和 CCF,训练 LoRA 参数与计数分支。LoRA learning rate 为 1e-3,学习率采用 30 epoch 的 cosine schedule,min_lr_ratio=0.1

训练过程中每个 epoch 的验证默认使用:

data/annotations/val_split_expanded_by_class.json

默认训练参数包括:

  • train_batch_size=18
  • val_batch_size=40
  • max_epochs=30
  • val_epoch_freq=1
  • visualize_val_every_n_epochs=5

训练运行后,日志、可视化结果和 checkpoints 会默认保存到:

exp/count_anything_train_cloc/

如果需要修改数据路径、batch size、epoch 数或输出目录,请编辑:

config/count_anything_train_cloc.yaml

5. 验证

使用 val.sh 进行单独验证:

CUDA_VISIBLE_DEVICES=0,1,2,3 \
NUM_GPUS=4 \
bash val.sh

默认情况下,val.sh 使用:

config/count_anything_val_cloc.yaml

该配置会加载:

checkpoints/count_anything.pt

并在 CLOC 验证集上进行评估:

data/annotations/val_split_expanded_by_class.json

验证日志和预测统计结果默认保存到:

exp/count_anything_val_cloc/

如果需要验证其他 checkpoint 或其他验证集,请修改:

config/count_anything_val_cloc.yaml

中的 checkpoint 路径和 paths.val_annotation_file

6. 测试

使用 test.sh 评估 checkpoint:

CUDA_VISIBLE_DEVICES=0,1,2,3 \
NUM_GPUS=4 \
bash test.sh

默认情况下,test.sh 使用:

config/count_anything_test_cloc.yaml

该配置会加载:

checkpoints/count_anything.pt

并在 CLOC 测试集上进行评估:

data/annotations/test_split_expanded_by_class.json

测试日志和点预测结果默认保存到:

exp/count_anything_test_cloc/
  log.txt
  predictions.json

如果需要评估其他 checkpoint 或其他测试集,请修改:

config/count_anything_test_cloc.yaml

中的 checkpoint 路径和 paths.val_annotation_file

7. 单图推理

单图推理可以使用:

from count_anything import CountAnything

model = CountAnything("checkpoints/count_anything.pt")
results = model("path/to/image.jpg", "text_query")  # 例如 "airplanes"
print(results[0].count)
results[0].save()

默认情况下,可视化图片和预测 JSON 会保存到:

exp/count_anything_inference/<image>__<query>__<timestamp>/

保存的图片会叠加预测点和计数标签。JSON 文件会保存每个预测点的位置和置信度。

仓库结构

CountAnything/
  train.sh                         # 默认训练入口
  val.sh                           # 默认验证入口
  test.sh                          # 默认测试入口
  requirements.txt                 # Python 依赖
  config/
    count_anything_train_cloc.yaml # CLOC 训练配置
    count_anything_val_cloc.yaml   # CLOC 验证配置
    count_anything_test_cloc.yaml  # CLOC 测试配置
  count_anything/
    model/                         # CountAnything 模型组件
    train/                         # 训练器、loss 和 matcher
    eval/                          # 后处理和计数评估
  sam3/                            # 预训练 SAM3 图像-语言编码骨干实现
  pretrained/
    sam3.pt                        # SAM3 预训练权重放置位置
  checkpoints/
    count_anything.pt               # CountAnything checkpoint 放置位置
  data/                            # CLOC 数据集标注和数据准备工具
  exp/                             # 训练和测试输出目录

问题与支持

如果您在数据集准备、模型权重、训练、验证或测试过程中遇到任何困难,欢迎及时与我们联系,我们会尽力提供帮助。

致谢

  • 本项目使用了 SAM3 的代码。我们衷心感谢 SAM3 作者和贡献者开源相关工作。

  • 我们也感谢 jerpelhan 帮助我们发现 CLOC test 集中的部分标注噪声。这些反馈对我们发布 CLOC-v1.1 起到了重要帮助。

引用

如果 Count Anything 对您的研究有帮助,欢迎引用:

@article{lei2026count_anything,
  title={Count Anything},
  author={Lei, Mengqi and Cheng, Shuokun and Bao, Wei and Du, Shaoyi and Yong, Jun-Hai and Li, Siqi and Gao, Yue},
  journal={arXiv preprint arXiv:2605.30846},
  year={2026}
}