旋转框 YOLO 训练代码(YOLOv8-OBB)如何训练无人机视角下多模态红外可见光红外对齐车辆目标检测数据集 多模态目标检测 (RGB + IR 融合) - 旋转目标检测 (带方向角的车辆定位)

旋转框 YOLO 训练代码(YOLOv8-OBB)如何训练无人机视角下多模态红外可见光红外对齐车辆目标检测数据集 多模态目标检测 (RGB + IR 融合) - 旋转目标检测 (带方向角的车辆定位)

无人机视角下RGB+红外对齐车辆目标检测数据集
模态与视角:无人机搭载双光相机,同时采集 RGB + 红外,成对图像,对应同一视角的交通场景。 规模与分辨率:共 28,439 对 RGB-IR 图像(56,878 张),图像尺寸约 840×712 标注与类别:五类车辆目标——car、truck、bus、van、freight car,提供带方向角的 bbox,适合做多模态检测与旋转框检测

在这里插入图片描述


。1

在这里插入图片描述


1

在这里插入图片描述


无人机视角下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 图像上共享同一坐标系(已对齐)
标注数量未明确给出总实例数,但覆盖密集交通场景,含遮挡、小目标、多尺度目标
文件组织建议<br>dataset/<br>├── rgb/<br>│ ├── 000001.jpg<br>│ └── ...<br>├── ir/<br>│ ├── 000001.jpg<br>│ └── ...<br>└── labels/<br> ├── 000001.txt<br> └── ...<br>
每个 .txt 文件对应一对图像的旋转框标注
标注格式示例每行:<class_id> <x_center> <y_center> <width> <height> <angle>
(坐标归一化至 [0,1],角度单位:弧度 或 度,需注明)
适用任务- 多模态目标检测(RGB + IR 融合)
- 旋转目标检测(带方向角的车辆定位)
- 跨模态对齐学习
- 夜间/低照度鲁棒检测(利用 IR 模态)
- 小目标与密集车辆检测
数据特点- 严格对齐的双模态数据
- 真实交通场景复杂性(光照变化、遮挡、尺度差异)
- 提供方向信息,适用于自动驾驶、交通流分析等下游任务
- 大规模(>28k 对),适合深度学习训练
✅ 该数据集填补了无人机双光(RGB+IR)车辆检测领域缺乏带旋转框标注的大规模公开数据集的空白,特别适合研究:多模态特征融合机制旋转检测模型(如 R3Det、KLD-based Rotated RetinaNet)昼夜一致性检测系统

针对旋转框目标检测任务,YOLOv8 原版并不直接支持旋转边界框(Rotated Bounding Box, OBB)。为了实现这一功能,我们可以基于 YOLOv8 进行一些修改或使用已有的扩展版本,如 RoI-Transformer 或者 R3Det 等。这里提供一个简化的方案,展示如何基于 YOLOv8 的框架进行自定义以支持旋转框的训练。

一、前提条件

确保你已经安装了必要的依赖库:

pip install ultralytics 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/train val: ./UAV-RGB-IR-Vehicle/rgb/val nc:5# 类别数量:car, truck, bus, van, freight carnames:- car - truck - bus - van - freight car # 根据需要调整其他参数

四、修改 YOLOv8 模型以支持旋转框

由于 YOLOv8 不直接支持旋转框,我们需要对模型和损失函数做一些修改。这里给出一个简化版的示例,主要集中在损失计算部分。你可以基于现有的 YOLOv8 模型进行修改,或者寻找已有支持旋转框的模型架构作为基础。

