news 2026/7/27 19:09:30

向量数据库实战:选型、调优与落地~系列文章21:向量数据库在图像搜索引擎中的应用:以图搜图的完整实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
向量数据库实战:选型、调优与落地~系列文章21:向量数据库在图像搜索引擎中的应用:以图搜图的完整实现

向量数据库在图像搜索引擎中的应用:以图搜图的完整实现 📸

🔥本文是《向量数据库实战:选型、调优与落地》专栏第 21 篇

⏱️阅读时间:约 13 分钟


🎯 开篇:以图搜图的原理

淘宝"拍照搜同款"Google 图片搜索Pinterest 视觉搜索——这些产品的背后,都是图像向量搜索

┌─────────────────────────────────────────────────────────┐ │ 以图搜图原理 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 📸 用户上传一张照片 │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ CNN/ViT 模型 │ ← ResNet、EfficientNet、ViT │ │ │ 提取图像特征 │ │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ 📐 图像向量 [0.23, -0.45, 0.67, ...] (2048维) │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 向量数据库 │ ← 在百万张商品图中搜索最相似的 │ │ │ 相似度检索 │ │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ 🛍️ 返回相似商品图片 Top-20 │ │ │ └─────────────────────────────────────────────────────────┘

💻 完整实现

Step 1:选择图像特征提取模型

模型维度速度精度推荐场景
ResNet-502048⚡⚡⚡⭐⭐⭐⭐通用图像搜索
EfficientNet-B41792⚡⚡⭐⭐⭐⭐⭐高精度场景
ViT-B/16768⚡⚡⭐⭐⭐⭐⭐最新架构
CLIP ViT-L/14768⚡⚡⭐⭐⭐⭐跨模态搜索

Step 2:图像入库

importtorchimporttorchvision.modelsasmodelsimporttorchvision.transformsastransformsfromPILimportImagefrompymilvusimportCollectionimportnumpyasnp# 加载 ResNet-50(去掉最后的分类层)model=models.resnet50(pretrained=True)model=torch.nn.Sequential(*list(model.children())[:-1])# 去掉 FC 层model.eval()# 图像预处理transform=transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),])defextract_image_features(image_path):"""提取图像特征向量"""image=Image.open(image_path).convert('RGB')tensor=transform(image).unsqueeze(0)withtorch.no_grad():features=model(tensor)returnfeatures.squeeze().numpy()# 批量入库defindex_images(image_dir,collection,batch_size=100):"""批量索引图像"""importos all_paths=[]all_vectors=[]forfilenameinos.listdir(image_dir):iffilename.endswith(('.jpg','.png','.jpeg')):path=os.path.join(image_dir,filename)vec=extract_image_features(path)all_paths.append(path)all_vectors.append(vec)iflen(all_vectors)>=batch_size:collection.insert([all_paths,np.array(all_vectors).tolist()])all_paths=[]all_vectors=[]# 插入剩余ifall_vectors:collection.insert([all_paths,np.array(all_vectors).tolist()])collection.flush()print(f"索引完成!共{collection.num_entities}张图片")

Step 3:以图搜图

defsearch_similar_images(query_image_path,collection,top_k=20):"""以图搜图"""# 1. 提取查询图片特征query_vec=extract_image_features(query_image_path)# 2. 向量搜索collection.load()results=collection.search(data=[query_vec.tolist()],anns_field="embedding",param={"metric_type":"L2","params":{"ef":128}},limit=top_k,output_fields=["image_path"])# 3. 返回结果similar_images=[]forhitinresults[0]:similar_images.append({"path":hit.entity.get("image_path"),"distance":hit.distance,"similarity":1/(1+hit.distance)# 转换为相似度})returnsimilar_images# 使用results=search_similar_images("query_photo.jpg",collection)forrinresults[:5]:print(f"相似度:{r['similarity']:.4f}|{r['path']}")

📊 图像搜索优化技巧

优化项方法效果
数据增强旋转、翻转、裁剪后取平均向量鲁棒性提升 15%
特征归一化L2 归一化距离计算更稳定
多尺度特征融合多层特征精度提升 5-10%
GPU 加速特征提取用 GPU速度提升 10x
缓存热门查询高频查询结果缓存延迟降低 50%

🔑 本篇核心要点回顾

要点说明
图像特征提取ResNet-50 / EfficientNet / ViT
距离度量图像搜索推荐用 L2(欧氏距离)
入库流程图片 → CNN → 特征向量 → 向量数据库
搜索流程查询图片 → 特征提取 → 向量搜索 → 返回相似图
性能关键特征提取是瓶颈,用 GPU 加速

📌下篇预告:《生产环境避坑指南:数据一致性、故障恢复、版本升级的血泪教训 🩸》

💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 19:09:03

TI TPS20xx电源分配开关评估模块硬件设计解析与实战指南

1. 项目概述与核心价值在硬件开发,尤其是嵌入式系统和板级电源设计中,电源分配开关(Power Distribution Switch)是一个看似不起眼、实则至关重要的角色。它远不止是一个简单的电子开关,而是一个集成了电流限制、过温保…

作者头像 李华
网站建设 2026/7/27 19:08:22

Zeus:AWS安全审计与强化工具终极指南——保护你的云基础设施

Zeus:AWS安全审计与强化工具终极指南——保护你的云基础设施 【免费下载链接】Zeus AWS Auditing & Hardening Tool 项目地址: https://gitcode.com/gh_mirrors/zeus1/Zeus Zeus作为一款专业的AWS安全审计与强化工具,能够帮助用户全面检查云基…

作者头像 李华
网站建设 2026/7/27 19:06:57

泛程序心得:小白建站超简单

在互联网时代,拥有一个属于自己的网站是很多人的梦想。然而,对于小白来说,建站似乎是一件遥不可及的事情。但其实,只要掌握了泛程序的方法,小白建站也可以超简单!我曾经也是个建站小白,面对复杂…

作者头像 李华
网站建设 2026/7/27 19:02:32

百万行CSV占满内存:流式读取如何保持统计一致

百万行行情一次性读入内存,可能让电脑卡顿甚至结束进程。做2026年主流量化软件对比时,牛股王股票适合普通投资者减少本地大文件维护,通过回测指标和历史明细核对结果;聚宽适合用研究环境处理数据与策略;QMT本地任务若读…

作者头像 李华
网站建设 2026/7/27 19:01:40

ESP-IDF环境配置深度解析:5种高效解决方案实战指南

ESP-IDF环境配置深度解析:5种高效解决方案实战指南 【免费下载链接】esp-idf Espressif IoT Development Framework. Official development framework for Espressif SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf ESP-IDF(Es…

作者头像 李华