基于 YOLOv11 的智能化遥感图像目标检测
本项目基于 YOLOv11 与 DOTA v1.0 数据集,实现遥感/航拍图像中的多类别目标检测,并提供完整的训练流程与可视化检测系统。
一、项目概述
本项目面向航空影像、卫星遥感等场景,利用 YOLOv11 的 OBB(Oriented Bounding Box)有向边界框检测能力,对俯视角度下任意方向、多尺度的目标进行识别与定位。系统包含模型训练、可视化检测界面、历史记录管理、训练指标展示等功能模块。
二、数据集
2.1 数据集简介
DOTA v1.0(A Large-scale Dataset for Object Detection in Aerial Images)由武汉大学计算机视觉与遥感实验室发布,发表于 CVPR 2018,是遥感目标检测领域的权威基准数据集。
2.2 数据规模
| 项目 | 数量 |
|---|---|
| 图像总数 | 约 2,806 幅航拍图像 |
| 训练集 | 约 1,411 幅 |
| 验证集 | 约 458 幅 |
| 测试集 | 约 937 幅 |
| 标注实例 | 188,282 个目标实例 |
| 单幅图像尺寸 | 约 800×800 ~ 4000×4000 像素 |
2.3 目标类别(15 类)
| 编号 | 英文名称 | 中文名称 |
|---|---|---|
| 0 | plane | 飞机 |
| 1 | ship | 船舶 |
| 2 | storage tank | 储油罐 |
| 3 | baseball diamond | 棒球场 |
| 4 | tennis court | 网球场 |
| 5 | basketball court | 篮球场 |
| 6 | ground track field | 田径场 |
| 7 | harbor | 港口 |
| 8 | bridge | 桥梁 |
| 9 | large vehicle | 大型车辆 |
| 10 | small vehicle | 小型车辆 |
| 11 | helicopter | 直升机 |
| 12 | roundabout | 环形交叉路口 |
| 13 | soccer ball field | 足球场 |
| 14 | swimming pool | 游泳池 |
2.4 标注格式
采用OBB(有向边界框)标注,每个目标由 8 个归一化坐标表示四边形的 4 个顶点,适配 YOLO OBB 格式。
三、训练过程与参数
3.1 训练流程
- 准备 DOTA v1.0 数据集,按
images/train、images/val划分 - 将标注转换为 YOLO OBB 格式,存放于
labels/train、labels/val - 使用
train.py加载预训练模型yolo11n-obb.pt进行训练 - 训练结果保存至
output/train/,包含权重、日志、可视化图表
3.2 主要训练参数
| 参数 | 值 | 说明 |
|---|---|---|
| model | yolo11n-obb.pt | 预训练 OBB 模型 |
| epochs | 100 | 训练轮次 |
| batch | 16 | 批次大小 |
| imgsz | 640 | 输入图像尺寸 |
| optimizer | auto | 优化器(自动选择) |
| lr0 | 0.01 | 初始学习率 |
| iou | 0.7 | NMS IoU 阈值 |
| mosaic | 1.0 | 马赛克增强 |
| amp | true | 混合精度训练 |
3.3 损失函数
- box_loss:边界框回归损失
- cls_loss:分类损失
- dfl_loss:分布焦点损失(DFL)
- angle_loss:角度损失(OBB 特有)
四、可视化图含义
4.1 训练曲线(losses.png)
- Box Loss:边界框回归损失,训练/验证曲线
- Cls Loss:分类损失
- DFL Loss:分布焦点损失
- Angle Loss:有向框角度损失
4.2 评估指标曲线(metrics.png)
- Precision:精确率
- Recall:召回率
- mAP50:IoU 阈值为 0.5 时的平均精度
- mAP50-95:IoU 从 0.5 到 0.95 的平均 mAP
4.3 系统内指标展示
- 训练曲线:训练损失、验证损失、mAP、P/R 随 epoch 变化
- 指标汇总:最终 mAP50、mAP50-95、精确率、召回率及柱状图
五、系统功能
5.1 图片识别
- 支持 JPG、PNG、BMP、TIF 等格式
- 单张图片目标检测,标注结果可视化
- 统计摘要(总检测数、类别数、平均/最高置信度)
- 详细数据表格、置信度分布直方图
- 导出检测图片、CSV 结果
5.2 视频识别
- 支持 MP4、AVI、MOV 等格式
- 逐帧检测,可设置每 N 帧检测一次
- 实时显示当前帧与累计统计
- 导出当前帧
5.3 摄像头识别
- 实时摄像头画面
- 支持开启/关闭检测、截图保存
- 会话累计统计,可保存到历史记录
5.4 检测历史
- 按类型(图片/视频/摄像头)筛选
- 关键词搜索
- 查看记录详情、导出 CSV、清空历史
5.5 模型管理
- 配置模型路径(默认
output/train/weights/best.pt) - 验证并加载模型
- 参数设置:置信度阈值、IoU 阈值、最大检测数
5.6 指标展示
- 读取
output/train/results.csv - 训练曲线(损失、mAP、P/R)
- 最终指标汇总
六、项目技术栈
| 类别 | 技术 |
|---|---|
| 深度学习 | YOLOv11(Ultralytics)、PyTorch |
| 目标检测 | OBB 有向边界框检测 |
| 界面 | PyQt6 |
| 数据可视化 | Matplotlib |
| 图像处理 | OpenCV、NumPy |
| 数据存储 | SQLite、JSON |
七、项目结构
c137/ ├── main.py # 程序入口 ├── train.py # 模型训练入口 ├── config/ │ └── dota_v1.yaml # 数据集配置 ├── output/ │ └── train/ # 训练输出 │ ├── weights/ # 模型权重(best.pt、last.pt) │ ├── results.csv # 训练指标 │ └── *.png # 可视化图表 ├── vis/ │ └── plot_metrics.py # 训练指标可视化脚本 ├── ui/ │ ├── login_window.py # 登录/注册窗口 │ ├── main_window.py # 主窗口 │ ├── utils/ │ │ ├── styles.py # 样式表 │ │ ├── config.py # 配置管理 │ │ ├── database.py # 数据库 │ │ ├── detector.py # 检测推理线程 │ │ └── widgets.py # 通用组件 │ └── pages/ │ ├── image_page.py # 图片识别 │ ├── video_page.py # 视频识别 │ ├── camera_page.py # 摄像头识别 │ ├── history_page.py # 检测历史 │ ├── model_page.py # 模型管理 │ └── metrics_page.py # 指标展示 └── DOTA v1/ # 数据集目录 ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/八、启动说明
训练
python train.py可视化检测系统
python main.py默认账号:admin/admin123