修改后的损失函数(obb_loss.py
import torch import torch.nn as nn classRotatedIoULoss(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_boxes = pred_boxes.clone().detach() target_boxes = target_boxes.clone().detach() pred_boxes[:,4]= pred_boxes[:,4]%180# 角度归一化到[0, 180) target_boxes[:,4]= target_boxes[:,4]%180# 计算旋转矩形的四个顶点坐标defget_vertices(boxes): vertices =[]for box in boxes: x_center, y_center, w, h, angle = box.tolist() angle_rad = angle *3.1415926/180.0 cos_a, sin_a = torch.cos(angle_rad), torch.sin(angle_rad) rect = torch.tensor([[-w /2,-h /2],[w /2,-h /2],[w /2, h /2],[-w /2, h /2]]) rotation_matrix = torch.tensor([[cos_a,-sin_a],[sin_a, cos_a]]) rotated_rect = torch.mm(rect, rotation_matrix) rotated_rect += torch.tensor([x_center, y_center]) vertices.append(rotated_rect)return torch.stack(vertices) pred_vertices = get_vertices(pred_boxes) target_vertices = get_vertices(target_boxes)# 计算交并比(IoU)defcompute_iou(polygon1, polygon2):from shapely.geometry import Polygon poly1 = Polygon(polygon1.cpu().numpy()) poly2 = Polygon(polygon2.cpu().numpy()) iou = poly1.intersection(poly2).area / poly1.union(poly2).area return iou ious = torch.tensor([compute_iou(p, t)for p, t inzip(pred_vertices, target_vertices)]) loss =1- ious.mean()return loss 

五、训练脚本 (train_obb.py)

from ultralytics import YOLO import os from obb_loss import RotatedIoULoss defmain():# 创建输出目录 os.makedirs("runs/uav_rgb_ir_vehicle", exist_ok=True)# 加载预训练模型(建议使用 yolov8s 或 yolov8m) model = YOLO('yolov8s.pt')# 可替换为 'yolov8m.pt' / 'yolov8l.pt'# 自定义损失函数 custom_loss = RotatedIoULoss()# 开始训练 results = model.train( data='uav_rgb_ir_vehicle.yaml',# 数据配置文件 epochs=100,# 根据收敛情况调整 imgsz=840,# 图像尺寸(与数据一致) batch=16,# 根据 GPU 显存调整 name='yolov8s_uav_rgb_ir_vehicle', project='runs/uav_rgb_ir_vehicle', device=0,# GPU ID,多卡可用 [0,1] workers=8, cache=False,# 若内存充足可设为 True 加速 optimizer='AdamW', lr0=0.01,# 初始学习率 lrf=0.01,# 最终学习率 = lr0 * lrf momentum=0.937, weight_decay=0.0005, warmup_epochs=3, patience=30,# 早停:验证损失不再下降则停止 save=True, save_period=10,# 每10个epoch保存一次 verbose=True, plots=True,# 生成训练曲线图 loss_fn=custom_loss # 使用自定义的旋转框损失函数)print(f"✅ 训练完成!最佳模型路径:{results.save_dir}/weights/best.pt")if __name__ =='__main__': main()

Read more

Spring Cloud+AI :实现分布式智能推荐系统

Spring Cloud+AI :实现分布式智能推荐系统

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” 引言 * 在当今数字化时代,推荐系统已成为电商平台、内容分发平台、社交网络等互联网产品的核心竞争力之一。从淘宝的"猜你喜欢"、抖音的精准内容推送,到 Netflix 的影视推荐,优秀的推荐系统不仅能显著提升用户留存率和转化率,更能为企业带来可观的商业价值。据统计,亚马逊约 35% 的销售额来自推荐系统,Netflix 则通过推荐算法为用户节省了每年约 10 亿美元的搜索成本。 * 然而,随着业务规模的增长和推荐算法的复杂化,传统的单体架构逐渐暴露出诸多瓶颈。首先,推荐系统涉及用户画像构建、实时行为收集、特征工程、模型推理等多个环节,单体应用难以应对日益复杂的业务逻辑;其次,推荐服务需要处理海量并发请求,单机部署无法满足弹性伸缩的需求;再者,AI 模型的迭代更新日益频繁,单体架构下模型部署往往需要重启整个应用,严重影响线上服务稳定性;最后,企业需要支持 A/B

By Ne0inhk
会提问的人,正在用AI收割下一个十年

会提问的人,正在用AI收割下一个十年

文章目录 * 引言:一场关于AI的颠覆性对话 * 从对话到收入:AI时代的新型生产关系 * 会说话就能赚钱?这不是天方夜谭 * 从想法到产品:三天的魔法 * 技术民主化:AI不再是工程师的专属 * 打破技术壁垒的革命 * 文科生的优势在哪里? * AI时代的商业逻辑:用户付费意愿超预期 * 价值认知的转变 * 为什么用户愿意付费? * 新的商业模式 * AI的边界:思考仍然是人类的专属 * 技术的局限性 * 人机协作的最佳模式 * 实践指南:如何开始你的AI创作之旅 * 第一步:转变思维方式 * 第二步:从小项目开始 * 第三步:快速迭代 * 第四步:关注用户价值 * 第五步:建立商业模式 * 《脉向AI》:探索AI时代的无限可能 * 为什么要关注这期访谈? * 这不仅仅是一次访谈 * 结语:属于每个人的AI时代 引言:一场关于AI的颠覆性对话 在这个技术迅猛发展的时代,我们总是习惯性地认为,掌握AI技术是程序员和工程师的专属特权。但如果我告诉你,文科生可能才是A

By Ne0inhk
人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程

人工智能:一分钟将Gemini生成应用部署到本地计算机的保姆级教程

文章目录 * 引言 * 准备工作:环境搭建 * 步骤一:获取应用代码 * 步骤二:安装项目依赖 * 步骤三:启动开发服务器 * 步骤四:授权与使用 * 项目结构解析 * 常见问题与解决方案 * 总结 引言 前几篇博客中我们介绍了用gemini3搭建了几个非常有意思的app,但是只在网页上运行肯定是满足不了我们的需求的,这篇博客讲教大家如何把app部署到自己的电脑上(依托于浏览器),可以随时随地打开并且不用担心随时找不到自己做好的应用 准备工作:环境搭建 在开始部署前,我们需要确保本地计算机具备必要的运行环境: 1. Node.js环境 * 这是运行现代JavaScript应用的基础,推荐安装v16及以上版本 * 下载地址:https://nodejs.org/ 安装完成后,打开终端验证: node -v # 应显示v16.x.x或更高版本npm -v # 应显示7.x.x或更高版本 3. 现代浏览器(大部分电脑都有的不用担心) * 推荐Chrome或Edge浏览器,对WebGL和摄像头API支持更好

By Ne0inhk

用 Trae + Cline + 阿里云 Coding Plan 打造「零成本焦虑」的 AI 编程工作流

在 AI 编程工具爆发式增长的今天,开发者面临一个新问题:Token 账单失控。频繁调用大模型生成代码、解释错误、写测试用例,很容易导致费用飙升。 一、什么是阿里云 Coding Plan?——专为写代码而生! 根据 阿里云官方说明,Coding Plan 是面向开发者的专属大模型调用计划,具有以下特点: 🔹 每月 18,000 次 API 调用(Lite 版,¥40/月)活动期间好像还有折扣 🔹 单次调用不限 Token 数量 🔹 仅限用于「代码相关任务」的官方合作开发工具 🔹 不支持通用对话、智能体(Agent)、非代码类推理 ✅ 允许的使用场景(合规): * 在 VS Code / JetBrains 中使用 Cline、

By Ne0inhk