# 基于 YOLOv5 的卫星图像目标检测
## 1 数据准备
### 1.1 数据集采集
- 原数据集中待检测的目标
<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`:使用的预训练权重,这里示范使用的是 yolov5s 模型的预训练权重
- `--batch`:mini-batch 的大小,这里使用 16
- `--epochs`:训练的迭代次数,这里我们训练 100 个 epoch
- `--cache`:使用数据缓存,加速训练进程
另:命令开头使用的 `screen` 是 linux 的窗口管理器,可以使训练过程在后台运行,当网络不稳定导致服务器连接中断时,可
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
使用yolov5开发的卫星图像目标检测算法项目-附完整流程教程-超优质项目.zip (128个子文件)
events.out.tfevents.1599910333.C-000015-GPU.31726.0 6.41MB
events.out.tfevents.1599909779.C-000015-GPU.24092.0 6.27MB
Dockerfile 2KB
.dockerignore 4KB
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
tutorial.ipynb 3.12MB
train_batch2.jpg 717KB
train_batch_labels.jpg 705KB
train_batch2.jpg 705KB
train_batch0.jpg 671KB
train_batch0.jpg 661KB
train_batch1.jpg 647KB
train_batch1.jpg 638KB
test_batch0_pred.jpg 432KB
test_batch0_gt.jpg 425KB
README.md 17KB
P1771.png 17.93MB
P1771.png 17.42MB
m_test_res3.png 11.41MB
s_test_res3.png 11.3MB
P2284.png 11.25MB
P2284.png 11.14MB
full_img.png 9.33MB
m_test_res4.png 9.07MB
s_test_res4.png 8.98MB
s_test_res2.png 8.97MB
m_test_res2.png 8.96MB
m_test_res1.png 7.57MB
s_test_res1.png 7.46MB
P1953.png 6.22MB
P1953.png 6.21MB
original_image.png 2.29MB
16_classes.png 2.28MB
split_img.png 2.14MB
m_infer_shot.png 1.34MB
s_infer_shot.png 1.28MB
train_log.png 679KB
labels.png 617KB
labels.png 617KB
labels.png 617KB
obj_loc_dist.png 418KB
obj_size_dist.png 228KB
train_shot.png 216KB
m_results.png 205KB
s_results.png 204KB
results.png 204KB
class_info.png 139KB
GIoU.png 101KB
IoU.png 92KB
DOTA_format_label.png 69KB
label_train_dir.png 64KB
label_val_dir.png 64KB
GPU_config.png 63KB
image_val_dir.png 58KB
image_train_dir.png 58KB
DOTA_yaml.png 52KB
YOLO_format_label.png 45KB
obj_class_dist.png 34KB
dataset_dir.png 32KB
server_config.png 29KB
server_dir.png 19KB
best.pt 14.28MB
best.pt 14.28MB
last.pt 14.28MB
last.pt 14.28MB
general.py 52KB
datasets.py 38KB
train.py 27KB
sotabench.py 14KB
test.py 13KB
yolo.py 11KB
torch_utils.py 9KB
detect.py 7KB
experimental.py 5KB
google_utils.py 5KB
common.py 4KB
export.py 3KB
hubconf.py 3KB
activations.py 2KB
__init__.py 0B
__init__.py 0B
general.cpython-36.pyc 41KB
general.cpython-37.pyc 40KB
datasets.cpython-36.pyc 27KB
datasets.cpython-37.pyc 27KB
yolo.cpython-36.pyc 9KB
yolo.cpython-37.pyc 9KB
torch_utils.cpython-36.pyc 9KB
torch_utils.cpython-37.pyc 9KB
test.cpython-37.pyc 9KB
test.cpython-36.pyc 9KB
experimental.cpython-37.pyc 6KB
experimental.cpython-36.pyc 6KB
common.cpython-37.pyc 6KB
common.cpython-36.pyc 6KB
google_utils.cpython-37.pyc 3KB
共 128 条
- 1
- 2
资源评论
极智视界
- 粉丝: 2w+
- 资源: 1528
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功