wilgomoreira/c2f-sl-multispectral-segmentation
GitHub: wilgomoreira/c2f-sl-multispectral-segmentation
一个用于多光谱葡萄园分割的校准级联软标签生成框架,通过两阶段温度缩放校准提升分割精度和置信度可靠性。
Stars: 0 | Forks: 0
# C2F-SL:一种用于多光谱分割软标签生成的校准级联框架
本仓库包含 **C2F-SL** 的实验代码,这是一种
在多光谱分割中用于将硬监督替换为
生成器派生软目标的校准感知级联框架。
此代码附属于以下会议论文:
C2F-SL 研究了校准的软标签生成与最终输出校准如何相互作用。该框架首先在硬
标注上训练生成器模型,校准其验证 logits,将校准后的
概率作为最终模型的软目标,然后对
最终模型输出应用独立的事后校准步骤。

## 方法概述
C2F-SL 包含三个阶段:
1. **生成器训练**:在原始硬
标注上训练分割模型。
2. **校准的软标签生成**:在
生成器验证 logits 上拟合事后校准器,并为
训练图像生成每像素的软目标。
3. **最终模型训练与校准**:使用
生成的软目标训练第二个模型,然后
在验证集上校准其输出概率。
在论文实验中,两个校准阶段均使用了**Temperature Scaling**。
生成器和最终模型共享相同的基于 ResNet34 的架构,以便
将观察到的差异归因于监督和校准
pipeline,而不是模型容量。
## 仓库结构
```
configs/ YAML experiment configurations
scripts/ Command-line entry points
src/ Data loading, models, training, calibration, and evaluation
requirements.txt
README.md
```
以下文件夹是在实验过程中生成的,并被 Git 忽略:
```
checkpoints/ Model weights
logs/ Training logs
results/ Metrics, summaries, and calibration metadata
soft_labels/ Cached generated soft-label arrays
splits/ Reused train/validation/test split files
```
## 环境
创建环境并安装依赖项:
```
conda create -n c2f-sl python=3.10
conda activate c2f-sl
pip install -r requirements.txt
```
如果使用 CUDA,请在运行实验之前安装与您的 CUDA 版本匹配的 PyTorch 版本。
## 数据集布局
此仓库不包含数据集。论文中使用的葡萄园数据派生自原始葡萄园分割研究发布的 **GREEN AI** 数据集:
在本地准备好切片后,在配置文件中设置数据集根目录:
```
dataset:
base_path: /path/to/greenal_split
```
预期布局:
```
greenal_split/
qbaixo/
altum/
images/*.tif
masks/*.tif
esac/
altum/
images/*.tif
masks/*.tif
valdoeiro/
altum/
images/*.npy
masks/*.npy
```
实验使用来自 Micasense Altum
传感器的 5 通道多光谱切片。切片被调整为 `224 x 224` 以用于训练和评估。
论文中报告的数据集统计信息:
| 数据集 | 图像 | 前景 | 背景 | 不平衡性 |
|---|---:|---:|---:|---|
| VALDOEIRO | 150 | 7.5% | 92.5% | 严重 |
| QBAIXO | 120 | 18.6% | 81.4% | 中等 |
| ESAC | 189 | 23.3% | 76.7% | 轻微 |
## 运行 C2F-SL
论文的主要配置是 `configs/adaptive_smoothing.yaml`。该脚本
名称是历史遗留的;使用配置中的默认中性平滑设置,
以下命令将运行论文中使用的 C2F-SL pipeline。
```
python3 scripts/run_adaptive_smoothing.py \
--config configs/adaptive_smoothing.yaml \
--datasets valdoeiro qbaixo esac \
--calibrator temperature \
--calibrate-student \
--student-calibrator temperature \
--run-name-prefix c2f_sl
```
每个数据集都会在 `results/` 下创建一个结果目录。最重要的
文件是:
```
metrics.json Full metric payload
metrics.csv One-row scalar metric table
config.json Effective configuration
calibrator.json Generator calibration metadata
student_calibrator.json Final model calibration metadata
training_logs.json Training histories
```
可用时,数据集划分和生成的软标签会被重复使用。要强制
重新生成软标签,请删除 `soft_labels/` 下相应的
`.npy` 文件。
## 组件消融实验
论文表格分离了四个组件:硬标签训练、输出
校准、原始生成器软标签、校准的生成器软标签,以及
完整的 C2F-SL pipeline。
### 硬标签
硬标签基线对应于在
原始标注上训练的生成器/教师模型。它作为 C2F-SL 运行的一部分进行训练,并
通过其 checkpoint 复用。
### 硬标签 + 输出校准
仅使用事后校准评估训练好的生成器:
```
python3 scripts/run_teacher_calibrated_eval.py \
--config configs/adaptive_smoothing.yaml \
--datasets valdoeiro qbaixo esac
```
### 软标签,原始生成器
使用原始生成器概率训练最终模型:
```
python3 scripts/run_adaptive_smoothing.py \
--config configs/adaptive_smoothing.yaml \
--datasets valdoeiro qbaixo esac \
--no-calibration \
--run-name-prefix raw_generator
```
### 软标签,校准的生成器
使用温度校准的生成器软标签训练最终模型,
不进行最终输出校准:
```
python3 scripts/run_adaptive_smoothing.py \
--config configs/adaptive_smoothing.yaml \
--datasets valdoeiro qbaixo esac \
--calibrator temperature \
--run-name-prefix calibrated_generator
```
### C2F-SL
在温度校准的生成器软标签上进行训练,并校准最终
模型输出:
```
python3 scripts/run_adaptive_smoothing.py \
--config configs/adaptive_smoothing.yaml \
--datasets valdoeiro qbaixo esac \
--calibrator temperature \
--calibrate-student \
--student-calibrator temperature \
--run-name-prefix c2f_sl
```
## 结果
最终定稿的测试集结果:
| 方法 | VAL IoU | VAL ECE | VAL Brier | QBAIXO IoU | QBAIXO ECE | QBAIXO Brier | ESAC IoU | ESAC ECE | ESAC Brier |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 硬标签 | 0.689 | 0.069 | 0.0290 | 0.500 | 0.143 | 0.0965 | 0.753 | 0.055 | 0.0499 |
| 硬标签 + 输出校准 | 0.689 | 0.048 | 0.0293 | 0.500 | 0.144 | 0.0963 | 0.753 | 0.053 | 0.0501 |
| 软标签,原始生成器 | **0.720** | 0.068 | **0.0245** | 0.524 | 0.141 | 0.0858 | **0.761** | 0.047 | **0.0480** |
| 软标签,校准的生成器 | 0.708 | 0.053 | 0.0246 | **0.549** | 0.129 | **0.0752** | 0.759 | 0.044 | **0.0480** |
| **C2F-SL (ours)** | 0.708 | **0.032** | 0.0255 | **0.549** | **0.099** | 0.0754 | 0.759 | **0.038** | 0.0485 |
三个葡萄园数据集的宏平均:
| 方法 | 平均 IoU | 平均 ECE | 平均 Brier |
|---|---:|---:|---:|
| 硬标签 | 0.647 | 0.089 | 0.0585 |
| C2F-SL | 0.672 | 0.056 | 0.0498 |
结果表明这两个校准阶段起到了互补作用:
软标签监督可以改变学习到的分割模型,而最终
输出校准则最大程度地降低了 ECE。
来自 QBAIXO 的定性示例:

## 可复现性说明
- 默认种子:`42`
- 架构:ResNet34 编码器与轻量级上采样解码器
- 输入通道:`5`
- 图像尺寸:`224 x 224`
- 训练 epoch:`50`
- 优化器:Adam
- 学习率:`1e-4`
- Batch size:`8`
- 评估阈值:`0.5`
- ECE 区间:`15`
## 引用
如果您使用了此代码,请引用 C2F-SL 论文。最终会议
参考文献将在可用时添加。
标签:凭据扫描, 图像分割, 多光谱图像, 模型校准, 深度学习, 计算机视觉, 逆向工具, 遥感图像