• 【跨模态】Jina VCED


    目录

    0. 准备工作

    1. Task 01 环境搭建

    2. Task 02 Jina学习

    2.1 概念

    2.2 任务过程

    i. 成功启动 grpc 服务

    ii. 在Jina的Docarray中导入任意模态的数据

    3. Task 03 跨模态模型

    4. Task 04 前端模块

    5. Task 05 后端模块

    6. Task 06 后端模块


    0. 准备工作

    1. Task 01 环境搭建

    大部分参考了 frame frame(他是我见过最卷的本科生,没有之一(顺便吐槽一句,为啥网友都这么卷 ))的文章:http://t.csdn.cn/ykgoY ,但还是踩坑了,改成适合自己的 。

    • 目标:完成项目依赖的安装,可以在本地打开 HTML 文档

    1. 在虚拟机中新建终端
    2. 设置root环境:sudo passwd root
    3. 设置一个新的密码:su -
    4. 下载miniconda
        下载安装软件:wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linuxx86_64.sh
        给安装文件添加执行指令:sudo chmod +x Miniconda3-latest-Linux-x86_64.sh
        安装,一直enter:sudo ./Miniconda3-latest-Linux-x86_64.sh
    5. 进入环境变量更改:vim ~/.bashrc
    6. 随便找一个位置添加:export PATH="/root/miniconda3/bin:$PATH"
    7. 并且配置python3.9环境变量:alias python='/usr/bin/python3'

    8. source ~/.bashrc
    9. conda create -n vcde python=3.9
    10. conda activate vcde 或者 source activate vcde
    11. apt install rustc
    12. apt install ffmpeg
    13. 创建一个文件夹,用来放代码:cd ~/vced/
    14. git clone https://gitee.com/473091010/CLIP.git
    15. git clone https://gitee.com/shuangshuang853/vced.git
    16. 启动server:cd code/service、pip install -r requirements.txt、python3 app.py

     17. 启动web:cd code/web、pip install -r requirements.txt、streamlit run app.py

    遇到问题:ConnectionError: failed to connect to all addresses

     后来发现是 启动server 和 cd code/web 要一起启动。

    search的结果:查找一个有树的视频

    2. Task 02 Jina学习

    • 目标:熟悉 Jina 生态与相关操作
    • 成功启动 grpc 服务
    • 在 Jina 的 Docarray 中导入任意模态的数据
    • 代码练习:code/jina_demo

    2.1 概念

    多模态机器学习是一个相对较新的领域,它关注可以从多种数据模态中学习的算法的开发。

    跨模态机器学习是多模态机器学习的一个子领域,它关注算法的开发,这些算法可以从不一定对齐的多种数据模态中学习。例如,从图像和文本中学习,其中图像和文本不一定是同一事物。

    Jina:可以帮助你快速把非结构化数据例如图像,文档视频等,转换为向量数据

    为什么要转换为同一个向量:将同一个东西的不同模态(视频/文档/图片)转换为同一个向量,实现跨模态搜索。

    Jina 的三个基本概念:

    • Document 是基本的数据类型,它的作用就是可以将非结构化数据与向量数据之间进行映射。

    • Executor 可以理解为一个 Python 类,代表了 Jina 中的算法单元,比如把图像编码成向量、对结果进行排序等算法等都可以用 Executor 来表述。

    • Flow 可以将多个 Executor 连接起来,将他们协调成流水线(pipeline)。

    DocArray:是用于存储非结构化数据的数据结构工具包,是本次我们做跨模态应用的基础,融合了 Json、Pandas、Numpy、Protobuf 的优点,其基本数据类型是Document。DocArray 的亮点在于 Hierarchy + Nested。

    DocArray 有不同的层级结构,分层存储,第一层可以是一个整体的视频,第二层是该视频的不同镜头,第三层可以是镜头的某一帧。也可以是其他模态,比如第四层存储台词段落,第五层存储 ..... 既可以通过某个画面的描述搜索,也可以通过台词的意思去搜索,这样搜索的颗粒度,结构的多样性和结果的丰富度,都比传统文本检索好很多。

    • Document:一种表示嵌套非结构化数据的数据结构,是 DocArray 的基本数据类型。无论是处理文本、图像、视频、音频、3D、表格 或它们的嵌套或组合,都可以用 Document 来表示,从而使得各类数据的结构都非常规整,方便后续处理

    • DocumentArray:用于高效访问、处理和理解多个文档的容器,可以保存多个 Document 的列表

    • Dataclass:用于直观表示多模式数据的高级API

    什么是RPC总监又来了,人狠话不多,这篇 gRPC,小弟佩服! - 掘金 

    RPC(Remote Procedure Call Protocol)远程过程调用协议,目标就是让远程服务调用更加简单、透明。

    主要就是将下面的图

    我估计gRPC是一种类似HTTP/WebSocket的通信协议。

     

    2.2 任务过程

    i. 成功启动 grpc 服务

            jina flow --uses toy.yml

    运行client程序:python3 client.py

     最终会打印出一个 “[‘’, ‘foo was here’, ‘bar was here’]” 字符串。

    ii. 在Jina的Docarray中导入任意模态的数据

    创建文本

    1. from jina import Document # 导包
    2. # 创建简单的文本数据
    3. d = Document(text='hello, world.')
    4. print(d.text) # 通过text获取文本数据
    5. # 支持多语言
    6. d = Document(text='👋 नमस्ते दुनिया! 你好世界!こんにちは世界! Привет мир!')
    7. print(d.text)

     乱码,可能是系统对一些字体不支持。

    切割文本

    1. from jina import Document # 导包
    2. d = Document(text='👋 नमस्ते दुनिया! 你好世界!こんにちは世界! Привет мир!')
    3. d.chunks.extend([Document(text=c) for c in d.text.split('!')]) # 按'!'分割
    4. d.summary()

     后面不写了,主要是看demo和另一个博客:

    参考:

    vced/jina.md at main · datawhalechina/vced · GitHub

    http://t.csdn.cn/t8gMV

    frame frame 的 图表画的很好:http://t.csdn.cn/Vz4l1

    3. Task 03 跨模态模型

    • 目标:理解多模态的重要性,初步了解 CLIP 模型
    • 了解其他跨模态模型
    • 在 Document 中导出多模态数据,生成对应 embedding

    learning-for-all: 图像分类/检测/分割的代码基本上传目前在学习自然语言处理,逐步上传中 - Gitee.comhttps://gitee.com/shuangshuang853/learning-for-all/tree/master/image-classification/20_clip一个大佬的Clip学习笔记,赞:  https://blog.csdn.net/qq_56591814/article/details/127421979?spm=1001.2014.3001.5502


    4. Task 04 前端模块

    • 目标:初步掌握 Streamlit,理解项目前端逻辑
    • 使用 Streamlit 将任意数据科学相关内容部署在本地

       依然是frame frame大佬的博文:http://t.csdn.cn/SLhwa   (现在的小孩怎么这么厉害,比不过)

       补充一点就是这个Streamlit包不一定要在前面那一通环境配置下,直接找一个自己Win下的一个环境,只要有Streamlit包就能用。

         这个小老弟也是写的牛牛的:http://t.csdn.cn/p7sDF


    5. Task 05 后端模块

    • 目标:熟悉 Executor 的基础功能,理解项目后端逻辑
    • 实现一个任意功能的 executor,完成封装
    • 使用 Jina Hub 中的任意 executor,通过 flow 的方式引入自己的项目


    6. Task 06 项目拓展练习

    • 目标:完成项目的拓展功能

  • 相关阅读:
    虚拟机 silvaco
    二分法寻找数组元素
    Go 接口:深入内部原理
    easypoi 导出Excel 使用总结
    ICDE‘22推荐系统论文梳理之Industry篇
    6-前端笔记-CSS-复合选择器
    多线程-进阶
    Linux扩展篇之Shell编程四(正则表达式入门)
    如何在 Visual Studio Code 中使用 Prettier 格式化代码
    leetcode 13
  • 原文地址:https://blog.csdn.net/weixin_42322991/article/details/127857371