
1. 项目概述当卫星图像遇上YOLOv11去年参与某海域船舶监测项目时我第一次尝试将YOLOv11应用于0.5米分辨率的卫星影像。当模型在测试集上准确识别出87%的渔船时团队里搞传统图像处理的同事直呼这不科学。这个开源项目正是基于这类实战需求提供了一套完整的遥感目标检测解决方案。项目核心是使用改进版YOLOv11算法实现对卫星/航拍图像中船舶、飞机等典型目标的自动化识别。与普通场景不同遥感影像具有大尺寸通常4000×4000像素、小目标船舶可能仅占50×50像素、多角度目标无固定朝向三大特征。为此项目特别优化了以下环节针对2000万像素级影像的切片推理策略改进的微小目标检测头结构包含旋转框标注的专用数据集基于PyQt的轻量级标注/推理界面2. 核心技术与架构设计2.1 为什么选择YOLOv11在对比实验中我们测试了Faster R-CNN、RetinaNet和YOLO系列多个版本。最终选择YOLOv11主要基于三点考量速度与精度的平衡处理单张2048×2048切片时YOLOv11比v8快23%且mAP提升1.5%自适应计算优势其ELAN模块能动态调整计算路径对稀疏目标场景更高效部署友好性支持TensorRT加速在Jetson Xavier上可达35FPS模型架构关键改进点# 新增的微小目标检测头 class MicroHead(nn.Module): def __init__(self, in_channels): super().__init__() self.conv1 Conv(in_channels, in_channels*2, 3, actsilu) self.conv2 Conv(in_channels*2, in_channels, 1, actsilu) self.detect nn.Conv2d(in_channels, self.nc*5, 1) # 旋转框处理模块 def rotated_iou(box1, box2): # 计算旋转矩形交集面积 ...2.2 遥感数据处理的特殊挑战典型问题与解决方案对照表问题现象传统方法本方案处理目标尺寸差异大多尺度测试动态切片微目标头密集小目标漏检增大输入分辨率重叠切片NMS融合旋转目标识别差数据增强旋转框标注角度预测云层/阴影干扰人工筛选自动亮度均衡化关键技巧切片尺寸建议设置为原图1/41/6重叠区域保持15%-20%。实测显示当目标最小边≥8像素时检测效果最佳。3. 数据集构建与标注规范3.1 自建数据集细节项目提供的RSOD-11数据集包含来源Google Earth、高分七号等6种卫星数据数量12,478张有效图像含多云、夜间等复杂场景标注船舶(7类)、飞机(4类)共89,542个实例特殊属性每个目标包含旋转角度(0-179°)标注标注文件示例YOLO旋转框格式class_id x_center y_center width height angle 0 0.423 0.571 0.032 0.018 453.2 数据增强策略针对遥感特点的特殊增强transform A.Compose([ A.RandomSunFlare(flare_roi(0,0,1,0.5)), # 模拟太阳耀斑 A.RandomShadow(shadow_roi(0,0.5,1,1)), # 云层阴影 A.HueSaturationValue(hue_shift_limit20), # 不同卫星色差 A.RandomRotate90(), # 无固定方向 A.RandomResizedCrop(scale(0.8,1.0)) # 模拟不同分辨率 ])4. 模型训练关键参数4.1 超参数设置经过200次实验验证的最佳配置# hyp.yaml lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率系数 momentum: 0.9 # SGD动量 weight_decay: 0.0005 # 权重衰减 warmup_epochs: 3 # 热身训练 box: 0.05 # 框损失权重 cls: 0.5 # 分类损失权重 angle: 0.1 # 角度损失权重4.2 训练过程监控典型loss曲线特征前5个epochcls_loss快速下降特征学习阶段10-15epochbox_loss波动明显定位细化阶段20epoch后angle_loss趋于稳定方向收敛实测发现当val_loss连续3个epoch下降1%时提前停止训练效果最佳。5. 推理部署实战5.1 大图切片推理流程def slice_inference(image_path, model, slice_size1024, overlap0.2): img cv2.imread(image_path) h, w img.shape[:2] results [] # 计算切片位置 stride int(slice_size * (1 - overlap)) for y in range(0, h, stride): for x in range(0, w, stride): # 边界处理 slice_img img[y:yslice_size, x:xslice_size] # 执行推理 pred model(slice_img) # 坐标转换 pred[:, :4] [x, y, x, y] results.extend(pred) # 全局NMS处理 return non_max_suppression(results)5.2 界面功能详解PyQt界面主要模块标注模式支持旋转框绘制按住Ctrl拖动调整角度快捷键R-矩形框A-角度框Del-删除选中推理模式实时显存监控显存超限自动切换CPU结果导出支持GeoJSON格式含经纬度信息性能优化启用TensorRT加速后推理速度提升4-8倍内存映射技术支持50GB超大图像加载6. 典型问题排查指南6.1 常见错误与解决现象可能原因解决方案漏检小型船只切片重叠不足增大overlap至25%误检波浪区域数据不平衡增加负样本数量角度预测偏差大损失权重不当调整angle_loss权重显存溢出切片过大减小slice_size或启用梯度累积6.2 精度提升技巧难例挖掘# 在验证集上找出低置信度样本 low_conf_samples [img for img, pred in zip(val_set, preds) if (pred[:,4] 0.3).any()]多模型融合使用TTA(Test Time Augmentation)提升2-3% mAP不同切片尺寸结果投票融合后处理优化对船舶目标添加长宽比约束通常2:1利用地理信息过滤非水域目标7. 实际应用案例在某港口监测项目中系统部署后的表现检测速度处理1km²区域约45秒RTX3090准确率白天95.7%/夜间83.2%AP0.5最小检出目标6米×3米的快艇关键收获多云天气下启用HSV增强可提升8%召回率对停泊密集的渔船群采用0.3的NMS阈值更佳添加AIS数据辅助验证可减少5%的误报