yumingj / Talk-to-Edit

Code for Talk-to-Edit (ICCV2021). Paper: Talk-to-Edit: Fine-Grained Facial Editing via Dialog.
https://www.mmlab-ntu.com/project/talkedit/
340 stars 48 forks source link

训练自定义的数据 #5

Closed mjanddy closed 3 years ago

mjanddy commented 3 years ago

您好,感谢你的出色工作。我想问一下,如果我要使用自己的数据集从头训练一个模型,我都需要做哪些工作?1.先训练一个stylegan2模型;2.训练一个预测器;3.训练Talk-to-Edit;是这样的顺序吗?

yumingj commented 3 years ago

嗯嗯 是的,你需要先训练一个stylegan,然后再训练一个属性预测器,最后是编辑的网络

mjanddy commented 3 years ago

属性预测器应该用什么代码训练?也是使用自己的数据去训练吗?

yumingj commented 3 years ago

属性预测器就用分类网络来做就好了。按照分类网络的训练方式。我们的代码里暂时没有提供属性预测器的训练代码。

mjanddy commented 3 years ago

image readme中 这两个步骤中的文件该如何获得呢?

yumingj commented 3 years ago

点那个link下载

mjanddy commented 3 years ago

链接提供的都是1024和128的,我想使用256,该怎么办呢

yumingj commented 3 years ago

先训一个attribute predictor。用stylegan生成一些图片并保留其对应的latent code,用attribute predictor预测图片的attribute,根据attribute程度把他们对应的latent code进行分类。那些numpy文件里存的就是每个attribute程度下的latent code

mjanddy commented 3 years ago

那这个生成的图片有数量限制吗?属性分类器是单独的吗?每一个属性都需要训练一个吗?一个属性的npy文件中只存放对应属性的latent code吗?对于单一属性不同程度,保存latent code 需要排序什么的吗?

yumingj commented 3 years ago

生成图片的数量没有固定,当然是越多越好,这样就有很多的latent code拿来训练。

属性分类器我们是用一个,但是不同的属性用不同的head。

一个属性的npy文件存放的一个属性的一个程度。具体的格式可以参考我们上传的npy文件。

mjanddy commented 3 years ago

好的,多谢,我去尝试一下

zhangshen12356 commented 3 years ago

生成图片的数量没有固定,当然是越多越好,这样就有很多的latent code拿来训练。

属性分类器我们是用一个,但是不同的属性用不同的head。

一个属性的npy文件存放的一个属性的一个程度。具体的格式可以参考我们上传的npy文件。

请问一下,训练属性分类器的话是不是需要制作像你们那样的数据集(celebA-Dialog中的属性)才能训这个属性分类还是用其他的方法?可以直接拿你这个训练好的分类器来对其他分辨率的图片进行预测吗?是不是不太行,还是得自己训练一个。

yumingj commented 3 years ago

训练属性分类器的话,是需要 图片和属性的标签的。 针对128x128的分类器,我们就是把CelebA里面的图像crop成128x128然后进行训练。

对于其他分辨率的图片,你可以尝试把图片resize到128x128,然后送到分类器里分类,看看效果是否能够让你满意。不满意的话,建议还是重新训一下分类器。可能是图片crop策略、训练时的分辨率等会对属性分类产生影响。

zhangshen12356 commented 3 years ago

先训一个attribute predictor。用stylegan生成一些图片并保留其对应的latent code,用attribute predictor预测图片的attribute,根据attribute程度把他们对应的latent code进行分类。那些numpy文件里存的就是每个attribute程度下的latent code

请问一下,一张图片利用属性分类器进行分类的话会有五个属性的6种程度的得分,我们取五个属性中得分最高的一个属性来作为这张图片的属性吗?

yumingj commented 3 years ago

先训一个attribute predictor。用stylegan生成一些图片并保留其对应的latent code,用attribute predictor预测图片的attribute,根据attribute程度把他们对应的latent code进行分类。那些numpy文件里存的就是每个attribute程度下的latent code

请问一下,一张图片利用属性分类器进行分类的话会有五个属性的6种程度的得分,我们取五个属性中得分最高的一个属性来作为这张图片的属性吗?

每张图片应该的对应五个属性。每个属性都取得分最高的那一个作为这张图片的该属性的值。就跟分类任务一样,每个属性都取logits最高的那一个。

zhangshen12356 commented 3 years ago

先训一个attribute predictor。用stylegan生成一些图片并保留其对应的latent code,用attribute predictor预测图片的attribute,根据attribute程度把他们对应的latent code进行分类。那些numpy文件里存的就是每个attribute程度下的latent code

请问一下,一张图片利用属性分类器进行分类的话会有五个属性的6种程度的得分,我们取五个属性中得分最高的一个属性来作为这张图片的属性吗?

每张图片应该的对应五个属性。每个属性都取得分最高的那一个作为这张图片的该属性的值。就跟分类任务一样,每个属性都取logits最高的那一个。

你好,在train_data里面,比如说128里面为什么还分了五个属性,请问一下每个属性之间的三个文件有啥区别,为什么还需要提前将他们进行分类

ziqihuangg commented 3 years ago

先训一个attribute predictor。用stylegan生成一些图片并保留其对应的latent code,用attribute predictor预测图片的attribute,根据attribute程度把他们对应的latent code进行分类。那些numpy文件里存的就是每个attribute程度下的latent code

请问一下,一张图片利用属性分类器进行分类的话会有五个属性的6种程度的得分,我们取五个属性中得分最高的一个属性来作为这张图片的属性吗?

每张图片应该的对应五个属性。每个属性都取得分最高的那一个作为这张图片的该属性的值。就跟分类任务一样,每个属性都取logits最高的那一个。

你好,在train_data里面,比如说128里面为什么还分了五个属性,请问一下每个属性之间的三个文件有啥区别,为什么还需要提前将他们进行分类

每个属性的训练数据用来训练这个属性对应的semantic field。每个属性的3个npy文件,根据文件名可知,分别是用于训练的图片对应的: (1) latent code, (2) attribute predictor 预测的 attribute scores (3)根据attribute scores决定的attribute class,也就是attribute的程度。

zhangshen12356 commented 3 years ago

那每个属性的训练数据不需要什么预处理吧(只指latent_code.npy这个)?因为我看有五个文件夹,Bangs, Eyeglass等,看完你的回答,我所理解的是每个属性里的数据也只是随机生成的对吧?

yumingj commented 3 years ago

latent code.npy里面存放的就是训练field时需要用到的latent code. 我们预先生成了100万张图片(从stylegan中sample出100万张图片),然后用attribute predictor来预测这一百万张图片的attribute. 对每个attribute的0-4 degree,我们分别挑选predictor score最高的5万张图片。挑选score最高的5万张图片是为了确保这些图片是在他们所对应的degree下的。每个attribute的0-4 degree各选5万张而不是随机选是为了让整个训练所用的latent code balance一点,如果直接随机选择的话,会存在某一个degree特别多的情况,不利于训练。需要注意的是,有些attribute degree可能不到5万张,如果不到5万张的话,就以实际数量为主。

有五个文件夹是因为我们对五个attribute是单独训练的。所以每个attribute所对应的field需要的训练数据是独立的。