文章目录
- 卫星图像中的目标检测:基于YOLOv11和DIOR数据集的实现
- 项目结构
- 引言
- 目标
- 数据集
- 数据预处理
- 模型训练与测试
- 结论
卫星图像中的目标检测:基于YOLOv11和DIOR数据集的实现
项目结构
完整的代码位于名为 yolov8.ipynb` 的Jupyter Notebook中。所有模型训练和测试的结果存储在项目的“runs”目录下。
引言
深度学习技术日新月异,计算机视觉领域中出现了多种神经网络架构,这些模型能够进行分类、检测、跟踪和分割等任务。然而,在遥感图像或卫星影像的应用上,仍然存在改进的空间。自然场景图像与卫星影像之间的主要区别在于图像表示方式的不同。卫星影像中物体的信息仅限于俯视角度,即物体的顶部,而自然场景图像则包含来自不同方向的各种信息。在卫星图像中,物体边缘提供了大量关于物体表征的信息,但这也可能使模型产生混淆;此外,阴影、季节变化、昼夜时间差异以及拍摄高度等因素都会影响图像的亮度和对比度,从而对图像质量造成影响。因此,对于计算机视觉模型而言,处理卫星图像是一项具有挑战性的任务。
目标
本项目的首要目标是构建一个能够在卫星影像/光学遥感图像中分类并检测多个不同类型物体的模型。另一个目标是测试最新版本的YOLO模型(YOLO V8)的能力。
数据集
在这个项目中,我使用了DIOR数据集。该数据集包含了20个不同的类别,涵盖了从微小到大型的物体。整个数据集共有23,463张图像,按照50%的比例划分为训练集和测试集。这些图像是随机打乱的,并且具有高质量(800 x 800像素)。尽管如此,数据集中也存在一些不足之处,例如某些物体缺少标注信息,以及各物体之间样本分布不均的问题。
数据预处理
预处理工作主要集中在注释文件上。原始注释采用Pascal VOC格式,即.xml文件,这种格式不适用于YOLO模型。因此,我将注释文件转换为了符合YOLO格式的.txt文件。
原始的数据划分是50%用于训练,50%用于测试,这样的比例并不理想。为了改善这一点,我进行了调整:保持50%的图像仅用于训练,而将测试集进一步划分为20%-80%,分别用于验证和最终测试。
模型训练与测试
我选择了的YOLOv8n模型来进行本项目的实验 - 。针对这个自定义数据集,我在原始大小为800px的图像上以16的批量大小从零开始训练模型,总共训练了50个epoch。我没有改变图像尺寸,因为压缩图像会导致数据丢失,而且考虑到物体本身已经很小,这样做会降低物体及其整体数据集的质量。模型在9391张图像上进行了测试,取得了良好的效果:mAP50为0.71,mAP50-95为0.485。您可以在Notebook和“runs”目录中查看完整的代码和模型结果。
除了在数据集上的测试外,我还使用了一段Google Earth视频片段来测试模型对视频文件的表现,以下是部分测试结果:
ships_test_pred.1.mp4airplane_test_pred.1.mp4
结论
YOLOv8不仅速度快,而且功能强大。最值得注意的是它的轻量级特性,这使得它可以在成本较低的GPU上轻松运行。在我的案例中,使用A4000 GPU训练超过20,000张图像的过程非常顺利,整个模型训练耗时不到两个半小时。这对于利用小型数据集快速进行实验来说是非常理想的。
DIOR数据集是一个大型且高质量的数据集。通过合并整个数据集,并用不同大小的YOLOv8模型进行更小规模和受控的实验,可以进一步提升性能。目前我只使用了最轻量级的模型,实际上还有四个更大、更复杂的YOLOv8模型可供选择。