2026/3/5 23:17:39
网站建设
项目流程
网站建设与维修,seo网站推广的作用,医疗 企业 网站制作,网站创建流程包括哪些步骤无人机视角下RGB红外对齐车辆目标检测数据集
模态与视角#xff1a;无人机搭载双光相机#xff0c;同时采集 RGB 红外#xff0c;成对图像#xff0c;对应同一视角的交通场景。 规模与分辨率#xff1a;共 28,439 对 RGB-IR 图像#xff08;56,878 张#xff09;#…无人机视角下RGB红外对齐车辆目标检测数据集模态与视角无人机搭载双光相机同时采集 RGB 红外成对图像对应同一视角的交通场景。 规模与分辨率共 28,439 对 RGB-IR 图像56,878 张图像尺寸约 840×712 标注与类别五类车辆目标——car、truck、bus、van、freight car提供带方向角的 bbox适合做多模态检测与旋转框检测。11“无人机视角下RGB红外对齐车辆目标检测数据集”的结构化表格描述属性类别详细描述数据集名称UAV-RGB-IR-Vehicle无人机双光车辆检测数据集采集平台无人机搭载同步双光相机可见光 热红外成像模态成对图像• RGB可见光• IR热红外→严格时空对齐同一视角、同一时刻场景类型交通道路场景城市道路、高速、交叉口等低空航拍典型 UAV 视角图像总数28,439 对共56,878 张单模态图像图像分辨率约840 × 712 像素每对 RGB 与 IR 分辨率一致目标类别共5 类车辆1.car小轿车2.truck卡车3.bus公交车4.van厢式货车5.freight car货运车/重型载具标注形式-旋转边界框Rotated Bounding Box格式(x_center, y_center, width, height, angle)- 每个目标包含方向角orientation angle支持朝向感知检测- 所有标注在RGB 与 IR 图像上共享同一坐标系已对齐标注数量未明确给出总实例数但覆盖密集交通场景含遮挡、小目标、多尺度目标文件组织建议brdataset/br├── rgb/br│ ├── 000001.jpgbr│ └── ...br├── ir/br│ ├── 000001.jpgbr│ └── ...br└── labels/br ├── 000001.txtbr └── ...br每个.txt文件对应一对图像的旋转框标注标注格式示例每行class_id x_center y_center width height angle坐标归一化至 [0,1]角度单位弧度 或 度需注明适用任务-多模态目标检测RGB IR 融合-旋转目标检测带方向角的车辆定位-跨模态对齐学习-夜间/低照度鲁棒检测利用 IR 模态-小目标与密集车辆检测数据特点-严格对齐的双模态数据-真实交通场景复杂性光照变化、遮挡、尺度差异-提供方向信息适用于自动驾驶、交通流分析等下游任务-大规模28k 对适合深度学习训练✅ 该数据集填补了无人机双光RGBIR车辆检测领域缺乏带旋转框标注的大规模公开数据集的空白特别适合研究多模态特征融合机制旋转检测模型如 R3Det、KLD-based Rotated RetinaNet昼夜一致性检测系统针对旋转框目标检测任务YOLOv8 原版并不直接支持旋转边界框Rotated Bounding Box, OBB。为了实现这一功能我们可以基于 YOLOv8 进行一些修改或使用已有的扩展版本如 RoI-Transformer 或者 R3Det 等。这里提供一个简化的方案展示如何基于 YOLOv8 的框架进行自定义以支持旋转框的训练。一、前提条件确保你已经安装了必要的依赖库pipinstallultralytics opencv-python numpy tqdm二、数据准备假设你的数据集按以下结构组织并且标注格式为x_center, y_center, width, height, angle角度单位可以是弧度或度数UAV-RGB-IR-Vehicle/ ├── rgb/ │ ├── train/ │ ├── val/ │ └── test/ ├── ir/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/每个.txt文件包含每张图片的旋转框标注信息格式如下class_id x_center y_center width height angle三、配置文件 (uav_rgb_ir_vehicle.yaml)创建一个配置文件来指定数据路径、类别等信息# uav_rgb_ir_vehicle.yamltrain:./UAV-RGB-IR-Vehicle/rgb/trainval:./UAV-RGB-IR-Vehicle/rgb/valnc:5# 类别数量car, truck, bus, van, freight carnames:-car-truck-bus-van-freight car# 根据需要调整其他参数四、修改 YOLOv8 模型以支持旋转框由于 YOLOv8 不直接支持旋转框我们需要对模型和损失函数做一些修改。这里给出一个简化版的示例主要集中在损失计算部分。你可以基于现有的 YOLOv8 模型进行修改或者寻找已有支持旋转框的模型架构作为基础。修改后的损失函数obb_loss.pyimporttorchimporttorch.nnasnnclassRotatedIoULoss(nn.Module):def__init__(self):super(RotatedIoULoss,self).__init__()defforward(self,pred_boxes,target_boxes): pred_boxes: [N, 5] tensor (x_center, y_center, width, height, angle) target_boxes: [N, 5] tensor (x_center, y_center, width, height, angle) pred_boxespred_boxes.clone().detach()target_boxestarget_boxes.clone().detach()pred_boxes[:,4]pred_boxes[:,4]%180# 角度归一化到[0, 180)target_boxes[:,4]target_boxes[:,4]%180# 计算旋转矩形的四个顶点坐标defget_vertices(boxes):vertices[]forboxinboxes:x_center,y_center,w,h,anglebox.tolist()angle_radangle*3.1415926/180.0cos_a,sin_atorch.cos(angle_rad),torch.sin(angle_rad)recttorch.tensor([[-w/2,-h/2],[w/2,-h/2],[w/2,h/2],[-w/2,h/2]])rotation_matrixtorch.tensor([[cos_a,-sin_a],[sin_a,cos_a]])rotated_recttorch.mm(rect,rotation_matrix)rotated_recttorch.tensor([x_center,y_center])vertices.append(rotated_rect)returntorch.stack(vertices)pred_verticesget_vertices(pred_boxes)target_verticesget_vertices(target_boxes)# 计算交并比IoUdefcompute_iou(polygon1,polygon2):fromshapely.geometryimportPolygon poly1Polygon(polygon1.cpu().numpy())poly2Polygon(polygon2.cpu().numpy())ioupoly1.intersection(poly2).area/poly1.union(poly2).areareturniou ioustorch.tensor([compute_iou(p,t)forp,tinzip(pred_vertices,target_vertices)])loss1-ious.mean()returnloss五、训练脚本 (train_obb.py)fromultralyticsimportYOLOimportosfromobb_lossimportRotatedIoULossdefmain():# 创建输出目录os.makedirs(runs/uav_rgb_ir_vehicle,exist_okTrue)# 加载预训练模型建议使用 yolov8s 或 yolov8mmodelYOLO(yolov8s.pt)# 可替换为 yolov8m.pt / yolov8l.pt# 自定义损失函数custom_lossRotatedIoULoss()# 开始训练resultsmodel.train(datauav_rgb_ir_vehicle.yaml,# 数据配置文件epochs100,# 根据收敛情况调整imgsz840,# 图像尺寸与数据一致batch16,# 根据 GPU 显存调整nameyolov8s_uav_rgb_ir_vehicle,projectruns/uav_rgb_ir_vehicle,device0,# GPU ID多卡可用 [0,1]workers8,cacheFalse,# 若内存充足可设为 True 加速optimizerAdamW,lr00.01,# 初始学习率lrf0.01,# 最终学习率 lr0 * lrfmomentum0.937,weight_decay0.0005,warmup_epochs3,patience30,# 早停验证损失不再下降则停止saveTrue,save_period10,# 每10个epoch保存一次verboseTrue,plotsTrue,# 生成训练曲线图loss_fncustom_loss# 使用自定义的旋转框损失函数)print(f✅ 训练完成最佳模型路径{results.save_dir}/weights/best.pt)if__name____main__:main()