00:00
各位小伙伴们大家好,接下来我们来看一下stableion架构当中的clip text文本编码器,那clip呢是由open AI提出的一种多模态神经网络,它是用来匹配文本和图像的预训练模型。通过clip我们能够有效的借助自然语言监督啊来学习视觉的概念,典型的视觉数据集呢是劳动密集型的,比方说我要做人脸识别,那这时候我就需要标注大量人脸相关的图像,然后标注好之后使用这样的数据集来训练我们的模型,那我们的模型就可以去做人脸识别,那对于我们来完成这项任务的时候,标注数据就是一个成本很高的任务,而且他训练出来的模型只能去做人脸识别,那如果我要想去做车型识别的话,那我就需要标注新的车辆相关的数据集,所以在这里面我们要完成一个新的任务的时候啊,必须。
01:00
要重新去创建我们的数据集,所以我们的模型适应新任务的能力是非常不足的,而clip呢,就是因为在视觉当中存在这样的问题,它呢,把我们在互联网上大量的自然语言,也就是文本跟各种各样的图像结合起来,联合训练我们的网络,让网络能够自动的去适应各种不同的任务,这是clip模型的一个初衷。那clip模型呢,在各种各样的图片上进行训练,同时依赖于互联网上大量自然语言文本的监督,从而使我们训练出来的模型能够适应于各种各样的任务,这是克利模型它的一个特点。那在我们的图像生成当中,也说在stable的网络架构当中哈,我们使用模型呢,来提取promote,也就是我们提示词文本部分的特征来进行词嵌入,嵌入之后把这些特征送入到我们的图像生成器。当。
02:00
当中也是我们的diffion unit和schedule当中,让模型去理解我们输入提示词的内容,从而达到文本控制图像生成的目的,也就是说我们通过clip模型来将我们输入的提示词转换成向量之后送入模型当中来控制我们最终生成图像的结果。这是clip模型在stableion当中它的一个使用,那clip模型是如何来实现文本和图像的匹配,又怎样在SD模型当中也说tble模型当中来完成磁嵌入的呢?那接下来我们就给大家详细的去看一下克clip模型是如何来实现的。好,首先我们给大家来看一下克clip模型它的一个处理结构,那这个结构我们就通过这张图来给大家去分析一下啊,我们把这个截图放在这里,然后我们来看一下,因为可模型是来做文本和图像的匹配的。所以你在训练这。
03:00
个模型的时候,就应该输入的是我们的文本和图像,所以在这里我们就收集了什么呢?N个文本,然后N张图片,那这N个文本和这N张图片是一一对应的,那对于文本来讲,我们就送到哪里去,就送入到text include,那在这里我们就使用什么呢?也就用transformer来进行文本的特征提取,那对于每一个文本,每一条文本通过transformer进行特征提取之后,我就获取到了第一条文本的特征,第二条文本的特征,一直到第N条文本的特征,这是对于文本的处理。那跟着N条文本相对应的图像我们送到哪里去呢?我们送入到image encoder当中去,那image encoder我们就通过CNN网络来构成,对于每一张图片我都会提取出来什么?哎,图片的特征IE第一张图片的特征。
04:00
第二张图片特征,第三张图片的特征,一直到第N张图片的特征,好,那现在大家看一下啊,对于文本和图像,我是不是各自提取了它的特征,那大家想一想,如果这段文本正好描述的是这幅图像的话,那这个特征之间的相似性就应该大一些还是小一些就应该大一些是不是?所以在这里面,你这条文本如果描述的是我这张图片的时候,它之间的相似性就要大一点,如果这个文本描述的不是我这幅图片,那它们之间的相似性,特征之间的相似性就要小一点,那这个相似性我们用什么来表示呢?我们用我们的cos相似度来进行表示,然后现在我们来计算一下每一个图片获取到的特征与每一条文本获取的特征,来进行cos相似度的一个计算,也就是余弦相似度的一个计算。第一张图片提取的特征。
05:00
嗯,来跟第一条文本提取的特征计算余弦相似度,那我们就获取到了IE,第一张图片跟第二条文本来计算相似度,我们就获到了到了RE1T21张图片和第三条文本我们来计算相似度的时候,就获取到了I1T3,然后一直往后,第一张图片的特征跟第N条文本的特征进行相似度计算的时候,就获取到了IET,那这时候我们知道第一条文本描述的是第一张图片,那这里面这些余弦相似度当中,我们应该让谁比较大一些,是不是应该让这个IE它的值就要相对大一些,而我们不是来进行描述第一幅图片的文本的特征之间的相似度就要小一点,也就是说我们的I1T2。IET3IETN,它们的值就应该尽可能的小,然后这时候大家来看,这是对于我的第一个图片,那对于第二个图片的时候,我是不是同样的呀,第二张图片的特征跟每一条文本的特征来计算相似度,然后同一个也说来描述这幅图片的文本的相似度应该是比较大的,其他的是比较小的,也就说这个是比较大的,其他的剩下的相似度都是比较小的。那对于第三幅图片,那就应该是第三条文本它的相似度是比较大的,那一直到第N个的时候,那就是第N个文本,它对应的特征的相似度是比较大的,所以在这里大家来观察一下啊,我通过获取到这些图片的特征和文本的特征,我来计算余弦相似度的时候,我是不是可以获取到这样的一个矩阵呢?那在这个矩阵当中,大家来看一下哪一部分的相似度应该比较大一些。
06:53
对角线上的位于对角线上的这些相似度要相对大一些,而不在对角线上的这些相似度就要小一些,所以在这里去训练这两个模型的首候也说对于文本来提取特征的transformer模型,对于图片来提取特征的CNN模型,获取的特征的相似度在对角线上应该取得比较大的值,那我们应该让它越来越大,然后在非对角线上的位置应该越来越小,那通过这样的处理啊,我们就可以获取到什么?诶,对文本进行提取特征的transform模型和对图像提取特征的CNN模型,那我就获取到了我的预训练模型,那这是我们收集大量的图片文本对来进行训练的时候获取的结果。好,那下面我们回到讲义当中啊,来给大家去看一下,那在这里进行训练的时候,首先要训练一个处理图像的CNN,也就是这个image encoder,这里是CNN。
07:53
来完成的,卷积神经网络来完成。另外还有一个处理文本的transformer模型,是用来进行文本编码的test in codeder,然后这个test incoder来预测我们图像的标题,这是我们第一步的时候,那训练好CN和transformer模型之后,那我们就进入到对比学习阶段,那对比学习阶段呢,就是给定一个变制的N个图片文本段,那这个文本呢,就是图片的标题,那图片要送入到imagecoder当中,也就说送入到CNN网络当中来获取每一张图片的特征I,一直到in,文本要输入到testcoder当中,就是送入到我们的transformer模型当中来获得我们的T1TR和T,也就是每一条文本的表示,然后我们获取到这些表示特征之后,我去计算余弦相似度,那余弦相似度的时候。
08:53
我们获取到的是一个矩阵,那在这个矩阵对角线上的I j tj属于正样板,也说我希望它的余弦相似度要更大一些,IJTK来说不是位于对角线上那些样本属于我们的负样板,我要最小化它们的余弦相似度,那在这里大家想一想啊,对于我这个矩阵来讲,我的大小应该是一个N乘N的,那对角线上应该是有多少个元素啊?对角线上一共是有N个元素,那就是最大化N个正样本的余弦相似度,最小化剩下的除了这N个正样本之外的所有负样本的余弦相似度,这是我们在这里这个内容对比学习的时候,那大家想一下,通过这种学习方式,我是不是可以通过transformer获取到这个特征,就能够很好的去表示这张图片的特征,好,这是我们在这里这个对比学习的时候,把文本的encoder和我们的image encoder给它。
09:53
对应起来,那在实际应用过程当中,可力模型呢,还要经过zero short才能进行相应的处理好,那下面我们就给大家来看一下这个zero short是如何来完成的,那这里呢,我们还是给大家把这一部分截图过来,然后在这个图片当中大家来看一下,我现在这里有一张图像,这张图像呢里面是一只小狗,那我把这张图片送入前面预训练好的我们的图像编码器当中,也就是我们的CNN网络当中,那我们就会获取这张图片的特征IE,那这个IE就是对这张图片的一个描述,特征描述,那我要把这个图片跟文本匹配起来的话,那现在呢,我们来看一下文本如何来进行创建,那假设这个图片啊是从image net当中来获取的,我们image net当中1000个类别的图片那。
10:53
这里就是我1000个类别,也就是image net当中哈,它的分类的类别名称,那在这里它是不是一个一个的单词啊,那我们本来克利普模型是为了什么把一条文本跟我们的图片匹配起来对不对?所以在这里面我们把这个类别转换成什么呢?大家看就是一个句子,一条完整的句子,那这条句子呢,就是a photo of a什么什么,然后这里这个object就需要从这1000个类别当中来进行处理,也说从这1000个类别当中,我来选择相应的类别名称啊,选择这个类别名称之后,然后大家看一下啊,我是不是一条句子啊,那这个句子呢,我们就送入到text include当中,也是我们前面预训练好的transformer模型当中,让大家来想,现在我可以获取多少个特征呢?我们在这里我是不是有1000个类别,那这时候我们的N就等于1000,然后对于每一个。
11:53
类别,我都会构建一个这样的句子,每一个句子送入到text encoder当中,我都会获取它的特征,T1 T2 T3,那这时候这些特征那来想我们是不是要跟I1去进行匹配啊?那在这里进行匹配的时候,我们依然使用什么余弦相似度,也就说I1要跟T1 T2 T31直到TN来计算余弦相似度,那计算出来余弦相似度之后,我从这N个类别当中来选择取值最大的还是最小的,取值最大的就是相似度最高的,哎,那这就是我们的结果,那在这里大家看一下相似最最高的是T3,那T3的时候是谁的特征啊?是不是这个dog,也就是a photo of dog,然后这时候我们对于这张图片的描述就可以获取到,也就是a photo of a dog,这是我们在这里这整个的在进行完预训练之后,对于我们实际当中要完成的任务的。
12:53
说我们还要进行这样的处理,这是对于分类来讲,如果你要完成分类任务,还需要用一下自由short,那现在大家来想一想,对于我们的图像生成来讲,我只要去获取文本的嵌入就可以了,也就说我只去获取这个向量,那这时候我们就只需要把我们的promote送到text in order当中来获取相应的特征就OK了。好,那这就是我们在这里这个clip text它的一个内容啊。那接下来我们先回到讲义当中,再给大家去看一下,然后在clip模型,如果你要完成特定任务的时候,比方说我们的图像温类任务,那我们还要使用前面介绍的clip的预训练好的image code和text encoder来做zero short transfer就是一个零样本学习,这时候比如我有一张1000分类的验证集的图片,那就像刚刚我们去介绍到的啊,我把这个类别组成一。
13:53
的句子去训练我们的模型获取到的特征跟我们图片的特征去计算相似度来获取最终的结果就OK了。那如果不是进行图像分类,而是去做图像生成呢?我就只需要使用text encoder那这个text encoder再进行使用的时候,我们就把promote送到这个text encoder当中来获取词嵌入就OK了。在图像生成过程当中,我们这个text encoder是不发生变化的,它就使用我们前面的预训练模型来进行处理就OK了,这是clip text它的一个处理方式,那这里我们就给大家介绍这些,那我们把视频暂停一下,稍后我们来看一下Di模型是如何来实现。
我来说两句