衡兰芷若成绝响,人间不见周海媚(4k修复基于PaddleGan)
ztj100 2024-12-12 16:15 23 浏览 0 评论
一代人有一代人的经典回忆,1994年由周海媚、马景涛、叶童主演的《神雕侠侣》曾经风靡一时,周海媚所诠释的周芷若凝聚了汉水之钟灵,峨嵋之毓秀,遇雪尤清,经霜更艳,俘获万千观众,成为了一代人的共同记忆。
如今美人仙去,回望经典,雪肤依然,花貌如昨,白璧微瑕之处是九十年代电视剧的分辨率有些低,本次我们利用百度自研框架PaddleGan的视频超分SOTA算法来对九十年代电视剧进行4K修复。
配置PaddlePaddle框架
PaddlePaddle框架需要本地环境支持CUDA和cudnn,具体请参照:声音好听,颜值能打,基于PaddleGAN给人工智能AI语音模型配上动态画面(Python3.10),囿于篇幅,这里不再赘述。
接着去PaddlePaddle官网查看本地cudnn对应的paddlepaddle版本:
https://www.paddlepaddle.org.cn/
输入命令查看本地cudnn版本:
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:36:24_Pacific_Standard_Time_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
可以看到版本是11.6
随后安装对应11.6的最新paddle-gpu版本:
python -m pip install paddlepaddle-gpu==2.5.2.post116 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
注意这里的最新版是paddlepaddle-gpu==2.5.2.post116,而非之前的paddlepaddle-gpu==2.4.2.post116
安装成功后,进行检测:
PS C:\Users\zcxey> python
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle
>>> paddle.utils.run_check()
Running verify PaddlePaddle program ...
I1214 14:38:08.825912 4800 interpretercore.cc:237] New Executor is Running.
W1214 14:38:08.827040 4800 gpu_resources.cc:119] Please NOTE: device: 0, GPU Compute Capability: 8.9, Driver API Version: 12.3, Runtime API Version: 11.6
W1214 14:38:08.829569 4800 gpu_resources.cc:149] device: 0, cuDNN Version: 8.4.
I1214 14:38:12.468061 4800 interpreter_util.cc:518] Standalone Executor is Used.
PaddlePaddle works well on 1 GPU.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.
说明PaddlePaddle的配置没有问题。
随后克隆项目并且进行编译:
git clone https://gitee.com/PaddlePaddle/PaddleGAN
cd PaddleGAN
pip3 install -v -e .
视频修复超分模型
关于视频修复超分模型的选择,这里我们使用百度自研SOTA超分系列模型PP-MSVSR、业界领先的视频超分模型还包括EDVR、BasicVSR,IconVSR和BasicVSR++等等。
百度自研的PP-MSVSR是一种多阶段视频超分深度架构,具有局部融合模块、辅助损失和细化对齐模块,以逐步细化增强结果。具体来说,在第一阶段设计了局部融合模块,在特征传播之前进行局部特征融合, 以加强特征传播中跨帧特征的融合。在第二阶段中引入了一个辅助损失,使传播模块获得的特征保留了更多与HR空间相关的信息。在第三阶段中引入了一个细化的对齐模块,以充分利用前一阶段传播模块的特征信息。大量实验证实,PP-MSVSR在Vid4数据集性能优异,仅使用 1.45M 参数PSNR指标即可达到28.13dB。
PP-MSVSR提供两种体积模型,开发者可根据实际场景灵活选择:PP-MSVSR(参数量1.45M)与PP-MSVSR-L(参数量7.42)。
关于EDVR:
EDVR模型在NTIRE19视频恢复和增强挑战赛的四个赛道中都赢得了冠军,并以巨大的优势超过了第二名。视频超分的主要难点在于(1)如何在给定大运动的情况下对齐多个帧;(2)如何有效地融合具有不同运动和模糊的不同帧。首先,为了处理大的运动,EDVR模型设计了一个金字塔级联的可变形(PCD)对齐模块,在该模块中,从粗到精的可变形卷积被使用来进行特征级的帧对齐。其次,EDVR使用了时空注意力(TSA)融合模块,该模块在时间和空间上同时应用注意力机制,以强调后续恢复的重要特征。
关于BasicVSR:
BasicVSR在VSR的指导下重新考虑了四个基本模块(即传播、对齐、聚合和上采样)的一些最重要的组件。 通过添加一些小设计,重用一些现有组件,得到了简洁的 BasicVSR。与许多最先进的算法相比,BasicVSR在速度和恢复质量方面实现了有吸引力的改进。 同时,通过添加信息重新填充机制和耦合传播方案以促进信息聚合,BasicVSR 可以扩展为 IconVSR,IconVSR可以作为未来 VSR 方法的强大基线 .
关于BasicVSR++:
BasicVSR++通过提出二阶网格传播和导流可变形对齐来重新设计BasicVSR。通过增强传播和对齐来增强循环框架,BasicVSR++可以更有效地利用未对齐视频帧的时空信息。 在类似的计算约束下,新组件可提高性能。特别是,BasicVSR++ 以相似的参数数量在 PSNR 方面比 BasicVSR 高0.82dB。BasicVSR++ 在NTIRE2021的视频超分辨率和压缩视频增强挑战赛中获得三名冠军和一名亚军。
在当前参数量小于6M的轻量化视频超分模型在 UDM10 数据集上的PSNR指标对比上,PP-MSVSR可谓是“遥遥领先”:
视频修复实践
PP-MSVSR提供两种体积模型,开发者可根据实际场景灵活选择:PP-MSVSR(参数量1.45M)与PP-MSVSR-L(参数量7.42)。这里推荐使用后者,因为该大模型的参数量更大,修复效果更好:
ppgan.apps.PPMSVSRLargePredictor(output='output', weight_path=None, num_frames)
参数说明:
output_path (str,可选的): 输出的文件夹路径,默认值:output.
weight_path (None,可选的): 载入的权重路径,如果没有设置,则从云端下载默认的权重到本地。默认值:None.
num_frames (int,可选的): 模型输入帧数,默认值:10.输入帧数越大,模型超分效果越好。
随后进入项目的根目录:
cd PaddleGAN
编写test.py来查看视频参数:
import cv2
import imageio
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
import warnings
warnings.filterwarnings("ignore")
def display(driving, fps, size=(8, 6)):
fig = plt.figure(figsize=size)
ims = []
for i in range(len(driving)):
cols = []
cols.append(driving[i])
im = plt.imshow(np.concatenate(cols, axis=1), animated=True)
plt.axis('off')
ims.append([im])
video = animation.ArtistAnimation(fig, ims, interval=1000.0/fps, repeat_delay=1000)
plt.close()
return video
video_path = 'd:/倚天屠龙记.mp4'
video_frames = imageio.mimread(video_path, memtest=False)
# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
HTML(display(video_frames, fps).to_html5_video())
如此,就可以获得视频的原分辨率。
随后,进入项目的根目录,执行修复命令:
python3 tools/video-enhance.py --input d:/倚天屠龙记.mp4 \
--process_order PPMSVSR \
--output d:/output_dir \
--num_frames 100
这里使用PPMSVSR模型对该视频进行修复,input参数表示输入的视频路径;output表示处理后的视频的存放文件夹;proccess_order 表示使用的模型和顺序;num_frames 表示模型输入帧数。
随后展示修复后的视频:
output_video_path = 'd:/倚天屠龙记_PPMSVSR_out.mp4'
video_frames = imageio.mimread(output_video_path, memtest=False)
# 获得视频的原分辨率
cap = cv2.VideoCapture(output_video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
HTML(display(video_frames, fps, size=(16, 12)).to_html5_video())
修复效果:
除了视频超分外,PaddleGAN中还提供了视频上色与补帧的功能,配合上述的PP-MSVSR一起使用,即可实现视频清晰度提高、色彩丰富、播放更加行云流水。
补帧模型DAIN
DAIN 模型通过探索深度的信息来显式检测遮挡。并且开发了一个深度感知的流投影层来合成中间流。在视频补帧方面有较好的效果:
ppgan.apps.DAINPredictor(
output_path='output',
weight_path=None,
time_step=None,
use_gpu=True,
remove_duplicates=False)
参数:
output_path (str,可选的): 输出的文件夹路径,默认值:output.
weight_path (None,可选的): 载入的权重路径,如果没有设置,则从云端下载默认的权重到本地。默认值:None。
time_step (int): 补帧的时间系数,如果设置为0.5,则原先为每秒30帧的视频,补帧后变为每秒60帧。
remove_duplicates (bool,可选的): 是否删除重复帧,默认值:False.
上色模型DeOldifyPredictor
DeOldify 采用自注意力机制的生成对抗网络,生成器是一个U-NET结构的网络。在图像的上色方面有着较好的效果:
ppgan.apps.DeOldifyPredictor(output='output', weight_path=None, render_factor=32)
参数:
output_path (str,可选的): 输出的文件夹路径,默认值:output.
weight_path (None,可选的): 载入的权重路径,如果没有设置,则从云端下载默认的权重到本地。默认值:None。
render_factor (int): 会将该参数乘以16后作为输入帧的resize的值,如果该值设置为32, 则输入帧会resize到(32 * 16, 32 * 16)的尺寸再输入到网络中。
结语
AI技术通过分析视频中的图像信息并应用图像处理和修复算法,自动修复视频中的缺陷、噪声、模糊等问题,以提高视频的观看质量和可用性,配合语音克隆等技术,从而让演员在某种程度上实现“数字永生”。
- 上一篇:机器学习笔记-LSTM(长短时记忆网络)
- 下一篇:机器学习十大算法案例
相关推荐
- sharding-jdbc实现`分库分表`与`读写分离`
-
一、前言本文将基于以下环境整合...
- 三分钟了解mysql中主键、外键、非空、唯一、默认约束是什么
-
在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。...
- MySQL8行级锁_mysql如何加行级锁
-
MySQL8行级锁版本:8.0.34基本概念...
- mysql使用小技巧_mysql使用入门
-
1、MySQL中有许多很实用的函数,好好利用它们可以省去很多时间:group_concat()将取到的值用逗号连接,可以这么用:selectgroup_concat(distinctid)fr...
- MySQL/MariaDB中如何支持全部的Unicode?
-
永远不要在MySQL中使用utf8,并且始终使用utf8mb4。utf8mb4介绍MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因...
- 聊聊 MySQL Server 可执行注释,你懂了吗?
-
前言MySQLServer当前支持如下3种注释风格:...
- MySQL系列-源码编译安装(v5.7.34)
-
一、系统环境要求...
- MySQL的锁就锁住我啦!与腾讯大佬的技术交谈,是我小看它了
-
对酒当歌,人生几何!朝朝暮暮,唯有己脱。苦苦寻觅找工作之间,殊不知今日之事乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一...
- MySQL字符问题_mysql中字符串的位置
-
中文写入乱码问题:我输入的中文编码是urf8的,建的库是urf8的,但是插入mysql总是乱码,一堆"???????????????????????"我用的是ibatis,终于找到原因了,我是这么解决...
- 深圳尚学堂:mysql基本sql语句大全(三)
-
数据开发-经典1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少...
- MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?
-
大家好,是不是很多人都对MySQL加行级锁的规则搞的迷迷糊糊,一会是next-key锁,一会是间隙锁,一会又是记录锁。坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加...
- 一文讲清怎么利用Python Django实现Excel数据表的导入导出功能
-
摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。本文系统讲解了如何使用Python的Django框架结合openpyxl库实现Excel...
- 用DataX实现两个MySQL实例间的数据同步
-
DataXDataX使用Java实现。如果可以实现数据库实例之间准实时的...
- MySQL数据库知识_mysql数据库基础知识
-
MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...
- 如何为MySQL中的JSON字段设置索引
-
背景MySQL在2015年中发布的5.7.8版本中首次引入了JSON数据类型。自此,它成了一种逃离严格列定义的方式,可以存储各种形状和大小的JSON文档,例如审计日志、配置信息、第三方数据包、用户自定...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
【VueTorrent】一款吊炸天的qBittorrent主题,人人都可用
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)