CoDeF|无闪烁视频AI风格转换
开源免费CoDeF视频风格转换项目最新非常火爆,但是国内并没有相关的技术教程,国外也没有!站长本身对于Linux系统还算了解,但是对于WSL安装Ubuntu并整理成适合每个人的电脑去安装,这是一件非常费时费力的事情,期间踩坑无数。该项目可以让你快速将一个视频风格转换为另一个视频,配置过程又臭又长,如果嫌麻烦,建议直接下载虚拟机镜像,一键启动。
项目仓库
GitHub:qiuyu96/CoDeF
环境警告
本项目必须使用Linux系统安装部署,暂不支持Windows系统安装使用,但Windows内置WSL子系统功能,通过该功能可以快速部署一个支持本机GPU运算的Linux子系统。
Ubuntu属于Linux系统的一个分支,你可以理解为安卓系统中被各个手机厂商高度定制的UI系统,而Ubuntu是Linux较为成熟的一个分支。
为方便大家自行搭建或快速使用,本站提供两种方式给大家。
- 根据教程,自行搭建Linux的Ubuntu系统,自行安装项目的相应环境依赖以及模型,需要魔法网络。
- 根据教程,快速倒入本店所提供的WSL子系统镜像,可以免安装各种依赖,方便快捷,无网络要求。
以上两种方式任选其一即可,无需两个全部安装。
系统要求
该代码库在以下环境下进行了测试:
- Ubuntu 20.04
- Python 3.10
- PyTorch 2.0.0
- PyTorch Lightning 2.0.2
- 1个显存在10GB以上的NVIDIA GPU和CUDA
自行部署
此部分教程需要自己掌握关于Linux的基础知识,需要魔法网络环境正常,否则困难重重。
系统安装
在安装项目之前,我们需要一个Windows的子系统,用来运行Ubuntu,如果你还未安装部署Ubuntu,可以参阅如下文章。
Conda
在你已经安装Ubuntu系统后,我们还需要安装Conda,用来管理Python多版本等功能,关于Conda的安装可参考如下文章。
CUDA
关于CUDA的安装方式一定要严格根据本站所提供的教程安装配置,否则必报错。
基础准备
为保持与本站命令的一致性,现在关闭所有你之前所有CMD窗口,重新打开一个CMD窗口,执行如下命令。
首先,在CMD中执行如下命令进入WSL子系统。
wsl
默认情况下你所进入的可能并不是用户的主目录,可能是root目录,建议将项目安装在用户的主目录下,执行如下命令进入用户主目录。
cd ~用户名
注意将用户名替换
为你安装时所创建的用户名
,比如本站的Ubuntu用户名
为openai_wiki
,那么本站在执行时的完整命令为cd ~openai_wiki
。
上一步
是切换目录
,而不是切换用户
,为保证Conda
可以正常使用,所以我们还需要切换
用户为你的实际用户名
。
su 用户名
执行如上代码后需要输入密码,例如本站的完整命令为su openai_wiki
,然后输入密码
即可完成用户切换操作。
项目部署
此时我们终于可以进行项目安装啦,执行如下命令,拉取
该项目的Github仓库
文件,将其下载至用户主目录
文件夹内。
git clone https://github.com/qiuyu96/CoDeF.git
在终端
中执行如下命令,强制切换至CoDeF
的项目目录。
cd CoDeF
执行如下命令,创建Conda虚拟环境
,方便后续Python环境的安装。
conda create -y -n CoDeF python=3.10
激活
已创建的Conda环境
,这样可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate CoDeF
执行如下代码,安装PyTorch
相关组件。
conda install -y pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
执行如下代码,安装Pytorch-Lightning
。
pip install pytorch-lightning==2.0.2
执行如下代码,安装FFMPEG
,这是处理视频的主要工具。
sudo apt-get -y install ffmpeg
执行如下命令,安装
该项目的相关模块
依赖库。
pip install -r requirements.txt
除以上内容之外,我们还需要安装一个名为Tiny-CUDA-NN
的PyTroch扩展。
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
至此,手动安装部署Ubutun环境下的开源项目教程完成,请直接跳转至模型下载
部分。
自动部署
此部分教程需要自己掌握关于Linux的基础知识,无需魔法网络环境,可以让你快速运行开源项目。
镜像下载
本站已经将该项目除模型文件的所有依赖全部打包,为什么不将模型文件一起打包?
因为开源AI项目的模型文件较大,如果将模型文件一起打包,可能整个系统镜像的文件尺寸高达几十上百个GB,而且自行部署
和自动部署
需要的模型都是一样的,站长的电脑上传两遍模型会造成严重的带宽占用,网盘空间占用等问题。故此,模型需要大家单独下载,然后手动放置在项目内,大家可以放心,模型安装部分非常简单,和Windows是一样的。
系统安装
在你已经下载完成本站所提供的系统镜向之后,你需要根据下面这篇文章,准备WSL的相关组件,了解Liunx的相关知识。
在完成上面文章内容操作之后,请关闭
你当前的所有已打开的CMD
窗口,然后按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD
并按下回车
键,在CMD窗口
中按顺序执行
如下的每一条命令
。
如果你的系统镜像文件路径与教程中的一致,可以执行如下命令,自动导入Ubuntu系统镜像。
wsl --import CoDeF D:\openai.wiki\WSL D:\openai.wiki\WSL\CoDeF.tar
在CMD中执行如下命令,进入WSL子系统。
wsl -d CoDeF
默认情况下你所进入的可能并不是用户的主目录,而是root目录,执行如下命令进入用户主目录下的项目目录。
cd ~openai_wiki/CoDeF
注意:本站所提供的所有Ubuntu系统镜像,用户名
|用户密码
|root密码
全部为openai_wiki
。
上一步是切换目录
,而不是切换用户
,为保证Conda
可以正常使用,所以我们还需要切换用户为你的实际用户名。
su openai_wiki
执行如上代码后需要输入密码,密码输入openai_wiki
即可完成用户切换操作。
激活
已创建的Conda环境
,否则无法运行项目。
conda activate CoDeF
素材|模型下载
素材|官方下载
官方默认自带一些素材,为了减小体积,还提供了一些额外素材。
官方素材 附加素材将这两个文件下载后解压至CoDeF
根目录下即可。
模型|官方下载
模型名称 | 配置文件 | 下载地址 |
---|---|---|
beauty_0 | configs/beauty_0/base.yaml | Google drive link |
beauty_1 | configs/beauty_1/base.yaml | Google drive link |
white_smoke | configs/white_smoke/base.yaml | Google drive link |
lemon_hit | configs/lemon_hit/base.yaml | Google drive link |
scene_0 | configs/scene_0/base.yaml | Google drive link |
模型存储路径格式如下:
CoDeF │ └─── ckpts/all_sequences │ └─── NAME1 │ └─── EXP_NAME (base) │ └─── NAME1.ckpt │ └─── NAME2 │ └─── EXP_NAME (base) │ └─── NAME2.ckpt | └─── ...
素材&模型|网盘下载
关于此项目的模型和素材,本站已为您下载并整理好。如果你不方便通过官网下载,可以使用本站所提供的网盘下载地址。
WSL系统目录
我们是可以直接在Windows
的资源管理器
中查看的,在CMD
中执行如下命令,这将会自动弹出WSL系统的文件目录,
start \\wsl$
这将会自动弹出Windows的资源管理器,你将会看到如下内容:
- 如果你是通过
自行安装
方式部署,那么可以访问名为Ubuntu
的文件夹。- 将你下载后的模型压缩包解压,移动至
.\home\你的用户名\CoDeF
目录下。
- 将你下载后的模型压缩包解压,移动至
- 如果你是通过
自动安装
方式导入的系统,那么可访问名为CoDeF
的文件夹。- 将你下载后的模型压缩包解压,移动至
.\home\openai_wiki\CoDeF
目录下。
- 将你下载后的模型压缩包解压,移动至
运行方式
在以后每次运行该项目时,只需要先进入WSL系统,切换用户,切换目录,然后激活我们所创建的Conda虚拟Python环境,最后运行启动文件即可。
运行一个CMD窗口,执行如下命令进入WSL系统。
wsl -d CoDeF
在终端中执行如下命令,强制切换至项目目录文件夹。
cd ~openai_wiki/CoDeF
上一步是切换目录
,而不是切换用户
,为保证Conda
可以正常使用,所以我们还需要切换用户为你的实际用户名。(如果是自行部署,请将openai_wiki修改为你自己所设置的用户名)
su openai_wiki
激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。
conda activate CoDeF
执行如下代码,运行推理脚本。
./scripts/test_multi.sh
自定义素材
虽然官方提供了一些素材,但是如果你想用自己的视频跑出效果,那么需要对视频进行处理。
我们使用SAM-Track
来分割视频序列。一旦您获得了Mask
文件,请将它们放在all_sequences/{YOUR_SEQUENCE_NAME}/{YOUR_SEQUENCE_NAME}_masks
文件夹中。接下来,执行以下命令:
cd data_preprocessing python preproc_mask.py
我们使用RAFT提取视频序列的光流。要开始,请按照此处提供的说明下载他们的预训练模型。下载后,请将模型放在data_preprocessing/RAFT/models
文件夹中。之后,您可以执行以下命令:
cd data_preprocessing/RAFT ./run_raft.sh
请记住在data_preprocessing/preproc_mask.py
和data_preprocessing/RAFT/run_raft.sh
中都更新序列名称和根目录。
在获得文件后,请按照以下方式组织您自己的数据:
CoDeF │ └─── all_sequences │ └─── NAME1 └─ NAME1 └─ NAME1_masks_0 (optional) └─ NAME1_masks_1 (optional) └─ NAME1_flow (optional) └─ NAME1_flow_confidence (optional) │ └─── NAME2 └─ NAME2 └─ NAME2_masks_0 (optional) └─ NAME2_masks_1 (optional) └─ NAME2_flow (optional) └─ NAME2_flow_confidence (optional) │ └─── ...
使用教程
在完成上面的所有操作之后,我们此时已经可以正常使用该项目啦。
WSL系统目录
我们是可以直接在Windows
的资源管理器
中查看的,在CMD
中执行如下命令,这将会自动弹出WSL系统的脚本目录,
start \\wsl$\CoDeF\home\openai_wiki\CoDeF\scripts
在这个文件夹中,找到名为train_multi.sh的文件,用代码编辑器打开,你将会看到如下内容。
GPUS=0 NAME=scene_0 EXP_NAME=base ROOT_DIRECTORY="all_sequences/$NAME/$NAME" MODEL_SAVE_PATH="ckpts/all_sequences/$NAME" LOG_SAVE_PATH="logs/all_sequences/$NAME" MASK_DIRECTORY="all_sequences/$NAME/${NAME}_masks_0 all_sequences/$NAME/${NAME}_masks_1" FLOW_DIRECTORY="all_sequences/$NAME/${NAME}_flow" python train.py --root_dir $ROOT_DIRECTORY \ --model_save_path $MODEL_SAVE_PATH \ --log_save_path $LOG_SAVE_PATH \ --mask_dir $MASK_DIRECTORY \ --flow_dir $FLOW_DIRECTORY \ --gpus $GPUS \ --encode_w --annealed \ --config configs/${NAME}/${EXP_NAME}.yaml \ --exp_name ${EXP_NAME}
默认情况下,如果你已经正确配置模型与素材,执行该脚本即可出图,自动合成视频啦。
如果你想自定义一些素材,或者使用其它素材,那么需要在这里修改NAME
和EXP_NAME
的参数即可。
效果示例
总结
效果还算不错,就是配置过程繁琐,可能大家看着感觉挺简单的,但是踩坑的过程经常会一个问题卡好几天,之前有一些开源项目站长无论如何都无法在Windows中复现部署,而不得不放弃。
以后无法通过Windows安装部署的项目,都会通过WSL虚拟机的形式打包后分发给大家,如果哪里有写不明白的地方,可以在评论区提出相关问题。
老哥好,还是不太懂,我配置完成了,用的其中一个阳历scene_0的train_multi.sh也跑通了,得到了每2000个step存一次的checkpoint,然后呢?如何才能变成视频呢?
@Petrichor 样例
楼主好,我昨天Linux跑通,总结了一份简明教程,如下
0.将源视频转换为帧序列并生成遮罩(SAM-Track+模型(groundio+sam_h+deaot)
输入:源视频拷贝到assets目录,否则报错nonetype has atype,bert模型要联网到HF确认,有一定概率报错,可重试,在WEBUI中分割
输出:彩色遮罩帧序列,GIF,视频(tracking_results目录)
输出2:执行preproc_mask.py得到黑底白和白底黑遮罩(results目录)
1.提取视频帧序列(ffmpeg))
输入:源视频(.mp4)
输出:源视频帧序列(%05d.png)
2.0:训练光流提取模型(可选,默认sintel)
输入:RAFT数据集
输出:RAFT模型
2.1.从帧序列提取光流(RAFT+模型)
输入:源视频遮罩帧序列(_masks)
输出:光流遮罩帧信息(numpy–>npy格式)
3.训练基础模型(train.py)
输入:源视频帧序列+光流遮罩帧信息
输出:$EXP_NAME.ckpt(base.ckpt)
4.重建原视频并生成规范图片(train.py)
输入:源视频帧序列
输出:$NAME_$EXP_NAME_raw.mp4(results目录)
输出2:canonical_0.png
5.对规范图片进行风格化(SD图生图+controlnet t2ia_style_clipvision)
输入:canonical_0.png
输出:image.png,放置到$NAME_control目录中
6.用规范图片推理所有视频帧并合成风格视频(train.py)
输入:源视频帧序列+规范帧
输出:$NAME_$EXP_NAME_transformed.mp4(results目录,名称含有dual的是对比视频)
整个过程中也就第2步提取光流信息对显卡和显存的要求最高
@HawkingEye 总结的部分非常详尽,因为站长自身能力和时间的关系,对于每个开源项目的研究也并不是特别通透,感谢补充。
@HawkingEye 第三步的基础模型是一定要训练的吗?对于新的视频而言。
用的镜像方式
在执行最后一步时,报下方错误,求大佬解答
./scripts/test_multi.sh
Traceback (most recent call last): File “/home/openai_wiki/CoDeF/train.py”, line 19, in from models.implicit_model import TranslationField File “/home/openai_wiki/CoDeF/models/implicit_model.py”, line 4, in import tinycudann as tcnn File “/home/openai_wiki/miniconda3/envs/CoDeF/lib/python3.10/site-packages/tinycudann/__init__.py”, line 9, in from tinycudann.modules import free_temporary_memory, NetworkWithInputEncoding, Network, Encoding File “/home/openai_wiki/miniconda3/envs/CoDeF/lib/python3.10/site-packages/tinycudann/modules.py”, line 19, in raise EnvironmentError(“Unknown compute capability. Ensure PyTorch with CUDA support is installed.”) OSError: Unknown compute capability. Ensure PyTorch with CUDA support is installed.