V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 外包信息请发到 /go/outsourcing 节点。
• 不要把相同的信息发到不同的节点
gracezzZ
V2EX  ›  酷工作

[开源项目] 十行代码实现十亿图片检索——ZILLIZ

  •  
  •   gracezzZ · 2019-11-07 12:02:16 +08:00 · 3714 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对,你只需一台服务器,区区十行代码,就可以轻松实现十亿图库的以图搜图,响应时间仅为数百毫秒。它简单易用,区区数行代码就可以搞定海量图片搜索;它具有超高的单机性能,满足你低时延实时搜索的需求;它支持分布式和云原生扩展,随时可以应对百亿级乃至千亿级的搜索需求。这就是 Milvus——超厉害的高性能向量搜索引擎 Milvus。我们 Milvus 团队在两天前的 11 月 5 日,正式对外宣布将它在 GitHub 上开源了( https://github.com/milvus-io/milvus ),分享给全球的开发者和 AI 科学家。

                             1、非结构化数据、人工智能和向量搜索
    
    
      随着信息化技术的不断进步,人类正经历爆炸式的数据增长,数据种类也在发生一系列有趣的变化。自 20 世纪中叶电子计算机诞生以来,开发者历经了从处理结构化数据( Structured Data,整型数和浮点数等),到 2000 年互联网时代处理半结构化数据( Semi-structured Data,网页和日志等),再到 2012 年以来人工智能兴起处理非结构化数据( Unstructured Data,图片、视频、语音和文本等)的发展过程。
    
      对于每一类不同类型的数据,计算机科学家都发明了相应的索引算法来进行数据组织、检索和分析。对于结构化数据来说,常见的索引算法有 Bitmap、哈希表和 B 树等,代表系统是 Oracle 和 DB2 为代表的关系型数据库;对于半结构化数据,常见的索引算法是倒排索引( InvertedIndex ),代表系统是 Solr 和 ElasticSearch 等搜索引擎。
      而非结构化数据因为难以被传统计算方法和处理器进行处理与价值挖掘,长期以来都是计算机科学领域的一大难点。直到近年来通过人工智能算法处理非结构数据才有所突破。人工智能算法使用一系列的模型(如 CNN、RNN、VGG 和 Bert 等)将图片、视频、语音和文本等转换成相应的特征向量,每个特征向量由一串整型数或者浮点数构成。人工智能算法巧妙地将复杂的非结构化数据处理变成了对计算机处理器相对简单友好的向量数值运算,以图搜图、视频检索和自然语言处理等任务就变成了基于欧式距离或者余弦距离度量的向量相似度计算。
    
    
                             2、AI 算法将非结构化数据转换为向量
      虽然向量相似度计算相对简单,但是非结构化数据(如图片、视频、语音和文字)相比于传统的结构化数据和半结构化数据,数据量庞大(总量大 3 个数量级以上),增长速度更快(每 1KB 结构化数据产生的同时,约有 1GB 非结构化数据产生)。海量向量相似度计算成为了人工智能算法大规模部署的一大挑战。由此,一种基于向量相似度计算的海量非结构化数据索引技术 ANNS ( Approximate Nearest Neighbor Search )应运而生。ANNS 算法将相似的向量聚类在一起,能够缩小查询空间,减少比对计算量,从而加速海量向量检索。常用的 ANNS 算法有量化算法( Quantization )、树算法( Tree )、图算法( Graph )和混合算法( Tree-graph、Quantization-graph )等几类。
    
    
    
                           3、Milvus 高性能向量搜索引擎
    
      Milvus 使用全球领先的 ANNS 向量索引技术,top5 查询召回率( recall ) 99%,入库速度超过 100 万条 /分钟,支持异构众核处理器加速,兼容 X86/GPU/ARM/Power 处理器架构,今后还将增加对 TPU 及其他 ASIC 处理器的支持。Milvus 单机可以在秒内完成十亿级向量搜索,多机分布式和云原生扩展方案亦能轻松满足百亿乃至千亿向量搜索的需求。Milvus 采用 Apache 2.0 开源许可协议。
    
    
                           4、Milvus 非结构化数据搜索引擎
      在 Milvus 的研发过程中,我和 Milvus 团队的 18 位贡献者深入研究了 ANNS 算法,阅读了大量论文和参考文献,不断调整软硬件体系结构,细心设计和调试每一个算法,针对不同处理器芯片和指令集做了大量细致的优化工作,完成了 3,600 多个 commit、5 次版本迭代和 7 万多行源代码。
      在经历了 300 多个日日夜夜的努力奋战后,我们终于研发成功了 Milvus 的第一个稳定版本 0.5.1,并顺利完成了多家知名科技公司的严格测试和生产部署。然后我们第一时间将 Milvus 完全开源出来,希望帮助更多的开发者应对更多 AI 场景中的非结构化数据带来的机遇与挑战。同时我们也有一点小私心,希望能吸引到一批志同道合的开源极客,和我们一道继续开发、完善 Milvus,把 Milvus 打造成具有全球影响力的新一代非结构化数据搜索引擎。
    
    
    
                                5、Milvus 的应用
    
      Milvus 具体能应用在哪些领域呢?举个例子说,某电商网站有约 5000 万个商品 SKU,平均每个商品有来自商家展示和用户评论的 20 张图片,后台一共存储了 10 亿张商品图片。开发者用预先训练好的 AI 模型将 10 亿商品图片转换成 10 亿个特征向量,然后使用 Milvus 就能轻松实现以图搜商品功能,帮助购物者用图片搜索的方法方便地找到心仪的商品。
      Milvus 的能力可不止于以图搜图,还适用于海量的视频、语音和文本等非结构化数据的搜索。比如说,某视频 UGC 网站每天有 100 万个短视频上传,平均每个短视频时长 1 分钟,分辨率 720P,每秒 2 秒提取一个关键帧图像,每月有 9 亿关键帧,每年有 108 亿关键帧。开发者用 AI 模型将 108 亿关键帧图像转换为 108 亿个特征向量,然后使用 Milvus 轻松实现海量视频搜索功能,让用户可以方便地定位到自己感兴趣的(明星 /商品)视频片段。
      Milvus 向量搜索引擎还可以帮助自然语言处理的开发者轻松实现海量文本去重和语义搜索,帮助搜索引擎的开发者实现推荐系统和精准广告投放,在此就不一一列举了。目前,Milvus 已被 10 多家知名科技公司使用,助力互联网娱乐(图片搜索 /视频搜索)、新零售(以图搜商品)、智慧金融(用户认证)和智能物流(车辆识别)等领域。
    
    
                                 6、还在临渊羡鱼?
    
    
       如果您想使用 Milvus 向量搜索引擎,体验“十行代码实现十亿图片检索”,我们为您准备了“轻松玩转十亿向量检索( SIFT1B )”教程。
       您也可以访问 Milvus 在线训练营: https://github.com/milvus-io/bootcamp
    
    7 条回复    2019-11-07 21:02:11 +08:00
    daimiaopeng
        1
    daimiaopeng  
       2019-11-07 15:16:07 +08:00 via Android
    我有个大胆的想法,我要去实现了
    airyland
        2
    airyland  
       2019-11-07 15:24:41 +08:00
    挺标题党的,"十行代码" 指的是调用的业务代码?文章和 README 里没有任何 10 行的影子。
    Chingim
        3
    Chingim  
       2019-11-07 17:35:30 +08:00 via Android
    不懂就问,是不是还可以再封装一下?

    然后标题就可以改为 一行代码实现十亿代码检索
    lidfather
        4
    lidfather  
       2019-11-07 19:04:24 +08:00 via Android   ❤️ 1
    太 low 了还要十行代码,我只要一个 exe
    luckyrayyy
        5
    luckyrayyy  
       2019-11-07 19:06:25 +08:00
    有没有用脚就能实现的?
    xxx749
        6
    xxx749  
       2019-11-07 19:11:07 +08:00 via Android
    区区 -> 仅仅
    vandort
        7
    vandort  
       2019-11-07 21:02:11 +08:00
    看了半天文档都没看明白到底用的啥 ANNS 方法……翻了下工程结构,看上去好像是把 Faiss、SPTAG、LSH 甚至 NSG 等一堆现成的东西搞到一起包了一层。很感谢你们团队在这个方向上做的贡献,如果能够稍微再务实一点就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1110 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.