音视频开发之旅(77)- 训练可泛化AI数字人的中文数据集汇总

音视频开发之旅 2024-07-16 17:01:04 阅读 52

目录

1、CMLR

2、LRW-1000

3、其他数据集

4、视频收集与处理与训练

5、资料

Wav2Lip实现的是视频人物根据输入音频生成与语音同步的人物唇形,使得生成的视频人物口型与输入语音同步。不仅可以基于静态图像来输出与目标语音匹配的唇形同步视频,还可以直接将动态的视频进行唇形转换,输出与目标语音匹配的视频。

但是预训练模型采用的是LRS2数据集,对于中文唇音同步效果不够真实,开放的或者可申请比较大的中文数据集有CMLR和LRW-1000等。也可以自己收集数据集进行清洗处理,但时间会很长,成本比较高。

一、CMLR

CMLR  https://www.vipazoo.cn/CMLR.html

 中文新闻联播视频包含由 11 位主持人所表述的共 102 076 条句子. 每个句子最多包含 29 个汉字, 不包含英文字母、阿拉伯数字和稀有标点. 本文所用数据集为该数据集中的一部分,大约有 2100 条视频和对应的 2100 条文本

二、LRW-1000

LRW-1000 数据集是由中科院计算所、中国科学院大学和华中科技大学团队于 2018 年提出,旨在建立一个在室外环境下并且图像尺寸不一的大规模基准,包含:1000000汉字的实例,718,018个样本,平均每个类有718个样本,1000个类,每个类对应一个普通话单词的音节,2000多名不同的说话人,覆盖说话方式,包括语速、视点、年龄、性别、化妆等

LRW-1000是目前最大的词级唇语识别数据集,也是目前唯一公开的大规模中文唇语识别数据集,可申请使用。(联系邮箱:dalu.feng@vipl.ict.ac.cn; shuang.yang@ict.ac.cn)

数据集官网地址:Lip Reading: CAS-VSR-W1k (The original LRW-1000)

图片

图片

三、其他数据集

1、HDTF https://pan.baidu.com/s/1UQ0I3L3FKxhA_PcS3YrL6w  提取码:elej

2、MEAD https://github.com/uniBruce/Mead

3、VOX https://pan.baidu.com/share/init?surl=wBL34jZRSMq4aJX-l3_pBw   提取码:xkfj

四、视频收集与处理与训练

4.1 收集

各大短视频平台:B站、抖音、快手、小红书、youtube等;

类型:演讲、介绍、电视剧、新闻联播等;

编写批处理脚本:筛选、裁剪、图像增强、音频处理。

4.2 数据预处理

1、视频:转换视频帧率为25fps(推荐),根据自己需求处理。使用ffmpeg裁剪得到的视频片段,会造成视频帧与音频出现不对齐。推荐使用cv2读取,再筛选合适的图像序列。

2、网上收集的视频,有的会出现跳帧的情况,一定要筛选出最长的图片序列。

3、音频:转换音频采样率为16000k。

<code># 预处理视频数据1. 使用cv2读取视频import cv2import face_alignment # pip install face_alignmentfa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, device='cpu') code># cpu or gpu

video_path = "demo.mp4"cap = cv2.VideoCapture(video_path)while cap.isOpened(): ret, frame = cap.read() preds = fa.get_landmarks(frame)

# directly extract images from a video# .png的清晰度比.jpg高ffmpeg -y -i {./video_path/demo.mp4} -r 25 {./save_path/demo/%06d.png}例如:ffmpeg -y -i D://videos//demo.mp4 -r 25 D://images//demo//%06d.png

# 预处理音频# 使用ffmpeg将采样率转换为16000ffmpeg -y -i {./demo.mp4} -async 1 -ac 1 -vn -acodec pcm_s16le -ar 16000 {xx.wav}

# 下面的操作就是将音频与视频对齐syncnet_mel_step_size = 16 # 视频的一帧对应音频块的长度是16

def crop_audio_window(self, spec, start_frame): start_frame_num = self.get_frame_id(start_frame) # 编号为 0, 1, 2, ..., n start_idx = int(80. * (start_frame_num / 25.)) # 对应视频帧率25fps下的音频块的起点位置 end_idx = start_idx + syncnet_mel_step_size # 长度为16 return spec[start_idx : end_idx, :]

4.3 训练SyncNet

1、SyncNet模型中的图像编码器和音频编码器从零开始训练的话,需要训练数据中不同对象的数量够多,不然损失函数loss一直徘徊在0.69附近。

2、对象数量不多的前提下,中英文混合训练也是可行的(理论上分析)。

3、推荐分别使用预训练的主网络作为图像和音频的编码器。

4、没训练好的SyncNet模块会直接影响第二阶段的同步性效果,所以SyncNet的训练过程是痛苦的(一苦:没有数据;二苦:训练太慢,迟迟不出效果)。

5、数据预处理、模型训练都是耗时的,收集视频数据也是。没有中文数据的前提下,如果你想速成,跳过Wav2Lip等类似的通用模型吧,至少可以减轻些许痛苦。

# 在color_syncnet_train.py中数据集部分# H x W x 3 * Tx = np.concatenate(window, axis=2) / 255.x = x.transpose(2, 0, 1)x = x[:, x.shape[1]//2:] # 仅取下半脸区域(训练用于判断嘴唇与音频是否同步的分类器)# 以上是粗糙的做法

# 更为精细的做法是# 仅使用嘴巴区域作为图像输入# 可根据人脸关键点裁剪出嘴巴区域,1280*720分辨率下的嘴巴区域,# 裁剪出来区域为64*64即可,通过resize操作为统一大小。# 输入嘴巴区域,能加速SyncNet的训练。# 数据量要足够(总视频时长、不同对象的数量),SyncNet模型才有泛化性。

4.4 测试SyncNet的准确率​​​​​​​

import torch.nn as nn# 加载模型device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")model = SyncNet()model.load_state_dict(torch.load("ckpt_path", map_location="cpu"))code>model.to(device)model.eval()

# 加载输入,选定一个视频,重复多次vidname = self.all_videos[0] # Dataset.__getitem__()

acc = 0for _, (x, mel, y) in enumerate(test_loader): x = x.to(device) mel = mel.to(device) y = y.to(device) # gt, 0 or 1 a, v = model(mel, x) # a和v的特征 av_sim = nn.functional.cosine_similarity(a, v) # a与v越相似,得分越高

for i in range(a.size(0)): pred_label = 1 if av_sim[i] > 0.5 else 0 if pred_label == y: acc += 1

avg_acc = acc / 总次数

本小节引用:Talking-Face-Generation系列之Wav2Lip模型

五、资料

1、AI数字人训练数据集汇总 https://blog.csdn.net/lsb2002/article/details/135999742

2、Talking-Face-Generation系列之Wav2Lip模型 https://zhuanlan.zhihu.com/p/613996840

3、改进Wav2Lip的文本音频驱动人脸动画生成 http://www.c-s-a.org.cn/csa/article/pdf/9405?file_name=A8D77C701D04C881E52E8B1CB9B8FEE13FAE6909B074264A4A0BF149715D8F6B877AEFB96ACDE3BE&open_type=self

4、wav2lip中文语音驱动人脸训练 https://blog.csdn.net/lsb2002/article/details/133377829

5、史上最详细唇语识别数据集综述 https://blog.csdn.net/qq_44697805/article/details/108341618

感谢你的阅读

接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。