Skip to content

Commit 6b2e8ac

Browse files
Feat/utae (#1212)
* feat: add satellite panoptic segmentation example * feat: add satellite panoptic segmentation example * remove old files for re-upload * style: clean UTAE example entry files * fix: update train_semantic.py after cleanup * docs(UTAE): update example documentation * feat(UTAE): re-upload test_panoptic and test_semantic scripts * docs: update UTAE example documentation * docs: update UTAE example documentation * docs: update UTAE example documentation * feat(UTAE): add/update test_semantic & train_semantic * Update UTAE.md * feat(UTAE): update zh docs and LTAE backbone * feat(UTAE): re-upload scripts (post hook fixes) * feat(UTAE): re-upload 4 train/test scripts and zh example doc * feat(UTAE): re-upload files (post hook fixes) * feat(UTAE): post hook fixes for src & UTAE doc * chore: post-hook formatting * docs(UTAE): add UTAE entry to docs/index, README * feat(UTAE): post hook fixes for src & UTAE doc
1 parent 0bc7927 commit 6b2e8ac

23 files changed

+4519
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计
147147
| 交通预测 | [TGCN 交通流量预测](https://paddlescience-docs.readthedocs.io/zh-cn/latest/zh/examples/tgcn) | 数据驱动 | GCN & CNN | 监督学习 | [PEMSD4 & PEMSD8](https://paddle-org.bj.bcebos.com/paddlescience/datasets/tgcn/tgcn_data.zip) | - |
148148
| 遥感图像分割 | [UNetFormer 遥感图像分割](https://paddlescience-docs.readthedocs.io/zh-cn/latest/zh/examples/unetformer) | 数据驱动 | UNetFormer | 监督学习 | [Vaihingen](https://paperswithcode.com/dataset/isprs-vaihingen) | [Paper](https://github.com/WangLibo1995/GeoSeg) |
149149
| 生成模型| [图像生成中的梯度惩罚应用](https://paddlescience-docs.readthedocs.io/zh-cn/latest/zh/examples/wgan_gp)|数据驱动|WGAN GP|监督学习|[Data1](https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz)<br>[Data2](http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz)| [Paper](https://github.com/igul222/improved_wgan_training) |
150+
| 遥感图像分割 | [UTAE 遥感时序语义/全景分割](https://paddlescience-docs.readthedocs.io/zh-cn/latest/zh/examples/UTAE/) | 数据驱动 | UTAE | 监督学习 | [PASTIS](https://zenodo.org/records/5012942) | [Paper](https://arxiv.org/abs/2107.07933) |
150151
</details>
151152

152153
<details>

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
| 遥感图像分割 | [UNetFormer分割图像](./zh/examples/unetformer.md) | 数据驱动 | UNetformer | 监督学习 | [Vaihingen](https://paperswithcode.com/dataset/isprs-vaihingen) | [Paper](https://github.com/WangLibo1995/GeoSeg) |
165165
| 交通预测 | [TGCN 交通流量预测](./zh/examples/tgcn.md) | 数据驱动 | GCN & CNN | 监督学习 | [PEMSD4 & PEMSD8](https://paddle-org.bj.bcebos.com/paddlescience/datasets/tgcn/tgcn_data.zip) | - |
166166
| 生成模型| [图像生成中的梯度惩罚应用](./zh/examples/wgan_gp.md)|数据驱动|WGAN GP|监督学习|[Data1](https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz)<br>[Data2](http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz)| [Paper](https://github.com/igul222/improved_wgan_training) |
167+
| 遥感图像分割 | [UTAE 遥感时序语义/全景分割](./zh/examples/UTAE.md) | 数据驱动 | UTAE | 监督学习 | [PASTIS](https://zenodo.org/records/5012942) | [Paper](https://arxiv.org/abs/2107.07933) |
167168

168169
=== "化学科学"
169170

docs/zh/examples/UTAE.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# 农作物种植情况实时监测
2+
3+
!!! note
4+
5+
运行模型前请在 [PASTIS官网](https://zenodo.org/records/5012942) 中下载PASTIS数据集,并将其放在 `./UTAE/data/` 文件夹下。
6+
7+
=== "模型训练命令"
8+
9+
``` sh
10+
# 语义分割任务
11+
python train_semantic.py \
12+
--dataset_folder "./data/PASTIS" \
13+
--epochs 100 \
14+
--batch_size 2 \
15+
--num_workers 0 \
16+
--display_step 10
17+
# 全景分割任务
18+
python train_panoptic.py \
19+
--dataset_folder "./data/PASTIS" \
20+
--epochs 100 \
21+
--batch_size 2 \
22+
--num_workers 0 \
23+
--warmup 5 \
24+
--l_shape 1 \
25+
--display_step 10
26+
```
27+
28+
=== "模型评估命令"
29+
30+
``` sh
31+
# 语义分割任务
32+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/models/utae/semantic.pdparams -P ./pretrained/
33+
python test_semantic.py \
34+
--weight_file ./pretrained/semantic.pdparams \
35+
--dataset_folder "./data/PASTIS" \
36+
--device gpu
37+
--num_workers 0
38+
# 全景分割任务
39+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/models/utae/panoptic.pdparams -P ./pretrained/
40+
python test_panoptic.py \
41+
--weight_folder ./pretrained/panoptic.pdparams \
42+
--dataset_folder ./data/PASTIS \
43+
--batch_size 2 \
44+
--num_workers 0 \
45+
--device gpu
46+
```
47+
48+
| 预训练模型 | 指标 |
49+
|:--| :--|
50+
| [语义分割任务](https://paddle-org.bj.bcebos.com/paddlescience/models/utae/semantic.pdparams) | OA (Over all Accuracy): 86.7%<br>mIoU (mean Intersection over Union): 72.6% |
51+
| [全景分割任务](https://paddle-org.bj.bcebos.com/paddlescience/models/utae/panoptic.pdparams) | SQ (Segmentation Quality): 83.8<br>RQ (Recognition Quality): 58.9<br>PQ (Panoptic Quality): 49.7 |
52+
53+
## 背景简介
54+
对农作物种植分布和生长状态进行高效、精准的监测,是现代智慧农业和粮食安全领域的核心需求。传统的人工勘察方法耗时费力,而利用单时相卫星影像进行分析的方法,难以应对云层遮挡问题,也无法捕捉作物在整个生长周期中的动态变化规律。
55+
56+
卫星图像时间序列(Satellite Image Time Series, SITS)技术为解决这一难题提供了新的途径。通过持续采集同一区域在不同时间的多光谱影像,SITS数据蕴含了作物从播种、出苗、生长、成熟到收割的全过程光谱和纹理信息。然而,SITS数据具有​​时序长、维度高、时空关联性强​​等特点,如何从中高效地提取特征并进行精确的像素级分类(语义分割)是一项重大的技术挑战。
57+
58+
本项目基于模型​​U-TAE(U-Net Temporal Attention Encoder)​​,利用​​PaddlePaddle深度学习框架​​进行实现,旨在构建一个端到端的解决方案,对​​PASTIS数据集​​中的卫星影像时间序列进行语义分割,从而实现对多种农作物种植情况的自动化、高精度识别与监测。该技术可广泛应用于农业资源调查、产量预估、灾害评估等领域,具有重要的实用价值。
59+
60+
## 模型原理
61+
62+
本章节仅对U-TAE的模型原理进行简单介绍,详细的理论推导请参考论文:[Panoptic Segmentation of Satellite Image Time Series with Convolutional Temporal Attention Networks](https://arxiv.org/abs/2107.07933)
63+
64+
### 1. 整体结构
65+
66+
UTAE(U-Net Temporal Attention Encoder)采用编码器-解码器架构,专为卫星图像时间序列语义分割设计:
67+
68+
- **编码器**:使用轻量化的ResNet-18,提取单时相的空间特征。
69+
- **解码器**:集成U-TAE模块,利用时间注意力机制聚合多时相的全局上下文信息。
70+
- **输出**:生成与输入相同分辨率的像素级类别概率图。
71+
72+
![U-TAE Architecture](https://paddle-org.bj.bcebos.com/paddlescience/docs/utae/utae.png)
73+
74+
### 2. 时间注意力机制(Temporal Attention)
75+
76+
对于长度为 $T$ 的帧序列,UTAE在解码阶段为每一帧计算帧间相似度权重,实现自适应的时序信息聚合:
77+
78+
- **Query**:当前帧的特征 $\mathbf{Q}$
79+
- **Key / Value**:全部帧的特征 $\mathbf{K}, \mathbf{V}$
80+
81+
计算步骤如下:
82+
83+
$$
84+
\text{权重} = \text{Softmax}(\mathbf{Q} \cdot \mathbf{K}^\top)
85+
$$
86+
87+
然后,利用这些权重对全部帧的特征进行加权求和得到聚合特征:
88+
89+
$$
90+
\mathbf{F}_{\text{agg}} = \sum_{t=1}^{T} \alpha_t \mathbf{V}_t, \quad \text{其中} \quad \alpha_t = \text{Softmax}(\mathbf{Q} \cdot \mathbf{K}_t^\top)
91+
$$
92+
93+
该机制能自动抑制云层、阴影等低质量帧,提升作物边界的清晰度。
94+
95+
### 3. 全局-局部注意力块(GLTB)
96+
97+
每个解码器层包含两个并行分支:
98+
99+
- **全局分支**:采用多头自注意力(Multi-Head Self-Attention)机制,建模田块级的长程依赖关系。
100+
101+
- **局部分支**:使用 $3 \times 3$ 深度可分离卷积,注重边缘和细节信息的保留。
102+
103+
两个分支的输出通过逐元素相加融合,既保持全局上下文,又保留局部纹理细节。
104+
105+
### 4. 实时推理优化
106+
107+
为实现高效实时推理,模型采用以下优化策略:
108+
109+
- **轻量级骨干**:ResNet-18,参数量小于12M。
110+
- **帧间共享权重**:在同一序列中,Key和Value只计算一次,避免重复计算。
111+
- **滑动窗口推理**:将大图划分为多个块进行逐块推理,确保显存占用恒定。
112+
113+
## 数据集介绍
114+
115+
PASTIS数据集,该数据集由2433个 $10\times128\times128$ 形状的多光谱图像序列组成。每个序列包含2018年9月至2019年11月之间的38至61个观察点,总计超过20亿像素。获取间隔时间不均匀,平均为5天。这种缺乏规律性的现象是由于卫星数据提供商对大量云层覆盖的采集进行了自动过滤。该数据集覆盖4000多平方公里,图像来自法国四个不同地区,气候和作物分布多样。
116+
数据集可通过 [PASTIS官网](https://zenodo.org/records/5012942) 下载。
117+
118+
## 模型实现
119+
120+
### 模型构建
121+
122+
本案例基于 UTAE(U-TAE) 实现,用 PaddleScience 封装如下:
123+
124+
``` py linenums="12" title="examples/UTAE/src/backbones/utae.py"
125+
--8<--
126+
examples/UTAE/src/backbones/utae.py:12:177
127+
--8<--
128+
```
129+
130+
## 可视化结果
131+
在 PASTIS 数据集上,本案例复现了全景分割预测与语义分割预测的可视化结果如图所示:
132+
133+
![rusult](https://paddle-org.bj.bcebos.com/paddlescience/docs/utae/rusult.png)
134+
135+
(a)原始图像 (b)标注(真实标签)(c) 全景分割预测 (d) 语义分割预测
136+
137+
上图展示了 PASTIS 数据集上的农田地块分割结果。在图中用不同颜色表示不同的地块。绿色圈出的位置代表大块地被错误识别为单一地块;红色圈出的位置代表很多细长地块未被正确检测;蓝色圈出的位置展示了 全景分割优于语义分割的情况。模型在区域边界检测方面具有较好表现,尤其在复杂边界的恢复上有所优势。但在面对细长、破碎或复杂地块时,仍然存在挑战,容易导致置信度下降或检测失败。
138+
## 参考文献
139+
140+
- U-TAE 原论文:[Panoptic Segmentation of Satellite Image Time Series with Convolutional Temporal Attention Networks](https://arxiv.org/abs/2107.07933)
141+
- 源代码实现:[https://github.com/VSainteuf/utae-paps](https://github.com/VSainteuf/utae-paps)
142+
- 数据集与基准:[https://github.com/VSainteuf/pastis-benchmark](https://github.com/VSainteuf/pastis-benchmark)

0 commit comments

Comments
 (0)