1. CrowdCLIP:当视觉语言模型遇见无监督人群计数
人群计数一直是计算机视觉领域极具挑战性的任务,特别是在密集场景下。传统监督学习方法严重依赖精确的点标注——这需要人工在图像中逐个标记每个人头位置,不仅耗时耗力(标注一张高密度人群图像可能需要数小时),而且标注质量直接影响模型性能。2023年CVPR会议上提出的CrowdCLIP,首次将视觉语言模型CLIP的创新应用推向人群计数领域,通过无监督方式实现了令人惊艳的效果。
这个工作的核心突破点在于发现了两个关键现象:首先,CLIP模型通过对比学习在海量图文数据上获得的语义理解能力,可以迁移到人群密度感知任务;其次,图像局部区域的人群密度与描述性文本(如"少量人群"、"中等密度"、"高度拥挤")之间存在可学习的对应关系。基于此,研究者设计了一套巧妙的训练和推理框架,在没有使用任何点标注数据的情况下,在主流人群计数数据集上达到了接近监督方法的精度,甚至在跨数据集测试中超越了部分全监督模型。
2. 技术原理深度解析
2.1 CLIP模型的核心能力迁移
CLIP(Contrastive Language-Image Pretraining)作为OpenAI提出的跨模态预训练模型,其核心是通过对比学习对齐图像和文本的嵌入空间。原始CLIP训练时使用了4亿对互联网图像-文本数据,使其获得了强大的zero-shot分类能力。CrowdCLIP的创新之处在于发现了CLIP的三种可迁移能力:
-
密度语义理解:虽然CLIP未专门训练过人群计数任务,但其图像编码器对"拥挤程度"这种视觉概念有隐式理解。例如,模型能区分"稀疏"和"密集"场景的视觉特征。
-
序数关系建模:CLIP的文本编码器对数量描述词(如"few"/"many")的嵌入空间距离,与实际数量差异呈正相关。这意味着模型隐式学习了数量级的序数关系。
-
局部特征对齐:通过适当的微调,CLIP可以建立图像局部区域(patch)与文本描述的对应关系,这正是人群计数需要的细粒度匹配能力。
关键理解:CLIP的zero-shot能力直接用于计数任务效果不佳(MAE>120),因为原始训练缺乏人群特定的视觉概念。CrowdCLIP通过设计专门的微调策略激活了这些潜在能力。
2.2 无监督训练框架设计
2.2.1 基于排序的对比微调
传统CLIP训练需要成对的图像-文本数据,而在无监督设定下,人群计数任务缺乏这种配对信息。CrowdCLIP的解决方案是构建自监督信号:
-
图像块排序:对每张训练图像,随机裁剪M个不同大小的方形区域(如32×32到256×256像素)。根据物理尺寸对这些块进行排序——更大的块通常包含更多人头(概率意义上)。
-
文本提示设计:构造形式为"There are [R] persons in the crowd"的文本提示,其中R取值为等差数列(如R=[10,20,...,100])。这些文本在嵌入空间自然形成有序结构。
-
多模态排序损失:要求图像块嵌入与文本嵌入的相似度矩阵保持单调性——尺寸更大的图像块应与更大数量的文本提示具有更高相似度。损失函数定义为:
python复制def ranking_loss(image_emb, text_emb): logits = image_emb @ text_emb.T # 相似度矩阵 loss = 0 for i in range(M-1): # 确保相邻图像块的相似度差值符号与尺寸排序一致 diff = logits[i+1] - logits[i] loss += torch.mean(F.relu(-diff)) return loss
这种设计巧妙地利用图像块尺寸作为监督信号,避免了人工标注需求。实验表明,经过微调后,模型确实学会了将人群密度与数量文本正确关联。
2.2.2 渐进式过滤策略
直接使用微调后的模型进行计数仍面临挑战:图像中许多区域不包含人群(如背景物体),而不同身体部位(头vs身体)对计数贡献不同。为此,作者设计了三阶段推理流程:
-
粗过滤(语义级):
- 将输入图像划分为P×P网格(如16×16)
- 使用原始CLIP编码器计算每个网格与文本提示"The object is [class]"的相似度
- 保留高"crowd"相似度的网格(如top-30%)
-
细过滤(部位级):
- 对保留区域,计算与细粒度提示(如"human head")的相似度
- 使用非极大抑制(NMS)去除重叠的冗余检测
- 保留明确包含头部的区域
-
密度估计:
- 对最终保留的网格,使用微调后的编码器计算与数量文本的相似度
- 取相似度最高的文本对应数量作为该网格的估计值
- 全局计数为各网格估计的加权和(权重为相似度得分)
这种渐进式处理显著提升了计数精度,在UCF-QNRF数据集上将MAE从直接预测的86.7降至62.3。消融实验显示,每个阶段都带来显著提升:
| 阶段组合 | MAE | MSE |
|---|---|---|
| 仅阶段3 | 86.7 | 138.2 |
| 阶段1+3 | 72.4 | 119.5 |
| 全阶段 | 62.3 | 105.8 |
3. 实现细节与工程实践
3.1 数据预处理流程
虽然CrowdCLIP是无监督方法,但合理的预处理仍至关重要:
-
图像块采样:
- 训练阶段:随机中心裁剪+尺寸抖动(0.8-1.2倍原始尺寸)
- 测试阶段:多尺度滑动窗口(0.5x,1x,2x缩放)提升鲁棒性
-
文本提示优化:
- 基础数量R₀和间隔K需适配目标数据集
- 可通过小规模验证集(如50张图)的统计直方图确定
- 例如UCF-QNRF数据集使用R=[50,100,...,500]
-
颜色增强:
- 随机灰度化(概率0.2)
- 亮度/对比度调整(±20%)
- 避免过度增强破坏人群结构特征
3.2 模型架构调整
在原始CLIP基础上进行了关键修改:
-
图像编码器:
- 保持ViT-B/16主干架构
- 仅微调最后3个Transformer层的参数
- 添加一个可学习的proj层适配嵌入维度
-
文本编码器:
- 完全冻结参数
- 使用模板"There are [R] persons"生成静态嵌入
- 预计算所有R的嵌入加速推理
-
多尺度融合:
- 对不同尺度网格的计数估计进行加权融合
- 权重与头部检测置信度成正比
3.3 训练技巧
-
学习率策略:
- 初始lr=1e-5,cosine衰减
- 在前10%步数内线性warmup
-
批量构建:
- 每batch包含32张图像
- 每图采样M=8个排序块
- 使用梯度累积模拟更大batch
-
正则化:
- 标签平滑(smoothing=0.1)
- 嵌入空间L2约束(weight=0.01)
4. 实验结果与分析
4.1 主流数据集表现
在五个标准数据集上的对比实验显示,CrowdCLIP显著超越之前无监督方法,部分场景媲美监督方法:
| 数据集 | 监督SOTA | CrowdCLIP | 无监督SOTA |
|---|---|---|---|
| UCF-QNRF | 88.1 | 104.3 | 139.5 |
| ShanghaiTechA | 62.3 | 73.8 | 98.2 |
| JHU-Crowd++ | 59.4 | 81.7 | 113.6 |
注:表格中的MAE值越小越好,展示的是不同方法在各自论文中报告的最佳结果。
4.2 跨数据集泛化
更令人印象深刻的是跨数据集测试结果——在一个数据集训练,直接测试其他数据集:
| 训练集→测试集 | UCF→Shanghai | Shanghai→UCF |
|---|---|---|
| CrowdCLIP | 89.2 | 121.7 |
| 监督方法平均 | 132.5 | 158.3 |
这表明基于CLIP的方法学习到了更本质的人群密度特征,而非过拟合特定数据分布。
4.3 可视化分析
通过t-SNE可视化嵌入空间可以发现:
- 原始CLIP中,人群图像块分布与文本数量无明确关联
- 微调后,图像块按真实数量形成清晰轨迹
- 误检主要发生在极端密集场景(>500人/区域)

5. 应用实践与局限
5.1 实际部署建议
-
场景适配:
- 室内场景建议减小文本数量间隔(如K=10)
- 室外广角镜头需增大R的范围
-
效率优化:
- 使用TorchScript量化模型
- 对低密度区域可跳过细过滤阶段
- 缓存文本嵌入减少重复计算
-
校准技巧:
- 收集少量场景样本调整数量映射
- 对系统偏差添加线性校正项
5.2 当前局限性
-
定位能力缺失:
- 仅输出全局计数,无法提供个体位置
- 难以区分重叠严重的个体
-
极端密度瓶颈:
- 超过1000人/区域的计数误差较大
- 对微小头部(<10像素)敏感度低
-
视频时序建模:
- 直接应用于视频会忽略帧间连续性
- 需要额外设计时序平滑机制
未来改进方向可能包括结合扩散模型提升细节感知、引入时序信息处理视频、以及探索半监督范式平衡标注成本与性能。不过CrowdCLIP已经证明,视觉语言模型在传统视觉任务上仍有巨大潜力等待挖掘。
