开源
Vid2Vid:一种基于对抗生成网络 (GAN) 的视频转换模型
来源:元经纪     阅读:1294
网站管理员
发布于 2023-06-20 08:53
查看主页

概述

Vid2Vid 是一种基于对抗生成网络 (GAN) 的视频转换模型,可以将一种类型的视频转换为另一种类型的视频。该模型可以用于多个应用场景,如视频分割、视频去噪等。

先决条件

入门

安装

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

  • 安装 python 库dominate和 requests。
pip install dominate requests
  • 如果您打算使用人脸数据集进行训练,请安装 dlib。
pip install dlib
  • 如果您计划使用姿势数据集进行训练,请安装DensePose和/或OpenPose
  • 克隆这个回购:
git clone https://github.com/NVIDIA/vid2vid
cd vid2vid
  • Docker Image 如果你在构建 repo 时遇到困难,可以在docker文件夹中找到一个 docker image。

测试

  • 请先通过运行下载示例数据集python scripts/download_datasets.py

  • 接下来,通过运行编译FlowNet2的快照python scripts/download_flownet2.py

  • 城市景观

    • 请通过以下方式下载预训练的 Cityscapes 模型:

      python scripts/street/download_models.py
    • 测试模型 ( bash ./scripts/street/test_2048.sh):

      #!./scripts/street/test_2048.sh
      python test.py --name label2city_2048 --label_nc 35 --loadSize 2048 --n_scales_spatial 3 --use_instance --fg --use_single_G

      测试结果将保存在:./results/label2city_2048/test_latest/.

    • 我们还提供了一个使用单个 GPU 训练的较小模型,它在 1024 x 512 分辨率下产生的性能稍差。

      • 请通过以下方式下载模型
      python scripts/street/download_models_g1.py
      • 测试模型 ( bash ./scripts/street/test_g1_1024.sh):
      #!./scripts/street/test_g1_1024.sh
      python test.py --name label2city_1024_g1 --label_nc 35 --loadSize 1024 --n_scales_spatial 3 --use_instance --fg --n_downsample_G 2 --use_single_G
    • 您可以在该目录中找到更多示例脚本scripts/street/

  • Faces

    • 请通过以下方式下载预训练模型:
      python scripts/face/download_models.py
    • 测试模型 ( bash ./scripts/face/test_512.sh):
      #!./scripts/face/test_512.sh
      python test.py --name edge2face_512 --dataroot datasets/face/ --dataset_mode face --input_nc 15 --loadSize 512 --use_single_G
      测试结果将保存在:./results/edge2face_512/test_latest/.

数据集

  • Cityscapes
    • 我们以 Cityscapes 数据集为例。要在完整数据集上训练模型,请从官方网站下载(需要注册)。
    • 我们应用预训练的分割算法来获得相应的语义图 (train_A) 和实例图 (train_inst)。
    • datasets请按照提供示例图像的相同方式将获取的图像添加到文件夹中。
  • Face
    • 我们使用FaceForensics数据集。然后我们使用地标检测来估计面部关键点,并对它们进行插值以获得面部边缘。
  • Pose
    • 我们使用在 YouTube 上找到的随机舞蹈视频。然后我们应用 DensePose / OpenPose 来估计每一帧的姿势。

使用 Cityscapes 数据集进行训练

  • 首先,通过运行下载 FlowNet2 检查点文件python scripts/download_models_flownet2.py
  • 使用 8 个 GPU 进行训练:
    • 我们采用由粗到精的方法,依次将分辨率从 512 x 256、1024 x 512 提高到 2048 x 1024。
    • 以 512 x 256 分辨率训练模型 ( bash ./scripts/street/train_512.sh)
    #!./scripts/street/train_512.sh
    python train.py --name label2city_512 --label_nc 35 --gpu_ids 0,1,2,3,4,5,6,7 --n_gpus_gen 6 --n_frames_total 6 --use_instance --fg
    • 以 1024 x 512 分辨率训练模型(必须先训练 512 x 256)(bash ./scripts/street/train_1024.sh):
    #!./scripts/street/train_1024.sh
    python train.py --name label2city_1024 --label_nc 35 --loadSize 1024 --n_scales_spatial 2 --num_D 3 --gpu_ids 0,1,2,3,4,5,6,7 --n_gpus_gen 4 --use_instance --fg --niter_step 2 --niter_fix_global 10 --load_pretrain checkpoints/label2city_512

./checkpoints/label2city_1024/logs如果您安装了 TensorFlow,您可以通过添加--tf_log到训练脚本来看到 TensorBoard 登录。

  • 使用单个 GPU 进行训练:

    • 我们使用多个 GPU 训练我们的模型。为方便起见,我们为单 GPU 用户提供了一些示例训练脚本 (train_g1_XXX.sh),分辨率高达 1024 x 512。再次采用由粗到细的方法(256 x 128、512 x 256、1024 x 512)。使用这些脚本不保证性能。
    • 例如,用单个 GPU 训练一个 256 x 128 的视频 ( bash ./scripts/street/train_g1_256.sh)
    #!./scripts/street/train_g1_256.sh
    python train.py --name label2city_256_g1 --label_nc 35 --loadSize 256 --use_instance --fg --n_downsample_G 2 --num_D 1 --max_frames_per_gpu 6 --n_frames_total 6
  • 以全 (2k x 1k) 分辨率进行训练

    • 要以全分辨率 (2048 x 1024) 训练图像,需要 8 个 GPU 和至少 24G 内存 ( bash ./scripts/street/train_2048.sh)。如果只有 12G/16G 内存的 GPU 可用,请使用脚本./scripts/street/train_2048_crop.sh,它会在训练期间裁剪图像。此脚本不保证性能。

使用人脸数据集进行训练

  • 如果还没有,请先通过运行下载示例数据集python scripts/download_datasets.py
  • 运行以下命令来计算训练数据集的人脸标志:
    python data/face_landmark_detection.py train
  • 运行示例脚本 ( bash ./scripts/face/train_512.sh)
    python train.py --name edge2face_512 --dataroot datasets/face/ --dataset_mode face --input_nc 15 --loadSize 512 --num_D 3 --gpu_ids 0,1,2,3,4,5,6,7 --n_gpus_gen 6 --n_frames_total 12
  • 对于单个 GPU 用户,示例脚本位于 train_g1_XXX.sh 中。这些脚本未经过全面测试,请自行决定使用。如果您仍然遇到内存不足错误,请尝试减少max_frames_per_gpu.
  • 更多示例脚本可以在 中找到scripts/face/
  • 有关训练标志的更多说明,请参阅更多训练/测试详细信息。

使用姿势数据集进行训练

  • 如果还没有,请先通过运行下载示例数据集python scripts/download_datasets.py
  • 包括示例 DensePose 和 OpenPose 结果。如果您打算使用自己的数据集,请生成这些结果并以与提供示例数据集相同的方式放置它们。
  • 运行示例脚本 ( bash ./scripts/pose/train_256p.sh)
    python train.py --name pose2body_256p --dataroot datasets/pose --dataset_mode pose --input_nc 6 --num_D 2 --resize_or_crop ScaleHeight_and_scaledCrop --loadSize 384 --fineSize 256 --gpu_ids 0,1,2,3,4,5,6,7 --batchSize 8 --max_frames_per_gpu 3 --no_first_img --n_frames_total 12 --max_t_step 4
  • 同样,对于单个 GPU 用户,示例脚本位于 train_g1_XXX.sh 中。这些脚本未经过全面测试,请自行决定使用。如果您仍然遇到内存不足错误,请尝试减少max_frames_per_gpu.
  • 更多示例脚本可以在 中找到scripts/pose/
  • 有关训练标志的更多说明,请参阅更多训练/测试详细信息。

使用您自己的数据集进行训练

  • 如果您的输入是标签图,请生成单通道标签图,其像素值对应于对象标签(即 0,1,...,N-1,其中 N 是标签数)。这是因为我们需要从标签图中生成单热向量。--label_nc N请在训练和测试期间使用。
  • 如果您的输入不是标签图,请指定--input_nc N其中 N 是输入通道的数量(RGB 图像的默认值为 3)。
  • 预处理的默认设置是scaleWidth,这会将所有训练图像的宽度缩放到opt.loadSize(1024),同时保持纵横比。如果您想要不同的设置,请使用该--resize_or_crop选项进行更改。例如,scaleWidth_and_crop首先将图像调整为宽度opt.loadSize,然后随机裁剪 size (opt.fineSize, opt.fineSize)crop跳过调整大小的步骤,只执行随机裁剪。scaledCrop在重新训练原始纵横比的同时裁剪图像。randomScaleHeight将随机缩放图像高度在opt.loadSize和之间opt.fineSize。如果您不需要任何预处理,请指定none,这只会确保图像可以被 32 整除。

更多训练/测试细节

  • 我们按顺序在视频中生成帧,当前帧的生成取决于之前的帧。要为模型生成第一帧,有 3 种不同的方法:

      1. 使用另一个生成器,该生成器通过指定 生成单个图像(例如,pix2pixHD)--use_single_G。这是我们在测试脚本中使用的选项。
      1. 通过指定 来使用真实序列中的第一帧--use_real_img
      1. 通过指定 强制模型也合成第一帧--no_first_img。这必须在推理之前单独训练。
  • 我们训练模型的方式如下:假设我们有 8 个 GPU,4 个用于生成器,4 个用于鉴别器,我们要训练 28 帧。此外,假设每个 GPU 只能生成一帧。第一个 GPU 生成第一帧,并将其传递给下一个 GPU,依此类推。生成 4 个帧后,将它们传递给 4 个鉴别器 GPU 以计算损失。然后最后生成的帧成为下一批的输入,训练序列中接下来的 4 帧被加载到 GPU 中。重复 7 次 (4 x 7 = 28),以训练所有 28 帧。

  • 一些重要的标志:

    • n_gpus_gen:用于生成器的 GPU 数量(而其他用于鉴别器)。我们将生成器和鉴别器分离到不同的 GPU 中,因为在处理高分辨率时,即使是一帧也无法放入 GPU 中。如果数字设置为-1,则没有分离,所有 GPU 都用于生成器和鉴别器(仅适用于低分辨率图像)。
    • n_frames_G:输入生成器网络的输入帧数;即,n_frames_G - 1是我们查看过去的帧数。默认值为 3(以前两帧为条件)。
    • n_frames_D:输入时间鉴别器的帧数。默认值为 3。
    • n_scales_spatial:空间域中的尺度数。我们从最粗糙的尺度一直训练到最精细的尺度。默认值为 3。
    • n_scales_temporal:时间鉴别器的尺度数。最精细的比例采用原始帧速率的序列。n_frames_D在将帧馈送到鉴别器之前,较粗尺度对帧进行二次采样。例如,如果n_frames_D = 3n_scales_temporal = 3,鉴别器有效地看到 27 帧。默认值为 3。
    • max_frames_per_gpu:训练期间一个 GPU 中的帧数。如果遇到内存不足错误,请先尝试减少此数字。如果您的 GPU 内存可以容纳更多帧,请尝试使这个数字更大以加快训练速度。默认值为 1。
    • max_frames_backpropagate:损失反向传播到先前帧的帧数。例如,如果此数字为 4,则第 n 帧的损失将反向传播到第 n-3 帧。增加这个数字会略微提高性能,但也会导致训练不太稳定。默认值为 1。
    • n_frames_total:我们想要训练的序列中的总帧数。我们在训练期间逐渐增加这个数字。
    • niter_step:我们加倍了多少个时代n_frames_total。默认值为 5。
    • niter_fix_global:如果这个数字不为 0,则在开始微调所有尺度之前,只为这个时期数训练最好的空间尺度。
    • batchSize:一次训练的序列数。我们通常将 batchSize 设置为 1,因为通常一个序列足以占用所有 GPU。如果要batchSize > 1,目前只batchSize == n_gpus_gen支持。
    • no_first_img:如果未指定,模型将假定第一帧已给定并合成后续帧。如果指定,模型还将尝试合成第一帧。
    • fg:如果指定,请使用论文中所述的前景-背景分离模型。前景标签必须由 指定--fg_labels
    • no_flow:如果指定,则不使用流扭曲并直接合成帧。我们发现当背景是静态的时候,这通常仍然工作得相当好,同时节省内存和训练时间。
    • sparse_D:如果指定,则仅在序列中的稀疏帧上应用时间鉴别器。这有助于节省内存,同时对性能影响很小。
  • 对于其他标志,请参阅options/train_options.py所有options/base_options.py训练标志;查看options/test_options.py所有options/base_options.py测试标志。

  • edge2face 示例的附加标志:

    • no_canny_edge:不要使用精明的边缘作为背景作为输入。
    • no_dist_map:默认情况下,我们在人脸边缘图上使用距离变换作为输入。此标志将使其直接使用边缘贴图。
  • pose2body 示例的附加标志:

    • densepose_only:仅使用密集结果作为输入。还请记得改成input_nc3。
    • openpose_only:仅使用 openpose 结果作为输入。还请记得改成input_nc3。
    • add_face_disc:添加一个仅适用于面部区域的附加鉴别器。
    • remove_face_labels:去除人脸的densepose结果,并为openpose人脸结果添加噪声,这样网络可以对不同的人脸形状更加鲁棒。如果您打算对半身视频进行推理,这一点很重要(如果不是,通常不需要此标志)。
    • random_drop_prob:在训练期间随机丢弃每个姿势片段的概率,因此网络可以在推理时对丢失的姿势更加鲁棒。默认值为 0.05。
    • basic_point_only:如果指定,则仅使用基本关节关键点进行 OpenPose 输出,而不使用任何手部或面部关键点。

引用

如果您发现这对您的研究有用,请引用以下论文。

@inproceedings{wang2018vid2vid,
   author    = {Ting-Chun Wang and Ming-Yu Liu and Jun-Yan Zhu and Guilin Liu
                and Andrew Tao and Jan Kautz and Bryan Catanzaro},
   title     = {Video-to-Video Synthesis},
   booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},   
   year      = {2018},
}

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
中国文化输出!《黑神话:悟空》斩获2024泰国年度最佳游戏
中消协点名黄金销售店铺关门跑路
政策再聚合力,制造业数字化转型迎资金支持
雷军访问宁德时代:曾毓群亲自接待
首款真正全白主板!技嘉X870E AORUS PRO ICE电竞冰雕首发评测:性能超上代旗舰

首页

分类

定制方案

消息

我的