Skip to content

Commit

Permalink
fix merging
Browse files Browse the repository at this point in the history
  • Loading branch information
geoyee committed Jul 2, 2021
2 parents 7275c76 + d2c3ad6 commit 4dd387b
Show file tree
Hide file tree
Showing 18 changed files with 587 additions and 460 deletions.
19 changes: 10 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
# PdRSCD

[![Python 3.7](https://img.shields.io/badge/python-3.7+-yellow.svg)](https://www.python.org/downloads/release/python-370/) [![Paddle 2.1.0](https://img.shields.io/badge/Paddle-2.1.0-red.svg)](https://www.python.org/downloads/release/python-370/) [![License](https://img.shields.io/badge/license-Apache%202.0-orange.svg)](LICENSE) ![GitHub Repo stars](https://img.shields.io/github/stars/geoyee/PdRSCD)
[![Python 3.7](https://img.shields.io/badge/python-3.7+-yellow.svg)](https://www.python.org/downloads/release/python-370/) [![Paddle 2.1.0](https://img.shields.io/badge/paddle-2.1+-red.svg)](https://www.python.org/downloads/release/python-370/) [![License](https://img.shields.io/badge/license-Apache%202.0-orange.svg)](LICENSE) ![GitHub Repo stars](https://img.shields.io/github/stars/geoyee/PdRSCD)

PdRSCD(PaddlePaddle Remote Sensing Change Detection)是一个基于飞桨PaddlePaddle的遥感变化检测的项目,pypi包名为ppcd。可以像PaddleSeg一样快速完成变化检测任务。目前项目仍在开发中
PdRSCD(PaddlePaddle Remote Sensing Change Detection)是一个基于飞桨PaddlePaddle的遥感变化检测的项目,pypi包名为ppcd。目前0.2,版本,最新支持图像列表输入的训练和预测,如多期影像、多源影像甚至多期多源影像。可以快速完成分割、变化检测等任务

## 在线项目实例

1. [【ppcd快速入门】经典LEVIR数据集变化检测](https://aistudio.baidu.com/aistudio/projectdetail/2117261)
2. [【ppcd快速入门】大图滑框变化检测与拼接](https://aistudio.baidu.com/aistudio/projectdetail/2136053)
3. [【ppcd快速入门】多光谱遥感影像变化检测](https://aistudio.baidu.com/aistudio/projectdetail/2122781)
4. [【ppcd快速入门】多标签遥感图像变化检测(待更)]()
5. [【ppcd快速入门】分类标签遥感变化检测(待更)]()
6. [【ppcd快速入门】正在想(待更)]()
4. [【ppcd快速入门】多光谱遥感影像分割](https://aistudio.baidu.com/aistudio/projectdetail/2130151)
5. [【ppcd快速入门】多标签遥感图像变化检测(待更)]()
6. [【ppcd快速入门】分类标签遥感变化检测(待更)]()
7. [【ppcd快速入门】正在想(待更)]()

## 特点

1. 适应两期图像的读取和增强,支持jpg、tmp、tif和npy等格式,支持多光谱/波段
1. 适应$N(N\ge1)$期图像的读取和增强,支持jpg、tmp、tif和npy等格式,支持多光谱/波段
2. 有更多有特色的数据增强
3. 适应分割图标签、分类标签以及多标签(分割+变化标签)
4. 网络多返回、多标签和多损失之间的组合
Expand Down Expand Up @@ -70,13 +71,13 @@ sys.path.append('pd-rscd') # 加载环境变量

## 说明

1. 当前更新后需要在PaddlePaddle2.1.0上运行,否则会卡在DataLoader上。除此之外DataLoader可能还存在问题,例如在一个CPU项目上卡住了,不知道原因,建议在2.1.0及以上版本的GPU设备上运行(至少AI Studio的GPU肯定是没问题的)。
1. 当前更新后需要在PaddlePaddle2.1.0及以上上运行,否则可能会卡在DataLoader上。除此之外DataLoader可能还存在问题,例如在一个CPU项目上卡住了,不知道原因,建议在2.1.0及以上版本的GPU设备上运行(至少AI Studio的GPU肯定是没问题的)。
2. 由于GDAL无法直接通过pip安装,所以如果需要使用GDAL的地方目前需要自行安装GDAL。

## 后续重点

1. 支持$N(N\ge1)$张输入数据,将分割、多期变化检测与多源数据任务结合。
2. 支持ArcGIS shp的输入输出。
- [ ] 添加多源数据输入,栅格得分结果输出的空间分析功能(问号)
- [ ] 添加将tif转为shp以及读取shp进行训练。预测(尽量)

## 相关链接

Expand Down
4 changes: 2 additions & 2 deletions ppcd/core/eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ def Eval(model,
for val_load_data in tqdm(eval_loader):
if val_load_data is None:
break
(val_A_img, val_B_img, val_lab) = val_load_data
val_pred_list = model(val_A_img, val_B_img)
val_img, val_lab = val_load_data
val_pred_list = model(val_img)
tmp_pred = []
tmp_lab = []
# 没有变化区标签的就不评估
Expand Down
17 changes: 11 additions & 6 deletions ppcd/core/infer.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ def Infer(model,
for idx, infer_load_data in enumerate(infer_loader):
if infer_load_data is None:
break
(A_img, B_img, name) = infer_load_data
pred_list = model(A_img, B_img)
img, name = infer_load_data
pred_list = model(img)
# img = paddle.concat([A_img, B_img], axis=1)
# pred_list = model(img)
num_class, H, W = pred_list[0].shape[1:]
Expand All @@ -39,7 +39,11 @@ def Infer(model,
else:
save_img = (paddle.argmax(pred_list[0], axis=1). \
squeeze().numpy()).astype('uint8')
<<<<<<< HEAD
save_path = os.path.join(save_img_path, (name[0] + '.jpg'))
=======
save_path = os.path.join(save_img_path, (name[0] + '.png'))
>>>>>>> develop
print('[Infer] ' + str(idx + 1) + '/' + str(lens) + ' file_path: ' + save_path)
cv2.imwrite(save_path, save_img)

Expand All @@ -58,22 +62,23 @@ def Slide_Infer(model,
if infer_data.is_tif == True:
geoinfo = infer_data.geoinfo
# 数据读取器
infer_loader = paddle.io.DataLoader(infer_data, batch_size=1) # TODO:如何统一
# infer_loader = paddle.io.DataLoader(infer_data, batch_size=1)
infer_loader = DataLoader(infer_data, batch_size=1)
# 开始预测
if save_img_path is not None:
if os.path.exists(save_img_path) == False:
os.mkdir(save_img_path)
model.eval()
para_state_dict = paddle.load(params_path)
model.set_dict(para_state_dict)
lens = len(infer_data)
# lens = len(infer_data)
inf_imgs = [] # 保存块
# for idx, infer_load_data in qenumerate(infer_loader):
for infer_load_data in tqdm(infer_loader):
if infer_load_data is None:
break
(A_img, B_img) = infer_load_data
pred_list = model(A_img, B_img)
img = infer_load_data
pred_list = model(img)
# img = paddle.concat([A_img, B_img], axis=1)
# pred_list = model(img)
num_class, H, W = pred_list[0].shape[1:]
Expand Down
4 changes: 2 additions & 2 deletions ppcd/core/train.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ def Train(model,
batch_start = time.time() # batch计时
if train_load_data is None:
break
(A_img, B_img, lab) = train_load_data
img, lab = train_load_data
iters += 1
pred_list = model(A_img, B_img)
pred_list = model(img)
# img = paddle.concat([A_img, B_img], axis=1)
# pred_list = model(img)
loss_list = loss_computation(
Expand Down
13 changes: 9 additions & 4 deletions ppcd/datasets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,30 @@ dataset
├── train # 训练数据
| ├── A # 时段一
| ├── B # 时段二
| ├── C # 时段三
| └── label # 变化标签
├── val # 评估数据
| ├── A
| ├── B
| ├── C # 时段三
| └── label
└── infer # 预测数据
├── A
└── B
├── B
└── C
dataset
├── P # 正样本数据
| ├── A # 时段一
| └── B # 时段二
| ├── B # 时段二
| └── C # 时段三
└── N # 负样本数据
├── A
└── B
├── B
└── C # 时段三
```

### 1.2 大图数据

可以参考入门项目([【ppcd快速入门】大图滑框变化检测与拼接](https://aistudio.baidu.com/aistudio/projectdetail/2121793))的数据使用方式。只需要有两期图像和标签,可以通过`split_eval`进行划分。在使用时将`Dataset`中的`big_map`设置为`True`即可。
可以参考入门项目([【ppcd快速入门】大图滑框变化检测与拼接](https://aistudio.baidu.com/aistudio/projectdetail/2121793))的数据使用方式。支持大于一期的图像和标签,可以通过`split_eval`进行划分。在使用时将`Dataset`中的`big_map`设置为`True`即可。注意输入的图像数据为列表,哪怕只有一张图像也需要组成列表

Loading

0 comments on commit 4dd387b

Please sign in to comment.