标签:CLIP、零样本学习、商品识别、向量检索、FAISS、ONNX、边缘 GPU
----
1. 业务背景:拍照即可“加购”的野心
公司做社交电商,用户上传一张“办公桌”照片 → 系统需要立刻圈出鼠标、键盘、耳机,并跳转到对应商品页。
痛点:
•  商品 SKU 每月新增 1w+,来不及一一标注;
•  必须离线部署,数据不出手机;
•  识别延迟 ≤ 200 ms,准确率 ≥ 90%。
一句话:不训练、不标注、不联网,还要看得准、跑得快。
----
2. 技术方案:把 CLIP “剪”成口袋版
模块    选型    理由
视觉编码器    ViT-B/16 → MobileViT-S    参数量 86 M → 5.1 M
文本编码器    DistilCLIP-Text    6 层 Transformer,够用
向量检索    FAISS-IVF1024,PQ16    内存 32 MB,毫秒级
运行时    ONNX Runtime Mobile    支持 iOS/Android NPU
----
3. 数据准备:用“文案”替代“标注”
传统目标检测需要画框打标签,我们直接用商品标题当文本标签。
•  20 万条商品标题 → 清洗出 5 万条“干净标签”
•  标题增强:同义词替换、颜色+品类组合
原始:罗技 MX Master 3S
增强:灰色无线鼠标、Logitech Master 3S、人体工学鼠标

----
4. 模型蒸馏:让 MobileViT 学会 CLIP 的“语言”
4.1 教师-学生框架
•  教师:OpenAI CLIP ViT-B/16(冻结)
•  学生:MobileViT-S + 2 层 MLP 对齐维度
4.2 损失函数

loss = 0.7 * clip_loss(image_feat_s, text_feat_t) \
     + 0.3 * feature_mse_loss(image_feat_s, image_feat_t)

训练 8 小时(RTX 4090×1),Top-1 对齐精度 93 %。
4.3 导出 ONNX

python -m torch2onnx \
  --model mobile_clip.onnx \
  --simplify --fp16

最终模型:
•  ONNX 14 MB
•  输入 224×224,输出 512 维向量
----
5. 端侧推理流程(Android 为例)

// Kotlin 伪代码
val ortEnv = OrtEnvironment.getEnvironment()
val session = ortEnv.createSession(modelBytes)

val imgVec = session.run(inputImg).get(0) as FloatArray
val scores = faissIndex.search(imgVec, k = 5)   // IVF + PQ
val topSKU = score2sku(scores)                  // 映射回商品

•  首次启动:下载索引 28 MB,写入 /data/data/pkg/clip.idx
•  增量更新:后台下发 .delta 文件,合并索引不重启 App。
----
6. 向量检索优化:把 5 万标签塞进 28 MB
策略    内存    1-NN 延迟    Recall@1
Flat L2    200 MB    8 ms    100 %
IVF1024,PQ16    28 MB    1.2 ms    97.8 %
HNSW32    45 MB    1.0 ms    98.9 %
考虑到内存极限,选 IVF1024,PQ16。
----
7. 真实业务指标
场景    准确率    延迟    离线可用
办公桌 20 SKU    94.5 %    163 ms    ✅
厨房 35 SKU    91.2 %    178 ms    ✅
美妆 50 SKU    89.7 %    185 ms    ✅
----
8. 踩坑记录
1.  颜色漂移
同款耳机有黑白两色,CLIP 把“白色”当“背景”过滤。
解决:在文本标签里强制加入颜色词 “白色耳机”。
2.  角度鲁棒性
俯拍鼠标会误判为“椭圆”。
解决:训练时随机旋转 ±30°,数据增广。
3.  索引膨胀
商品下架后文本标签仍占内存。
解决:索引文件里加 墓碑位,后台定期重建。
----
9. 开源仓库
GitHub:
https://github.com/clip-for-commerce/clip-pocket
包含:
•  蒸馏训练脚本
•  ONNX + FAISS 索引生成器
•  Android Demo APK
•  索引增量更新工具
----
10. 结语:零样本不是“零努力”
当你把 86 M 的 CLIP 蒸馏成 5 M,
把 20 万商品标题变成 512 维向量,
你会发现 “不标注”也可以“很准”,
而真正的成本从“人力标注”变成了“数据清洗 + 向量工程”。
如果这篇文章帮你少画了 10 万个框,请去 GitHub 点个 Star ⭐;
也欢迎留言分享你的“零样本”落地故事!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