通过 Docker 安装
您可以简单地从 docker hub 中提取 docker 镜像,其中包含所有必需的库和包:
docker pull yaelvinker/clipascene
docker run --name clipascene -p 8888:8888 --gpus all -it yaelvinker/clipascene /bin/bash
现在您应该有一个正在运行的容器。在容器内,转到 /home 目录,然后克隆存储库:
cd /home
git clone https://github.com/yael-vinker/SceneSketch.git
cd SceneSketch/
接下来,下载 U2Net 权重:
wget https://huggingface.co/akhaliq/CLIPasso/resolve/main/u2net.pth --output-document=U2Net_/saved_models/u2net.pth
和 LAMA 模型:
cd lama/
curl -L $(yadisk-direct https://disk.yandex.ru/d/ouP6l8VJ0HpMZg) -o big-lama.zip
unzip big-lama.zip
现在您已准备就绪,可以进入下一阶段(运行演示)。
运行演示
图像预处理
输入场景图像应以png 格式提供,并应位于“./target_images/scene”下。
请提供尺寸合理的方形图像(最大~500px)。
为了获得最佳性能,我们将场景图像分为前景和背景,并分别绘制草图。
如果您希望在不分割的情况下应用我们的方法,您可以进入下一阶段(开始绘制草图)。
否则,运行:
python preprocess_images.py
该脚本将:
-
对“./target_images/scene”下的所有场景图像应用我们的预处理。
-
使用 U2Net 生成掩模图像(保存在“target_images/scene/<im_name>_mask.png”下)
-
使用 LAMA 生成由蒙版引导的修复背景图像(保存在“target_images/background/<im_name>_mask.png”下)
请注意,您还可以直接使用带有“U2Net”选项的LAMA 演示,只需在“target_images/background/<im_name>_mask.png”下找到生成的修复背景即可。
开始素描
正如论文中提到的,我们首先生成第一行(保真度轴),然后对于该行中的每个草图,我们沿着简单轴生成相应的简化草图。
要运行此管道,请使用“run_all.py”脚本(在脚本下),只需运行:
python scripts/run_all.py --im_name <im_name>
例如,在芭蕾舞女演员图像上:
python scripts/run_all.py --im_name "ballerina"
生成的草图将以 SVG 和 png 格式保存到“results_sketches/<im_name>”文件夹中。
如果您想并行运行前景和背景草图(如果您有多个 GPU,建议这样做),您可以简单地使用以下命令单独运行它们:
python scripts/run_background.py --im_name "ballerina"
和:
python scripts/run_foreground.py --im_name "ballerina"
脚本完成运行后(这可能需要几个小时,为了更快的版本和图层选择,请参阅下面的“使用脚本”),您可以使用以下方式可视化结果:
python scripts/combine_matrix.py --im_name <im_name>
“ballerina”图像的结果矩阵和 SVG 在“results_sketches/ballerina”下提供
玩转脚本
如果您想运行我们的方法以获得特定的保真度或简单性级别,您可以使用“脚本”下的专用脚本,具体如下:
generate_fidelity_levels.py
- 在给定的保真度层生成单个草图。
对于后台,运行:python scripts/generate_fidelity_levels.py --im_name <im_name> --layer_opt <desired_layer> --object_or_background "background"
python scripts/generate_fidelity_levels.py --im_name <im_name> --layer_opt <desired_layer> --object_or_background "object" --resize_obj 1
run_ratio.py
- 针对给定的保真度级别生成一列简化草图。
对于后台,运行:python scripts/run_ratio.py --im_name <im_name> --layer_opt <desired_layer> --object_or_background "background" --min_div <step_size>
python scripts/run_ratio.py --im_name <im_name> --layer_opt <desired_layer> --object_or_background "object" --min_div <step_size> --resize 1
提高效率的技巧
-
请注意,所提供的脚本仅假定一个 GPU,因此所有进程都按顺序运行。
如果您有多个 GPU,则可以并行运行背景和前景草图。(使用脚本/run_background.py、脚本/run_foreground.py) -
如果您在多个 GPU 上运行,您还可以通过将特定层指定为“scripts/run_ratio.py”,跨不同层并行生成简单轴
-
此外,您可以在“scripts/generate_fidelity_levels.py”中使用更少的步骤 - 目前 num_iter 设置为 1500,但是,在大约 500 个步骤之后,您已经可以获得相当合理的规模。
-
您还可以通过修改“get_ratios_dict”中的“num_ratios”参数,沿简单轴生成更少的级别。