vid2vid 视频到视频转换

vid2vid

teaser.gif

Pytorch实现了我们的高分辨率(例如2048x1024)逼真的视频到视频转换方法。

[项目] [YouTube]

论文将于8月20日在Arxiv上发布。

Pytorch实现了我们的高分辨率(例如,2048x1024)逼真的视频到视频转换方法。它可用于将语义标签贴图转换为照片般逼真的视频,合成人们从边缘地图谈话,或从姿势生成人体。

视频到视频合成 Video-to-Video Synthesis

Ting-Chun Wang1, Ming-Yu Liu1, Jun-Yan Zhu2, Guilin Liu1, Andrew Tao1, Jan Kautz1, Bryan Catanzaro1
1NVIDIA Corporation, 2MIT CSAIL In arXiv, 2018.

视频到视频翻译

  • 标签到街景结果
city_change_styles.gif
city_change_labels.gif
  • 边框到面部结果
face.gif
face_multiple.gif
  • 姿势到身体的结果
pose.gif

先决条件

  • Linux或macOS
  • Python 3
  • NVIDIA GPU + CUDA cuDNN

入门

安装

pip install dominate requests
  • 克隆这个仓库:
git clone https://github.com/NVIDIA/vid2vid
cd vid2vid

测试

  • 我们在datasets文件夹中包含一个示例Cityscapes视频。

  • 首先,通过运行从https://github.com/NVIDIA/flownet2-pytorch下载并编译FlowNet2 repo的快照python scripts/download_flownet2.py

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

python scripts/download_models.py
  • 要测试模型(bash ./scripts/test_2048.sh):
#!./scripts/test_2048.sh
python test.py --name label2city_2048 --loadSize 2048 --n_scales_spatial 3 --use_instance --fg --use_single_G

测试结果将保存到./results/label2city_2048/test_latest/index.html中。

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

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

数据集

  • 我们使用Cityscapes数据集作为示例。要在完整数据集上训练模型,请从官方网站下载(需要注册)。
  • 我们应用预先训练的分割算法来获得相应的语义地图(train_A)和实例地图(train_inst)。
  • 请将获得的图像放在datasets文件夹下,方法与提供示例图像的方式相同。

训练

  • 首先,通过运行下载FlowNet2检查点文件python scripts/download_models_flownet2.py

  • 使用8个GPU进行培训:

    • 我们采用从粗到精的方法,将分辨率从512 x 256,1024 x 512到2048 x 1024逐步增加。
    • 以512 x 256分辨率训练模型(bash ./scripts/train_512.sh
     #!./scripts/train_512.sh
    python train.py --name label2city_512 --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/train_1024.sh):
     #!./scripts/train_1024.sh
    python train.py --name label2city_1024 --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/web/index.html。如果安装了TensorFlow,则可以./checkpoints/label2city_1024/logs通过添加--tf_log到培训脚本来查看TensorBoard登录。

  • 使用单个GPU进行培训:

    • 我们使用多个GPU训练我们的模型。为方便起见,我们为单GPU用户提供了一些样本培训脚本(XXX_g1.sh),分辨率高达1024 x 512。再次采用从粗到细的方法(256 x 128,512 x 256,1024 x 512)。使用这些脚本无法保证性能。
    • 例如,使用单个GPU训练256 x 128视频(bash ./scripts/train_256_g1.sh
    #!./scripts/train_256_g1.sh
    python train.py --name label2city_256_g1 --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/train_2048.sh)。如果只有具有12G / 16G内存的GPU可用,请使用脚本./scripts/train_2048_crop.sh,该脚本将在训练期间裁剪图像。此脚本无法保证性能。

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

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

更多培训/测试详情

  • 我们训练模型的方式如下:假设我们有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,因为在处理高分辨率时,即使一帧也不适合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:如果已指定,请使用前景 - 背景分离模型。
  • 对于其他flag,请参阅options/train_options.pyoptions/base_options.py查看所有训练flag; 看到options/test_options.pyoptions/base_options.py所有测试标志。

引文

如果您发现这对您的研究有用,请使用以下内容。

@article{wang2018vid2vid,
  title={Video-to-Video Synthesis},
  author={Ting-Chun Wang and Ming-Yu Liu and Jun-Yan Zhu and Guilin Liu and Andrew Tao and Jan Kautz and Bryan Catanzaro},  
  journal={arXiv},
  year={2018}
}

致谢

这段代码大量借用了pytorch-CycleGAN-and-pix2pixpix2pixHD

原文:https://github.com/NVIDIA/vid2vid

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容