# RSRefSeg **Repository Path**: happy172440/RSRefSeg ## Basic Information - **Project Name**: RSRefSeg - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: release - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-24 - **Last Updated**: 2025-02-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

RSRefSeg: Referring Remote Sensing Image Segmentation with Foundation Models



项目主页      arXiv      PDF


[![GitHub stars](https://badgen.net/github/stars/KyanChen/RSRefSeg)](https://github.com/KyanChen/RSRefSeg) [![license](https://img.shields.io/badge/license-Apache--2.0-green)](LICENSE) [![arXiv](https://img.shields.io/badge/arXiv-2501.06809-b31b1b.svg)](https://arxiv.org/abs/2501.06809)

[English](README.md) | 简体中文
## 简介 本项目仓库是论文 [RSRefSeg: Referring Remote Sensing Image Segmentation with Foundation Models](https://arxiv.org/abs/2501.06809) 的代码实现,基于 [MMSegmentation](https://github.com/open-mmlab/mmsegmentation) 项目进行开发。 当前分支在 Linux 系统,PyTorch 2.x 和 CUDA 12.1 下测试通过,支持 Python 3.10+,能兼容绝大多数的 CUDA 版本。 如果你觉得本项目对你有帮助,请给我们一个 star ⭐️,你的支持是我们最大的动力。
主要特性 - 与 MMSegmentation 高度保持一致的 API 接口及使用方法 - 开源了论文中不同版本大小的 RSRefSeg 模型 - 支持了多种数据集的训练和测试
## 更新日志 🌟 **2025.01.12** 发布了 RSRefSeg 项目,完全与 MMSegmentation 保持一致的API接口及使用方法。 ## 目录 - [简介](#简介) - [更新日志](#更新日志) - [目录](#目录) - [安装](#安装) - [数据集准备](#数据集准备) - [模型训练](#模型训练) - [模型测试](#模型测试) - [图像预测](#图像预测) - [常见问题](#常见问题) - [致谢](#致谢) - [引用](#引用) - [开源许可证](#开源许可证) - [联系我们](#联系我们) ## 安装 ### 依赖项 - Linux 系统, Windows 也可运行 - Python 3.10+,推荐使用 3.11 - PyTorch 2.0 或更高版本,推荐使用 2.3 - CUDA 11.7 或更高版本,推荐使用 12.1 - MMCV 2.0 或更高版本,推荐使用 2.2 ### 环境安装 推荐使用 Miniconda 来进行安装,以下命令将会创建一个名为 `rsrefseg` 的虚拟环境,并安装 PyTorch 和 MMCV。下述安装步骤中,默认安装的 CUDA 版本为 **12.1**,如果你的 CUDA 版本不是 12.1,请根据实际情况进行修改。 注解:如果你对 PyTorch 有经验并且已经安装了它,你可以直接跳转到下一小节。否则,你可以按照下述步骤进行准备。
**步骤 0**:安装 [Miniconda](https://docs.anaconda.com/miniconda/install/#quick-command-line-install)。 **步骤 1**:创建一个名为 `rsrefseg` 的虚拟环境,并激活它。 ```shell conda create -n rsrefseg python=3.11 -y conda activate rsrefseg ``` **步骤 2**:安装 [PyTorch2.3.x](https://pytorch.org/get-started/previous-versions/)。 Linux/Windows: ```shell pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121 ``` 或者 ```shell conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia ``` **步骤 3**:安装 [MMCV2.1.x](https://mmcv.readthedocs.io/en/latest/get_started/installation.html)。 ```shell pip install -U openmim mim install mmcv==2.2.0 #或者 pip install mmcv==2.2.0 -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.3/index.html ``` **步骤 4**:安装其他依赖项。 ```shell pip install modelindex ipdb ms-swift transformers peft modelscope accelerate qwen_vl_utils pycocotools ftfy prettytable -U ``` **步骤 5**:[可选] 安装 DeepSpeed。 如果您想使用 DeepSpeed 训练模型,您需要安装 DeepSpeed,并把Config文件中的 `DeepSpeed training config`注释打开。DeepSpeed 的安装方法可以参考 DeepSpeed 官方文档。 ```shell pip install deepspeed ``` 注解:Windows 系统下对 DeepSpeed 的支持尚未完善,我们建议您在 Linux 系统下使用 DeepSpeed。Windows 系统只能使用AMP训练,建议您在Config文件中的 `AMP training config`注释打开。
### 安装 RSRefSeg 下载或克隆 RSRefSeg 仓库即可。 ```shell git clone git@github.com:KyanChen/RSRefSeg.git cd RSRefSeg ``` ## 数据集准备
### 遥感图像指代分割数据集 我们提供论文中使用的遥感图像指代分割数据集的准备方法。 #### RRSIS-D 数据集 - 图片及标注下载地址:[RRSIS-D 数据集](https://github.com/Lsan2401/RMSIN#Datasets)。 #### 组织方式 你也可以选择其他来源进行数据的下载,但是需要将数据集组织成如下的格式: ``` ${DATASET_ROOT} # 数据集根目录,例如:/home/username/data ├── rrsisd │ ├── refs(unc).p │ └── instances.json ├── images └── rrsisd ├── JPEGImages └── ann_split ``` #### 数据集转换 我们提供一个脚本来将数据集转换为我们需要的格式,并生成 JSONL 文件。 注解:在项目文件夹 `datainfo` 中,我们已经提供了转换好的JSONL文件,你可以直接使用。同时,我们也提供了一个 [Python 脚本](tools_RSRefSeg/convert_data_to_jsonl.py) 来转换数据集。 ### 其他数据集 如果你想使用其他数据集,可以参考该 [Python 脚本](tools_RSRefSeg/convert_data_to_jsonl.py) 来进行数据集的准备。
## 模型训练 ### RSRefSeg 模型 #### Config 文件及主要参数解析 我们提供了论文中不同参数大小的 RSRefSeg 模型的配置文件,你可以在 [配置文件](configs_RSRefSeg) 文件夹中找到它们。Config 文件完全与 MMSegmentation 保持一致的 API 接口及使用方法。下面我们提供了一些主要参数的解析。如果你想了解更多参数的含义,可以参考 [MMSegmentation 文档](https://mmsegmentation.readthedocs.io/zh-cn/latest/user_guides/1_config.html)。
**参数解析**: - `work_dir`:模型训练的输出路径,一般不需要修改。 - `data_root`:数据集根目录,**修改为数据集根目录的绝对路径**。 - `batch_size`:单卡的 batch size,**需要根据显存大小进行修改**。 - `max_epochs`:最大训练轮数,一般不需要修改。 - `val_interval`:验证集的间隔轮数,一般不需要修改。 - `vis_backends/WandbVisBackend`:网络端可视化工具的配置,**打开注释后,需要在 `wandb` 官网上注册账号,可以在网络浏览器中查看训练过程中的可视化结果**。 - `resume`: 是否断点续训,一般不需要修改。 - `load_from`:模型的预训练的检查点路径,一般不需要修改。 - `init_from`:模型的预训练的检查点路径,一般保持为None,除非需要断点续训,则需要修改为对应的检查点路径。 - `default_hooks/CheckpointHook`:模型训练过程中的检查点保存配置,一般不需要修改。 - `model/lora_cfg`:模型高效微调的配置,一般不需要修改。 - `model/backbone`:SAM模型的视觉骨干,**需要根据实际情况进行修改**,base对应 `sam-vit-base`, large对应 `sam-vit-large`, huge对应 `sam-vit-huge`。 - `model/clip_vision_encoder`:CLIP模型的视觉编码器,一般不需要修改。 - `model/clip_text_encoder`:CLIP模型的文本编码器,一般不需要修改。 - `model/sam_prompt_encoder`:SAM模型的提示编码器,一般不需要修改。 - `model/sam_mask_decoder`:SAM模型的解码器,一般不需要修改。 - `model/decode_head`:RSRefSeg模型的伪解码头,一般不需要修改。 - `AMP training config`:混合精度训练的配置,如果不使用DeepSpeed训练,则打开注释,一般不需要修改。 - `DeepSpeed training config`:DeepSpeed训练的配置,如果使用DeepSpeed训练,则打开注释,将`AMP training config`注释掉,注意Windows系统不支持DeepSpeed训练。 - `dataset_type`:数据集的类型,一般不需要修改。 - `data_preprocessor/mean/std`:数据预处理的均值和标准差,一般不需要修改。
#### 单卡训练 ```shell python tools/train.py configs_RSRefSeg/name_to_config.py # name_to_config.py 为你想要使用的配置文件 ``` #### 多卡训练 ```shell sh tools/dist_train.sh configs_RSRefSeg/name_to_config.py ${GPU_NUM} # name_to_config.py 为你想要使用的配置文件,GPU_NUM 为使用的 GPU 数量 ``` ## 模型测试 #### 单卡测试: ```shell python tools/test.py configs_RSRefSeg/name_to_config.py ${CHECKPOINT_FILE} # name_to_config.py 为你想要使用的配置文件,CHECKPOINT_FILE 为你想要使用的检查点文件 ``` #### 多卡测试: ```shell sh tools/dist_test.sh configs_RSRefSeg/name_to_config.py ${CHECKPOINT_FILE} ${GPU_NUM} # name_to_config.py 为你想要使用的配置文件,CHECKPOINT_FILE 为你想要使用的检查点文件,GPU_NUM 为使用的 GPU 数量 ``` ## 图像预测 #### 单张图像预测: ```shell python demo/image_demo.py ${IMAGE_FILE} configs_RSRefSeg/name_to_config.py --checkpoint ${CHECKPOINT_FILE} --show-dir ${OUTPUT_DIR} # IMAGE_FILE 为你想要预测的图像文件,name_to_config.py 为你想要使用的配置文件,CHECKPOINT_FILE 为你想要使用的检查点文件,OUTPUT_DIR 为预测结果的输出路径 ``` #### 多张图像预测: ```shell python demo/image_demo.py ${IMAGE_DIR} configs_RSRefSeg/name_to_config.py --checkpoint ${CHECKPOINT_FILE} --show-dir ${OUTPUT_DIR} # IMAGE_DIR 为你想要预测的图像文件夹,name_to_config.py 为你想要使用的配置文件,CHECKPOINT_FILE 为你想要使用的检查点文件,OUTPUT_DIR 为预测结果的输出路径 ``` ## 常见问题
我们在这里列出了使用时的一些常见问题及其相应的解决方案。如果您发现有一些问题被遗漏,请随时提 PR 丰富这个列表。如果您无法在此获得帮助,请使用[issue](https://github.com/KyanChen/RSRefSeg/issues)来寻求帮助。请在模板中填写所有必填信息,这有助于我们更快定位问题。 ### 1. 是否需要安装MMSegmentation? 我们建议您不要安装MMSegmentation,因为我们已经对MMSegmentation的代码进行了部分修改,如果您安装了MMSegmentation,可能会导致代码运行出错。如果你出现了模块尚未被注册的错误,请检查: - 该模块是否是一个需要安装的包,若是则安装 - 是否安装了MMSegmentation,若有则卸载 - 是否在类名前加上了`@MODELS.register_module()`,若没有则加上 - 是否在`__init__.py`中加入了`from .xxx import xxx`,若没有则加上 - 是否在Config文件中加入了`custom_imports = dict(imports=['rsris'], allow_failed_imports=False)`,若没有则加上 ### 2. dist_train.sh: Bad substitution的解决 如果您在运行`dist_train.sh`时出现了`Bad substitution`的错误,请使用`bash dist_train.sh`来运行脚本。
## 致谢 本项目基于 [MMSegmentation](https://github.com/open-mmlab/mmsegmentation) 进行开发,感谢 MMSegmentation 项目的开发者们。 ## 引用 如果你在研究中使用了本项目的代码或者性能基准,请参考如下 bibtex 引用 RSRefSeg。 ``` @article{chen2025rsrefseg, title={RSRefSeg: Referring Remote Sensing Image Segmentation with Foundation Models}, author={Chen, Keyan and Zhang, Jiafan and Liu, Chenyang and Zou, Zhengxia and Shi, Zhenwei}, journal={arXiv preprint arXiv:2501.06809}, year={2025} } ``` ## 开源许可证 该项目采用 [Apache 2.0 开源许可证](LICENSE)。 ## 联系我们 如果有其他问题❓,请及时与我们联系 👬