Chat with Milvus #17- Milvus tutorials与Phantoscope图像搜索引擎开源

限于喜欢 提交于 2020-08-11 20:26:32

Chat with Milvus #17视频- Milvus Tutorials & Phantoscope 上线啦!

本周的 Milvus 线上会议中,我们与参加者分享了两个好消息,第一个是Milvus 教程的上线。以后你就可以更轻易的在 Milvus 官网上找到开发需的资源啦!

 

 

 

第二个好消息是大家期待已久的一个功能更强大的以图搜图系统 Phantoscope 推出了第一个版本。

 

Phantoscope 是一个基于 Milvus 与深度学习的云原生图像搜索引擎:十亿级别的图像的高性能搜索。完全兼容 Tensorflow、Pytorch、TensorRT、ONNX,XGBoost 等主流深度学习框架。提供 GUI 展示搜索效果、管理 Phantoscope 资源。原生支持 Docker 与 Kubernetes。

想知道更多的朋友, 欢迎直接到 GitHub 走走:https://github.com/zilliztech/phantoscopegithub.com

 

那这个 Phantoscope 是什么意思, 它应该怎么念呢?.iciba.com/word?w=phantoscope

没有时间看视频的朋友, 也可以看看下面的部分文字实录。

 

| Milvus Q&A 部分文字实录

Attendee= 参会者

 

 时间戳

09:17-16:41 Attendee A; 16:47-24:00 Attendee B

24:20-31:40 Attendee C; 31:50-39:57 Attendee D

 

Attendee A:

我看到你们新开放了一个 Phantoscope, 那如果我想做一个以图搜图的功能,我是基于 Milvus Bootcamp 的示例还是 Phantoscope 来搭建?

 

Ryan@Milvus:

是这样,因为我们 Phantoscope 里面其实它会包含比较强大的一些功能,比如讲说你可能只是简单的想去找到比较相近的一些照片,并没有一些特定的场景,那其实你用我们之前提供的 Milvus 以图搜图的系统也是可以做的。

但是我是建议您可以尝试一下 Phantoscope ,因为 Phantoscope 这里面会有比较强大的一些对象提取的功能,比如说您要搜图片里的一个内容的话,像是把里面的一些动物专门提出来,通过 Phantoscope 你可以通过配置 pipeline,可以把图片里面具体的某一个物体给它提取出来,然后我们再对它进行相似性检索。这样的话你检索的准确性,包括你整个检索的效率,都会比之前我们 Milvus repo 里面放的以图搜图的效果会好很多,但是如果你只是说想找一些相近的照片,并没有一些特别的场景,你也可以先试一下我们 Milvus demo 里面的内容。

Attendee A:

还有一个问题想请教一下,因为我们搜索的结果其实是会跟业务相关联,比如说我举个例子:我收到这张图片如果是一个人的话,可能我上传一个头像,这个头像对应的是系统里面的他的姓名或者是他的用户 ID 什么。这块的话我看之前的示例的话,它那块其实是向量算完以后,我们是自己去存储业务关系对吧?你是这么建议的对吧?

Ryan@Milvus:

是的。

Attendee A:

我搜完结果以后,我等于说还要反向的去从我相对来说还比较庞大的数据里面,再去反向按 ID 搜回搜索结果,要多做一次这样的操作。不过还好,因为就按组件 ID 去搜,应该还好。

Ryan@Milvus:

是。我们之前做过一些测试,即使你在 10 亿这个量级的话,你使用一个比如说结构化数据库的话,加一个组件的话,其实你反向去搜效率其实非常快,大概就是几个毫秒。我们之前做过一些验证,所以说这个应该是对效率上没有什么特别的影响,应该是非常快的。

Attendee A:

还有第三个问题是想请教一下开发语言的问题,因为像我们自己本身是做 Java 开发的,Python 懂一点点。但是我看整个技术上好像都是比较倾向于 Python,那我是不是应该用 Python 来做这样的一个以图搜图的开发会更合理一点,还是说可以用 Java 来做?

Ryan@Milvus:

对,因为我们提供的示例目前主要是以 Python 来做的,但是您看 Phantoscope 里面,其实我们这里面提供的接口就是 RESTful API 所以说你只要说是用一个 RESTful API 来调用的话,其实可能跟你的开发语言并没有直接的关系。

其实我们 Milvus 本身也是有 Java 的 SDK 的,就看你怎么喜欢,但是我觉得像可能目前在机器学习或者是在人工智能相关的一些应用的层面上面 Python 应该还是比较主流吧,然后您也可以选择在 Python 方面去再多做一些尝试。


Attendee B:

我试了一下搭一下你们的系统,然后以图搜图也能搜了,但是我们可能那个场景也有那种文字搜图和以图搜图那种相结合的情况。你们这边是不是只是说以图片这种形式来做?有没有类似的这种比如说文字结合图片一起搜?

Ryan@Milvus:

我理解您的文字搜图,您的意思是说比如说我输入一个火车,然后就可以把这个火车的图片搜出来对吧?

Attendee B:

对,是不是技术栈也不太一样?

Ryan@Milvus:

对。您讲的场景用我们理解来讲,可能是上一代的这种技术,就是我们在处理图片的时候,其实是对图片它先可能是做一些分类,有些模型对这些图片进行一个对象提取和分类,然后分完类之后我们对这个图打上一些标签。我们在做的时候其实是很多的实现方法,可能就是通过一个倒排索引来加速对文本的搜索。你输入一个火车就可以说通过它倒排索引找到它相应的图片,然后把相应的火车给你拿出来。

所以我们现在以向量,以我们现在看到图像内容来做检索的算法,其实现在来讲基于这种深度学习的神经网络这种算法,它是直接通过深度学习的算法,把图片的一些特征提取成了向量。您就可以理解成比如说我们用人眼去看这两个图片是不是很相似,我们其实也是通过深度学习训练,把模型训练得能够具备人类的这种这种判断的模式,所以说如果我们可以找到我们肉眼觉得很像的图片,这个模型应该是把这样的一个图片放到这上面来告诉你,给最像的火车打分。所以就像您说的,两边的技术其实是不太一样的,它从模型包括图片的预处理,包含最后的检索的部分其实这个技术确实是不太一样。

Attendee B:

明白,还有您刚开始介绍的那个 Phantoscope 那个里面是不是也有一层,比如说你之前说家具的那种识别,比如说我知道这是个凳子或什么,是不是也有这么一层那种识别的功能,就比如说我给你的照片你知道这里面是家具的那种提取?

Ryan@Milvus:

没错,其实就是我们前面提到的, Phantoscope 它是一个相对比较灵活的一个以图搜图的这么一个套件。我们可以通过配置我们数据流处理的方式,比如讲我们有 pipeline 流水线,就是说根据咱们实际的业务产品,比如你讲到说去专门对家具进行一个精确检索。你在这一个图片里面除了家具以外的这些目标你可能都不太关注,那我们这里面就会有一些这样的一个对象识别的模型。你这张图片进来之后就先经过提取的模型之后,我们会把里面你关心的这些物体给它提取出来,提取出来之后再把提取出来的这部分的照片,然后通过我们后面的 encoder 比如像您之前也用过的 Milvus 里面有 VGG,包括有 Xception 这样的一些 encoder 的这种神经网络的模型,把它转换成一个向量,然后再做这种相似性的检索。

所以如果说您是有特定场景的那种以图搜图搜索的需求的话,你可以用我们 Phantoscope 提供的这种更为全面的功能来实现。

Attendee B:

这种万花筒 (Phantoscope )是不是要标注图片?

Ryan@Milvus:

不需要的,现在我们万花筒里面提供的这些模型都是一些开源的相对比较成熟的一些模型,这些模型其实是不需要您再去给它打标注的。比如说我们里面有大概4种对象提取的模型,其中有一个是专门提人脸的,还有剩下三种是相对比较通用的,对于比较通用的大概能识别到100多种物体,您就可以根据自己的这种需求,可以选择比如说我在这100多种里面,我就只识别里面其中的一部分,你通过对模型的一些调整,可以只把你感兴趣的这些东西从图片里识别出来,然后对它进行相似性的检测,所以就可以达到一种精准的一个效果。


Attendee C 的场景数据量比较大, 召回要求 top 1, 有兴趣的朋友可以看看视频中 24:20-31:40 的部分


Attendee D:

我曾经做了一下 Facebook (FAISS)包装,我想问一下你们和 Facebook 的库比较起来的话有什么区别?我自己评估了一下 Facebook 库,在一个 million 级别的这种向量数量情况下的话,他要 build 一个 index,大概需要两分半钟左右。那你们 Milvus 对这种切片大小有没有什么指导?

Ryan@Milvus:

这个问题其实是这样的,我们的理解其实 FAISS 跟我们并不在一个维度上,因为FAISS 只是一个库,但我们这边其实做的是一个数据服务,我们这边会有很多的这种易于部署、易于生产的这样的一些特性,我们对 FAISS 的改进其实可能有一两百项吧。因为其实我们是用了 FAISS 的一些核心的算法,但是其实我们在它上面的改进是非常多的。比如您前面提到的说像这种文件的管理,就是文件分片的管理 FAISS 是没有的,反正你内存有多大就速度多大,也没有做这种分片来做内存管理。

Attendee D:

分布式你们也做了是吧?

Ryan@Milvus:对,分布式我们现在是有一个原型系统,我们其实现在也正在打造下一个真正的分布式的版本,我们也是正在研发中。不知道您现在是已经在 FAISS 上做了一些系统了吗?还是说现在还是在调研阶段?我觉得从 Milvus 的使用的情况来讲,我觉得你会发现我们基本上把你需要去考虑的 FAISS 那些乱七八糟的非向量检索部分的那些功能,应该是我们都已经在 Milvus 里帮咱们用户都已经做完了,您就可以专注的去做比如说模型的训练或者做系统的这种设计和架构的设计,然后能更好的去帮助你去部署应用。

Attendee D:

你刚才说的分布式现在有文档吗?我想了解就是你们的架构怎么样?

Ryan@Milvus:

目前来讲,我们还在plan的阶段。我们后续这些相关的一些文档和我们的计划会陆续的在社区里面跟大家一起来分享。

 

 

|欢迎加入 Milvus 社区

github.com/milvus-io/mivus| 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11 | 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/4781| Bilibili

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!