few-shot vid2vid部署安装及测试

项目地址:https://nvlabs.github.io/few-shot-vid2vid/

Github链接:https://github.com/NVlabs/few-shot-vid2vid

Prerequisites

  • Linux or macOS
  • Python 3
  • NVIDIA GPU + CUDA cuDNN
  • PyTorch 1.2

Getting Started

Installation

  • 安装dominate和requests.
pip install dominate requests
  • 训练face数据,安装dlib.
pip install dlib
  • 训练pose数据,需要安装 DensePose and/or OpenPose.
  • Clone this repo: 
git clone https://github.com/NVlabs/few-shot-vid2vid
cd few-shot-vid2vid

Dataset

  • Pose : 使用YouTube上的随机舞蹈视频。然后应用DensePose/OpenPose来估计每帧的姿势。
  • Face : 使用FaceForensics数据集,然后利用landmark detection对人脸关键点进行估计,并对其进行插值得到人脸边缘(在vid2vid项目中执行下面命令生成人脸关键点文件)。
python data/face_landmark_detection.py train

 

  • Street : 我们使用来自不同城市的混合序列,其中包括城市景观官方网站和YouTube上的其他城市。我们使用一个预先训练的分割算法来得到相应的语义图。
  • 请以提供示例图像的方式将获得的图像添加到datasets文件夹。

Training

  • 首先,通过运行python scripts/download_FlowNet2.py编译FlowNet2的snapshot;
  • 首先通过执行python scripts/download_datasets.py下载datasets样例;
  • 下面的scripts都是用单个GPU的例子,对于多个GPU训练,简单的increase batch sizes即可。

Training with pose datasets

  • 包括DensePose和OpenPose结果示例。如果您计划使用自己的数据集,请生成这些结果,并以与提供示例数据集相同的方式放置它们。        
  • 运行示例脚本(bash./scripts/pose/train_g1.sh)
python train.py --name pose --dataset_mode fewshot_pose --adaptive_spade --warp_ref --spade_combine --remove_face_labels --add_face_D --niter_single 100 --niter 200 --batchSize 2

Training with face datasets

  • 运行示例脚本(bash ./scripts/face/train_g1.sh)
python train.py --name face --dataset_mode fewshot_face --adaptive_spade --warp_ref --spade_combine --batchSize 8

Training with street dataset

  • 运行示例脚本(bash ./scripts/street/train_g1.sh)
python train.py --name street --dataset_mode fewshot_street --adaptive_spade --loadSize 512 --fineSize 512 --batchSize 6

Training with your own dataset

  • 如果您的输入是标签映射,请生成一个通道的标签映射,该通道的像素值对应于对象标签(即0,1,…,N-1,其中N是标签数)。这是因为我们需要从标签映射生成一个one-hot向量。请在训练和测试过程中使用--label_nc N
  • 如果你的输入不是一个标签映射,请指定--input_nc N,其中N是输入通道数(RGB图像的默认值为3)。
  • 预处理的默认设置是scale_width,它将所有训练图像的宽度缩放为opt.loadSize,同时保持纵横比。如果需要其他设置,请使用--resize_or_crop选项进行更改。

Testing

  • 训练后,可以使用以下脚本运行推断。测试结果将保存在:./results/中。出于对隐私的考虑,这些经过预培训的模型并未发布。
  • Poses:测试训练模型(bash ./scripts/pose/test.sh):
python test.py --name pose --dataset_mode fewshot_pose --adaptive_spade --warp_ref --spade_combine --remove_face_labels --finetune --seq_path [PATH_TO_SEQ] --ref_img_path [PATH_TO_REF_IMG]
  • Faces:测试模型(bash ./scripts/face/test.sh):
python test.py --name face --dataset_mode fewshot_face --adaptive_spade --warp_ref --spade_combine --seq_path [PATH_TO_SEQ] --ref_img_path [PATH_TO_REF_IMG]
  • Street:测试模型(bash ./scripts/street/test.sh):
python test.py --name street --dataset_mode fewshot_street --adaptive_spade --loadSize 512 --fineSize 512 --seq_path [PATH_TO_SEQ]--ref_img_path [PATH_TO_REF_IMG]

 

More Training/Test Details

  • 训练方法与vid2vid的区别:每个GPU现在处理不同的批,而不是将帧从一个GPU复制到另一个GPU。为了fit into内存,网络一次只生成一个帧(n_frames_per_gpu=1),并且在生成序列中的下一帧时保持该帧不变。我们发现这通常只足以修改当前帧,并且更有效和更容易维护。
  • 训练计划:切换到使用SPADE后,网络现在由两个子网络组成:一个子网络用于单图像生成(SPADE生成器)和光流估计网络。默认情况下,训练将从仅训练单帧生成器开始(即,n_frames_total=1),仅针对n_single epochs。之后,网络将开始训练光流网络生成视频,并引入时间损失。与vid2vid类似,在开始训练视频后,我们将每个niter_step epochs的训练序列长度加倍。
  • 有关网络架构的重要标志:
  • adaptive_spade:自适应生成SPADE模块的网络权值。
  • no_adaptive_embed: 不要为标签嵌入网络动态生成权重。
  • n_adaptive_layers: 生成器中的自适应层数。
  • warp_ref: 添加一个附加的光流网络以将参考图像扭曲到当前帧并与其合并。
  • spade_combine: 与线性混合幻觉和扭曲的帧来生成最终帧不同,在合成过程中使用扭曲的帧作为附加SPADE模块中的指导图像。
  • 有关训练的重要标志:
  • n_frames_G:要输入到生成器网络中的输入帧的数目;即n_frames_G-1是我们回顾过去的帧的数目。
  • n_frames_total:我们要训练的序列中的总帧数。我们在训练中逐渐增加这个数字。
  • niter_single: 在开始训练视频之前,我们训练单帧生成器的epochs数。
  • niter_step: 有多少个epochs,我们将n_frame_total加倍多少。默认值为10。            
  • batchSize: 培训批数。如果它不能被GPU的数量整除,那么第一个GPU(通常内存更重)将执行更少的批处理。
  • 对于其他的flags,训练参数可以查看options/train_options.pyoptions/base_options.py;测试参数可以查看options/test_options.pyoptions/base_options.py
  • pose例子的其他flasgs
  • Remove_face_labels: 去除人脸的稠密结果,使网络在对不同主题进行推理时具有更强的鲁棒性。
  • basic_point_only: 如果指定,则仅对OpenPose输出使用基本关节关键点,而不使用任何手或人脸关键点。
  • add_face_D: 添加一个仅在人脸区域上工作的附加鉴别器。
  • refine_face: 添加一个附加网络以优化人脸区域。
  • face例子的其他flasgs
  • no_upper_face: 默认情况下,我们对称的在人脸的上部加入人工边缘。此标志将禁用它

你可能感兴趣的:(GAN)