使用AnalyticDB轻松实现以图搜图和人脸检索

5-6-3.gif

1. 背景

以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截图想知道出处的时候只要将图片粘贴到百度或者谷歌的图搜框中就可以找到相关电影的信息. 以图搜图还可以通过照片在海量的人物相册中快速的找到想要找的目标. 当您在使用百度谷歌等搜索引擎的以图搜图功能的时候的时候是否觉得这种"黑科技"遥不可及呢? 其实通过AnalyticDB提供的深度学习算法和高效向量检索, 我们只需要使用SQL就可以轻松的搭建一套以图搜图系统, 不需要掌握tensorflow, pytorch等深度学习框架, 也不需要学习OpenCV之类的视觉算法库. 本文将介绍如何通过AnalyticDB来快速搭建一套以图搜图系统. 内容包括: 以图搜图原理介绍, AnalyticDB以图搜图演示, 以图搜图代码实现, AnalyticDB的产品介绍, 总结和演示系统的源码分享.

2.以图搜图原理介绍

以图搜图又被称为反向图搜(Reverse image search)是一种基于内容的图像检索(Content-based Image Retrieval) 技术. 以图片作为查询的对象, 以图搜图系统会在大量的图像记录中返回与查询图像内容最相关的记录. 例如, 商品图搜会返回与查询图片中主体物品相同或相似的图片信息. 人脸的图搜会根据图片中人脸特征返回目标人物的记录. 如下图所示是一个以图搜图的流程图. 以图搜图应用的核心模块有两个, 其中特征提取模块主要负责从图像中提取视觉特征, 从而获得一个高维的特征向量, 在这个高维特征空间中越相似的图像距离越近. 向量检索模块负责在海量的图像特征向量集中查找与查询图片特征最接近的前k个记录, 并返回.

2.1 图像特征提取

当前主流的特征提取算法主要使用深度学习模型里如VGG[1], ResNet[2] , MobileNet[3], SqueezeNet[4]等模型作为主干网络, 然后使用不同的方法生成特征. 最简单的方法是直接将分类模型例如VGG模型的分类层前一层输出作为图像的特征. 这种算法在以图搜图场景中往往召回率不是很高. 第二种方法是将模型的中间层的特征经过特殊的的方法池化如RMAC[5], GeM[6] 和降维从而得到. 第三种方法是将模型在目标数据集上使用专门设计的损失函数进行前一训练. 例如商品以图搜图特征提取模型通常需要在商品数据集上进行迁移学习, 才能更加准确的提取不同商品的视觉特征。

AnalyticDB提供的通用以图搜图模型采用了阿里云自研的特征提取模型.AnalyticDB模型使用海量图片训练并且使用了先进的特征后处理方法. 与常用的VGG分类模型特征提取模型相比, AnalyticDB利用了多个尺度的特征,更好的平衡图像的局部特征和高层次特征, 在多样的图像场景中有更好的泛化能力。

AnalyticDB还提供了阿里云自研的人脸特识别模型, 基于大量数据训练, 模型已经在多个城市的安防和新零售场景大规模使用. 在百万人脸ID的相册中千分之一误识率下召回率可以达到99%.

2.2 向量检索

向量检索又称为最近邻( Nearest Neighbor Search, NN)检索, 主要负责在海量特征向量中快速的查找与查询向量距离最近的k个记录, 虽然暴力的计算查询向量与数据库中所有向量的距离然后再进行排序可以找到最相近的记录, 但是这种方法的时间复杂度在大规模数据场景下无法满足需求的. 在实际应用场景中, 通常使用近似最近邻检索(Approximate Nearest Neighbor, ANN)的方法, ANN主要是利用向量数据分布的特性以牺牲一定检索精度为代价,快速的返回可能是查询目标最近邻的记录. 常见的ANN的方法有基于局部敏感哈希(LSH)的方法[7], 基于乘积量化的方法[8]和基于图的方法[9].

3. AnalyticDB 非结构化分析工具OpenAnalytic

OpenAnalytic是AnalyticDB上的非结构化分析工具, OpenAnalytic 提供了丰富的图像, 视频, 文本分析的AI算法算子, 如人脸检测, 人脸识别, 人脸性别,年龄识别, 商品属性识别, 图像目标检测, 声纹识别, 文本特征提取等. 用户可以根据实际需求来任意的使用这些AI算子来自由的编排自己的算法pipeline. 例如, 本问中使用的图像特征提取pipeline和人脸特征提取pipeline如下图所示. 用户只需要通过pipeline_create UDF创建pipeline, 就可以在AnalyticDB集群上分布式的运行这些已创建的pipeline获取非结构化数据分析的结果.

image.png

4. 以图搜图系统演示

我们使用AnalytcDB搭建了两套演示系统, 一套是通用的以图搜图的系统另一套是人脸检索系统. 演示系统的源码已经全部开源, 只需要下载源码(代码地址见章节6)并开通AnalyticDB就可以一键启动演示系统. 为了方便用户体验, AnalyticDB推出了1元购活动, 只需1元就可以开通. 演示的架构如下图所示, 可以看到整提架构非常简单, AnalyticDB负责图像的识别和数据的存储, 查询, 不需要依赖其他的诸如深度学习推理之类的服务.
image.png

4.1 以图搜图系统

以图搜图的演示界面如下图所示, 用户可以将本地图片批量的导入AnalyticDB作为搜索的目标相册. 用户可以通过选择本地图片或填写网络图片的URL来进行以图搜图. 同时, 用户可以选择需要返回最相似的图片数目。
image.png

我们提前向AnalyticDB中导入了近50000张图片. 如下图所示, 我们使用一张鸟类的图片进行以图搜图(右侧图片预览), 可以看到返回的全部都是相似的鸟类的照片. 每张照片下方显示了与查询图片的特征的距离, 距离越近表示越相似。
image.png

4.2 人脸检索系统

我们还可以用AnalyticDB搭建人脸检索系统, 可以通过人脸照片在相册中查询目标人物的记录.人脸检索演示的架构与以图搜图几乎相同, 差别是使用了的是人脸特征提取的算法pipeline. 我们在底库中导入了13000多张人脸照片, 然后使用人脸照片进行查询,可以看到返回结果前3张都是与查询用户是同一个人, 向量的距离都比较小, 因为我们设置了返回前10相近个结果, 但是相册中只有3张查询目标的照片, 所以返回的后7个结果与查询目标不是同一个人, 我们也可以看到这7个人与查询目标的向量距离都远远大于前3张。
image.png

5. 使用AnalyticDB搭建以图搜图系统

下面我们来介绍如何使用AnalyticDB来实现上一章节介绍的以图搜图和人脸检索系统。

5.1 创建插件

分别创建AnalyticDB的非结构化分析插件OpenAnalytic和向量检索插件fastann

CREAT EXTENSION IF NOT EXISTS open_analytic;
CREAT EXTENSION IF NOT EXISTS fastann;

5.2 建表

我们可以使用如下sql语句建表, 表中保存了图片的名称, 二进制文件和图像的特征向量(用户也可以将图片的文件保存至阿里云的OSS对象存储服务上.这里不做详细介绍)

CREATE TABLE image_search_table (image_name TEXT NOT NULL,  # 图像文件名image_data BYTEA NOT NULL, # 图像二进制文件feature REAL[] NOT NULL, # 图像特征PRIMARY KEY (image_name)
);

5.3 建索引

为图像的特征向量列构建ANN索引加快查询速度.

CREATE INDEX image_search_feature_index 
ON image_search_table USING ann (feature) WITH (dim = 1024);

5.4 创建特征提取算法pipeline

通过以下sql可以执行4.3创建的pipeline。 这个UDF的输入是pipeline名称和图像的byte array。 输出是包含图像特征向量的JSON串

SELECT open_analytic.pipeline_run_dist_random('general_feature_extractor', <image_byte_array>);

5.5 提取图片特征向量

通过以下sql可以执行4.3创建的pipeline. 这个UDF的输入是pipeline名称和图像的byte array. 输出是包含图像特征向量的JSON串

SELECT open_analytic.pipeline_run_dist_random('general_feature_extractor', <image_byte_array>);

5.6 图像数据导入

在获取图像特征以后, 可以将图像数据导入4.1创建的 image_search_table表中。

INSERT INTO image_search_table VALUES (<image_name>, <image_byte_array>, <image_feature>);

5.7以图搜图查询

通过以下sql可以检索与查询图片向量最相似的前10条记录。

SELECT image_name, image_data, l2_distance(feature,  <feature_vector>) 
FROM image_search_table 
ORDER BY feature <-> <feature_vector>
LIMIT 10;

5.8 人脸检索系统

以上我们介绍了如何使用Analytic来实现以图搜图, 搭建人脸检索系统的逻辑与以图搜图系统几乎是一样的 只需要将5.1-5.6章节中使用的的pipeline名称从 'general_feature_extractor' 替换为 'face_feature_extractor' 就可以将以图搜图系统变成一个人脸检索系统. 非常的方便.

6. AnalyticDB介绍

分析型数据库(AnalyticDB)是阿里云上的一种高并发低延时的PB级实时数据仓库,可以毫秒级针对万亿级数据进行即时的多维分析透视和业务探索。AnalyticDB for MySQL 全面兼容MySQL协议以及SQL:2003 语法标准, AnalyticDB forPostgreSQL 支持标准 SQL:2003,高度兼容 Oracle 语法生态。

向量检索和非结构化数据分析是AnalyticDB的进阶功能. 目前两款产品都包含向量检索功能, 可以支持人脸, 人体, 车辆等的相似查询和推荐系统。AnalyticDB在真实应用场景中可以支持10亿级别的向量数据的查询, 毫秒级别的响应时间. AnalyticDB已经在多个城市的重大项目中大规模部署。

在一般的包含向量检索的的应用系统中, 通常开发者会使用向量检索引擎(例如Faiss)来存储向量数据, 然后使用关系型数据库存储结构化数据. 在查询时也需要交替查询两个系统, 这种方案会有额外的开发工作并且性能也不是最优. AnalyticDB支持结构化数据和非结构化数据(向量)的检索,仅仅使用SQL接口就可以快速的搭建起以图搜图或者图片+结构化数据混合检索等功能. AnalyticDB的优化器在混合检索场景中会根据数据的分布和查询的条件选择最优的执行计划,在保证召回的同时,得到最优的性能。AnalyticDB向量版采用了多项创新性技术, 这些技术在我们的论文 AnalyticDB-V: A Hybrid Analytical Engine Towards Query Fusion for Structured and Unstructured Data 中有详细介绍介绍. 目前论文已经被数据库三大顶会之一的VLDB接受, 具有技术领先性.

结构化信息+非结构化信息(图片)混合检索在实际应用中被广泛使用的. 例如人脸门禁系统被部署在多个小区时, 我们使用一张表存储了所有小区的人脸特征, 在人脸检索时我们只需要检索当前小区的人脸特征. 在这种情况下, 使用AnalyticDB我们只需要在SQL中增加where 小区名 ='xxx' 就可以轻易实现。AnalyticDB同时提供了先进的图像文本分析算法, 能够提取非结构化数据的特征和标签, 用户仅仅需要使用SQL就可以完成图像文本内容的分析.
更多信息可以参考文章: https://zhuanlan.zhihu.com/p/82284704

7. 结语

本文介绍了如何使用AnalyticDB来搭建以图搜图, 人脸识别系统. 演示系统的源码可以在https://github.com/aliyun/alibabacloud-AnalyticDB-python-demo-AI 下载. AnalyticDB还支持其他多种多样人工智能算法如目标检测, 商品识别, 声纹识别, 基因识别等等. 下一期我们将介绍如何使用AnalyticDB做更加复杂的图像分析. 想了解更多请扫码加入AnalyticDB向量版交流群.
image.png

References

[1] Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014).

[2] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

[3] Howard, Andrew G., et al. "Mobilenets: Efficient convolutional neural networks for mobile vision applications." arXiv preprint arXiv:1704.04861 (2017).

