Skip to content

Repository files navigation

Remote Sensing Cloud Detection Training and Deployment

遥感影像云检测训练、ONNX 转换、模型加密与离线部署工具。项目覆盖从语义分割模型训练到 Windows/Linux 可执行程序交付的完整链路,适合作为遥感 CV 模型工程化部署示例。

项目能力

  • 基于 MMSegmentation 配置 Mask2Former + Swin Transformer 云检测模型,完成背景/云区二分类语义分割训练。
  • 使用 Pascal VOC 格式数据集组织训练、验证和预测流程,支持 mIoU 验证和 best checkpoint 保存。
  • 基于 MMDeploy 导出 ONNX,配置 ONNX Runtime 后端、opset、静态输入尺寸和输入输出节点。
  • 转换 MMDeploy 自定义算子,将 mmdeploy::grid_sampler 替换为标准 ONNX GridSample,并处理 ReduceMean 兼容。
  • 使用 Fernet 对 ONNX 模型加密为 .bin,部署端运行时解密后加载到 ONNX Runtime。
  • 支持单图/文件夹批量推理、云掩膜平滑、轮廓矢量化、云量统计、GeoTIFF 与 Shapefile 输出。
  • 提供 PyInstaller/Nuitka 打包配置和 Docker 推理示例,便于离线交付。

目录结构

.
├── training/                 # 训练、预测、ONNX 导出
│   ├── configs/              # MMSeg/MMDeploy 配置
│   ├── datasets/             # Pascal VOC 样例索引文件
│   ├── train.py
│   ├── predict.py
│   └── export_onnx.py
├── conversion/
│   └── onnx2bin.py           # ONNX 算子转换与 Fernet 加密
├── deployment/
│   ├── smooth_mask.py        # 推荐部署入口,含平滑后处理
│   ├── basic_inference.py    # 基础部署版本
│   └── packaging/            # PyInstaller/Nuitka 打包辅助文件
├── docker/                   # 容器化推理示例
├── requirements-train.txt
└── requirements-deploy.txt

数据集格式

训练默认使用 Pascal VOC 语义分割格式:

datasets/
├── JPEGImages/
├── SegmentationClass/
└── ImageSets/
    └── Segmentation/
        ├── train.txt
        ├── trainval.txt
        └── val.txt

SegmentationClass 中背景像素为 0,云区像素为 1。仓库只保留样例索引文件,真实训练影像、标注、checkpoint、ONNX 和加密模型不上传。

环境安装

训练环境示例:

conda create -n mmcloud python=3.9
conda activate mmcloud
pip install -r requirements-train.txt
mim install mmengine
mim install mmdet
mim install mmcv==2.0.0rc4

部署环境示例:

pip install -r requirements-deploy.txt

训练

python training/train.py \
  --data-root ./training/datasets \
  --work-dir ./work_dirs/cloud \
  --batch-size 2 \
  --max-iters 160000 \
  --val-interval 5000

常用参数:

  • --data-root:Pascal VOC 数据根目录。
  • --work-dir:日志与 checkpoint 输出目录。
  • --batch-size:训练 batch size。
  • --max-iters:最大训练迭代数。
  • --val-interval:验证间隔。
  • --amp:启用混合精度训练。
  • --resume:从 work dir 中恢复训练。

ONNX 导出

python training/export_onnx.py \
  --checkpoint ./work_dirs/cloud/best_mIoU.pth \
  --img ./demo_images/sample.jpg \
  --work_dir ./work_dir \
  --device cpu

导出后默认得到:

work_dir/end2end.onnx

ONNX 转换与加密

生成 Fernet key:

python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

设置密钥并生成加密模型:

export MODEL_FERNET_KEY="<your-fernet-key>"
python conversion/onnx2bin.py \
  --input ./work_dir/end2end.onnx \
  --output ./work_dir/final_model.bin

Windows PowerShell:

$env:MODEL_FERNET_KEY="<your-fernet-key>"
python conversion/onnx2bin.py --input .\work_dir\end2end.onnx --output .\work_dir\final_model.bin

离线推理

python deployment/smooth_mask.py \
  ./input_images \
  ./outputs \
  --model ./work_dir \
  --smooth 3 \
  --expand 0 \
  --blur 7

输出文件:

  • <image>_cld.jpg:原图云区轮廓叠加图。
  • <image>_cld.txt:云像元、有效像元、云量比例和处理耗时报告。
  • <image>_cld.tif:带空间参考的云掩膜 GeoTIFF。
  • <image>_cld.shp:云区矢量边界 Shapefile。
  • moni:文件夹批处理完成标记。

如果输入图像没有 .jpw 和 .prj,程序会按 0 级图像处理,只输出叠加图和云量报告。

打包交付

Windows 示例:

cd deployment
pyinstaller packaging/main_windows.spec

Linux 示例:

cd deployment
bash packaging/pack_linux.sh

打包时需要确认 rasterio、pyogrio、GDAL_DATA、PROJ_LIB、Shapely/GEOS 等依赖路径与本机环境一致。

Docker 推理示例

cd docker
docker compose up --build

默认挂载:

  • docker/input_data -> /data/input
  • docker/output_data -> /data/output
  • docker/model -> /data/model

请自行放入 .onnx 或 .bin 模型文件,仓库不包含模型权重。

说明

本仓库用于展示遥感云检测模型训练、转换和部署工程链路。真实数据、训练权重、ONNX 文件、加密 .bin 模型、交付密钥和构建产物均未上传。

About

Remote sensing cloud detection training, ONNX conversion, encrypted inference and offline deployment pipeline.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages