遥感影像云检测训练、ONNX 转换、模型加密与离线部署工具。项目覆盖从语义分割模型训练到 Windows/Linux 可执行程序交付的完整链路,适合作为遥感 CV 模型工程化部署示例。
- 基于 MMSegmentation 配置 Mask2Former + Swin Transformer 云检测模型,完成背景/云区二分类语义分割训练。
- 使用 Pascal VOC 格式数据集组织训练、验证和预测流程,支持
mIoU验证和 best checkpoint 保存。 - 基于 MMDeploy 导出 ONNX,配置 ONNX Runtime 后端、opset、静态输入尺寸和输入输出节点。
- 转换 MMDeploy 自定义算子,将
mmdeploy::grid_sampler替换为标准 ONNXGridSample,并处理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.txtpython 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 中恢复训练。
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
生成 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.binWindows PowerShell:
$env:MODEL_FERNET_KEY="<your-fernet-key>"
python conversion/onnx2bin.py --input .\work_dir\end2end.onnx --output .\work_dir\final_model.binpython 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.specLinux 示例:
cd deployment
bash packaging/pack_linux.sh打包时需要确认 rasterio、pyogrio、GDAL_DATA、PROJ_LIB、Shapely/GEOS 等依赖路径与本机环境一致。
cd docker
docker compose up --build默认挂载:
docker/input_data->/data/inputdocker/output_data->/data/outputdocker/model->/data/model
请自行放入 .onnx 或 .bin 模型文件,仓库不包含模型权重。
本仓库用于展示遥感云检测模型训练、转换和部署工程链路。真实数据、训练权重、ONNX 文件、加密 .bin 模型、交付密钥和构建产物均未上传。