Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CPANet-Jittor

📚 目录


📖 项目简介

本项目是CPANetJittor 框架下的复现版本,面向 Few-Shot Semantic Segmentation 任务,提供了可复现的训练、测试和消融实验。


⚙ 环境配置

CUDA==11.3
python==3.8.10
jittor==1.3.10

⚙ 数据集下载

您可以在 https://pan.baidu.com/s/1MQ5SwmDvPj-m3HxwmCTV3A?pwd=kezh 上下载数据集FSSD-12

⚙ 运行脚本

python train.py --config config/SSD/fold0_vgg16.yaml
python train.py --config config/SSD/fold0_resnet50.yaml

⚙ 实验复现

由于原作者未公开其 ResNet 变体 Backbone,本实验统一采用 ImageNet 预训练的标准 ResNet
在消融实验中,为了控制变量并便于对比,均以 VGG-16 作为 Backbone。
所有实验均基于 1-shot、fold-0 数据集进行训练与评测。

受模型架构与数据集规模限制,实验结果存在一定波动:

  • VGG-16 Backbone 下,mIoU 通常在 0.52–0.54 区间浮动
  • ResNet-50 Backbone 下,性能略低于原论文,可能与缺少其自定义 ResNet 变体有关

📊 Backbone 对比实验

🔹 Jittor 版本(本复现)

Backbone Method mIoU (1-shot) FB-IoU (1-shot)
VGG-16 Ours 54.04 72.43
ResNet-50 Ours 58.07 74.42

🔹 PyTorch 版本(原论文结果)

Backbone Method mIoU (1-shot) FB-IoU (1-shot)
VGG-16 Ours 50.80 69.10
ResNet-50 Ours 66.00 76.10

可以看出,在 VGG16 Backbone 下,Jittor 版本的性能与原论文基本一致;而在 ResNet50 上,mIoU 略低,可能与原作者自定义的 ResNet 变体有关。


📉 Loss 曲线

训练集 Loss

Train Loss

测试集 Loss

Test Loss

可以看到,在 VGG16 Backbone 下,Jittor 版本虽然在训练集上loss较高,但在测试集上loss却略低于Pytorch版,两者训练是基本等价的。

⚙ 消融实验

本部分对 CPPSASSA 三个核心模块进行了消融分析,以验证各模块对模型性能的贡献。

  • CPP:用掩码全局平均池化(GAP)替代。
  • SA:直接移除SA模块。
  • SSA:用全卷积解码器替代。

📊 模块消融实验结果(1-Shot)

🔹 Jittor 版本(VGG-16 Backbone)

CPP SA SSA mIoU (1-shot) FB-IoU (1-shot)
42.30 64.26
49.31 69.41
52.89 72.19
49.44 68.23
53.64 71.27
51.84 70.91
54.04 72.43

🔹 PyTorch 版本(原论文,ResNet-50 Backbone)

CPP SA SSA mIoU (1-shot) FB-IoU (1-shot)
57.70 71.40
58.30 72.60
65.80 75.90
59.30 71.90
66.00 76.10

📌 结果分析

  • SSA 模块 对提升性能作用显著,单独加入时 mIoU 有明显提升。
  • CPP 模块 在 Jittor (VGG-16) 下单独效果有限,但与其他模块结合有明显提升。
  • SA 模块 与 CPP 在 PyTorch (ResNet-50) 下结合效果突出.
  • 三模块联合表现最佳,体现模块间良好协同作用。

⚙ 参数消融

超参数 k 用于控制总损失中主损失(L_main)与辅助损失(L_aux)的权重比。
本节比较了不同 k 值(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)下模型的最优性能表现。


📊 不同 k 值下的模型性能(1-Shot)

🔹 Jittor 版本(VGG-16 Backbone)

k mIoU (1-shot) FB-IoU (1-shot)
0.0 48.58 68.34
0.2 49.68 69.95
0.4 54.04 72.43
0.6 48.29 70.09
0.8 50.91 69.66
1.0 49.79 69.06

🔹 PyTorch 版本(原论文,ResNet-50 Backbone)

k mIoU (1-shot) FB-IoU (1-shot)
0.0 61.80 72.90
0.2 65.20 74.80
0.4 66.00 76.10
0.6 63.40 74.80
0.8 62.80 74.50
1.0 63.80 74.70

模型训练参数

本项目中得到的所有模型训练参数,包括基准实验与消融实验,均已整理完毕。您可通过以下链接查看并下载。

⚙ 遇到的问题

作为国内开源的深度学习框架,Jittor 的 API 与 PyTorch 等主流框架存在不少差异。整体来看,这些差异通过官方文档学习可以较快掌握和解决。

我在复现过程中遇到的最大挑战是环境配置

最初,我使用 Python 3.7 + CUDA 12.6 环境,Jittor 自带测试用例和我实现的简单网络均能通过测试且正常收敛

然而,复现论文模型时出现训练异常,模型几乎不收敛且所有像素预测趋于同一值。

起初怀疑是代码逻辑问题,反复查阅 GitHub issue、Jittor 论坛、CSDN 文章,并借助 AI 辅助排查。面对逻辑无误的代码,反复调试一周未果。

最终通过重新配置环境(Python 3.8 + CUDA 11.3)解决了问题,训练恢复正常。


⚙ 总结

本次实验基于 Jittor 框架 成功复现了 CPANet 的网络结构及训练流程。虽然整体实现完整,但复现效果与原论文仍存在一定差距,主要体现在性能指标上。

环境配置的重要性

对于新兴且相对年轻的深度学习框架(如 Jittor),环境配置尤为关键。
应当严格遵循官方推荐的主流环境(Python 版本、CUDA 版本、依赖库版本),避免因环境差异导致难以定位的异常。

收获与成长

  • 深入理解了 CPANet 的模块设计与实现思路,深化了对 Few-Shot 语义分割关键技术的认识。
  • 掌握了 Jittor 框架的基础用法,包括数据加载、模型定义、训练与测试流程,熟悉了与 PyTorch 不同的接口及调试技巧。
  • 积累了复现深度学习模型的宝贵实践经验,为未来相关研究和工程项目奠定了坚实基础。

本实验虽有不足,但为基于 Jittor 框架复现复杂模型提供了宝贵经验与参考,期望能帮助更多研究者顺利开展相关工作。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages