从零开始掌握YOLOv5旋转目标检测:遥感图像中精准识别飞机与车辆
从零开始掌握YOLOv5旋转目标检测遥感图像中精准识别飞机与车辆【免费下载链接】yolov5_obbyolov5 csl_label.(Oriented Object Detection)Rotation DetectionRotated BBox基于yolov5的旋转目标检测项目地址: https://gitcode.com/gh_mirrors/yo/yolov5_obb你是否曾为遥感图像中的目标检测而烦恼传统水平框检测在飞机、车辆等方向性目标上表现不佳而YOLOv5_OBB正是解决这一痛点的利器 作为基于YOLOv5的旋转目标检测框架它能精准捕捉任意角度的目标在遥感图像分析、自动驾驶、工业检测等领域展现出卓越性能。为什么需要旋转目标检测在遥感图像分析中目标往往以各种角度出现。想象一下卫星拍摄的机场场景飞机停放在不同方向传统水平框会包含大量背景噪声而旋转框能更紧密地贴合目标轮廓大幅提升检测精度这张卫星图像展示了机场场景飞机以不同角度停放正是旋转目标检测的典型应用场景。快速上手环境配置与安装1. 克隆项目与依赖安装git clone https://gitcode.com/gh_mirrors/yo/yolov5_obb cd yolov5_obb pip install -r requirements.txt2. 编译旋转NMS扩展旋转目标检测的核心是旋转非极大值抑制NMS需要编译C扩展cd utils/nms_rotated python setup.py develop3. 安装DOTA开发工具包cd DOTA_devkit sudo apt-get install swig swig -c -python polyiou.i python setup.py build_ext --inplace数据准备从标注到训练旋转框标注格式YOLOv5_OBB使用多边形标注格式每个目标由4个顶点坐标表示x1 y1 x2 y2 x3 y3 x4 y4 classname difficult示例标注1686.0 1517.0 1695.0 1511.0 1711.0 1535.0 1700.0 1541.0 large-vehicle 0高分辨率图像分割遥感图像通常分辨率极高直接训练效果不佳。使用内置工具进行图像分割python DOTA_devkit/ImgSplit_multi_process.py数据集结构规范datasets/ └── DOTAv1.5/ ├── train_split_rate1.0_subsize1024_gap200/ ├── val_split_rate1.0_subsize1024_gap200/ └── test_split_rate1.0_subsize1024_gap200/ ├── images/ └── labelTxt/实战训练让你的模型学会旋转视角单GPU训练新手友好python train.py \ --weights yolov5s.pt \ --data data/yolov5obb_demo.yaml \ --epochs 100 \ --batch-size 16 \ --img 1024 \ --device 0多GPU分布式训练加速训练python -m torch.distributed.launch --nproc_per_node 4 train.py \ --device 0,1,2,3 \ --batch-size 64 \ --img 1024训练参数详解参数说明推荐值--weights预训练权重yolov5s.pt轻量--data数据集配置data/dotav15_poly.yaml--img输入图像尺寸1024遥感图像--batch-size批次大小根据GPU显存调整--epochs训练轮数100-300模型评估不只是水平框指标水平框HBB评估python val.py \ --data data/yolov5obb_demo.yaml \ --weights runs/train/exp/weights/best.pt \ --task val \ --save-json旋转框OBB评估流程转换预测结果为多边形格式python tools/TestJson2VocClassTxt.py \ --json_path runs/val/exp/best_obb_predictions.json \ --save_path runs/val/exp/obb_predictions_Txt合并分割结果如果使用了图像分割python DOTA_devkit/ResultMerge_multi_process.py \ --scrpath runs/val/exp/obb_predictions_Txt \ --dstpath runs/val/exp/obb_predictions_Txt_Merged计算旋转框指标python DOTA_devkit/dota_evaluation_task1.py \ --detpath runs/val/exp/obb_predictions_Txt_Merged/Task1_{:s}.txt \ --annopath dataset/labelTxt/{:s}.txt \ --imagesetfile dataset/imgnamefile.txt实战演示检测机场中的飞机1. 准备测试图像将机场卫星图像放入dataset/dataset_demo/images/目录。2. 运行推理检测python detect.py \ --weights runs/train/yolov5m_csl_dotav1.5/weights/best.pt \ --source dataset/dataset_demo/images/ \ --img 2048 \ --conf-thres 0.25 \ --iou-thres 0.23. 查看检测结果检测结果将保存在runs/detect/exp/目录包含带旋转框标注的图像。训练过程监控与优化上图展示了训练过程中损失函数和评估指标的变化趋势。你可以看到训练损失train/box_loss等逐渐下降并趋于稳定验证集指标metrics/mAP等持续提升模型在100-200轮后基本收敛常见问题解答FAQ❓ 训练时出现内存不足怎么办解决方案减小--batch-size参数降低--img输入尺寸如从1024降到640使用梯度累积技术❓ 旋转框检测精度不如预期检查要点标注格式是否正确4个顶点坐标图像分割参数是否合适超参数配置文件 data/hyps/obb/hyp.finetune_dota.yaml 是否适用❓ 如何在自己的数据集上训练步骤按照多边形格式准备标注文件创建对应的YAML配置文件调整类别数量和锚框参数从预训练模型开始微调❓ 推理速度太慢怎么办优化建议使用更小的模型yolov5n → yolov5s → yolov5m减小输入图像尺寸启用TensorRT加速参考 export.py进阶技巧提升检测性能1. 数据增强策略优化修改 utils/augmentations.py 中的增强参数调整旋转角度范围增加尺度变换使用马赛克增强2. 锚框自适应优化python utils/autoanchor.py --cfg models/yolov5s.yaml3. 混合精度训练在训练命令中添加--half参数可减少显存占用并加速训练。4. 模型架构调整根据你的需求选择合适模型yolov5n轻量级适合移动端yolov5s平衡精度与速度yolov5m/l/x高精度适合服务器部署核心源码解析旋转框处理模块关键文件 utils/rboxs_utils.py 包含poly2rbox()多边形转旋转框rbox2poly()旋转框转多边形poly2hbb()多边形转水平框旋转NMS实现utils/nms_rotated/ 目录包含旋转NMS的C/CUDA实现这是旋转目标检测的核心组件。损失函数设计utils/loss.py 中的ComputeLossOBB类专门处理旋转框损失计算。性能对比与选择指南模型参数量FLOPsOBB mAP0.5推理速度yolov5n2.0M5.0B73.3%⚡⚡⚡⚡yolov5s7.5M17.5B76.8%⚡⚡⚡yolov5m21.6M50.5B77.3%⚡⚡yolov5l47.0M110.0B78.1%⚡选择建议实时应用选择yolov5n或yolov5s精度优先选择yolov5m或yolov5l研究实验从yolov5s开始逐步调整总结与展望YOLOv5_OBB将强大的YOLOv5框架扩展到旋转目标检测领域为遥感图像分析、自动驾驶等应用提供了强大工具。通过本指南你已经掌握了从环境配置到模型部署的完整流程。一步探索方向尝试不同的骨干网络GhostNet、Transformer等实验不同的旋转框表示方法将模型部署到边缘设备探索多尺度训练策略记住成功的旋转目标检测不仅需要好的算法更需要高质量的数据和合理的训练策略。现在就开始你的旋转目标检测之旅吧提示更多技术细节请参考官方文档 docs/GetStart.md 和 docs/install.md。【免费下载链接】yolov5_obbyolov5 csl_label.(Oriented Object Detection)Rotation DetectionRotated BBox基于yolov5的旋转目标检测项目地址: https://gitcode.com/gh_mirrors/yo/yolov5_obb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考