【数据集介绍】
我们基于公开的大规模航空图像数据集构建了AI-TOD,这些数据集包括:DOTA-v1.5的训练验证集[1]、xView的训练集[19]、VisDrone2018-Det的训练验证集[20]、Airbus Ship的训练验证集1以及DIOR的训练验证+测试集[3]。这些数据集的详细信息如下:
DOTA-v1.5 训练验证集:这是原始 DOTA-v1.0 数据集 [1] 的升级版本,并已用于航空图像目标检测(DOAI2019)的性能评估。DOTA-v1.5 训练验证集包含 1,869 张图像,尺寸从 800 × 800 到 4000 × 4000 像素不等,以及 280,196 个目标实例,这些实例被标注为 16 个类别(例如,船只、小型车辆、储罐)。
xView训练集:这是一个大规模的目标检测数据集,包含1,415平方公里的WorldView-3图像,分辨率为30厘米。该标注数据集用于目标检测,涵盖了60个类别中的超过100万个目标实例,包括各种类型的车辆、飞机和船只[19]。
VisDrone2018-Det 训练验证集。该数据集包含 7,019 张图像,这些图像由无人机平台在不同地点、不同高度拍摄。图像经过人工标注,包含边界框和 10 个预定义类别(例如行人、人、汽车)。
Airbus-Ship训练验证集。这是一个用于Kaggle挑战赛中的船舶检测数据集。Airbus-Ship训练验证集包含42,559张图像和81,724艘船舶,所有对象均以多边形标注。
DIOR 训练验证+测试集。该数据集包含 23,463 张图像和 192,472 个目标实例,涵盖 20 个类别(例如,飞机、船舶、风车)。
为了构建AI-TOD数据集,我们从上述数据集中提取图像和对象实例,具体步骤如下:
图像尺寸。原始图像被划分为800×800像素的块,重叠部分为200像素。如果原始图像小于800×800像素,则通过填充零像素将其扩展到800×800像素。
对象类型。我们在AI-TOD数据集中选择了八种类别,包括飞机(AI)、桥梁(BR)、储罐(ST)、船舶(SH)、游泳池(SP)、车辆(VE)、人(PE)和风车(WM)。这些类别的选择基于某类对象在低分辨率航空图像中是否常见及其尺寸。airplane (AI), bridge (BR), storage-tank (ST), ship (SH), swimming-pool (SP), vehicle (VE)
类别转换。在选定类别后,我们将相应数据集中的旧类别转换为新类别。在此过程中,一些类别不在AI-TOD中的对象将被剔除。
图片预览:
标注例子:
数据集官方大小22GB大小且默认不是YOLO格式,这里将官方图片无损压缩成jpg格式并转成YOLO格式,压缩包体积变成1.08GB大小,大大节约下载时间且不影响训练效果。
【训练步骤】
这里以yolo11训练为例。首先我们获取数据集压缩包7z格式或者zip格式后解压到一个非中文或者有空格路径下面。比如解压到C:\Users\Administrator\Downloads目录,下面都是以这个目录演示训练流程。
打开coco128.yaml看到下面类似格式:
train: train/images
val: val/images
# Number of classes
nc: 8
# Class names
names:0: airplane1: bridge2: storage-tank3: ship4: swimming-pool5: vehicle6: person7: wind-mill
这些都不用修改,我们只需要检查一下是不是对的就行。
之后就是开始训练了,注意训练yolov11模型需要自己提前安装好环境。
使用预训练模型开始训练
yolo task=detect mode=train model=yolo11n.pt data=coco128.yaml epochs=100 imgsz=640 batch=8 workers=2
参数说明:
model: 使用的模型类型,如 yolo11s.pt(小模型)、yolo11m.pt(中)、yolo11l.pt(大)
data: 指定数据配置文件
epochs: 训练轮数
imgsz: 输入图像尺寸
batch: 批量大小(根据显存调整)
workers:指定进程数(windows最好设置0或者1或2,linux可以设置8)
训练完成后,最佳权重保存路径为:runs/detect/train/weights/best.pt,如果多次运行命令runs/detect/train2,runs/detect/train3文件夹生成只需要到数字最大文件夹查看就可以找到模型
图片预测:
from ultralytics import YOLO# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')# 图像预测
results = model('path_to_your_image.jpg')
视频或摄像头预测
results = model('path_to_video.mp4') # 视频
#results = model(0) # 摄像头
验证集评估
yolo task=detect mode=val model=runs/detect/train/weights/best.pt data=data.yaml
输出指标图像,一般在模型训练后生成,文件位置在runs/detect/train/results.png:
上面训练结果图片常用评估参数介绍
【常用评估参数介绍】
在目标检测任务中,评估模型的性能是至关重要的。你提到的几个术语是评估模型性能的常用指标。下面是对这些术语的详细解释:
- Class:
- 这通常指的是模型被设计用来检测的目标类别。例如,一个模型可能被训练来检测车辆、行人或动物等不同类别的对象。
- Images:
- 表示验证集中的图片数量。验证集是用来评估模型性能的数据集,与训练集分开,以确保评估结果的公正性。
- Instances:
- 在所有图片中目标对象的总数。这包括了所有类别对象的总和,例如,如果验证集包含100张图片,每张图片平均有5个目标对象,则Instances为500。
- P(精确度Precision):
- 精确度是模型预测为正样本的实例中,真正为正样本的比例。计算公式为:Precision = TP / (TP + FP),其中TP表示真正例(True Positives),FP表示假正例(False Positives)。
- R(召回率Recall):
- 召回率是所有真正的正样本中被模型正确预测为正样本的比例。计算公式为:Recall = TP / (TP + FN),其中FN表示假负例(False Negatives)。
- mAP50:
- 表示在IoU(交并比)阈值为0.5时的平均精度(mean Average Precision)。IoU是衡量预测框和真实框重叠程度的指标。mAP是一个综合指标,考虑了精确度和召回率,用于评估模型在不同召回率水平上的性能。在IoU=0.5时,如果预测框与真实框的重叠程度达到或超过50%,则认为该预测是正确的。
- mAP50-95:
- 表示在IoU从0.5到0.95(间隔0.05)的范围内,模型的平均精度。这是一个更严格的评估标准,要求预测框与真实框的重叠程度更高。在目标检测任务中,更高的IoU阈值意味着模型需要更准确地定位目标对象。mAP50-95的计算考虑了从宽松到严格的多个IoU阈值,因此能够更全面地评估模型的性能。
这些指标共同构成了评估目标检测模型性能的重要框架。通过比较不同模型在这些指标上的表现,可以判断哪个模型在实际应用中可能更有效。
将模型导出为ONNX、TensorRT等格式以用于部署:
yolo export model=runs/detect/train/weights/best.pt format=onnx
支持格式包括:onnx, engine, tflite, pb, torchscript 等。
经过上面训练可以使用模型做进一步部署,比如使用onnx模型在嵌入式部署,使用engine模型在jetson上deepstream部署,使用torchscript模型可以在C++上部署等等。