# 基于 YOLOv5 的卫星图像目标检测
## 1 数据准备
### 1.1 数据集采集
本项目使用 DOTA 数据集,数据集链接:[下载地址](https://captain-whu.github.io/DOTA/dataset.html)
- 原数据集中待检测的目标
<table>
<tr>
<td>
<center><img src="./README_figures/class_info.png" align="center" style="width: 80px;"></center>
<center><font size=2>图1-1 目标类别</font></center>
</td>
</tr>
<tr>
<td>
<center><img src="./README_figures/16_classes.png" align="center" style="width: 550px;"></center>
<center><font size=2>图1-2 待检测目标一览</font></center>
</td>
</tr>
</table>
- 原数据集中的图像
由 图1-3 可以看出原数据集中的图像尺寸和分辨率大小不一。
<table>
<tr>
<td>
<center><img src="./README_figures/original_image.png" align="center" style="width: 380px;"></center>
<center><font size=2>图1-3 数据集图像一览</font></center>
</td>
</tr>
</table>
- 原数据集中的标签
标签文件内容如 图1-4 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/DOTA_format_label.png" align="center" style="width: 600px;"></center>
<center><font size=2>图1-4 数据集标签一览</font></center>
</td>
</tr>
</table>
标签格式如下:
```
'imagesource':<imagesource>
'gsd':<gsd>
<x1> <y1> <x2> <y2> <x3> <y3> <x4> <y4> <class> <difficulty>
```
其中,
- 1,2,3,4 分别为标记目标的四个点
- `x`,`y` 为标记点的坐标值
- `class` 为目标类别
- `difficulty` 为检测难度( 0/1:简单/困难 )
### 1.2 标签格式转换和标签分布统计
YOLO 模型的标签输入有着特定的格式:
```
<class> <x_center> <y_center> <width> <height>
```
其中,
- `class` 为目标类别
- `x_center` 为标记框中心点的 x 坐标与图片宽度的比值
- `y_center` 为标记框中心点的 y 坐标与图片高度的比值
- `width` 为标记框的宽度与图片宽度的比值
- `height` 为标记框的高度与图片高度的比值
而原数据集中的标签数据格式和 YOLO 模型要求输入的标签数据格式不一致,因此我们将 DOTA 标签数据格式批量转换成 YOLO 标签数据格式,转换格式后标签文件内容如 图1-5 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/YOLO_format_label.png" align="center" style="width: 550px;"></center>
<center><font size=2>图1-5 格式转换后的数据集标签一览</font></center>
</td>
</tr>
</table>
格式转换后,我们统计了标签中各个参数的分布。
- 目标的数量分布
<table>
<tr>
<td>
<center><img src="./README_figures/obj_class_dist.png" align="center" style="width: 300px;"></center>
<center><font size=2>图1-6 各个类别目标分布数量的柱状图</font></center>
</td>
</tr>
</table>
- 目标的尺寸分布
<table>
<tr>
<td>
<center><img src="./README_figures/obj_size_dist.png" align="center" style="width: 300px;"></center>
<center><font size=2>图1-7 目标尺寸分布的散点热力图</font></center>
</td>
</tr>
</table>
- 目标的位置分布
<table>
<tr>
<td>
<center><img src="./README_figures/obj_loc_dist.png" align="center" style="width: 300px;"></center>
<center><font size=2>图1-8 目标位置分布的散点热力图</font></center>
</td>
</tr>
</table>
### 1.3 图像分割和尺寸调整
YOLO 模型的图像输入尺寸是固定的,由于原数据集中的图像尺寸不一,我们将原数据集中的图像按目标分布的位置分割成一个个包含目标的子图,并将每个子图尺寸调整为 1024×1024。分割前的图像如 图1-9 所示,分割后的子图效果如 图1-10 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/full_img.png" align="center" style="width: 450px;"></center>
<center><font size=2>图1-9 分割前的图像</font></center>
</td>
</tr>
<tr>
<td>
<center><img src="./README_figures/split_img.png" align="center" style="width: 550px;"></center>
<center><font size=2>图1-10 分割后的效果</font></center>
</td>
</tr>
</table>
### 1.4 数据集目录结构调整
YOLOv5 在读取数据时使用特定的目录结构,调整后的数据集目录结构如 图1-11 所示,各个目录中的内容如 图1-12 ~ 图1-15 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/dataset_dir.png" align="center" style="width: 200px;"></center>
<center><font size=2>图1-11 输入数据目录结构</font></center>
</td>
</tr>
<tr>
<td>
<center><img src="./README_figures/image_train_dir.png" align="center" style="width: 250px;"></center>
<center><font size=2>图1-12 训练集图片目录内容</font></center>
</td>
<td>
<center><img src="./README_figures/image_val_dir.png" align="center" style="width: 220px;"></center>
<center><font size=2>图1-13 验证集图片目录内容</font></center>
</td>
</tr>
<tr>
<td>
<center><img src="./README_figures/label_train_dir.png" align="center" style="width: 230px;"></center>
<center><font size=2>图1-14 训练集标签目录内容</font></center>
</td>
<td>
<center><img src="./README_figures/label_val_dir.png" align="center" style="width: 200px;"></center>
<center><font size=2>图1-15 验证集标签目录内容</font></center>
</td>
</tr>
</table>
## 2 模型训练
### 2.1 环境搭建
我们使用远程 GPU 服务器(MistGPU)训练模型,服务器硬件配置如 图2-1 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/server_config.png" align="center" style="width: 160px;"></center>
<center><font size=2>图2-1 GPU 服务器硬件配置</font></center>
</td>
</tr>
</table>
服务器软件配置:
- 操作系统:Ubuntu 18.04.4
- 开发和运行环境:
- PyTorch 版本:1.6.0
- CUDA 版本:10.2
本地连接服务器的工具:FinalShell 1.0
首先我们在本地修改工程中相关配置文件并测试跑通:
- 在 `data/` 目录中创建 `DOTA.yaml` 配置文件,并设置自定义的数据集路径,如 图2-2所示
- 修改 `yolov5s(/*m/*l/*x).yaml` 中的 `nc` 参数值为自定义目标类别数
<table>
<tr>
<td>
<center><img src="./README_figures/DOTA_yaml.png" align="center" style="width: 450px;"></center>
<center><font size=2>图2-2 自定义数据集路径</font></center>
</td>
</tr>
</table>
然后我们将在本地调试好的 YOLOv5 工程打包压缩,将预处理好的数据集打包压缩,将两者上传至服务器。上传后分别用 unzip 命令解压,注意 YOLOv5 工程目录和数据集根目录要在同一级目录下,如 图2-3 所示。
<table>
<tr>
<td>
<center><img src="./README_figures/server_dir.png" align="center" style="width: 350px;"></center>
<center><font size=2>图2-3 数据集和YOLOv5目录的位置</font></center>
</td>
</tr>
</table>
进入 `yolov5/` 目录,使用以下命令安装 YOLOv5 工程所需的配置文件:
```
pip install -U -r requirements.txt
```
### 2.2 训练
在 `yolov5/` 目录,运行 `train.py` 文件开始训练:
```
screen python3 train.py --weight weights/yolov5s.pt --batch 16 --epochs 100 --cache
```
其中的参数说明:
- `--weight`:使用的预训练权重,这里示范�
基于YOLOv5的卫星图像目标检测源码+模型+数据集+使用说明.zip
版权申诉
60 浏览量
2024-05-22
20:29:36
上传
评论
收藏 233.81MB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/30cca166a8ba4bd9b70a7e3128b56485_lwx666sl.jpg!1)
熬夜写代码的平头哥
- 粉丝: 3835
- 资源: 7354
最新资源
- 雷克沙u盘加密软件windows客户端
- JavaSwing订单管理系统.zip
- 数据库管理工具:dbeaver-ce-23.2.4-macos-aarch64.dmg
- 一个能够使用的幻兽帕鲁修改器
- java期末大作业课程设计学生成绩管理系统源码+数据库(高分项目)
- 数据库管理工具:dbeaver-ce-23.2.2-stable.x86-64.rpm
- 数据库管理工具:dbeaver-ce-23.2.2-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.2.2-macos-aarch64.dmg
- 数据库管理工具:dbeaver-ce-23.1.5-stable.x86-64.rpm
- 以下是一些适用于英语六级作文的万能句型模板,涵盖了引言、正文和结论部分的各类表达方式.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)