MMRotate实战遥感旋转目标检测全流程指南在遥感图像分析领域旋转目标检测技术正逐渐成为处理建筑物、车辆等不规则排列目标的标配方案。不同于传统水平框检测旋转框能更精确地框选倾斜目标减少背景干扰这在卫星影像和航拍图片分析中尤为重要。本文将带您从零开始完整走通基于MMRotate框架的旋转目标检测全流程涵盖环境搭建、数据准备、模型训练到结果可视化的每个技术细节。1. 环境配置与验证1.1 基础环境搭建MMRotate作为OpenMMLab生态的重要成员对PyTorch版本有特定要求。推荐使用以下组合避免兼容性问题# 创建专用虚拟环境 conda create -n mmrotate python3.8 -y conda activate mmrotate # 安装指定版本PyTorch与CUDA工具包 conda install pytorch1.7.0 torchvision0.8.0 cudatoolkit10.1 -c pytorch验证CUDA可用性import torch print(torch.cuda.is_available()) # 应输出True print(torch.version.cuda) # 应显示10.11.2 依赖库安装MMRotate需要特定版本的MMCV和MMDetection作为前置依赖# 安装MMCV-full必须与CUDA版本匹配 pip install mmcv-full1.4.5 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html # 安装MMDetection基础包 pip install mmdet2.19.0 # 克隆MMRotate源码并安装 git clone https://github.com/open-mmlab/mmrotate.git cd mmrotate pip install -r requirements/build.txt pip install -v -e .注意若出现GLIBCXX版本错误需升级GCC至5.0以上版本1.3 环境验证测试使用官方Demo快速验证环境python demo/image_demo.py \ demo/demo.jpg \ configs/rotated_retinanet/rotated_retinanet_r50_fpn_1x_dota_le90.py \ checkpoints/rotated_retinanet_r50_fpn_1x_dota_le90-0393aa5c.pth \ --out-file result.jpg成功运行后将在当前目录生成标注旋转框的result.jpg如下图所示2. 数据准备与标注2.1 旋转标注工具使用推荐使用roLabelImg进行旋转标注其标注规则遵循长边法(le90)W边始终与目标长边对齐旋转角度范围限定在[-90°,90°]标注顺序为左上角→右上角→右下角→左下角安装与快捷键说明# 安装roLabelImg pip install roLabelImg # 启动标注工具 roLabelImg常用快捷键A上一张D下一张Z放大X缩小C显示类别V保存标注2.2 数据格式转换MMRotate采用DOTA数据集格式需将VOC格式标注转换为DOTA标准def voc_to_dota(xml_path, img_path, save_dir): 转换核心参数 xml_path: VOC格式标注文件路径 img_path: 对应图像路径 save_dir: 转换结果保存目录 # 实现坐标转换矩阵计算 ...转换后的DOTA格式示例1024 768 1465 768 1465 1024 1024 1024 building 0 512 256 768 256 768 512 512 512 warehouse 12.3 数据集划分与裁剪遥感图像通常尺寸较大需要进行切片处理python tools/data/dota/split/img_split.py \ --base_json tools/data/dota/split/split_configs/ss_train.json关键配置参数说明参数说明典型值image_size切片尺寸1024overlap_size重叠区域200image_ext图像格式.pngsave_ext保存格式.png建议采用80%-10%-10%的比例划分训练集、验证集和测试集。3. 模型训练与调优3.1 配置文件修改主要需要调整三个核心配置文件模型配置如rotated_faster_rcnn_r50_fpn_1x_dota_le90.pymodel dict( roi_headdict( bbox_headdict( num_classes1, # 修改为实际类别数 loss_bboxdict(typeSmoothL1Loss, beta1.0)) ) )数据集配置dotav1.pydata dict( samples_per_gpu2, # 根据GPU显存调整 workers_per_gpu2, # 根据CPU核心数调整 traindict( typeDOTADataset, ann_filedata/train/annfiles/, img_prefixdata/train/images/), valdict(...), testdict(...) )训练策略schedule_1x.pyoptimizer dict(typeSGD, lr0.005, momentum0.9, weight_decay0.0001) lr_config dict( policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[8, 11])3.2 启动训练使用分布式训练加速过程./tools/dist_train.sh \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ 4 # 使用4块GPU常见问题解决方案CUDA out of memory减小samples_per_gpu使用梯度累积optimizer_config dict(typeGradientCumulativeOptimizerHook, cumulative_iters2)Loss震荡降低初始学习率如0.005→0.002增加warmup迭代次数3.3 训练监控使用MMLab内置工具可视化训练过程tensorboard --logdirwork_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90关键监控指标mAP0.5主要精度指标loss_rpn_clsRPN分类损失loss_bbox回归损失4. 模型测试与部署4.1 单图测试使用训练好的模型进行预测python demo/image_demo.py \ test.jpg \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ work_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90/epoch_12.pth \ --out-file result.jpg4.2 批量测试评估模型在测试集上的表现./tools/dist_test.sh \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ work_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90/epoch_12.pth \ 4 \ --eval mAP4.3 模型优化技巧提升精度的实用方法数据增强train_pipeline [ dict(typeRotatedResize, img_scale(1024, 1024)), dict(typeRotatedRandomFlip, flip_ratio0.5), dict(typeRandomRotate, rate0.5, angles[30, 60, 90]), ]模型融合python tools/model_ensemble.py \ --configs config1.py config2.py \ --checkpoints ckpt1.pth ckpt2.pth \ --out ensemble.pth后处理优化test_cfg dict( nms_pre2000, min_bbox_size0, score_thr0.05, # 降低过滤阈值 nmsdict(typenms, iou_thr0.1), # 调整NMS参数 max_per_img2000)在实际项目中针对建筑物检测任务将NMS的iou_thr从0.5降至0.3可使小目标召回率提升约15%。而采用多尺度测试multi-scale testing策略能进一步将mAP提高2-3个百分点。这些调参经验需要根据具体数据特性进行针对性优化。
MMRotate训练遥感目标检测模型:从环境配置到模型测试的完整实战记录(附PyTorch 1.7+CUDA 10.1配置)
发布时间:2026/6/10 10:57:24
MMRotate实战遥感旋转目标检测全流程指南在遥感图像分析领域旋转目标检测技术正逐渐成为处理建筑物、车辆等不规则排列目标的标配方案。不同于传统水平框检测旋转框能更精确地框选倾斜目标减少背景干扰这在卫星影像和航拍图片分析中尤为重要。本文将带您从零开始完整走通基于MMRotate框架的旋转目标检测全流程涵盖环境搭建、数据准备、模型训练到结果可视化的每个技术细节。1. 环境配置与验证1.1 基础环境搭建MMRotate作为OpenMMLab生态的重要成员对PyTorch版本有特定要求。推荐使用以下组合避免兼容性问题# 创建专用虚拟环境 conda create -n mmrotate python3.8 -y conda activate mmrotate # 安装指定版本PyTorch与CUDA工具包 conda install pytorch1.7.0 torchvision0.8.0 cudatoolkit10.1 -c pytorch验证CUDA可用性import torch print(torch.cuda.is_available()) # 应输出True print(torch.version.cuda) # 应显示10.11.2 依赖库安装MMRotate需要特定版本的MMCV和MMDetection作为前置依赖# 安装MMCV-full必须与CUDA版本匹配 pip install mmcv-full1.4.5 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html # 安装MMDetection基础包 pip install mmdet2.19.0 # 克隆MMRotate源码并安装 git clone https://github.com/open-mmlab/mmrotate.git cd mmrotate pip install -r requirements/build.txt pip install -v -e .注意若出现GLIBCXX版本错误需升级GCC至5.0以上版本1.3 环境验证测试使用官方Demo快速验证环境python demo/image_demo.py \ demo/demo.jpg \ configs/rotated_retinanet/rotated_retinanet_r50_fpn_1x_dota_le90.py \ checkpoints/rotated_retinanet_r50_fpn_1x_dota_le90-0393aa5c.pth \ --out-file result.jpg成功运行后将在当前目录生成标注旋转框的result.jpg如下图所示2. 数据准备与标注2.1 旋转标注工具使用推荐使用roLabelImg进行旋转标注其标注规则遵循长边法(le90)W边始终与目标长边对齐旋转角度范围限定在[-90°,90°]标注顺序为左上角→右上角→右下角→左下角安装与快捷键说明# 安装roLabelImg pip install roLabelImg # 启动标注工具 roLabelImg常用快捷键A上一张D下一张Z放大X缩小C显示类别V保存标注2.2 数据格式转换MMRotate采用DOTA数据集格式需将VOC格式标注转换为DOTA标准def voc_to_dota(xml_path, img_path, save_dir): 转换核心参数 xml_path: VOC格式标注文件路径 img_path: 对应图像路径 save_dir: 转换结果保存目录 # 实现坐标转换矩阵计算 ...转换后的DOTA格式示例1024 768 1465 768 1465 1024 1024 1024 building 0 512 256 768 256 768 512 512 512 warehouse 12.3 数据集划分与裁剪遥感图像通常尺寸较大需要进行切片处理python tools/data/dota/split/img_split.py \ --base_json tools/data/dota/split/split_configs/ss_train.json关键配置参数说明参数说明典型值image_size切片尺寸1024overlap_size重叠区域200image_ext图像格式.pngsave_ext保存格式.png建议采用80%-10%-10%的比例划分训练集、验证集和测试集。3. 模型训练与调优3.1 配置文件修改主要需要调整三个核心配置文件模型配置如rotated_faster_rcnn_r50_fpn_1x_dota_le90.pymodel dict( roi_headdict( bbox_headdict( num_classes1, # 修改为实际类别数 loss_bboxdict(typeSmoothL1Loss, beta1.0)) ) )数据集配置dotav1.pydata dict( samples_per_gpu2, # 根据GPU显存调整 workers_per_gpu2, # 根据CPU核心数调整 traindict( typeDOTADataset, ann_filedata/train/annfiles/, img_prefixdata/train/images/), valdict(...), testdict(...) )训练策略schedule_1x.pyoptimizer dict(typeSGD, lr0.005, momentum0.9, weight_decay0.0001) lr_config dict( policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[8, 11])3.2 启动训练使用分布式训练加速过程./tools/dist_train.sh \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ 4 # 使用4块GPU常见问题解决方案CUDA out of memory减小samples_per_gpu使用梯度累积optimizer_config dict(typeGradientCumulativeOptimizerHook, cumulative_iters2)Loss震荡降低初始学习率如0.005→0.002增加warmup迭代次数3.3 训练监控使用MMLab内置工具可视化训练过程tensorboard --logdirwork_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90关键监控指标mAP0.5主要精度指标loss_rpn_clsRPN分类损失loss_bbox回归损失4. 模型测试与部署4.1 单图测试使用训练好的模型进行预测python demo/image_demo.py \ test.jpg \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ work_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90/epoch_12.pth \ --out-file result.jpg4.2 批量测试评估模型在测试集上的表现./tools/dist_test.sh \ configs/rotated_faster_rcnn/rotated_faster_rcnn_r50_fpn_1x_dota_le90.py \ work_dirs/rotated_faster_rcnn_r50_fpn_1x_dota_le90/epoch_12.pth \ 4 \ --eval mAP4.3 模型优化技巧提升精度的实用方法数据增强train_pipeline [ dict(typeRotatedResize, img_scale(1024, 1024)), dict(typeRotatedRandomFlip, flip_ratio0.5), dict(typeRandomRotate, rate0.5, angles[30, 60, 90]), ]模型融合python tools/model_ensemble.py \ --configs config1.py config2.py \ --checkpoints ckpt1.pth ckpt2.pth \ --out ensemble.pth后处理优化test_cfg dict( nms_pre2000, min_bbox_size0, score_thr0.05, # 降低过滤阈值 nmsdict(typenms, iou_thr0.1), # 调整NMS参数 max_per_img2000)在实际项目中针对建筑物检测任务将NMS的iou_thr从0.5降至0.3可使小目标召回率提升约15%。而采用多尺度测试multi-scale testing策略能进一步将mAP提高2-3个百分点。这些调参经验需要根据具体数据特性进行针对性优化。