基于文心一言的底层视觉理解,百度网盘把「猫」换成了「黄色的猫」

图片11.png

随着移动互联网的一路狂飙,手机已经成为人们的新器官。出门不带钥匙可以,不带手机却是万万不可以的。而手机上,小小的摄像头也越来越成为各位「vlogger」的口袋魔方。每天有超过数亿的照片和视频被上传到百度网盘中,这些照片和视频大多来自于用户自己的拍摄或收藏,覆盖的主题和内容相当广泛,包括人物、风景、动物、地标建筑、素材等。他们记录着生活,也通过灵感和创意展示着生活。但由数量庞大、种类繁多,这些图像资源的管理和搜索成为了用户的一大挑战。

截屏2023-03-22 19.39.21.png

在和用户的沟通中,“找照片的过程十分痛苦”引起了大家的共鸣。即使网盘提供了云上大空间供照片储存,基础分类搜索后的照片还是如同汪洋大海。有时候为了寻找一张在记忆中“闪现”的照片,需要长时间在时光轴里滑动。

「如果能通过 去年夏天我在海边的照片 这种关键词直接得到照片就好了」。

说干就干。

网盘的技术同学开始广泛调研市面上的图片搜索功能。研究发现,目前大部分都是基于标签的图片搜索方法。这往往需要用户手动或者AI帮助添加标签或关键词,才能进行检索和匹配。然而,由于一张图片往往有很多不同的内容和特征,标签的限制导致用户只能添加少量有限范围内的标签,诸如简单的“猫”,“日出”等,无法全面地描述图片的内容和特征。因此,现有的图片搜索无法响应用户更加复杂的图片描述。

「怎么办?」用户这样问我们,我们就这样问自己。

「精准精准再精准」

话不多说,先来看看优化后的实际效果

截屏2023-03-22 19.42.48.png

截屏2023-03-22 19.43.02.png

截屏2023-03-22 19.43.11.png

截屏2023-03-22 19.43.22.png

从「鸟」到「海边的鸟」,从「海边」定位到「我在海边」,从「宝宝」精准到「抱着宝宝逛街」……

百度网盘想做的,做成的,就是从「面」精准到「线」甚至到「点」。

为了解决这个问题,百度网盘引入了基于自然语言的图片内容语义检索方法,这种方法是利用深度学习和人工智能技术,将每张图片转化为一个向量表示,从而通过计算语言向量和视觉向量之间的相似度来进行搜索和匹配。由于向量表示比传统标签更加丰富,因此,能有效实现人们用自然语言搜索图片的目的。

「为什么用向量?」相信这也是很多“行友”的疑惑。

相比传统的标签搜索方法,基于向量的语义检索具有以下优点:

  • 用户输入的灵活度高:用户可以直接按照正常说话的方式进行检索,不需要考虑图片是什么标签;
  • 检索准确性高:由于向量可以全面地描述图片的内容和特征,因此搜索结果更加准确和全面;
  • 可检索的内容广:百度网盘采用百度文心跨模态大模型ERNIE-ViL技术(不错,openai有一个类似的技术clip,这也是最近风靡全球的AI绘画的核心模型),这种技术使用了海量网络数据进行训练,从而可以理解和识别广泛的图片内容,无论是人物、风景、动物、地标建筑、素材等各种领域的图片都不在话下;

因此,在百度网盘团队的努力下,我们真的做到了「精准精准再精准」,图片搜索也不再那么“难”了。

有「AI」,我们更「爱」搜了

实际技术产品化过程并非一帆风顺,我们遇到了很多问题,这也是业界很多相册管理工具未提供类似功能的原因。从项目立项、效果验证到产品化,我们花了超过四个月的时间,直到22年8月底正式上线和大家见面。“怎么做到的?” “如何理解自然语言” “还能更快搜到吗”……这些都是我们和用户共同关注的问题。

搜得到

像“穿鞋子的猫”、“穿正装的照片”这种,传统的标签检索很难搜到。因此,我们选择了语义向量。无论是OpenAI开源的CLIP,还是百度自研的融合了场景图知识的多模态预训练模型ERNIE-ViL,都很擅长解决语义匹配问题。

这类方法的核心原理是将检索文本和个人影像数据映射到同一语义向量空间,文本和个人影像数据向量之间的距离越近,相似度就越高。这样我们通过向量检索,来实现用中文文本查找对应图片的功能了。相比传统先打标签,再关键词搜索的方法,基于语义的检索方案,直接实现了端到端的语义匹配,能够避免语义的丢失。

图片12.png

搜得准

在网盘用户的实际搜索中,我们发现,用户存在着复杂多维度组合查询的需求。比如:去年我在三亚海边看日出的照片。其中包含了时间、地点、人物的信息,这就超出了语义向量的能力边界了,语义向量无法精准的判断时间、地点,也无法知道你是谁。

但是,经常拍照的用户应该会说「我们手机拍出来的照片,就包含了拍摄时间、经纬度等相关信息呀!」

没错,我们正是通过提取这些元信息,把经纬度转换成实际的街道名、场所名称从而用来做时间、地点的精确匹配。

「那怎么识别我是谁?」

别急,虽然识别“谁是你”相对复杂一些,但我们也找到了解决办法。在百度网盘备份过照片的用户,应该都知道智能分类。我们会把照片中出现的同一个人物的照片聚合出来,你可以自己给这个人物打上标签,比如“我自己”、“宝贝”等。我们便基于这个标签来做人物的搜索。有了这些信息,我们就可以实现,时间、地点、人物、事件组合的复杂搜索。回到上面这个例子,“去年我在三亚海边看日出的照片”,我们拿到这个请求,会首先解析出里面包含的各个元素:

  • 时间:去年

  • 地点:三亚

  • 人物:我

  • 事件:海边看日出

其中,时间、地点、人物可以用范围查询或者关键词查询来实现,事件适合用语义向量来实现,通过这样的组合查询,我们最终就能得到用户想要的结果。

有些用户反馈,图片的结果太靠后了,「在找图片的时候,总是要翻好几次才能看到,真难」

于是,我们增加了对用户搜索意图的理解,如果识别出来你是想要找图片,我们就会把图片的返回结果放在最上面。

图片13.png

搜得快

解决了效果方面的问题,又出现了新的挑战:如何将技术变成用户可使用的产品?由于成本太高,效率太低,很多相册APP并没有把这种功能开放给用户。