[4] Iandola, Forrest N., et al. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size." arXiv preprint arXiv:1602.07360 (2016).

[5] Gordo, Albert, et al. "Deep image retrieval: Learning global representations for image search." European conference on computer vision. Springer, Cham, 2016.

[6] Radenović, Filip, Giorgos Tolias, and Ondřej Chum. "Fine-tuning CNN image retrieval with no human annotation." IEEE transactions on pattern analysis and machine intelligence 41.7 (2018): 1655-1668.

[7] Indyk, Piotr, and Rajeev Motwani. "Approximate nearest neighbors: towards removing the curse of dimensionality." Proceedings of the thirtieth annual ACM symposium on Theory of computing. 1998.

[8] Jegou, Herve, Matthijs Douze, and Cordelia Schmid. "Product quantization for nearest neighbor search." IEEE transactions on pattern analysis and machine intelligence 33.1 (2010): 117-128.

[9] Malkov, Yury A., and Dmitry A. Yashunin. "Efficient and robust approximate nearest neighbor search using hierarchical navigable small world graphs." IEEE transactions on pattern analysis and machine intelligence (2018).

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年后跳槽季,如何在编程面试中大获成功?

【CSDN 编者按】作为技术人&#xff0c;在面向编程面试之前&#xff0c;应该如何进行相应的准备&#xff1f;作者 | Noj Vek 译者 | 弯月责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;本文的作者经历过100多场面试&#xff0c;而且也担任过50多场面试…

HbuilderX中 华为手机 真机调试

文章目录一、场景浮现1. 真机运行2. 问题描述二、解决方案2.1. 终端设置2.2. 开启开发者模式2.3. 开启USB调试2.4. 连接模式选择2.5. 重新运行2.6. 选择设备2.7. 手机真机调试一、场景浮现 1. 真机运行 直接运行Hbuilder中的“运行”&#xff0c;无法显示对应设备 2. 问题描述…

一云多端,连接万物:智能接入网关2.0升级技术揭秘

一云多端&#xff0c;连接万物&#xff1a;全新发布SAG-APP和SAG-vCPE 阿里云提供了多种产品形态支持各种场景上云&#xff0c;SAG2.0发布了SAG-APP支持各种操作系统的终端接入上云&#xff0c;同时发布了SAG-vCPE支持3rd云资源通过虚拟机或容器环境接入阿里云&#xff0c;本次…

网上购物商城 html+css+MVC+sql server+idea编辑器实现。

最近又找到了jsp学习结束后时&#xff0c;最后做的一个网上购物商城小项目&#xff0c;总体分为用户和管理员两个模块&#xff0c;用户注册之后登录&#xff0c;进行商品浏览加购物车并购买评价&#xff0c;管理员负责商品的增删查改以及订单的发货等等&#xff0c;可以说功能比…

幕享手机投屏

前提&#xff1a;手机电脑连接同一个局域网或者无线网 https://letsview.cn/

通俗的讲,这就是容器CPU隔离的底层实现机制

来源 | 刘超的通俗云计算责编 | 寇雪芹头图 | 下载于视觉中国在真正的生产实践过程中&#xff0c;对于CPU的隔离要求比容器的默认策略要严格的多&#xff0c;因而需要对于Linux内核底层机制有所理解&#xff0c;才能很好的做CPU隔离&#xff0c;甚至在离线业务混合部署隔离等策…

OAM创始团队:揭秘OAMKubernetes实现核心原理

作者 | Andy Shi&#xff08;阿里云高级技术专家&#xff09;、天元&#xff08;阿里云技术专家&#xff09; 今年 5 月&#xff0c;阿里云和微软云共同宣布&#xff0c;Open Application Model &#xff08;OAM&#xff09; 社区携手知名混合云管理项目 Crossplane 社区&…

一文读懂人类信息存储进化史

