
---desc: PaddleRS中实现的Farseg模型,训练用于卫星遥感影像建筑物提取 support_training: 1 tasks:- 基础模型- 图像分割 scenarios:- 街景分割 license: Apache License 2.0---<!--**该模型当前使用的是默认介绍模版,请参考以下模板,及时完善模型介绍相关内容:**#### Clone with HTTP在个人中心->模型->我的模型,查询访问令牌。可以通过令牌进行git仓库的使用。```bash git clone http://git.aistudio.baidu.com/1945/farseg_building.git```[TOC]-->## Farseg*[paper](https://openaccess.thecvf.com/content_CVPR_2020/papers/Zheng_Foreground-Aware_Relation_Network_for_Geospatial_Object_Segmentation_in_High_Spatial_CVPR_2020_paper.pdf) | [code](https://github.com/Z-Zheng/FarSeg)*遥感图像中的地理空间对象分割作为一种特殊的语义分割任务,却始终面临较大的尺度变化,较大的背景类内差异以及前景与背景之间的不平衡等问题。然而,一般语义分割方法主要关注自然场景中的尺度变化,而没有充分考虑大面积遥感图片场景中通常发生的其他问题。前景感知关系网络(FarSeg)明确地利用前景建模技术在遥感图像中进行更鲁棒的目标分割。同时探索了显式前景建模的两种方法:基于关系和基于优化的前景建模,并且进一步在FarSeg中提出了两个模块:前景场景关系模块(foreground-scene relation module)和前景感知优化(foreground-aware optimization)。前景-场景关系模块学习场景与前景之间的共生关系,以关联与前景相关的上下文以增强前景特征,从而减少误报。前景感知优化通过抑制背景中的多个简单示例,将模型集中于前景,从而减轻前景背景不平衡问题。## 模型描述- 骨干网络由ResNet50的4层组成,通过FPN特征融合。- c5通过了两次处理,上分支经过GAP变成场景编码,表示用于地理空间场景表示的投影函数,对其他FPN特征生成的特征进行加权,从而产生新的特征图。- 解码器是常规的卷积加上采样,仅对多个尺度的特征进行了平均。## 模型使用主要针对高分辨率遥感影像场景中,除了尺度问题外,还存在的背景类内差别较大、前/背景不均衡等明显等问题。### 如何使用该模型的训练和推理可以参考[关联项目](https://aistudio.baidu.com/aistudio/projectdetail/5907293),同时尝试在线体验;PaddleRS的使用参考官方[repo](https://github.com/PaddlePaddle/PaddleRS)。### 训练数据介绍原始的Farseg采用了[iSAID](https://captain-whu.github.io/iSAID/index.html)数据集进行训练。该模型空间的采用[多种建筑提取数据集混合的数据集](https://aistudio.baidu.com/aistudio/datasetdetail/102929)进行训练。该数据中[Map Challenge](https://www.aicrowd.com/challenges/mapping-challenge)的数据占多数,因此使用与其相似的数据进行推理能取得更好的效果。| 数据量 | 图像尺寸 | 类别 || --- | --- | --- || 44,7686 | 512×512 | 0(其他) / 1(建筑) |### 模型训练流程1. 环境配置,安装paddlepaddle以及paddlers:``` shellpip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -e git+https://github.com/PaddlePaddle/PaddleRS.git#egg=paddlers```2. 准备数据,构造需要的预处理方法和数据集:``` pythonfrom paddlers.datasets import SegDatasetimport paddlers.transforms as Ttransforms = [ T.RandomFlipOrRotate(), # 随机翻转或旋转 T.RandomDistort(), # 随机扭曲 T.Resize(target_size=512), # 固定尺寸 T.Normalize(mean=[0.5] * 3, std=[0.5] * 3) # 标准化]train_dataset = SegDataset( data_dir="xxx", # 数据地址 file_list="xxx", # 数据列表路径 transforms=train_transforms, # 数据增强 shuffle=True # 是否打乱数据集)```3. 通过PaddleRS可以一键使用Farseg:``` pythonfrom paddlers.tasks.segmenter import FarSegmodel = FarSeg(in_channels=3, num_classes=2) # 导入Farseg```4. 当`model`定义好之后,可以调用`train`方法进行训练。其中可通过`pretrain_weights`设置预训练参数,但目前PaddleRS暂未为Farseg提供预训练模型:``` pythonmodel.train( num_epochs=xxx, # 训练轮数 train_dataset=train_dataset, # 训练集 train_batch_size=xxx, # 批大小 eval_dataset=eval_dataset, # 评估集 pretrain_weights=“xxx”, # 预训练参数 save_dir="xxx", # 保存路径 learning_rate=xxx # 学习率)```### 后处理后处理采用建筑规则化的方式进行。参考论文《[Toward Automatic Building Footprint Delineation From Aerial Images Using CNN and Regularization](https://ieeexplore.ieee.org/document/8933116)》,代码复现参考PaddleRS的后处理。PaddleRS中可以方便的进行调用:``` pythonfrom paddlers.tasks import load_modelfrom paddlers.utils.postprocs import building_regularization, prepro_maskmodel = load_model(model_path) # 加载模型pred = model.predict(image, transforms)["label_map"] # 推理并取出预测结果pred= building_regularization(prepro_mask(pred)) # 进行转化以及建筑物规则化```### 数据评估及结果| miou | building iou | oacc | building acc | kappa| building F1-score || --- | --- | --- | --- | --- | --- || 0.865633 | 0.79665852 | 0.947944 | 0.89201068 | 0.853023 | 0.88682241 |## 相关论文以及引用信息```@inproceedings{zheng2020foreground, title={Foreground-Aware Relation Network for Geospatial Object Segmentation in High Spatial Resolution Remote Sensing Imagery}, author={Zheng, Zhuo and Zhong, Yanfei and Wang, Junjue and Ma, Ailong}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, pages={4096--4105}, year={2020}}@ARTICLE{8933116, author={Wei, Shiqing and Ji, Shunping and Lu, Meng}, journal={IEEE Transactions on Geoscience and Remote Sensing}, title={Toward Automatic Building Footprint Delineation From Aerial Images Using CNN and Regularization}, year={2020}, volume={58}, number={3}, pages={2178-2189}, doi={10.1109/TGRS.2019.2954461}}@misc{paddlers2022, title={PaddleRS, Awesome Remote Sensing Toolkit based on PaddlePaddle}, author={PaddlePaddle Authors}, howpublished={\url{https://github.com/PaddlePaddle/PaddleRS}}, year={2022}}```