StableVITON模型论文及训练报错记录
涉及网站
1、文献下载链接
2、Github项目链接
3、Demo快乐玩耍链接
4、报错参考文章较多,直接放在文章当中
论文阅读
一、模型基本框架
1、模型的主要贡献
(1)提出了StableVITON模型,已知的第一个建立在diffusion预训练模型基础上的,不依赖于外部卷曲网络的,端到端虚拟试衣模型。
(2)提出使用零交叉注意力层,利用空间编码器输出的服装特征学习服装与人物之间语义一致性
(3)提出新的注意力总变异损失(attention total variation loss),并在训练过程中应用增强,更好地保持服装细节
(4)StableVITON在虚拟试衣项目上在定量和定性指标上表现优于现有的虚拟试衣模型,展现出在实际应用领域的前景
二、模型框架
基于Diffusion预训练模型的基本框架输入包括①扣去服装区域的潜空间人物图像 ②服装mask图 ③人物姿势图 ④服装图。在StableVITON模型中,分为两个编码器,下面的编码器将t时刻噪声图、扣去服装区域的潜空间人物图像、服装mask图以及人物姿势图串接作为输入,经过卷积层后输入到SD编码器中。由图例可以,该编码器在训练过程中不对参数进行更新。
上面一个编码器为StableVITON的主要贡献之一,该编码器参考了SD编码器的原始参数,经过卷积层处理后的潜空间中服装图像与经过CLIP图像编码器处理的服装图像一起输入到编码器当中,在训练过程中对编码器的参数进行更新,以便更好地学习到服装的细节,输出的服装特征(c1,c2,c3…)依次输入到解码器中的零交叉注意力层当中。
零交叉注意力层将服装特征与人物特征进行融合,具体结构如右图所示。初始时decoder中特征经过多头自注意层处理,然后作为Q值输入到多头交叉注意力层中,服装特征作为K、V值,得到的特征再经过前馈网络以及线性层处理,得到下一步处理的图像。训练过程中ATV函数设置以及增强应用请参考文章相应内容。
经过解码器处理后,得到t-1时刻的噪声图,重复上述过程,直到降噪得到0时刻的噪声图。模型在VITONHD、DressCode、SHHQ-1.0数据集以及网络抓取图片中训练效果如下:
模型训练
一、模型训练代码
1、项目地址:Github项目指路
2、具体训练过程阅读项目Readme文档
3、训练环境提示:在以下的叙述中,模型训练及推理过程均在服务器及vs code中进行,若有出入请另外查询相关资料
二、模型训练过程记录
1、环境配置
(1)下载代码
先导航(cd)到目标下载地址,然后输入指令:git clone https://github.com/rlawjdghek/StableVITON
(2)创建虚拟换环境
a、指令:
conda create --name StableVITON python=3.10 -y
conda activate StableVITON
b、报错:
① conda: command not found
- 解决方法:重新安装anaconda,下载网址
# 下载Anaconda3
cd /tmp
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh # 选择自己需要的版本即可
# 安装Anaconda3
bash Anaconda3-2023.09-0-Linux-x86_64.sh
# 激活
source ~/.bashrc
# 检查是否成功安装
conda --version
我按照以上步骤操作之后仍然出现了conda: command not found的报错,查询了相关资料(参考文章),编辑bashrc文件后成功查询到conda版本。
然后创建虚拟环境,指令为conda activate StableVITON_env,我在这一步时出现警告需要先进行conda init,在输入指令后出现no change … no action take。重新查询系统是否认可conda安装版本,输入conda --version,出现conda版本,重新激活bashrc文件,输入source ~/.bashrc,在输入前方出现(base)字样,说明已经成功激活虚拟环境,重新激活StableVITON_env即可。
② xxx项目已在xx路径下安装,但该路径不在PATH中,报错/警告具体如下所示:
WARNING: The script lit is installed in '.../.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
- 解决方法(永久添加路径)
nano ~/.bashrc # 打开bashrc文件
# 打开后,在弹出文件后添加以下语句
export PATH="$HOME~/.local/bin:$PATH"
# 注意其中的~/.local/bin用你服务器上的具体地址替代
# 添加完毕后,点击ctrl+o保存文件,然后enter,再ctrl+x即可
(3)下载相关库
a、指令
pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117
pip install pytorch-lightning==1.5.0
pip install einops
pip install opencv-python==4.7.0.72
pip install matplotlib
pip install omegaconf
pip install albumentations
pip install transformers==4.33.2
pip install xformers==0.0.19
pip install triton==2.0.0
pip install open-clip-torch==2.19.0
pip install diffusers==0.20.2
pip install scipy==1.10.1
conda install -c anaconda ipython -y
b、报错
- 解决方式:升级pip,输入指令pip install --upgrade pip
2、下载checkpoint & dataset
(1)下载checkpoint(权重)指令 & 报错
在Github项目中的Readme文件中给出了checkpoint以及dataset的链接,但是checkpoint给出的链接是Onedrive分享模式,得到的链接不是URL格式,所以如果直接使用curl进行下载会出现forbidden的报错警告。参考以下文章(Linux命令行下载OneDrive分享链接中的文件),实测有效,具体操作如下:
- 在Firefox中打开Github中给出的下载链接,打开开发者界面(浏览器右上角“应用程序菜单”→“更多工具”→“Web开发者工具”)
- 选择网络栏目,选择需要下载的文件(单个文件)并下载(由于本地计算机内存有限,下载后没多久就选择了暂停,实测不影响URL链接的获取)
- 在开发者界面找到download.aspx/?…. 对应链接,右键选择cURL(POSIX)格式复制
- 粘贴到服务器终端,并在后面加上“ --output file_name.xxx”,成功后形式大概如下(注意在下载之间,先cd到目标地址)
(图片来自于上述参考文章,如果对于具体操作有问题可以直接访问参考文章,有详细的操作方式):
(2)下载dataset(数据集)指令 & 报错
Readme文件中给出了VITON-HD数据集的下载地址,如果直接使用wget指令进行下载,指令如下:
wget -O zalando-hd-resized.zip "https://www.dropbox.com/scl/fi/xu08cx3fxmiwpg32yotd7/zalando-hd-resized.zip?rlkey=ks83mdv2pvmrdl2oo2bmmn69w&e=3&dl=0"
输入指令后发现出现报错,查询资料有一种解决方式如这篇文章展示,但是我尝试过后无法解决,仍然出现couldn’t connect to server的报错。由于文件较小(4.5G),所以直接下载到本地再传到服务器上。本地文件传送到服务器上指令,具体解决方式见这篇文章,实测有效。
上传到服务器后,需要对文件进行解压缩,指令如下:
unzip file_name.zip -d destination_path
注意此处的destinatino_path最好放在./StableVITON/DATA/zalando-hd-resized路径下(需要自己创建文件夹),否则后续推理可能出现报错。
3、模型推理
由于此前已经下载了模型的checkpoint,也即训练权重,因此暂时不从头训练模型,先尝试进行推理。
按照Readme文件指示,将inference.sh文件中paired对应部分输入到终端(注意提前创建输出图片存储文件夹,替换save_dir后的<save directory>)。观察paired部分,还有<model weight path>部分需要替代为模型权重地址,但是我们下载到的checkpoint中有3个文件(VITONHD_VAE_finetuning.ckpt、VITONHD.ckpt、VITON_PBE_pose.ckpt),看名称第一个是模型微调的参数,第二个是模型训练参数,第三个是姿势 or 测试相关的参数,推测是第二个ckpt文件,完成替代后,将希望推理的图片部分(paired / unpaired / paired repaint / unpaired repaint)的inference.sh部分输入到服务器终端(注意输入包括“–”,如果不输入前面的两个减号将出现报错),然后等待推理完成即可。
补充笔记
1、剪切文件
指令:mv file_name destination_path
注意要先导航cd到文件所在目录
2、启动虚拟环境
直接使用“conda activate env_name”指令可能出现“conda: command not found”的报错,可以先输入“source ~/.bashrc”,开启base环境后再激活env_name虚拟环境。
3、暂停推理
指令:Ctrl +Z
启动推理:fp
如果中间进行了其他活动,可以只用一下方式继续运行推理过程:
# 查看中止进程编号
jobs
# 恢复运行,number为查询到的中止进程编号
fg number
4、中止推理
指令:Ctrl+C