「无所谓,我会溜走」(划掉

说正经的!

影响速度的环节有很多,整个过程中,我们首先需要提前对用户的图片进行向量计算,并建立索引,然后查询的时候,能够快速的对用户的query进行分析并完成图片向量的检索,最终把结果排序后呈现给用户。这个流程中我们遇到了很多挑战:

图片15.png

图片16.png

端+云结合

  • 我们在云上对已备份的图片进行向量计算,避免了数据在用户设备和服务器之间公网传输的延时,也弥补了用户设备算力不足的问题,可以快速的完成向量计算的工作
  • 在云端完成向量计算后,通过实时数据同步通道,及时下发到用户设备本地建立索引,用户在查询的时候,可以直接在本地完成向量检索

端本地索引优化:为了节省用户本地的索引存储量,同时尽可能减少计算量,我们对索引进行了大量的压缩,优化后,即使图片规模达到10w,向量检索速度也可以达到ms(毫秒)级别,最终返回结果的延时能控制在秒级别。

端+云向量检索流程如下图所示:

图片17.png

  1. 请求云端计算文本“黄色的猫”的特征向量和LSH(Locality-Sensitive Hashing,局部敏感哈希)编码;

  2. 计算文本和图片LSH编码相等的维数,找到相等维数超过阈值的图片子集
    a. 这里使用的LSH编码具有如下特点:相同的维数越多,向量相似的概率越高
    b. 这样我们就找到了一批与查询的文本向量相似度较高的图片子集,可以节省后续向量相似度计算的次数。

  3. 在候选的图片子集中,计算图片向量与文本向量的相似度,按照相似度,从高到底返回

异构算力调度:除了要每天为新增的亿级别数据计算向量特征外,我们还需要持续的对用户存量数据进行计算。为了让有迫切需求的用户,能够尽快使用到这个功能,我们也提供了申请加速开通图片高级搜索的通道,优先为申请用户计算数据。为了利用一切可以计算的资源来加速计算效果,我们开发了一套能够统一管理CPU、GPU等异构资源的调度系统,充分利用闲置资源,来实现尽可能快的覆盖更多用户。

搜更多

除了图片语义检索,我们之前也收到了用户各种各样的找图需求,比如:想搜索图片里的文字、想给朋友圈文案配一张以前拍的图片。

「安排,统统安排!」

图片18.png

针对 「搜索图片里的文字」 , 用户可以在搜索筛选里开启,开启后可能需要等待文字提取完成

图片19.png

「我想要朋友圈文案配图片」你不妨直接搜一下,我们会给你推荐相册里最适合这句话的图片,就像

图片21.png

怎么用?

在百度网盘,搜索“高级图片搜索”,点击“开启高级图片搜索功能”,点击“立即体验”,等待图片计算并建立索引后即可体验,我们会在计算完成后发送PUSH提醒。

图片20.png

变成「黄色的猫」以后*

经历了种种曲折,项目最终成功上线。通过检测后台算力,我们高兴地看到申请高级图像搜索的用户占比正在慢慢提升。同时,用户也提出了一些建议和意见,比如图像搜索不够精细等问题。我们了解到,有的用户用这个功能管理视觉素材,还有的管理各种报销发票。前者需要更精细的特征提取,后者则需要引入文字ocr,通过把视觉和文本进行多模态融合搜索,才能满足用户需求。

另外针对有些用户提出的「用户自定义的精细化图像标签能力」,如“我和爸爸的合照”、“我的自拍照”等,这对我们模型训练和预测框架的伸缩性,提出了更高的要求。

用户不断多样化、个性化的需求,成为网盘产研例行工作讨论的输入,同时也促进我们继续在技术和产品上思考和尝试。

作为一个智能化的存储工具,网盘已经逐步成为人们日常生活和工作中必不可少的一部分。还记得很多年前,网盘在大家心中的形象局限于“网络硬盘”。甚至互相开玩笑说,「这几个T的空间,什么时候能填满啊!」现如今,这里填满了大家的生活、工作和学习的各种记录,并且也成为大家不可或缺的一部分。变成「黄色的猫」以后,我们感激于大家的信任,致力于不断的技术创新,让用户更快速、准确地找到所需的文件,带来全新的使用体验。

把「猫」变成「黄色的猫」,不是终点,而是一个更高的起点,我们前进的动力不停,学习的步履不止。我们致力于将这只「黄色的猫」赋予更多可能性,从而变成您贴心的朋友、同事与亲人。

最后,欢迎大家使用百度网盘的【高级图片搜索】功能并积极反馈,大家的鞭策将持续激励我们的成长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习算法复现】随机森林,以又放回的方式构建的决策树为基础的集成学习方法,可回归可分类不同任务注意评价指标。

随机森林就是通过集成学习的Bagging思想将多棵树集成的一种算法:它的基本单元就是决策树。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”很好理解,一棵叫做树,那么成百上千棵就可以叫做森林…

CSS 扫盲

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录引入方式内部样式内联样式外部样式CSS 选择器CSS 常用属性值字体属性设置字体大小粗细文字样式文本属性文本颜色文本对齐文本装…

Docker基础篇——最全讲解

文章目录一、CentOS安装docker二、启动帮助类命令三、镜像命令1.名词概念2.常用命令2.1 镜像命令2.2 容器命令2.2.1:常用参数2.2.2:常用指令2.3 安装单机mysql、redis一、CentOS安装docker docker官网 1)yum安装gcc相关: yum -y…

【Spring从成神到升仙系列 五】从根上剖析 Spring 循环依赖

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

经典七大比较排序算法 ·上

经典七大比较排序算法 上1 选择排序1.1 算法思想1.2 代码实现1.3 选择排序特性2 冒泡排序2.1 算法思想2.2 代码实现2.3 冒泡排序特性3 堆排序3.1 堆排序特性:4 快速排序4.1 算法思想4.2 代码实现4.3 快速排序特性5 归并排序5.1 算法思想5.2 代码实现5.3 归并排序特性…

QT的使用3:鼠标事件

鼠标事件0 事件1 需求2 查看控件的事件处理函数3 UI设计4 新建一个类,继承QLabel5 对已有对象进行类型提升6 重写事件处理函数7 项目进一步拓展(1)获取鼠标按键(2)鼠标移动(3)显示多个按键&…

【数据结构】Java实现栈

目录 1. 概念 2. 栈的使用 3. 自己动手实现栈(使用动态数组实现栈) 1. 创建一个MyStack类 2. push入栈 3. pop出栈 4. 查看栈顶元素 5. 判断栈是否为空与获取栈长 6. toString方法 4. 整体实现 4.1 MyStack类 4.2 Test类 4.3 测试结果 1.…

计算机网络笔记——物理层

