yuangan / EAT_code

Official code for ICCV 2023 paper: "Efficient Emotional Adaptation for Audio-Driven Talking-Head Generation".
Other
269 stars 30 forks source link

请问如果只有图片+语音,没有 pose 如何推理 #16

Closed Wangman1 closed 8 months ago

Wangman1 commented 8 months ago

您好,看到您这里的推理使用了从 video 提取到的 speaker 的pose 和 对应的 deepspeech audio feature,如果要使用单独的语音,或者说从 TTS 生成的语音来推理一张图片的话,要怎么做呢,感谢您~

yuangan commented 8 months ago

可以使用其他视频中的pose,或者固定一个pose,这需要改一下demo中这里读入的pose文件的路径。如果pose文件帧数不够,可以在后续的for循环中不断读入同一个pose。

Wangman1 commented 8 months ago

好嘞,谢谢您的回复

yuangan commented 8 months ago

不客气

Wangman1 commented 8 months ago

再次打扰您啦,我测试中发现有两个问题: 1、如果脸部占比较小的话,或者直接将原图resize到256然后推理的话,脸部会有较大的形变,五官有些扭曲,但如果按照代码裁剪的话,头发会被裁剪掉,这个问题有什么解决的方法吗,这个图中就是眼睛和脸部都有些形变

image

2、测试发现推理出来的结果会有些跳动(上下和左右都会有,pose很小的情况下也会跳动),这样是不是就无法粘贴到原来的大图中去了,因为身体会跳动,您有什么解决的方法吗

https://github.com/yuangan/EAT_code/assets/33320872/9ebe3cc8-930a-4fec-8e80-9eeb0f032022

yuangan commented 8 months ago

你好,对于问题1,因为我们数据大部分是处理成这种情况,可以参看这里的数据处理,具体函数在这里,会把人脸根据其中心点进行裁切,人脸较小效果可能不太行。首先,你可以看看MEAD的数据中有没有比较符合你需求的人脸关键点template,一般来说用MEAD的template效果会好一点。其次,你可以用你们的数据继续finetune EAT的第二阶段。

对于问题2,latent keypoints是分布在整张图片上的,所以会有轻微抖动,如果想贴回原图,建议使用face parsing把人脸部分提取出来,再融合,类似wav2lip的做法。当然,用身体静止的数据继续finetune应该也可以,我们的prompt可以同时影响生成的latent keypoints和最后的生成模型。

Wangman1 commented 8 months ago

感谢您的回复,看到的不及时还请见谅

还有个问题想请教您,生成的图片牙齿部分有点糊(尤其是自有数据集测试的话比较糊,mead测试结果的牙齿还比较清晰),该怎么提升呢,使用更高清一点的数据集来 finetune 第二阶段有没有效果呢,如果使用高清数据集来finetune的话,是否也需要像mead一样划分成对应的表情(应该是需要划分的,而且工作量还比较大,需要一个个来划分)

yuangan commented 8 months ago

finetune应该会有效果,如果只是让牙齿变清晰,可以给新的数据无表情的neutral标签。如果想同时提升表情的话,需要划分一下,如果工作量太大,可以根据一些训练好的情绪分类器,比如Emotion-FAN,给一个伪情绪标签。

lililuya commented 5 months ago

您好,看到您这里的推理使用了从 video 提取到的 speaker 的pose 和 对应的 deepspeech audio feature,如果要使用单独的语音,或者说从 TTS 生成的语音来推理一张图片的话,要怎么做呢,感谢您~

可以使用其他视频中的pose,或者固定一个pose,这需要改一下demo中这里读入的pose文件的路径。如果pose文件帧数不够,可以在后续的for循环中不断读入同一个pose。

作者大大您好,非常感谢您的工作,我有一个问题,就是demo的generator中传入的driving_keypoint是从driving_video的每帧图片提取得到的,如果我没有driving_video这个he_driving应该怎么得到啊

yuangan commented 5 months ago

可以用其他视频提取的he_driving,或者给一个固定的pose,然后不断复制到和语音一样长。

lililuya commented 5 months ago

可以用其他视频提取的he_driving,或者给一个固定的pose,然后不断复制到和语音一样长。

感谢作者大大的回复,我在使用自己的音频和图片的过程中出现了一些问题,实验时输入的cropped图片和音频特征经过检测都是对的,实验中我对代码进行了一些调整。具体细节:

  1. 我取的pose和driving_latent选取的是demo中的obama视频提取得到的相关文件,因为它最长
    driving_latent_path = "./demo/video_processed/obama/latent_evp_25/obama.npy“ 
    pose_gz = gzip.GzipFile("./demo/video_processed/obama/poseimg/obama.npy.gz", 'r')
  2. 在取driving_latent的时候,为了保持维度匹配,我是按照deepspeech的第一个帧维度进行截断的
    valid_scope = deepfeature.shape[0]  
    for x in driving_latent[1].keys():  
      print(x, driving_latent[1][x].shape)  
      driving_latent[1][x] = driving_latent[1][x][:valid_scope]  
    he_driving = driving_latent[1]  
    num_frames = deepfeature.shape[0]
  3. 我的音频长度只有2s多,最终生成的帧是57帧,但是结果出现了问题
  4. 结果如下:(分别取第2帧和第11帧) 2_results 11_results
  5. 最后我怀疑是不是截断那部分有问题,希望大佬可以指教一下!!万分感谢
lililuya commented 5 months ago

解决了解决了,cropped 图的值没有normal到0~1,没有用过img_as_float32 这个用法,学习到了,感谢大佬的项目

lililuya commented 5 months ago

再次打扰您啦,我测试中发现有两个问题: 1、如果脸部占比较小的话,或者直接将原图resize到256然后推理的话,脸部会有较大的形变,五官有些扭曲,但如果按照代码裁剪的话,头发会被裁剪掉,这个问题有什么解决的方法吗,这个图中就是眼睛和脸部都有些形变 image

2、测试发现推理出来的结果会有些跳动(上下和左右都会有,pose很小的情况下也会跳动),这样是不是就无法粘贴到原来的大图中去了,因为身体会跳动,您有什么解决的方法吗

image_1_neu_test.mp4

嗨,您好,您这个是用其他视频的latent驱动的嘛,似乎用其他视频的latent驱动同步效果没这么好,感谢您的回复