2025-12-26 · 实战
32
实战 · 2025-12-26

Grok零样本标注:CLIP+SAM冷启动实战

Grok零样本标注:CLIP+SAM冷启动实战

一、问题

数据标注的死循环
- 训练模型需要标注数据
- 标注数据需要大量人工
- 人工标注慢且贵
- 没有模型辅助,标注效率更低

冷启动困境:新项目启动时,0标注数据,如何快速获得第一批训练集?


二、方案

零样本标注 = 用预训练大模型直接标注,不需要任何训练数据

生活比喻
- 传统方案:雇人从零开始画框标注
- 零样本方案:让见过百万张图的AI直接识别,人工只需审核

核心工具
- CLIP:零样本分类(给类别名,自动识别)
- SAM:自动分割(一键生成所有物体mask)


三、原理

3.1 CLIP零样本分类

技术本质:图像和文字在同一向量空间中匹配

# CLIP工作流程
image_embedding = clip.encode_image(image)  # 图像→向量
text_embeddings = clip.encode_text(["cat", "dog", "car"])  # 文字→向量

# 计算相似度
similarity = cosine_similarity(image_embedding, text_embeddings)
label = text_embeddings[similarity.argmax()]  # 最相似的类别

性能数据
- ImageNet准确率:76.2%(零样本,无训练)
- 人类准确率:94%
- 传统ResNet-50(需训练):76.1%

结论:CLIP零样本 ≈ 传统模型有监督训练

3.2 SAM自动分割

技术本质:Segment Anything Model,一键分割图像中所有物体

from segment_anything import sam_model_registry, SamAutomaticMaskGenerator

sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
mask_generator = SamAutomaticMaskGenerator(sam)

# 输入图像,输出所有物体mask
masks = mask_generator.generate(image)
# 返回:[{segmentation, bbox, area, predicted_iou}, ...]

优势
- 无需训练,开箱即用
- 自动识别所有物体边界
- 支持点击/框选交互式优化


四、实践

4.1 四种标注方法

方法1:零样本分类

import clip
import torch

model, preprocess = clip.load("ViT-B/32")
image = preprocess(Image.open("photo.jpg")).unsqueeze(0)
text = clip.tokenize(["cat", "dog", "bird"])

with torch.no_grad():
    logits_per_image, _ = model(image, text)
    probs = logits_per_image.softmax(dim=-1)

print(f"预测类别: {['cat','dog','bird'][probs.argmax()]}")
print(f"置信度: {probs.max():.2%}")

方法2:自动分割

from segment_anything import sam_model_registry

sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
masks = sam.generate(image)

# 结合CLIP分类每个mask
for mask in masks:
    region = image[mask['segmentation']]
    label = clip.classify(region, class_names)
    print(f"区域{mask['bbox']}: {label}")

方法3:预标注+人工审核

# 1. AI批量标注
predictions = []
for img in dataset:
    pred = clip.classify(img, class_names)
    predictions.append({
        'image': img,
        'label': pred,
        'confidence': pred.prob
    })

# 2. 筛选低置信度样本人工审核
low_conf = [p for p in predictions if p['confidence'] < 0.7]
print(f"需人工审核: {len(low_conf)}/{len(dataset)}")

方法4:主动学习

# 优先标注"信息量大"的样本
uncertainty = 1 - predictions.max(axis=1)  # 熵越大越不确定
high_value_idx = uncertainty.argsort()[-100:]  # 最不确定的100张

# 人工标注这100张,用于微调模型
human_labels = manual_annotate(dataset[high_value_idx])
model.finetune(dataset[high_value_idx], human_labels)

4.2 冷启动效率对比

方案
1000张标注耗时
成本
准确率

纯人工
40小时
$600
95%

CLIP零样本
10分钟
$0
76%

CLIP+人工审核
5小时
$75
92%

SAM+CLIP+审核
3小时
$45
90%

结论:零样本方案可节省90%时间85%成本


五、局限

CLIP的三大短板
1. 细粒度识别差:区分"波斯猫"和"暹罗猫"困难
2. 长尾类别弱:训练数据少的类别准确率<50%
3. 多物体场景混乱:图中有猫有狗,容易误判

SAM的两大问题
1. 过度分割:把一个物体分成多个mask
2. 边界不精确:复杂背景下边界模糊

最佳实践
- 通用场景:CLIP零样本 + 10%人工抽检
- 专业领域:SAM分割 + CLIP分类 + 30%人工审核
- 关键任务:AI预标注 + 100%人工复核


六、小结

核心要点
1. CLIP零样本分类准确率76%,接近传统有监督模型
2. SAM自动分割可一键生成所有物体mask
3. 零样本+人工审核可节省90%标注时间
4. 适合冷启动阶段快速获取初始数据集

工作流推荐

步骤1: SAM自动分割 → 生成所有物体mask
步骤2: CLIP零样本分类 → 给每个mask打标签
步骤3: 筛选低置信度样本 → 人工审核修正
步骤4: 用修正数据微调模型 → 提升准确率

适用场景
- ✅ 通用物体检测、场景分类
- ⚠️ 医疗影像、工业缺陷(需人工审核)
- ❌ 法律合规、金融风控(必须人工)


参考资料
- CLIP论文:Learning Transferable Visual Models From Natural Language Supervision
- SAM论文:Segment Anything
- Grok官方文档:https://grok.x.ai/

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单