计算机网络笔记——物理层2. 物理层2.1 通信基础2.1.1 信号2.1.2 信源、信道及信宿2.1.3 速率、波特及码元2.1.4 带宽2.1.5 奈奎斯特定理采样定理奈奎斯特定理2.1.6 香农定理2.1.7 编码与调制调制数字信号调制为模拟信号模拟数据调制为模拟信号编码数字数据编码为数字信号模拟数…

C#中WPF实现依赖注入和MVVM,以及服务定位ServiceLocator

最近在想重写架构于是就研究了一套WPF的相关内容,WPF不像MAUI内置了容器,需要我们自己手动添加,于是就有了今天的内容。 首先,我们新建一个.net6.0的WPF项目 由于WPF没有内置容器,我们先安装一下依赖注入的nuget包 Microsoft.Ex…

网络技术与应用概论(上)——“计算机网络”

各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是计算机网络的一些知识点噢,下面,让我们进入计算机网络的世界吧 网络内涵 网络特征 网络定义 互联网发展过程 从ARPA网络到Internet 从低速互联网到高速互联网 从数据结构到统一网…

【C语言】通讯录的实现(静态版)

【C语言】通讯录的实现(静态版一.前言1.前期准备a.菜单实现b.联系人结构体的构建c.菜单选项的功能d.#define 的定义2.功能的实现a.初始化通讯录b.增加联系人c.显示通讯录d.查找联系人e.修改联系人d.删除联系人3. 总代码test.ccontact.ccontact.h一.前言 本文将会用c语言实现一…

Golang每日一练(leetDay0013)

目录 37. 解数独 Sudoku Solver 🌟🌟🌟 38. 外观数列 Count and Say 🌟🌟 39. 组合总和 Combination Sum 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Py…

大数据技术之Hive

第1章Hive基本概念1.1 Hive1.1.1 Hive的产生背景在那一年的大数据开源社区,我们有了HDFS来存储海量数据、MapReduce来对海量数据进行分布式并行计算、Yarn来实现资源管理和作业调度。但是面对海量数据和负责的业务逻辑,开发人员要编写MR来对数据进行统计…

【Go】K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署]

K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署] 1. k8s-plantform-api-Pipeline 考虑到实际工作中前后端可能是不同的同学完成,一般Api部分完成后改动会比较小,web部分改动会比较频繁.于是将api和web分了2个pipeline实现 1.1 GIt仓库 docker目录存放镜像构建相关文件…

简介虚拟地址空间:保障进程间独立性的机制

我们知道,进程之间是相互独立的,在操作系统级别中,一个进程所执行的程序无法直接访问另一个进程所执行的内存区域(即实现进程间通信比较困难);一个进程运行的失败也不会影响其它进程的运行。这使我们的操作…

vue编程方法

1,app.vue 其中的moundted只是被执行一次。 系统中所有的组件都放到app。vue文件中。放到根组件中的只是被执行一次的代码可以放到main.js中码? 不可以,因为main文件只是一个js文件不是一个组件。组件中的一些属性不能被使用。比如&#xff…

VS Code上搭建Vue开发环境超详细教程

这篇关于在Visual Studio Code上搭建vue开发环境的超详细教程手把手教会你! 首先在Visual Studio Code上搭建vue开发环境有几个步骤: 1、下载安装node.js 2、安装npm 3、安装cnpm 4、安装vue/cli脚手架 5、创建vue项目 6、运行vue项目 1.下载安装node.js 地址&…

鸟哥的Linux私房菜 正则表示法与文件格式化处理

第十一章、正则表示法与文件格式化处理 https://linux.vbird.org/linux_basic/centos7/0330regularex.php 简体版 http://cn.linux.vbird.org/linux_basic/0330regularex.php 11.2.2 grep的一些高级选项 例题一、搜索特定字符串 例题二、利用中括号 [] 来搜寻集合字符 例题四…

8个python自动化脚本提高打工人幸福感~比心~

人生苦短,我用Python 最近有许多打工人都找我说打工好难 每天都是执行许多重复的任务, 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等, 使用自动化脚本,就无需手动一次又一次地完成这些任务, 非常方便…

蓝桥杯嵌入式RTC实时时钟

文章目录 前言一、RTC是什么二、cubemx的配置三、函数的使用总结前言 本篇文章将给大家介绍RTC实时时钟。 一、RTC是什么 STM32的实时时钟RTC是一个独立的定时器,RTC时钟内部依靠BCD码计数。RTC实时时钟提高时钟、闹钟、日历功能。RTC功耗较低,可以使用在低功耗设备上。 …
最新文章