感兴趣的同学&#xff0c;欢迎点击查看详情哦 在很久很久以前 那个时代语言和文字还没出现 人们的还都是通过“呜呜呜”的方式来进行沟通 但是事情还是得记的 因此“结绳记事”这种方法开始在人群里开始流行 但是&#xff0c;事情总归是越来越多&#xff0c;结也会越来越多 到最…

node+express创建第一个node项目

一、安装nodejs 1.到官网下载nodejs安装包 中文官网地址&#xff1a;http://nodejs.cn/ 英文官网地址&#xff1a;https://nodejs.org/en/ 根据自己的系统和版本&#xff0c;选择下载对应的安装包&#xff01; 下面的安装以windows 64 位系统版本安装包为例&#xff01; 2.双…

听一个内行人讲云原生简史

作者 | 吕建伟责编 | 寇雪芹头图 | 下载于视觉中国引子1999年&#xff0c;发生在我自己身上的几件事&#xff1a;1、买了两张盗版光盘&#xff1a;Sun Solaris OS、红帽Linux。2、正在用COM、MTS&#xff0c;开发三层架构的局域网内的大型企业商用套件&#xff0c;由Windows客户…

一个连续创业者的不破不立——对话阿里云MVP蒋烁淼

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 他是公认的“湖畔第一大脑”&#xff0c;被王坚院士称为“云计算的试飞员”。跟他聊下来&#xff0c;仿佛上…

node+express项目链接MySQL数据库(最简单版)

nodeexpress项目链接MySQL数据库&#xff08;最简单版&#xff09; &#xff08;假定你nodeexpress项目已创建完成&#xff0c;可参照这里&#xff09; 第一步、安装mysql驱动 npm install mysql --save-dev第二部、创建数据库表 第三部、连接数据库 在app.js下写入以下代码…

阿里云量产50家独角兽前夜

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 在阿里云SaaS加速器出现前后&#xff0c;中国的IT史上其实出现过各式各样的加速器、训练营。究竟在加速什么&#xff1f;怎么…

企业微信_H5应用如何真机调试_host配置及代理相关

文章目录三、手机调试3.1. 代理软件3.2. 安装&#xff0c;启动3.3. 连接无线网3.4. 代理端口3.5. 手机连接无线网3.6. 设置代理3.7. 代理允许3.8. 手机企微登录3.9. 效果图3.10. 代理监控三、手机调试 手机电脑需要连接同一个无线网或者局域网 3.1. 代理软件 下载代理软件 cha…

关于容器底层,超详细的 Namespace 机制讲解

来源 | 多选参数责编 | 寇雪芹头图 | 下载于视觉中国NamespaceLinux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。这种隔离机制和 chroot 很类似&#xff0c;chroot 是把某个目录修改为根目录&#xff0c;从而无法访问外部的内容。Linux Namesapce 在此基础之上&…

从零入门Serverless|一文搞懂函数计算及其工作原理

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 什么是函数计算&#xff1f; 大家都了解&#xff0c;Serverless 并不是没有服务器&#xff0c;而是开发者不再需要关心服务器…

node连接mysql,刚开始运行一切正常,后来连接失败报错。

之前写了个小程序Node News&#xff0c;用到了MySQL数据库&#xff0c;在本地测试均没神马问题。放上服务器运行一段时间后&#xff0c;偶然发现打开页面的时候页面一直处于等待状态&#xff0c;直到Nginx返回超时错误。于是上服务器检查了遍&#xff0c;发现程序仍然在运行&am…

在线视频面试业务融合阿里云,助您找到心仪好工作

“您好&#xff0c;可以听到吗&#xff1f;“ “……. 您…好&#xff0c;我…这里画面卡顿….了&#xff01;” “…..不好意….思&#xff0c;能重复一下您刚才的描述吗吗吗&#xff0c;没听太清….楚…………..” “哎&#xff0c;感觉这次又糊了&#xff0c;这已经是我的第…

HbuilderX中 真机调试 Android IOS

文章目录一、Android二、IOS2.1. 运行到IOS2.2. 打开调试模式一、Android HbuilderX中 Android 真机调试 二、IOS 2.1. 运行到IOS 2.2. 打开调试模式