Palmier Pro视觉搜索架构解析:SigLIP2嵌入如何在本地实现以文搜画面
【免费下载链接】palmier-promacOS video editor built for AI项目地址: https://gitcode.com/GitHub_Trending/pa/palmier-pro
Palmier Pro 是一款为 AI 而生的 macOS 视频剪辑器,其中最令人惊艳的能力之一,就是本地视觉搜索:用一句话搜画面(以文搜画面),无需上传云端。它依靠 SigLIP2 多模态模型在 Apple 芯片上完成图像与文本的向量嵌入,把视频关键帧变成可检索的 768 维向量。本文带你完整拆解这套视觉搜索架构的四大环节:索引、嵌入、存储与检索,以及几个值得借鉴的工程细节。
以文搜画面是如何工作的:整体架构一图看懂
在 Palmier Pro 的媒体面板中,你只需要输入"日落下的海岸线"这样的自然语言描述,软件就会从素材库里找出最匹配的画面帧并定位到时间码。整个过程完全在本地完成,架构上由四个模块协作:
| 环节 | 职责 | 核心文件 |
|---|---|---|
| ① 索引调度 | 打开项目后排队索引所有视频/图片素材 | SearchIndexCoordinator.swift |
| ② 关键帧采样 | 抽帧 + 镜头切换检测 | FrameSampler.swift |
| ③ 向量嵌入 | SigLIP2 把画面和文字都编码成向量 | VisualEmbedder.swift |
| ④ 磁盘存储 | 二进制缓存,按文件指纹命名 | EmbeddingStore.swift |
| ⑤ 相似检索 | 点积相似度 + vDSP 加速排序 | VisualSearch.swift |
这套流程的设计目标很明确:素材永远不上云,搜索延迟在毫秒级。
模型从哪来:SigLIP2 的 Core ML 本地化改造
以文搜画面的核心是 SigLIP2 目录下完成了一整套本地化改造:
- 拆塔转换:把 SigLIP2 拆成独立的图像塔与文本塔,分别转换为 Core ML 模型(
ImageEncoder.mlpackage与TextEncoder.mlpackage),两者都做了 8-bit 调色板量化以控制体积。 - 词元器打包:附带 Gemma SentencePiece 词元化文件(
tokenizer.zip)。 - 一致性校验:每次重新转换都会与 PyTorch 参考实现做逐向量对比,余弦相似度要求 ≥ 0.99 才允许发布,转换脚本见 convert.py。
模型规格定义在 SearchIndexConfig.swift 中:768 维嵌入、256×256 输入、64 词元上下文。应用首次使用时由 ModelDownloader.swift 下载并做 SHA256 校验,之后全程离线可用。
抽帧与镜头检测:让每一镜都有代表
给视频建索引不是逐帧处理——那太浪费了。FrameSampler.swift 采用了一套"候选帧 + 镜头检测"策略:
- 按 2 秒间隔抽候选帧(4K 等高分辨率素材自动降为 4 秒间隔,控制解码成本);
- 8×8 亮度网格指纹:把每帧缩小到 64 个格子计算平均亮度,与上一帧比较,平均差异超过阈值就判定为新镜头;
- 覆盖率保底:即使镜头内容静止,也强制每 8 秒保留一帧,确保长镜头不会漏掉。
这样一条 10 分钟的视频,通常只需为几十到上百个"有代表性的帧"生成嵌入,索引速度因此大幅提升。检测到的每个镜头还会记录起止时间(shotStart/shotEnd),供后续排序去重使用。
本地嵌入计算:画面与文字住在同一个向量空间
VisualEmbedder.swift 是检索能力的灵魂,它让画面和你的搜索词映射到同一个向量空间:
- 图像路径:帧被"挤压缩放"(squash-resize,不裁切)到 256×256 正方形——这正是 SigLIP 训练时的预处理方式,缩放方式不同都会导致嵌入漂移;
- 文本路径:搜索词经 Gemma 词元化后补齐到 64 词元(用 pad 值 0 填充、不加注意力掩码,严格复刻训练配置);
- 统一输出:两个编码器都输出 L2 归一化的 768 维向量,因此相似度计算退化为一次点积,这就是 SigLIP 系列在端侧部署如此高效的原因。
模型加载时指定MLComputeUnits.all,Apple 芯片上的神经引擎会自动参与推理。
向量存什么、怎么存:PALMEMB1 二进制缓存
EmbeddingStore.swift 把结果存成一种紧凑的自定义格式(文件扩展名.embed):
魔数 "PALMEMB1" + JSON 头(模型/版本/维度) + 逐帧数据行 每行 = (时间, 镜头起, 镜头止) Float64 + 768 维 Float16 向量几个聪明的小设计:
- 文件指纹做键:用
路径 + 修改时间 + 文件大小的 SHA256 前 32 位作为缓存键,素材被替换后旧索引自动失效; - 版本校验:头部记录了模型版本与采样器版本,任一项升级(如换新版 SigLIP2)都会触发重新索引,保证结果一致;
- Float16 压缩:向量用半精度存储,磁盘占用减半,读回时转 Float32 交给 vDSP 计算。
毫秒级检索:vDSP 点积与"每镜头最佳帧"
搜索时的排序逻辑在 VisualSearch.swift 中,三步走:
- 批量点积:用 Apple Accelerate 框架的
vDSP_mmul一次性把"全部帧向量矩阵 × 查询向量"算完,比手写循环快一个数量级; - 每镜头去重:同一镜头内只保留得分最高的帧,避免一个场景霸屏结果列表;
- 双阈值过滤:先用绝对下限(余弦 0.05,见 SearchIndexConfig.swift)滤掉噪声,再要求得分不低于最高分的 85%(相对截断),确保返回的结果"要么都很相关,要么不返回"。
此外,索引与导出互斥(导出进行时会暂停索引,避免抢 GPU 带宽)、索引进度会实时回传到媒体面板,这些工程细节让搜索体验既快又稳。
总结:值得借鉴的端侧视觉搜索范式
Palmier Pro 的视觉搜索架构给出了"本地以文搜画面"一个完整参考答案:SigLIP2 双塔模型 + 镜头级抽帧 + 指纹化向量缓存 + vDSP 加速检索。四个环节的每一项都针对 Apple 硅做了取舍——量化控体积、Float16 控存储、squash-resize 保精度、镜头去重控噪声。如果你想在自己的 macOS 项目里实现类似能力,可以从 models/siglip2/MODEL_CARD.md 开始,这份模型卡片完整记录了转换参数与使用注意事项。
【免费下载链接】palmier-promacOS video editor built for AI项目地址: https://gitcode.com/GitHub_Trending/pa/palmier-pro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考