本文介绍了在2024年7月30日进行的一次泛化模型推理效果测试,包括预处理、模型微调以及遇到的技术挑战和解决方案。通过使用ffmpeg进行视频处理和PyTorch进行深度学习模型的张量嵌入,我们探索了提高模型泛化能力的方法。
2. 视频预处理
在模型微调前,对输入样本进行适当的预处理是至关重要的。本次实验中,我们选择了一段时长超过三分钟的视频作为样本。
2.1 帧率调整
为了确保视频与模型输入要求的一致性,我们首先使用ffmpeg将视频帧率调整至25fps。具体实现代码如下:
```bash
ffmpeg -i input.mp4 -r 25 output1.mp4
```
2.2 采样率与编码器调整
进一步地,我们将视频的采样率调整为16000Hz,并分别对视频和音频编码器进行设置,以适应后续处理的需求。相关ffmpe 代码如下:
1 inport platform
2 inport subprocess
3 inport sys
4 inport os
5 for name in os.listdir(sys.argv[1]):
6 video name = name.split('/')[-1][:-4]
7 subprocess.call(f'ffmpeg -i {sys.argv[1]}/{name} -hide_banner -f mp4 -vcodec libx264 -vf
alphaextract,format=yuv420p {sys.argv[2]/{video name].mp4', shell=platform.system()1='windows')
8# subprocess.call(f'ffmpeg -t {sys,argv[1]}/{str(i)}.wav -ac 1 -ar 16800 {sys.argv[2]}/{str(i)}.wav'shell=platform.system()!='Windows")
3. 特征提取与模型微调
在视频预处理完成后,我们开始进行特征提取和模型微调。
3.1 脸部识别与特征嵌入
使用PyTorch,我们对视频中的脸部进行识别,并将其切分出来,然后进行张量嵌入,以便于模型的进一步处理。
3.2 音频特征提取
除了视频特征外,音频特征也是模型泛化能力的重要组成部分。我们采用相应的技术提取音频特征,以丰富模型的输入维度。
26 feature extractor = Wav2Vec2FeatureExtractor,from pretrained(model path)
27 model =HubertModel.from pretrained(model path)
28
29 model = model,to(device)
30 model = model.half()
31 model.eval()
32 nun e int(sys.argw[3])
33 input = sys.argv[1]
34 output = sys.argv[2]
35 print(num,input,output)
36 for t in range(i,num+1):
37 wav pathm f'finput}/{str(t)}.wav' #修改为输入的音频路径
38
39 wav,sr sf.read(wav -path)
40 rep output =[ ]
41
42 for start in range(o, len(wav),60*sr): # process one minute once
43 minute = waw[start:nin(start + 60*sr+80,len(wav))]
44 if len(minute)s480:
45 print(f"{str(i)} length s 406')
46 continue
47 input values = feature extractor(minute, sampling rate=sr, return tensors="pt").input values
48 input values = input values.halfo)
49 input walues m input walues.to(device)
50
51 wlth torch.no grad():
52 outputs s nodel(input walues)
53 repst =outputs.last hidden state
54 repst = repst.cpu()
55 repst = repst.numpy()
56 rep output.append(repst)
57
58 rep output :np.concatenate(tuple(rep output), axis.1)
59 np.save(sys.argv[2]+'/'+f'wavzvec_hubert_large_{str(i)}',rep_output) #修改为输出的音频特征路径
60 print(f',{str(i)} done.{str(sr)}')
4. 遇到的挑战与解决方案
在实验过程中,我们遇到了一个命名相关的报错问题:
```
ValueError: invalid literal for int() with base 10: 'output1_55'
```
经过排查,我们发现问题出在视频命名上。视频名称中不应包含下划线,且只能以整形命名。通过将视频命名为`1.mp4`,我们成功解决了这一问题。
5. 模型训练与推理效果
为了加速模型的训练过程并及时观察推理效果,我们使用了NVIDIA GeForce RTX 4090显卡,并设置每500步保存一次模型的迭代状态。
使用微调好的模型进行推理测验:
推理结果:
1.泛型直接推理带唇部动作的希希视频,效果比较直观,音频特征和唇部动作较一致,整体评价,优。
通过本次实验,我们不仅测试了模型的推理效果,还学习到了在实际应用中如何优化模型的预处理和微调流程。这些经验对于提升模型的泛化能力和实际应用价值具有重要意义。