目录
内容属性:跨模态(实践)专题
内容说明:Video Clip Extraction by description ,简称VCED。VCED可以通过你的文字描述来自动识别视频中相符合的片段进行视频剪辑。该项目基于 MLOps 框架 Jina 与 CLIP 模型搭建,通过前后端分离的模式,帮助你快速地接触前沿的多模态 AI 搜索技术。
Roadmap:vced/Roadmap.md at main · datawhalechina/vced · GitHub
大部分参考了 frame frame(他是我见过最卷的本科生,没有之一(顺便吐槽一句,为啥网友都这么卷 ))的文章:http://t.csdn.cn/ykgoY ,但还是踩坑了,改成适合自己的 。
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的结果:查找一个有树的视频
多模态机器学习是一个相对较新的领域,它关注可以从多种数据模态中学习的算法的开发。
跨模态机器学习是多模态机器学习的一个子领域,它关注算法的开发,这些算法可以从不一定对齐的多种数据模态中学习。例如,从图像和文本中学习,其中图像和文本不一定是同一事物。
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的通信协议。
jina flow --uses toy.yml
运行client程序:python3 client.py
最终会打印出一个 “[‘’, ‘foo was here’, ‘bar was here’]” 字符串。
创建文本
- from jina import Document # 导包
-
- # 创建简单的文本数据
- d = Document(text='hello, world.')
- print(d.text) # 通过text获取文本数据
-
- # 支持多语言
- d = Document(text='👋 नमस्ते दुनिया! 你好世界!こんにちは世界! Привет мир!')
- print(d.text)
乱码,可能是系统对一些字体不支持。
切割文本
- from jina import Document # 导包
-
- d = Document(text='👋 नमस्ते दुनिया! 你好世界!こんにちは世界! Привет мир!')
- d.chunks.extend([Document(text=c) for c in d.text.split('!')]) # 按'!'分割
- d.summary()
后面不写了,主要是看demo和另一个博客:
参考:
vced/jina.md at main · datawhalechina/vced · GitHub
frame frame 的 图表画的很好:http://t.csdn.cn/Vz4l1
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
依然是frame frame大佬的博文:http://t.csdn.cn/SLhwa (现在的小孩怎么这么厉害,比不过)
补充一点就是这个Streamlit包不一定要在前面那一通环境配置下,直接找一个自己Win下的一个环境,只要有Streamlit包就能用。
这个小老弟也是写的牛牛的:http://t.csdn.cn/p7sDF