You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

122 lines
3.5 KiB

# 基于PaddleRS的遥感图像小目标语义分割优化方法
本项目为C2FNet基于PaddleRS的官方实现代码。本方法实现了一个从粗到细的模型,对现有的任意语义分割方法进行优化,实现对小目标的准确分割。
## 安装说明
### 环境依赖
```
Python: 3.8
PaddlePaddle: 2.3.2
PaddleRS: 1.0
```
### 安装过程
a. 创建并激活一个conda虚拟环境。
```bash
conda create -n paddlers python=3.8
conda activate paddlers
```
b. 安装PaddlePaddle [详见官方网址](https://www.paddlepaddle.org.cn/en/install/quick?docurl=/documentation/docs/en/install/pip/linux-pip_en.html) (PaddlePaddle版本需要 >= 2.3)。
c. 克隆PaddleRS代码库。
```bash
git clone https://github.com/PaddlePaddle/PaddleRS
```
d. 安装PaddleRS环境依赖。
```bash
cd PaddleRS
git checkout develop
pip install -r requirements.txt
```
e. 安装PaddleRS包。
```bash
cd PaddleRS
python setup.py install
```
f. 进入c2fnet目录。
```bash
cd examples/c2fnet
```
*注意:后续的操作默认在`c2fnet`目录*
## 数据集
+ iSAID: https://captain-whu.github.io/iSAID
+ ISPRS Potsdam/Vaihingen 将在后面的版本提供支持。
### iSAID数据集处理
a. 从官方网站下载[iSAID](https://captain-whu.github.io/iSAID)数据集。
b. 运行针对c2fnet的iSAID处理脚本。
```python
python data/prepare_isaid_c2fnet.py {下载的原始iSAID数据集存放路径}
```
c. 处理完的数据集目录结构如下所示:
```
{c2fnet}/data/iSAID
├── img_dir
│ ├── train
│ │   ├── *.png
│ │   └── *.png
│ ├── val
│ │ ├── *.png
│ │   └── *.png
│ └── test
└── ann_dir
│ ├── train
│ │   ├── *.png
│ │   └── *.png
│ ├── val
│ │ ├── *.png
│ │   └── *.png
│ └── test
├── label.txt
├── train.txt
└── val.txt
```
其中`train.txt`、`val.txt`、`label.txt`可以参考[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.6/docs/data/marker/marker_cn.md)的方式生成。
## 训练过程
a. 通过[PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg)或者[PaddleRS](https://github.com/PaddlePaddle/PaddleRS/tree/release/1.0/tutorials/train)训练一个粗分割模型,或者下载我们训练好的基线模型[FCN_HRNetW18](https://paddlers.bj.bcebos.com/pretrained/seg/isaid/weights/fcn_hrnet_isaid.pdparams),并放置在如下位置:
```
{c2fnet}/coarse_model/{YOUR COARSE_MODEL NAME}.pdparams
```
c. 单GPU训练精细化模型。
```bash
# 指定显卡编号
export CUDA_VISIBLE_DEVICES=0
python train.py
```
c. 多GPU训练精细化模型。
```bash
# 指定显卡编号
export CUDA_VISIBLE_DEVICES={要使用的GPU编号}
python -m paddle.distributed.launch train.py
```
d. 其他训练的细节可以参考 [PaddleRS的训练说明](/tutorials/train/README.md)。
## 实验结果
| 模型 | 主干网络 | 分辨率 | Ship | Large_Vehicle | Small_Vehicle | Helicopter | Swimming_Pool |Plane| Harbor | Links |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|FCN |HRNet_W18|512x512|69.04|62.61|48.75|23.14|44.99|83.35|58.61|[model](https://paddlers.bj.bcebos.com/pretrained/seg/isaid/weights/fcn_hrnet_isaid.pdparams)|
|FCN_C2FNet|HRNet_W18|512x512|69.31|63.03|50.90|23.53|45.93|83.82|59.62|[model](https://paddlers.bj.bcebos.com/pretrained/seg/isaid/weights/c2fnet_fcn_hrnet_isaid.pdparams)|
## 联系人
wangqingzhong@baidu.com
silin.chen@cumt.edu.cn