本案例为C2FNet基于PaddleRS的官方实现代码。本方法实现了一个从粗到细的模型,对现有的任意语义分割方法进行优化,实现对小目标的准确分割。
Python: 3.8
PaddlePaddle: 2.3.2
PaddleRS: 1.0
a. (可选)创建并激活一个conda虚拟环境。
conda create -n paddlers python=3.8
conda activate paddlers
b. 安装PaddlePaddle 详见官方网址 (PaddlePaddle版本需要 >= 2.3)。
c. 克隆PaddleRS代码库。
git clone -b release/1.0 https://github.com/PaddlePaddle/PaddleRS
d. 安装PaddleRS环境依赖。
cd PaddleRS
pip install -r requirements.txt
e. 安装PaddleRS包。
cd PaddleRS
python setup.py install
f. 进入c2fnet目录。
cd examples/c2fnet
注意:后续的操作默认在c2fnet
目录
- iSAID: https://captain-whu.github.io/iSAID
- ISPRS Potsdam/Vaihingen 将在后面的版本提供支持。
a. 从官方网站下载iSAID数据集。
b. 运行针对c2fnet的iSAID处理脚本。
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的方式生成。
a. 通过PaddleSeg或者PaddleRS训练一个粗分割模型,或者下载我们训练好的基线模型FCN_HRNetW18,并放置在如下位置:
{c2fnet}/coarse_model/{YOUR COARSE_MODEL NAME}.pdparams
c. 单GPU训练精细化模型。
# 指定显卡编号
export CUDA_VISIBLE_DEVICES=0
python train.py
c. 多GPU训练精细化模型。
# 指定显卡编号
export CUDA_VISIBLE_DEVICES={要使用的GPU编号}
python -m paddle.distributed.launch train.py
d. 其他训练的细节可以参考 PaddleRS的训练说明。
模型 | 主干网络 | 分辨率 | 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 |
FCN_C2FNet | HRNet_W18 | 512x512 | 69.31 | 63.03 | 50.90 | 23.53 | 45.93 | 83.82 | 59.62 | model |