CCPL Code Embedding

Embedding Code

1. 确认 VGG 特征输出接口

在 train_artistic.py 中,本地使用的是 scene.VGG.VGGEncoder,vgg_encoder(x) 会返回一个包含 .relu1_1、.relu2_1、.relu3_1、.relu4_1 四个属性的对象train_artistic。这些正好对应 CCPL 需要的多层特征。

2. 在文件开头导入 CCPL

在 train_artistic.py 顶部(紧跟其他 import 之后)加入:

diff Copy Edit from utils.loss_utils import cal_adain_style_loss, cal_mse_content_loss +from ccpl.net import CCPL, mlp 这里假设你已将 CCPL-main/net.py 里的 net.py 拷贝到 StyleGaussian/ccpl/net.py,并在项目根 init.py 中配置好 ccpl 包的导入路径。

3. 在训练函数开头实例化 CCPL

找到 training(…) 函数开始部分,在创建 vgg_encoder 之后,加入:

1
2
3
4
     vgg_encoder = VGGEncoder().cuda()
+    # —— CCPL 初始化:mlp 是 net.py 中导出的 MLP 列表
+    #     num_s、num_l、tau 可从命令行参数传入
+    ccpl_fn = CCPL(mlp=mlp).cuda()

4. 在训练主循环里计算 CCPL

找到如下位置:在渲染并计算完 content_loss 和 style_loss 之后train_artistic:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
        # style loss 和 content loss
        rendered_rgb_features = vgg_encoder(normalize_vgg(rendered_rgb.unsqueeze(0)))
        content_loss = cal_mse_content_loss(
            gt_image_features.relu4_1, rendered_rgb_features.relu4_1
        )
        style_loss = 0.
        for style_feature, image_feature in zip(
                style_img_features, rendered_rgb_features):
            style_loss += cal_adain_style_loss(style_feature, image_feature)

        loss = content_loss + style_loss * style_weight

在这里插入 CCPL 计算:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        # —— 在此处插入 CCPL
+       # 将四层特征整理为列表,注意 q 是 stylized,k 是 content
+       feats_q = [
+           rendered_rgb_features.relu1_1,
+           rendered_rgb_features.relu2_1,
+           rendered_rgb_features.relu3_1,
+           rendered_rgb_features.relu4_1,
+       ]
+       feats_k = [
+           gt_image_features.relu1_1,
+           gt_image_features.relu2_1,
+           gt_image_features.relu3_1,
+           gt_image_features.relu4_1,
+       ]
+       # start_layer/end_layer 控制 CCPL 作用的层数,比如只用 relu2~4
+       end_layer = len(feats_q)  # 4
+       start_layer = end_layer - args.num_l  # 如果 num_l=3,则 start_layer=1 (relu2)
+       ccp_loss = ccpl_fn(
+           feats_q     = feats_q,
+           feats_k     = feats_k,
+           num_s       = args.num_s,
+           start_layer = start_layer,
+           end_layer   = end_layer,
+           tau         = args.tau
+       )
+       # 将 CCPL 加权到总损失
+       loss = loss + args.ccp_weight * ccp_loss

5. 更新命令行参数解析

在 if name == “main”: 中的 parser.add_argument(…) 部分,添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
     parser.add_argument("--style_weight", type=float, default=10.)
     parser.add_argument("--content_preserve", action='store_true', default=False)
+    parser.add_argument("--ccp_weight", type=float, default=5.0,
+                        help="weight for Contrastive Coherence Preserving Loss")
+    parser.add_argument("--num_s", type=int, default=8,
+                        help="number of anchor samples per layer for CCPL")
+    parser.add_argument("--num_l", type=int, default=3,
+                        help="number of layers to apply CCPL (e.g., 3 means relu2_1~relu4_1)")
+    parser.add_argument("--tau", type=float, default=0.07,
+                        help="temperature for CCPL InfoNCE loss")

6. 确认其他训练脚本无需修改

train_reconstruction.py 与 train_feature.py 仅负责重建和嵌入特征,不涉及风格迁移,不需要加 CCPL。

高层 train.py 仅调度这三个阶段,也无需修改。

总结 确认位置:只要在 train_artistic.py 的风格化训练循环里计算内容/风格损失后,立即调用 CCPL 并加权即可。

检查对齐:所用 VGG 层 .relu1_1 ~ .relu4_1 与 CCPL 多层输入完全吻合。

参数可控:通过新增的命令行参数可以方便地调节 CCPL 的强度、层数、采样数和温度。

按照上面的步骤修改并运行,相信你就能在现有的 StyleGaussian 风格化训练流程里,正确地融入 CCPL,提升多视图和视频输出的一致性与稳定性。

Hyper-Parameter Code

in terminal:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
python train_artistic.py \
  --source_path datasets/Furiren \
  --wikiartdir datasets/wikiart \
  --ckpt_path output/Furiren/feature/default/chkpnt/feature.pth \
  --style_weight 10 \
  
  --ccp_weight 5.0 \
  --num_s 8 \
  --num_l 3 \
  --tau 0.07 \
  --exp_name default

And here is the original terminal parameters:

1
2
3
4
5
python train_artistic.py \
  -s datasets/train \
  --wikiartdir datasets/wikiart \
  --ckpt_path output/train/feature/default/chkpnt/feature.pth \
  --style_weight 10
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy