00:00
各位小伙伴们大家好,前面我们已经给大家介绍了dream boss训练stableion的时候,我们的数据集要如何进行准备,模型要转换成什么样的形式,以及提示词如何进行设置,那接下来我们就可以来进行模型训练了,那如果要进行模型训练,首先我要设置一下在训练过程当中的超参数,那下面我就给大家来介绍一下使用dream Bo训练方法来训练stable的时候,我们有哪些超参数需要进行设置,我们一个一个来给大家进行分析。好,首先我们来看第一个,第一个呢,叫做markx train steps,那这就是我们的最大训练步数,那这个最大训练部署哈,指的是我在模型训练过程当中,你的迭代次数,也就是说我每送进去一个批次的数据就是一个迭代,那我最多要送进去多少次呢?要送进去3000次,按照我们现在设置的这个值就是3000次,那在实际当中的时候,可以根据你的数据集来进行调整,一般情况下,比方说我前面准备了103张图片,那这里呢,我们的最大训练步数就可以是103乘以100,这是我们在设置最大训练步数的时候的方法,那你可以根据你自己的一个实际情况,也就是说数据集的大小来设置这个最大训练步数,这是我们第一个参数,那第二个参数呢,是我们的learning rate,就是我们的学习率。
01:35
那学习率啊,一般情况下我来进行设置的时候,因为我们的模型比较大一些,所以学习率的设置呢,一般都比较小,在这里我们设置了五的十的负六次方,这是我们比较常见的一个学习率的值,当然你也可以对它进行调整,比方说你可以把它放的小一些,它设置成呢,三乘以十的负六次方,或者是缩小到直接就是十的负六次方,或者是五乘以十的负七次方也可以,那如果你想把它调大一点也可以,比如说十的负五次方也可以,那这是我们在这里这个学习率设置的时候,如果你设置的过大的话,我们的学,我们的网络就很难去拟合,如果设置的过小的拟合速度就会变慢,所以学习率设置的时候,你可以根据自己的一个实际情况来调整它,就是学习率。
02:25
值的设置,那除了去设置这个学习率值,我们还可去设置一下学习率的调整策略,那在这里我们有两种调整方式哈,那首先第一个是我们这个学习率衰减的策略,那对于我们的stableion来进行训练的话,我的学习率衰减策略一般就是按照Co的方式来进行衰减,或者是Co with restart这两种方式选择其中一个来进行衰减就可以了。那这个衰减的策略是因为我们假设刚一开始的时候,我们离最优解比较远,所以呢学习率我可以大一点,那随着学习的进行,我离最优解越来越近了,我的学习率呢就要变小一点,所以在这里我们就按照cos的方式来对学习率进行衰减就可以了,也说随着我迭代步数的增加,我的学习率是不断减小的,除了这个之外,我们还可以去设置一下什么呢?学习率的预热步数。因为在刚一开始的时候,我们。
03:25
的参数是随机初始化的,所以我们的网络呢不是特别稳定,这时候如果设置一个较大的学习率的话,我们很容易网络就发散了,所以这时候我们可以从一个零值开始,也就说学习率慢慢的上升到我们刚刚设置的这个learning rate设上升到earn rate之后再来进行衰减。那这里我们的预热步数,也就是说我通过100次迭代,把我的学习率从零上升为五乘以十的负六次方,这是我们在这里这个学习率预热步数,那学习率的设置呢,就是前面这几个,那接下来我们再来看其他的参数,那下面这里是我们的批次的大小,这个批次的大小是指我在进行训练的时候,你每次送进去几张图片,那这里我们设置为一,也说我每次送进去一张图片,这个训练批量的大小啊,它影响着我们的硬件设备,当你的显存比较大的时候,你可以设置的百大。
04:25
大一些,当你的显存比较小的时候啊,这个bench size呢,也要设置的比较小,因为它比较占用我们的资源,然后在这里你要调整我们的批量大小,你把它增大的时候,我们的学习率呢,哎,你也可以把它增大一些,如果你把这个bench size调小,那learning rate呢也要相应的减小,它俩是相辅相成的。好,下一个参数呢,是在这里我们去生成class image的数量,那这个class image大家还记得是做什么的吗?前面我们给大家介绍过啊,在我训练stableion的时候,我的预训练模型要去生成图片,那这个class image的数量就是指我需要使用预训练模型来生成多少张图片,那这里我们就是生成20张图片,这是我们在这里设置的这个class image的数量,当然,我在训练模型的时候,大家想一下,我可不可以不利用预训练模型输出的结果,我直接用我自己的数据来进行训练,可不可以啊?
05:25
也是可以的,所以在这里我们还有个参数是什么呢?哎,就是你去设置是否使用这个鲜艳保持,如果你要使用这个鲜艳保持,那你就把它设为true,我们的日训练模型就会产生图片来训练我们的模型,否则你把设为force的话,我们的预训练模型也不会产生图片来进行模型训练了。接下来我们再来看一下下一个参数,那这个参数呢,是指我是否训练文本编码器,那文本编码器呢,就是我来对我的文本进行编码的时候的这个方式,那在这里如果我们不训练这个文本编码器,那也就是说不更新其中的参数,对于我们sion来讲哈,我们一般情况下很少去调整这个文本编码器的参数,所以这里我们就把它设为force就可以了。还有下一个参数呢,叫做arb,那这个AB是指的我送进去的图片的宽和高是否相同,如果你把这个arb设置为false,那我就必须送进去宽。
06:25
高相同的图片,否则你就可以送进去长宽不一样的图片啊,那大家要注意一下,如果我要送进去长宽不一样的图片的话,它是以我们的长边为准的啊,所以在这里面你如果长边比较大的话,那它对我们的显存要求也会比较高一些,一般情况下我们都会使用正方形的,也是说宽高相同的图片来进行训练,那大家想一下,我们前面去设置的时候,我们都是不是把我们的图片裁剪成了512乘512就是正方形的图片,好下面这两个参数呢,指的是我们的提示词要从哪里来获取,那提示词我们是不是在前面自己设置好了提示词三个提示词,那如果你不想在代码当中设置,你也可以在文件当中设置,如果你在文件当中设置的话,那就需要从文件当中去获取这个提示词,那这时候你就需要把它设置,为什么呀?True,你如果把它写在TXT文件当中,你就需要把。
07:25
下面这个设置为true,但是咱们在做实验的时候,我们是不是在前面已经设置好了这个promote,设置好了我们的提示词,那现在这两个我们就设置为false就OK了。好,下一个参数是指的大小,我们的提示词有没有可能在前面设置的时候,我没有设置完全,我需要去追加提示词,那你就可以通过这个参数来追加提示词,这是我们在这里这个关于提示词的这几个参数,除了这几个参数之外,然后下面我们来看一下这个保存间隔,大家想一下我在进行训练的时候,我是不是间隔多少个迭代来保存我的权重,那这里就是指的这个间隔,那这里设置为500的时候,就是我每训练500个训练步次,我就来保存一下我们的模型,这是保存间隔,当然你可以根据自己的实际情况,比方说你要训练3000个迭代次数,那。
08:25
你每隔500来进行保存一下,那如果你要训练5000呢,那你每隔1000来进行保存也是可以的。好,最后一个参数在这里呢,是是否使用它来进行分词,大家想一下,我们的文本编码器是不是可以对一个长文本来进行编码,也可以对分词之后的结果来进行编码,那如果把这个设为true呢,它就会对我们进行分词,分词之后再来进行处理,编码之后再送到我们的stableion当中来进行图像生成,那如果设置为force啊,那我们就不会进行分析,你送进来的是什么,我就直接对它来进行编码,获取到编码结果之后,然后来生成我们的图片,这是我们在这个dream boss训练的时候这些常见的参数,这些参数呢,我们可以根据自己的一个实际需求来进行修改,那除了这些参数之外哈,我们还有一些参数可以进行设置,但是下面这些参数哈,我们一般。
09:25
情况下都不会进行调整,然后下面我们先给大家来看一下这些参数有哪些好,首先来看第一个是图像分辨率啊,这里我们就是512,那这个512就对应着我们在前面获取我们的训练集图片的时候,把那些图片都做成了512乘512的大小,这是图像分辨率,那除了图像分辨率之外,这里还有梯度累积步骤,那我们在进行模型训练的时候,我们是每一个轮次,每一个迭代都会去更新一下权重,那如果你不想每个迭代都来更新一下参数的话,那我们可以设置一下梯度累积步骤,那在这里设置二的话,那我就会累积两个批次再来更改我们的参数,也说再来更新参数,这是梯度累积步骤它的作用,然后下面再看这个CD,叫做随机数种子啊,它可以保证我每次生成的随机数是一样的,然后接下来是log,记录的间隔也是。
10:25
和每隔十个迭代记录一次日志信息,然后再接下来是这个梯度剪裁,那梯度剪裁的作用是什么呢?大家想一下,在我计算梯度的时候,有没有可能梯度值比较大,那梯度值比较大是不是就有可能造成我网络不稳定啊?所以在这里当我遇到梯度值比较高的这样的梯度的话,我可以把它减小一下,比如说我设置我的阈值是32,超过32的我都把它设置为32就OK了,那这就是梯度剪裁,那这里梯度剪裁跳过梯度剪裁的迭代次数是一次,也就是说每隔一次我来检查一下我的梯度。
11:06
然后下面再看生成样本的批量大小,那这个生成样本的批量大小是什么呢?大家想一下,我们前面给大家介绍代码结构的时候,我们看了一下result当中是不是有一个sample的文件夹,那个文件夹当中就是保存的生成样本的结果,那我们给大家去看的时候,我们是不是那里面就四张图片,那就是由这个参数来决定的哈。这个参数就决定了我在result当中每一次要保存多少张图片,好,这是我们在这里这个生成样本批量大小它的一个作用,好下面我们再来看这里鲜验损失的权重,那这个鲜验损失指的是什么呢?使用dream boss方式啊,来训练stableion的时候,我们说过有两个损失函数,一个呢是跟我们训练及数据的一个损失,还有一个是跟预训练模型你产生图片的损失,那这时候两个损失要加在一起来进行联合训练,那么把它求和在一起的时候,我是不是可以给这个损失加一个权重啊,那在这里加权重的时候,我们那个预训练模型产生图片的损失权重就是1.0,当然你也可以设置其他值哈,好,除了这个之外,我们还有一些什么呢?诶对,学习率的调整,也说我是否去缩放我们的学习率,那这个跟我们前面的cos方式的梯度衰减是类似的,只不过在这里我们是按照什么呀,按照缩放的方式来完成。
12:31
完成缩放的时候,就每次按照平方根来进行缩放,嗯,每次都减小就可以了,这是缩放学习率,那这里我们都是设置的false,除了这个之外,我们还可以去,呃,是否启用梯度检查点,这个梯度检查点是指我在保存checkpoint的时候是否保存我们的梯度信息,那这里如果设为true,那就是保存梯度信息,然后接下来是我们这个pen token,也就说我是否对token进行填充呢?那这里设为false就不再进行填充了。下一个参数arb,我们刚刚给大家介绍过,我们说如果前面的AB设置为true的时候,我就可以送进宽高不同的图片,然后如果你设置为false,就必须送进去正方形的图片,有时候宽和高是一样的,那当我们的RB设置为true的时候,我是不是可以观察一下我这个网络它的一个结果,那这时候呢,我们就可以把debug AB。
13:31
设置为处来观察我们送进去的图片的宽和高分别是多少,那前面因为我们设置了false,那这里我也不用去调试AB,所以这里也是force,然后再接下来就是调试提示文本,那提示文本我们是固定的,我们也不去调试它,所以这里是。然后接下来是否使用指数移动平均,也就说对于我的梯度来讲时候,我是不是使用指数移动平均来对它进行处理之后再来进行更新,那这里我们设置为force啊,还有训练的周期数,那这里就是哎,当你重新开始训练的时候,是不是从一个周期的开始进行训练,那这里我们是从一个周期,也就说从一个IPO开始来进行训练,Last epo呢,我们是负一,就说明我们每一次啊都是从头开始来进行训练,如果你要设置,比如说你前面训练了很多个IPO之后,那这里的last ipoch你就设置为你前面用了多少个ipoch就OK了,这是我们在这里这个dream boss训练stableion的这些参数,好,那这些参数的说明呢,我们就给大家介绍这些,那接下来我们来我们的朱皮lab当中哈,来给这些参数设置一下值,那在这里设置的时候呢,们有这些常用的。
14:52
参数,比方说训练步数啊,学习率的设置啊,然后呢,是否训练文本编码器啊,这些参数我们刚刚都给大家详细介绍过了,那在这我们就直接运行一下,把这些参数赋值就可以了,另外还有我们的高级参数,那这些高级参数呢,我们一般也不会去修改它,就使用默认的参数就可以了,那这里我们也直接运行一下,给它进行一下赋值,那到这我们就把我们在训练过程当中所需要的参数复制好了,那复制好之后大家想一下我是不是就可以来做模型训练啦?好,那下面我们先把视频暂停一下,稍后来看一下模型训练的过程。
我来说两句