本项目是CPANet在 Jittor 框架下的复现版本,面向 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 | Method | mIoU (1-shot) | FB-IoU (1-shot) |
|---|---|---|---|
| VGG-16 | Ours | 54.04 | 72.43 |
| ResNet-50 | Ours | 58.07 | 74.42 |
| 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 变体有关。
可以看到,在 VGG16 Backbone 下,Jittor 版本虽然在训练集上loss较高,但在测试集上loss却略低于Pytorch版,两者训练是基本等价的。
本部分对 CPP、SA、SSA 三个核心模块进行了消融分析,以验证各模块对模型性能的贡献。
- CPP:用掩码全局平均池化(GAP)替代。
- SA:直接移除SA模块。
- SSA:用全卷积解码器替代。
| 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 |
| 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 | 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 |
| 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 框架复现复杂模型提供了宝贵经验与参考,期望能帮助更多研究者顺利开展相关工作。

