文本引导的跨域目标计数通用模型
count-anything-vis.mp4
✨Play with the demo: 🔗Huggingface Demo
- 2026-07-20: 📊 我们新增了 LocateAnything-3B 在 CLOC-v1.1 上的评测结果。相比该模型,Count Anything 在完整测试集和全部六个领域的计数性能上依旧保持显著领先。
- 2026-07-02: 🔥 我们发布了 CLOC-v1.1 标注更新。具体来说,我们对CLOC Test集标注进行了更细致的人工审查,删除或重新标注了少量具有明显噪声的样本,以提供更准确的计数性能评估。
- 2026-05-29: 📄 论文已发布于 arXiv:Count Anything。
本仓库介绍 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 评测加入了 LocateAnything-3B。该模型是近期提出的视觉语言定位模型,支持开放集合目标检测以及复杂场景中的密集多目标检测。Count Anything 在完整测试集和全部六个领域的计数性能上均保持显著领先。
创建 conda 环境并安装依赖:
conda create -n countanything python=3.12 -y
conda activate countanything
pip install -r requirements.txt依赖列表有意保持最小化。如果默认的 pip 解析器没有选择你所需的 CUDA 版本,请安装与你本机 CUDA 版本匹配的 PyTorch 和 torchvision 构建版本。
如果只进行推理、验证或测试复现,只需要发布的 CountAnything checkpoint。请从 Hugging Face 下载 count_anything.pt。
下载后,请将文件放置到:
checkpoints/count_anything.pt
单独验证和测试配置会直接加载 checkpoints/count_anything.pt。
如果需要从 SAM3 初始化训练或微调 CountAnything,则还需要下载 SAM3 官方预训练权重。由于权限和再分发限制,本仓库不直接提供 SAM3 官方预训练权重。请访问 SAM3 官方 Hugging Face 页面:
下载 SAM3 预训练权重 sam3.pt,并放置到:
pretrained/sam3.pt
请注意,应下载 SAM3 的权重,而不是 SAM3.1 的权重。期望的文件名是:
sam3.pt
默认情况下,训练配置会使用 pretrained/sam3.pt 初始化模型。
本仓库默认使用 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_file 和 paths.val_annotation_file,使其指向本地标注文件。
训练直接通过 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=18val_batch_size=40max_epochs=30val_epoch_freq=1visualize_val_every_n_epochs=5
训练运行后,日志、可视化结果和 checkpoints 会默认保存到:
exp/count_anything_train_cloc/
如果需要修改数据路径、batch size、epoch 数或输出目录,请编辑:
config/count_anything_train_cloc.yaml
使用 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。
使用 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。
单图推理可以使用:
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}
}

