AI 绘画核心技术与实战
南柯
某头部大厂图像团队技术 leader,高级算法专家
6373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
AI 绘画核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

10|CLIP:让AI绘画模型乖乖听你的话

你好,我是南柯。
今天我们要学习的是 OpenAI 在 2021 年提出的 CLIP 算法。在 AI 绘画的过程中,CLIP 的作用是理解我们给到模型的 prompt 指令,将 prompt 指令编码为模型能理解的“语言”。
但你可能不知道,最早提出 CLIP 模型并不是帮助 AI 绘画模型理解 prompt 指令,而是用于连接图像和文本这两种模态。如今,随着 AIGC 技术的大爆发,CLIP 模型又在 AI 绘画、多模态大模型等方向发挥了巨大价值。
这一讲,我们就一起来搞清楚 CLIP 这个算法背后的奥秘!只有真正理解了 CLIP,你才能知道为什么 prompt 可以控制 AI 绘画生成的内容。在设计你自己的 AI 绘画模型的时候,便可以根据你的需求选择各种 CLIP 模型或者其变体模型,得到更好的绘画效果。

追本溯源:CLIP 的提出背景

在学习 CLIP 之前,我们有必要先理解模态(Modality)的概念。在深度学习领域,模态可以用于描述输入数据的不同形式,比如图像、文本、音频等。不同的模态可以提供不同的特征,使模型能够从更多的角度理解和处理数据。在实践中,通过整合多种模态的信息,通常能够帮助模型获得更好的性能。
我们常说的 NLP(Natural Language Processing),即自然语言处理,解决的就是文本模态的任务,比如文本问答、文本对话、文本情绪分析等任务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CLIP算法:多模态信息整合的重要技术 CLIP算法是OpenAI在2021年提出的重要技术,通过对比学习的方式,将图像和文本编码为模型能理解的“语言”,实现了多模态信息的有效整合。该算法利用海量互联网数据,通过对图像和文本的对应关系进行训练,使得模型能够理解和处理不同形式的输入数据。CLIP的提出解决了CV数据集标注成本高昂和模型无法轻易迁移到新任务的问题,为多模态模型的发展提供了重要思路。 CLIP算法的应用包括图像分类、文字识别、视频理解等多种任务,通过跨模态检索的方式进行分类,具有较强的扩展性和适用性。此外,CLIP还衍生出增强版,如OpenCLIP、ChineseCLIP和EVA-CLIP,进一步提升了模型的性能和适用范围。 读者可以通过Colab等平台动手使用CLIP完成图像分类任务,通过安装对应的Python包和运行相应的代码,实现对图像的分类和文本理解任务。CLIP算法在AI绘画等领域也有重要应用,能够帮助模型更好地理解和处理文本指令,指导模型作画。 总之,CLIP算法通过对比学习的方式,实现了图像和文本的有效整合,为多模态模型的发展提供了重要思路,并在图像分类、文本理解等领域展现出了广阔的应用前景。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 绘画核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 海杰
    老师我有几个问题。 1. 在SD里,CLIP的作用就是对prompt进行编码。文生图txt2img是用CLIP的文本编码器,图生图img2img用的是图像编码器,这样理解对吗? 2. 看到有些模型用CLIP skip 2,就是不用编码器的最后一层,这样设计的原理是什么?会得到更好的模型吗? 3. 外面下载的各种SD基础模型,它们用的都是同一个CLIP吗?下载的几个G的一个safetensors文件里,也包括CLIP的权重吗?

    作者回复: 你好。关于Q1,在SD中CLIP的作用是对prompt进行编码,文生图用CLIP文本编码器,这样的理解是准确的。图生图img2img并不会用到图像编码器,而是直接在图像中加入噪声然后按照SD流程进行去噪,去噪过程仍然使用CLIP文本编码器做引导。针对Q2,CLIP Skip设置为2这个知识点,在第16讲会展开讨论,本质上是使用CLIP文本编码器倒数第二层的特征而不是最后一层特征,这样做的原因是由于CLIP的训练方式导致最后一层特征更靠近训练的图像数据,从而对prompt的表达能力变弱。实操经验是使用倒数第二层特征能让模型更听话、文生图效果更好。针对Q3,我们下载的各种SD基础模型中,包含CLIP、VAE、UNet等模型的权重。不同SD中用到的CLIP可能不同,比如SD1.x和SD2.x、SDXL中用的CLIP就不一样。希望能帮助到你。

    2023-08-12归属地:新加坡
    2
    5
  • 恨%心~
    老师好,请问下如何分别用CLIP 和OpenCLIP推断任意图片的prompt,有对应的代码示例吗?

    作者回复: 你好。CLIP和OpenCLIP模型无法推断图片的prompt,如果想得到图像prompt,需要使用BLIP这类文本生成模型,可以参考这个链接:https://huggingface.co/spaces/Salesforce/BLIP。希望能帮助到你。

    2023-09-06归属地:北京
    1
  • peter
    请教老师几个问题: Q1:动图是用什么做的? Q2:512纬度空间,这个512也是经验值吗? Q3:以4亿对图文数据集为例,硬件资源的需求量是个什么样子? 比如存储空间需要多少台机器,计算需要多少台机器等。 Q4:我的笔记本电脑是惠普电脑,16G内存,不知道是否有GPU(估计有但不知道多大),这样的配置能运行老师的例子吗?

    作者回复: 你好。针对Q1,动图是生成多张图片直接合成GIF图片,可以用一些工具或者python代码来实现。针对Q2,512维度是经验值,比如OpenCLIP一个较大的模型,这个数值可以是1280。针对Q3,4亿图文对不建议存储到个人电脑,当然OpenAI的数据也没有开源。如果需要复现CLIP论文可以使用LAION开源的400M数据。一张显卡无法训练CLIP,需要多机多卡并行来做。对于我们而言,更多需要关注CLIP的使用即可,可以根据课程中的Colab来操作。针对Q4,可以使用CPU模式运行CLIP的推理,这样便可以运行课程的例子。希望能够帮助到你。

    2023-08-08归属地:北京
  • yanyu-xin
    按着老师的代码,一次性在Colab运行成功。 第二个作业: 第一个图片,用CLIP测试,结果是:“Predicted class: cat prob: cat 1.0, dog 0.0”; 用OpenCLIP测试结果是:“prob: a diagram 8.51679033075925e-06, a dog 1.5743193216621876e-05, a cat 0.9999756813049316” 第二个图片,用CLIP测试,结果是:“Predicted class: dog prob: cat 0.0, dog 1.0” 用OpenCLIP测试结果是:“prob: a diagram 8.806668120087124e-06, a dog 0.999969482421875, a cat 2.167693673982285e-05”

    编辑回复: 优秀,后面还有更多实战和作业,继续练习呀,参与越多收获越大,加油~

    2023-08-07归属地:广东
  • 进化论
    import torch import clip from PIL import Image import urllib.request import matplotlib.pyplot as plt # Load the CLIP model device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = clip.load("ViT-B/32", device=device) # Define the target classes target_classes = ["cat", "dog", "owl"] # Load and preprocess the image image_url = "https://z1.ax1x.com/2023/10/23/piALRpQ.png" image_path = "test_image.png" urllib.request.urlretrieve(image_url, image_path) image = Image.open(image_path).convert("RGB") image_input = preprocess(image).unsqueeze(0).to(device) # Encode the image with torch.no_grad(): image_features = model.encode_image(image_input) # Encode the target classes text_inputs = clip.tokenize(target_classes).to(device) with torch.no_grad(): text_features = model.encode_text(text_inputs) # Compute the similarity scores similarity_scores = (100.0 * image_features @ text_features.T).softmax(dim=-1) # Get the predicted class _, predicted_class = similarity_scores.max(dim=-1) predicted_class = predicted_class.item() # Print the predicted class predicted_label = target_classes[predicted_class] plt.imshow(image) plt.show() print(f"Predicted class: {predicted_label}") print(f"prob: cat {similarity_scores[0][0]}, dog {similarity_scores[0][1]}, owl {similarity_scores[0][2]}")
    2023-10-23归属地:北京
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部