本项目采用的LapStyle算法,是一种基于拉普拉斯金字塔的风格迁移方法。它能够有效地捕捉和迁移图像或视频中的风格特征,同时保留原始内容的结构和细节,实现高质量的风格化效果。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

PaddleGAN LapStyle是百度视觉团队研发的一种基于拉普拉斯金字塔的高质量风格化方法,该方法被应用于飞桨生成对抗网络开发套件PaddleGAN中。LapStyle的核心思想是在低分辨率下迁移复杂纹理,再在高分辨率下对纹理的细节进行修正。这种方法能够渐进地生成复杂的纹理迁移效果,同时保持较高的处理速度。具体而言,LapStyle网络分为两个主要部分:Drafting Network和Revision Network。
性能特点
1.高质量风格化:LapStyle能够生成高质量的风格化图像,将风格图中的颜色和纹理风格有效地迁移到内容图上,同时保持内容图的结构。
2.快速处理:LapStyle在处理速度上有显著提升,能够在512分辨率下达到接近100fps的速度,比现有的前馈方法都要显著的快。
3.灵活性:虽然LapStyle目前是一个单风格网络,不支持任意风格化,但它在处理特定风格时表现出色。对于每个风格,需要重新进行训练,但一旦训练完成,就可以快速应用于新的内容图。
以下为利用PaddleGAN内置预训练风格模型进行风格迁移的效果展示
PaddleGAN是百度飞桨(PaddlePaddle)生态下的一款强大工具,专注于生成对抗网络(GAN)的研究与应用,尤其擅长图像和视频的风格转换、生成等任务。在这一步骤中,你需要通过Python的包管理工具(如pip)来安装PaddleGAN及其依赖项。安装完成后,你将拥有一个功能完备的框架,可以开始探索视频风格转换的奇妙世界。
# 从github上克隆PaddleGAN代码(如下载速度过慢,可用gitee源)#!git clone https://github.com/PaddlePaddle/PaddleGAN!git clone https://gitee.com/PaddlePaddle/PaddleGAN# 安装依赖%cd /home/aistudio/PaddleGAN !pip install -r requirements.txt
由于视频本质上是由一系列连续的图片(帧)组成的,因此将视频文件拆分成单独的图片帧是进行风格转换的前提。这一步骤使用Opencv来读取视频文件,并逐帧保存为图片文件。这样做的好处是可以对每一帧进行独立处理,便于后续的风格转换操作,同时也方便了对处理进度和结果进行细粒度的控制。
import cv2import osimport shutildef video2frame(videos_path,frames_save_path,time_interval):
'''
:param videos_path: 视频的存放路径
:param frames_save_path: 视频切分成帧之后图片的保存路径
:param time_interval: 保存间隔
:return:
'''
vidcap = cv2.VideoCapture(videos_path)
success, image = vidcap.read()
count = 10000
while success:
success, image = vidcap.read()
count += 1
if count % time_interval == 0:
cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "/%d.jpg" % count) # if count == 20:
# break
print(count)
def RemoveDir(filepath):
if not os.path.exists(filepath):
os.mkdir(filepath) else:
shutil.rmtree(filepath)
os.mkdir(filepath)try:
videos_path = '/home/aistudio/q3.mp4'
frames_save_path = '/home/aistudio/切出图片'
RemoveDir(frames_save_path)
time_interval = 1 #隔一帧保存一次
video2frame(videos_path, frames_save_path, time_interval)except: pass艺术风格迁移是指将一张风格图中的颜色和纹理风格迁移到一张内容图上,同时保存内容图的结构。相关算法在艺术图像生成、滤镜等领域有广泛的应用。 对切分出的图片进行风格迁移部分是整个项目的核心。在这一阶段,利用PaddleGAN提供的预训练模型或自定义模型,将上一步得到的图片帧逐一进行风格迁移。风格转换可以是将普通照片转换为艺术画作风格(如梵高、毕加索风格),也可以是其他任何你感兴趣的风格。PaddleGAN提供了丰富的模型选择和灵活的接口,使得这一过程既高效又充满创意。通过调整模型参数,你可以获得不同强度的风格效果,满足多样化的需求。本项目将使用PaddleGAN中自带的stars风格进行演示
%cd PaddleGAN !git checkout develop
通过对从视频中切出的图片进行处理,再把处理完成的图片进行合成,即可达到视频风格迁移效果
--content_img : 输入的内容图像路径。
--output_path : 输出的图像路径,默认为output_dir。
--weight_path : 模型权重路径,设置None时会自行下载预训练模型,默认为None。
--style : 生成图像风格,当weight_path为None时,可以在starrynew, circuit, ocean 和 stars中选择,默认为starrynew。
--style_image_path : 输入的风格图像路径,当weight_path不为None时需要输入,默认为None。
如果使用内置预训练模型,设置weight_path为None,添加--style '{style}'并更换--style_image_path 即可
#视频转换 import os
import subprocess
# 设置变量 content_dir = "/home/aistudio/切出图片" output_dir = "/home/aistudio/result" #weight_path = "/home/aistudio/weight/moon_iter_30000_weight.pdparams"style_image_path = "/home/aistudio/style_pic/style3.png" style = 'stars'
os.makedirs(output_dir, exist_ok=True)
# 遍历内容图片目录中的所有文件 for content_img in os.listdir(content_dir):
if content_img.lower().endswith(('.jpg', '.jpeg', '.png')):
content_img_path = os.path.join(content_dir, content_img)
filename = os.path.splitext(content_img)[0]
output_img_path = os.path.join(output_dir, f"{filename}z.jpg")
# 构建运行 lapstyle.py 的命令
command = [
"python", "applications/tools/lapstyle.py",
"--content_img", content_img_path,
"--output_path", output_img_path,
"--style", style,
"--style_image_path", style_image_path
]
# 运行命令
subprocess.run(command)将转换后的图片合成为视频部分是将处理后的图片帧重新组合成视频的关键步骤。这一步骤使用Opencv来读取所有风格迁移后的图片,并按照原始视频的顺序和帧率将它们重新编码为一个完整的视频文件。通过这一步,可以将一系列静态的图片帧转化为动态的视频,从而直观地展示风格转换的效果。
import matplotlib.pyplot as plt
from PIL import Image
file_path2 = '/home/aistudio/切出图片/10001.jpg' file_path2 = '/home/aistudio/result/10001z.jpg/LapStyle/stylized.png'
image1 = Image.open(file_path2)
image2 = Image.open(file_path2)
fig, axes = plt.subplots(1, 2, figsize=(15, 20))
axes[0].imshow(image1)
axes[0].set_title('Original pic')
axes[0].axis('off')
axes[1].imshow(image2)
axes[1].set_title('Stylized pic')
axes[1].axis('off')
plt.show()<Figure size 1500x2000 with 2 Axes>
%cd
import os
import shutil
import re
source_folder = '/home/aistudio/result' destination_folder = '/home/aistudio/stylized/'
if not os.path.exists(destination_folder):
os.makedirs(destination_folder)
jpg_folders = sorted(
(f for f in os.listdir(source_folder) if f.endswith('.jpg') and os.path.isdir(os.path.join(source_folder, f))),
key=lambda x: int(re.search(r'd+', x).group())
)
num = 0for jpg_folder in jpg_folders:
lapstyle_folder = os.path.join(source_folder, jpg_folder, 'LapStyle')
if os.path.exists(lapstyle_folder):
stylized_file = os.path.join(lapstyle_folder, 'stylized.png')
if os.path.exists(stylized_file):
destination_file = f'stylized/stylized_{jpg_folders.index(jpg_folder) + 10001}.png'
shutil.copy2(stylized_file, destination_file)
print(f'Copied {stylized_file} to {destination_file}',num)
num+=1
print('Image copying and numbering completed.')print(num)import osimport cv2# 要被合成的多张图片所在文件夹# 路径分隔符最好使用“/”,而不是“”,“”本身有转义的意思;或者“\”也可以。# 因为是文件夹,所以最后还要有一个“/”file_dir = '/home/aistudio/stylized'list = []for root ,dirs, files in os.walk(file_dir): for file in files: list.append(file) # 获取目录下文件名列表print(len(list))
fps = 5 #代表视频的帧频为5,如果图片不多,帧频最好设置的小一点 video = cv2.VideoWriter('/home/aistudio/work/test66.mp4',cv2.VideoWriter_fourcc(*'mp4v'),30,(1280,720))try: for i in range(10001,num+10001): print(i) #读取图片
img = cv2.imread('/home/aistudio/stylized/stylized_'+str(i)+'.png')
img = cv2.resize(img,(1280,720)) # 写入视频
video.write(img) print('done')except: pass# 释放资源video.release()PaddleGAN还支持自定义训练,下载coco2017数据集,通过更改配置文件lapstyle_draft,lapstyle_rev_first,lapstyle_rev_second达到自定义训练效果
#解压coco2017数据集!unzip -oq /home/aistudio/data/data97273/annotations_trainval2017.zip -d home/aistudio/dataset !unzip -oq /home/aistudio/data/data97273/val2017.zip -d home/aistudio/dataset !unzip -oq /home/aistudio/data/data97273/train2017.zip home/aistudio/dataset
#训练第一个模型 !python -u tools/main.py --config-file configs/lapstyle_draft.yaml
#训练第二个模型 !python -u tools/main.py --config-file configs/lapstyle_rev_first.yaml --resume output_dir/lapstyle_rev_first/iter_20000_checkpoint.pdparams
#训练第三个模型 !python -u tools/main.py --config-file configs/lapstyle_rev_second.yaml --resume output_dir/lapstyle_rev_second/iter_25000_checkpoint.pdparams
模型训练完成并保存后,修改weight_path为自己模型的路径并更改style_image_path即可实现自定义风格迁移
以上就是【PaddleGAN】视频风格迁移的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号