实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)
文章目录
- 一、旋转目标检测基础理论与技术演进
- 1.1 传统目标检测的局限性
- 1.2 旋转边界框的核心优势
- 1.3 角度表示的关键挑战
- 1.4 YOLOv11-OBB的创新解决方案
- 二、YOLOv11-OBB架构设计与实现
- 2.1 整体网络结构
- 2.2 旋转检测头设计
- 2.3 多尺度特征融合优化
- 三、损失函数设计与优化策略
- 3.1 复合损失函数组成
- 3.2 动态标签分配策略
- 3.3 EIoU损失优化
- 四、数据准备与标注规范
- 4.1 旋转目标标注工具
- 4.2 标注格式转换
- 4.3 数据集配置示例
- 五、模型训练与调优实践
- 5.1 基础训练配置
- 5.2 高级训练技巧
- 5.3 模型评估指标
- 六、模型部署与推理优化
- 6.1 ONNX导出与验证
- 6.2 C++部署示例
- 6.3 量化与加速
- 七、遥感场景专项优化
- 7.1 小目标检测增强
- 7.2 多光谱融合策略
- 7.3 复杂背景处理
- 八、典型应用案例与效果分析
- 8.1 船舶检测案例
- 8.2 建筑物提取案例
- 8.3 农业遥感监测
- 九、未来发展方向
- 9.1 端到端旋转检测
- 9.2 多模态融合检测
- 9.3 边缘计算优化
- 十、总结与资源推荐
- 10.1 核心要点总结
- 10.2 关键资源索引
- 10.3 实践建议
一、旋转目标检测基础理论与技术演进
1.1 传统目标检测的局限性
传统目标检测算法(如YOLO早期版本、Faster R-CNN等)主要采用轴对齐边界框(Axis-Aligned Bounding Box, AABB)来表示目标位置。这种表示方法存在以下固有缺陷:
背景噪声问题:当处理航拍图像中的舰船、遥感影像中的建筑物或工业质检中的倾斜零件时,AABB会包含大量背景区域。研究表明,在DOTA数据集上,传统边界框平均包含42.7%的背景像素。
定位精度不足:对于长宽比悬殊或倾斜角度大的目标,AABB无法精确贴合目标轮廓。实验数据显示,在船舶检测场景中,AABB的IoU值比旋转框低23-35个百分点。
类别混淆风险:密集场景中,AABB的重叠会导致不同实例的错误关联。例如,遥感图像中相邻的车辆若使用AABB标注,其IoU可能高达0.8以上,而实际应为独立个体。
1.2 旋转边界框的核心优势
旋转边界框(Oriented Bounding Box, OBB)通过引入旋转角度参数,实现了对任意方向目标的精确捕捉。YOLOv11-OBB在DOTA数据集上达到81.3%的mAP指标,相比传统方法提升显著。其核心优势体现在:
对比维度 | AABB | OBB |
---|---|---|
几何表示 | (x,y,w,h) | (x,y,w,h,θ)或四顶点坐标 |
角度适应 | 固定0° | 任意角度(-90°,90°] |
背景占比 | 平均42.7% | 平均18.3% |
计算复杂度 | 低 | 高约15-20% |
适用场景 | 正视角图像 | 航拍/遥感/倾斜视角 |
数学上,OBB采用两种互补的表示方式:
- 四顶点坐标格式:通过归一化的(x₁,y₁,x₂,y₂,x₃,y₃,x₄,y₄)八个参数定义四边形
- xywhr参数化表示:中心坐标(xy)、宽高(wh)和旋转角度®,其中角度通常定义在[-90°,0°)或[0°,180°)区间
1.3 角度表示的关键挑战
传统单值角度回归(如直接预测0°~360°的角度值)面临两个核心问题:
1. 数值边界不连续性
当角度值接近0°/360°边界时,会出现"数值跳变"现象。例如:
- 真实角度为350°,模型预测为10°
- 数值误差计算为|350-10|=340°,但实际角度差仅为20°
这种情况下,L1/L2损失会被严重高估,导致模型优化方向错误
2. 角度周期性认知缺失
神经网络将角度视为线性数值(如10°<20°<350°),但实际角度空间是环形拓扑结构(350°<10°<20°)。这种认知偏差会导致:
- 小角度旋转(如350°→10°)被模型视为剧烈变化
- 损失函数在边界区域产生梯度震荡
- 模型收敛速度降低30%以上
1.4 YOLOv11-OBB的创新解决方案
YOLOv11采用单位圆映射方案解决角度周期性问题:
编码机制:将角度θ(弧度制)映射为单位圆上的点坐标:
θ → (sinθ, cosθ)
这种映射特性包括:
- 周期性自动满足:θ与θ+2π映射到同一点
- 距离连续性:角度差Δθ对应弦长2sin(Δθ/2)
- 边界问题消除:350°(sin=-0.1736, cos=0.9848)与10°(sin=0.1736, cos=0.9848)在特征空间中距离很近
解码过程:通过反正切函数从(sinθ, cosθ)恢复角度:
angle = torch.atan2(pred_sin, pred_cos) # 返回范围[-π, π]
该函数能正确处理所有象限的角度计算,自动将数值映射到连续的角度空间
实验表明,这种方法在船舶检测等场景中使角度误差降低42%。
二、YOLOv11-OBB架构设计与实现
2.1 整体网络结构
YOLOv11-OBB的整体架构继承自YOLOv11的基础设计,但针对旋转目标检测进行了多项关键改进:
主要改进点:
- 多尺度检测层调整:删除原20×20的大目标检测层,增加160×160尺度的小目标检测层,提升对小目标的检测精度
- 特征提取增强:采用CSPDarknet53作为骨干网络,增强特征提取能力
- 注意力机制引入:结合空间注意力和通道注意力模块,增强模型对不同尺度目标的感知能力
2.2 旋转检测头设计
YOLOv11-OBB的检测头输出维度与传统检测头有显著差异:
输出类型 | 传统检测头 | OBB检测头 | 说明 |
---|---|---|---|
分类输出 | C | C | C为类别数 |
中心点偏移 | 2 | 2 | (dx, dy) |
宽高比例 | 2 | 2 | (dw, dh) |
角度表示 | 无 | 2 | (sinθ, cosθ) |
总维度 | 4+C | 6+C | 增加2维 |
角度预测采用双通道输出机制:
# 网络输出示例
output = model(input_img) # [B, N, 6+C]
sin_values = output[..., 4]
cos_values = output[..., 5]
angles = torch.atan2(sin_values, cos_values) # 转换为角度值
这种设计使得模型能够学习连续的角度特征空间,避免了角度跳变问题。
2.3 多尺度特征融合优化
针对遥感场景中目标尺度变化大的特点,YOLOv11-OBB进行了以下优化:
高分辨率特征保留:
- 在颈部网络(Neck)中保留P2层(160×160)的高分辨率特征
- 添加跳跃连接(Skip Connection)传递浅层细节信息
- 实验表明,这使小目标AP提升9.3%
多尺度注意力模块(MFAM):
graph TB A[输入特征] --> B[1×1卷积降维] B --> C[并行多尺度卷积] C --> D["7×7深度卷积"] C --> E["5×5深度卷积"] C --> F["3×3深度卷积"] D --> G[特征拼接] E --> G F --> G G --> H[1×1卷积调整通道] H --> I[残差连接] I --> J[输出特征]
该模块通过并行多尺度卷积捕获不同感受野的上下文信息,在VisDrone数据集上使mAP@0.5提升4.6%
维度感知选择性集成(DASI):
- 自适应加权融合低维和高维特征
- 采用门控机制控制特征流
- 公式表示:
其中α由特征重要性预测网络生成F_{out} = α·F_{low} + (1-α)·F_{high}
三、损失函数设计与优化策略
3.1 复合损失函数组成
YOLOv11-OBB的损失函数由三部分构成,各部分权重经过精心调优:
旋转框定位损失(L_loc):
- 采用Rotated IoU(RIoU)替代传统IoU
- 计算步骤:
- 使用Sutherland-Hodgman算法计算两个旋转矩形的交集区域
- 计算并集区域 = 框A面积 + 框B面积 - 交集面积
- RIoU = 交集面积 / 并集面积
- 相比传统IoU,RIoU能准确反映角度差异对重叠度的影响
角度回归损失(L_angle):
- 采用Kullback-Leibler散度(KLD)衡量角度分布差异
- 将角度预测建模为二维高斯分布N(μ,σ²),μ通过(sinθ,cosθ)预测
- 损失计算:
loss_kld = -0.5 * (1 + log(sigma²) - mu² - sigma²)
- 该方法使角度标准差降低27%
分类损失(L_cls):
- 沿用Focal Loss解决类别不平衡
- 针对小目标优化参数:
# 小目标增强配置 hsv_h: 0.015 # 色调增强 hsv_s: 0.7 # 饱和度增强 hsv_v: 0.4 # 明度增强
- 公式:
其中α_t=0.8(小目标),γ=2.0FL(p_t) = -α_t (1-p_t)^γ log(p_t)
3.2 动态标签分配策略
YOLOv11-OBB引入Task-Aligned Assigner策略,根据分类得分与旋转IoU的乘积动态分配正样本:
该策略解决了传统网格分配在倾斜目标上的匹配偏差问题,在DOTA数据集上使mAP50提升3.2个百分点。
3.3 EIoU损失优化
针对遥感场景中目标长宽比差异大的特点,部分改进模型采用EIoU(Enhanced IoU)替代CIoU:
损失类型 | 中心点损失 | 长宽比损失 | 角度损失 | 适用场景 |
---|---|---|---|---|
CIoU | 欧氏距离 | 长宽比差异 | 无 | 通用目标 |
EIoU | 标准化距离 | 分离优化w和h | 无 | 长宽比悬殊目标 |
RIoU | 旋转中心距 | 旋转长宽比 | 角度差 | 旋转目标 |
EIoU将长宽比损失解耦为宽度和高度两个独立项:
L_{EIoU} = 1 - IoU + \frac{ρ²(b,b^{gt})}{c²} + \frac{ρ²(w,w^{gt})}{C_w²} + \frac{ρ²(h,h^{gt})}{C_h²}
其中C_w和C_h为宽高的标准化系数。实验表明,EIoU在长宽比>5:1的目标上,定位精度比CIoU提高12.7%。
四、数据准备与标注规范
4.1 旋转目标标注工具
推荐使用X-AnyLabeling进行旋转框标注,相比传统roLabelImg具有以下优势:
功能对比:
功能 roLabelImg X-AnyLabeling 维护状态 已停止更新 持续维护 旋转标注 支持 支持且更精准 快捷键 有限 丰富(如下表) 角度显示 需手动计算 实时显示 多格式导出 仅XML JSON/YOLO/COCO等 标注快捷键:
快捷键 功能 z 逆时针旋转大角度 x 逆时针旋转小角度 c 顺时针旋转小角度 v 顺时针旋转大角度 标注步骤:
安装命令:
pip install anylabeling
4.2 标注格式转换
YOLOv11-OBB要求特定的标注格式转换,核心步骤如下:
原始JSON格式(X-AnyLabeling输出):
{ "version": "0.1.0", "flags": { }, "shapes": [ { "label": "ship", "points": [[x1,y1], [x2,y2], [x3,y3], [x4,y4]], "shape_type": "rotation" } ], "imagePath": "image.jpg", "imageHeight": 1024, "imageWidth": 1024 }
YOLO-OBB格式:
class_index x1 y1 x2 y2 x3 y3 x4 y4
示例:
0 0.780811 0.743961 0.782371 0.74686 0.777691 0.752174 0.776131 0.749758
关键转换代码:
def order_points(points): # 计算中心点 center_x = sum([p[0] for p in points]) / 4 center_y = sum([p[1] for p in points]) / 4 # 按相对于中心点的角度排序 def angle_from_center(point): return math.atan2(point[1] - center_y, point[0] - center_x) points = sorted(points, key=angle_from_center, reverse=True) return [points[0], points[1], points[2], points[3]] # 右上→右下→左下→左上
该函数确保顶点顺序符合YOLO-OBB要求
4.3 数据集配置示例
典型的遥感数据集配置文件qrcode-obb.yaml
示例:
path: /data/qrcode-obb/
train: train/images
val: valid/images
test: test/images
names:
0: ship
1: airplane
2: storage-tank
3: baseball-diamond
4: tennis-court
5: swimming-pool
6: roundabout
7: harbor
对于自定义数据集,需保证目录结构如下:
dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
五、模型训练与调优实践
5.1 基础训练配置
YOLOv11-OBB的标准训练脚本示例:
from ultralytics import YOLO
model = YOLO('yolo11-obb.yaml') # 或加载预训练权重 'yolo11s-obb.pt'
model.train(
data='data/qrcode-obb.yaml',
imgsz=640,
epochs=200,
batch=16,
close_mosaic=10, # 最后10epoch关闭马赛克增强
device='0',
optimizer='SGD',
lr0=0.01,
lrf=0.1,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3,
warmup_momentum=0.8,
box=7.5, # 框回归损失权重
cls=0.5, # 分类损失权重
angle=1.0, # 角度损失权重
hsv_h=0.015, # 色调增强
hsv_s=0.7, # 饱和度增强
hsv_v=0.4, # 明度增强
flipud=0.0, # 禁用上下翻转保护角度信息
)
关键参数说明:
close_mosaic
:训练末期关闭马赛克增强,提升角度预测稳定性angle
:角度损失权重,遥感场景建议1.0-1.5flipud
:设置为0禁用上下翻转,避免角度信息混乱
5.2 高级训练技巧
学习率调度策略:
- 初始阶段(epoch<5):线性warmup从0.001→0.01
- 主训练阶段:余弦退火衰减,周期为总epochs的0.9
- 最终阶段(最后10epochs):固定最小学习率0.0001
角度敏感的数据增强:
graph LR A[原始图像] --> B[随机旋转(-30°,30°)] B --> C[颜色扰动] C --> D[马赛克增强] D --> E[随机裁剪]
注意:马赛克增强在最后10个epoch应关闭,以避免合成图像导致的角度混淆
多尺度训练:
scale: 0.5 # 最小缩放比例 degrees: 30.0 # 最大旋转角度 translate: 0.2 # 最大平移比例 shear: 0.3 # 最大剪切角度 perspective: 0.001 # 透视变换系数 flipud: 0.0 # 上下翻转概率(建议0) fliplr: 0.5 # 左右翻转概率 mosaic: 1.0 # 马赛克增强概率 mixup: 0.2 # MixUp增强概率
5.3 模型评估指标
YOLOv11-OBB采用DOTA评估协议,主要指标包括:
- mAP50:IoU阈值为0.5时的平均精度
- mAP50:95:IoU阈值从0.5到0.95(步长0.05)的平均精度
- 角度误差(AE):预测角度与真实角度的绝对差值
- 方向敏感精度(OSAP):考虑角度正确性的检测精度
典型训练日志输出:
Class Images Instances Box(P R mAP50 mAP50-95: 100%|██████████| 7/7 [00:04<00:00, 1.53it/s]
all 99 128 0.953 0.955 0.966 0.908
显示在验证集上的精确度§、召回率®和mAP值
六、模型部署与推理优化
6.1 ONNX导出与验证
YOLOv11-OBB导出ONNX格式的命令:
yolo export model=yolo11s-obb.pt format=onnx simplify=True opset=17
关键验证步骤:
输入输出检查:
- 输入:
images
[1,3,640,640] (FP32) - 输出:
output0
[1,6+N,8400] (FP32),其中N为类别数
- 输入:
节点简化:
- 使用onnx-simplifier优化计算图:
python -m onnxsim yolov11s-obb.onnx yolov11s-obb-sim.onnx
- 使用onnx-simplifier优化计算图:
角度解码验证:
def decode_angle(sin, cos): angle = np.arctan2(sin, cos) * 180 / np.pi return angle if angle >=0 else angle + 360
6.2 C++部署示例
基于OpenCV的C++推理代码框架:
#include <opencv2/opencv.hpp>#include "Yolov11ObbManager.h"int main() {Yolov11ObbManager detector;detector.LoadWeights("yolo11n-obb.onnx", "labels.txt");cv::Mat image = cv::imread("P0032.png");auto res = detector.Inference(image);detector.DrawImage(image, res);cv::imshow("result", image);cv::waitKey(0);return 0;}
关键实现细节:
- 预处理:图像归一化(1/255)和通道顺序转换(BGR→RGB)
- 后处理:
- 使用RIoU-NMS替代传统NMS(阈值通常0.4-0.5)
- 角度解码时考虑象限判断
- 性能优化:
- 使用OpenMP加速循环
- 启用OpenCV的IPPICV优化
6.3 量化与加速
针对边缘设备的优化方案:
FP16量化:
yolo export model=yolo11s-obb.pt format=onnx half=True
可使模型大小减少50%,推理速度提升35%
INT8量化:
- 使用TensorRT进行校准:
from torch2trt import torch2trt model_trt = torch2trt(model, [input_data], fp16_mode=False, int8_mode=True)
- 需要约500张校准图像
- 使用TensorRT进行校准:
模型剪枝:
- 基于通道重要性的结构化剪枝
- 移除贡献度<1e-3的通道
- 实验显示可减少40%参数量,精度损失<2%
七、遥感场景专项优化
7.1 小目标检测增强
针对遥感小目标的改进策略:
高分辨率检测层:
- 在颈部网络添加P2层(160×160)
- 特征图分辨率提升4倍,使小目标AP提升9.3%
特征金字塔优化:
graph BT A[P5] --> B[上采样] B --> C[与P4拼接] C --> D[3×3卷积] D --> E[输出M4] A --> F[下采样] F --> G[与P6拼接] G --> H[3×3卷积] H --> I[输出M5]
相比传统FPN,改进结构在VisDrone上mAP提升3.5%
上下文信息聚合:
- 采用5×5空洞卷积(dilation=2)扩大感受野
- 添加非局部注意力模块捕获长程依赖
- 对小目标检测精度提升显著
7.2 多光谱融合策略
对于红外+可见光的多光谱数据,YOLOv11-RGBT提出:
六种融合模式:
模式 融合阶段 特点 适用场景 Early 输入层 简单concat 计算资源有限 P3 Mid Backbone中期 平衡性能与速度 通用遥感 P4 Mid Neck前期 高层语义融合 复杂背景 Late 检测头前 独立特征提取 模态差异大 Dense 各尺度密集 最大信息保留 高精度要求 Adaptive 动态权重 自动学习最优融合 多变的场景 P3中融合策略:
graph LR A[可见光P3] --> B[1×1卷积] C[红外P3] --> D[1×1卷积] B --> E[通道注意力] D --> E E --> F[加权融合] F --> G[输出融合特征]
在FLIR数据集上使mAP提升5.65%
多光谱可控微调(MCF):
- 第一阶段:固定主干,仅训练融合模块
- 第二阶段:整体微调,红外分支学习率降为1/10
- 该方法使模型收敛速度提升2倍
7.3 复杂背景处理
针对遥感图像复杂背景的解决方案:
改进注意力模块(IEMA):
通过特征分组和跨空间交互,背景干扰降低62%
背景抑制损失:
L_{bg} = \frac{1}{N}\sum_{i=1}^N \max(0, \text{IoU}(pred_i, bg) - 0.3)^2
惩罚预测框与背景区域的过大重叠
负样本挖掘:
- 对易混淆背景区域进行困难样本挖掘
- 在损失计算时赋予3-5倍权重
- 显著降低误检率
八、典型应用案例与效果分析
8.1 船舶检测案例
在海上船舶检测任务中,YOLOv11-OBB表现出色:
数据特点:
- 目标长宽比悬殊(货轮可达10:1)
- 方向随机分布
- 小目标占比大(80%目标<32px)
改进方案:
- 使用EIoU损失替代CIoU
- 增加P2检测层(160×160)
- 角度损失权重设为1.5
性能指标:
模型 mAP50 角度误差 FPS YOLOv11s 76.2% 8.7° 142 +OBB 83.5% 3.2° 118 +EIoU 85.1% 2.8° 116 +P2层 87.3% 2.5° 98 可视化对比:
8.2 建筑物提取案例
在城市建筑物轮廓提取中的应用:
挑战:
- 建筑物形状多样(矩形/L型/复杂多边形)
- 密集排列导致遮挡
- 阴影干扰
解决方案:
- 采用四顶点表示替代旋转矩形
- 添加边缘感知损失:
L_{edge} = \|Sobel(pred_mask) - Sobel(gt_mask)\|_1
- 使用DASI模块增强多尺度融合
实验结果:
- 在WHU数据集上达到94.2%的mAP50
- 边缘贴合度提升37%
- 误检率降低至2.3%
8.3 农业遥感监测
在农田地块分割中的应用效果:
任务需求:
- 精确划分不同作物地块
- 计算地块面积和形状指标
- 监测作物生长状态
技术方案:
- 多时相图像融合
- 结合NDVI指数辅助检测
- 自适应角度约束(农田通常有主导方向)
实施效果:
指标 传统方法 YOLOv11-OBB 地块识别率 78.5% 95.3% 边界误差 4.2m 1.1m 角度误差 15° 3.8° 处理速度 2.3幅/分钟 28幅/分钟
九、未来发展方向
9.1 端到端旋转检测
当前局限与改进方向:
现有问题:
- 检测与角度预测分阶段进行
- 后处理复杂(如NMS角度处理)
- 训练与推理存在差距
创新思路:
- 开发旋转敏感的DETR架构
- 基于点集的旋转表示方法
- 引入可微分的旋转NMS
预期收益:
- 简化处理流程
- 提升角度预测一致性
- 加速推理过程
9.2 多模态融合检测
前沿探索方向:
融合模式:
- 可见光+红外+LiDAR多源数据
- 时序信息融合
- 地理信息辅助
技术挑战:
- 模态间校准问题
- 特征空间不一致
- 计算复杂度控制
YOLOv11-RGBT启示:
- 可控微调策略
- 动态融合权重
- 跨模态注意力机制
9.3 边缘计算优化
轻量化技术路线:
模型压缩:
- 知识蒸馏(使用大模型指导小模型)
- 结构化剪枝(通道级和层级)
- 量化感知训练
硬件适配:
- NPU专用指令集优化
- 内存访问模式优化
- 混合精度计算
预期指标:
- 模型大小<5MB
- 推理速度>50FPS(移动端)
- 精度损失<3%
十、总结与资源推荐
10.1 核心要点总结
本文全面探讨了YOLOv11旋转目标检测的技术体系,关键结论如下:
- 表示方法:单位圆编码有效解决角度周期性问题,使船舶检测角度误差降低42%
- 架构设计:多尺度特征聚合(MFAM)和维度感知融合(DASI)使VisDrone数据集mAP提升7.5%
- 训练技巧:EIoU损失和动态标签分配在长宽比>5:1的目标上定位精度提升12.7%
- 部署优化:INT8量化可使模型缩小75%,速度提升3倍
- 遥感专项:多光谱P3中融合策略在FLIR数据集达到47.61% mAP
10.2 关键资源索引
官方代码库:
- Ultralytics YOLOv11: https://github.com/ultralytics/ultralytics
- YOLOv11-RGBT: https://github.com/wandahangFY/YOLOv11-RGBT
数据集:
- DOTA-v2.0: 大型遥感图像数据集,含18类37万实例
- VisDrone2019: 无人机视角数据集,10类54万标注框
- FLIR: 红外-可见光配对数据集,适用于多光谱研究
工具链:
- X-AnyLabeling: 旋转标注工具
- ONNX Runtime: 跨平台推理引擎
- TensorRT: NVIDIA高性能推理优化器
预训练模型:
模型 参数量 mAP50 下载链接 yolov11n-obb 2.9M 63.2 Ultralytics官方 yolov11s-obb 12.3M 71.8 Ultralytics官方 yolov11m-obb 35.4M 78.3 Ultralytics官方 yolov11l-obb 76.8M 81.1 Ultralytics官方
10.3 实践建议
针对不同应用场景的模型选型建议:
移动端部署:
- 模型:yolov11n-obb
- 量化:INT8
- 分辨率:320×320
- 预期性能:35FPS(骁龙865)
无人机机载:
- 模型:yolov11s-obb
- 优化:剪枝+FP16
- 分辨率:512×512
- 注意:禁用flipud增强
服务器分析:
- 模型:yolov11l-obb
- 增强:多光谱融合
- 分辨率:1024×1024
- 建议:使用RIoU-NMS(阈值0.4)
通过本教程的系统学习,开发者应能掌握YOLOv11旋转目标检测的核心技术,并具备在遥感等复杂场景中实施和优化OBB检测系统的能力。随着算法的不断演进,旋转目标检测必将在更广泛的领域发挥关键作用。
相关文章:
实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)
实用指南:YOLOv11的旋转目标检测改进-(扩展检测头支持旋转框预测,适配遥感场景)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…...
肝不好能喝酒吗
一般肝脏不好的患者不建议喝酒,可能会加重不适症状,影响健康。 肝脏是人体的重要器官,负责处理和代谢许多物质。如果肝脏不健康或受损,饮酒可能会产生负面影响,并导致一系列不适症状,甚至加重肝脏疾病。因此肝脏不好的人群不建议饮酒,以免对身体健康造成不良影响。 酒精…...
ROS中如何将日志格式设置为行号的形式
export RCUTILS CONSOLE OUTPUT FORMAT=[{function name}:{line_number}]:{message}...
USB相关的sysfs文件(重要的)【转】
https://www.cnblogs.com/linhaostudy/p/18388902 阅读目录前言 目录内容详解常见的 USB 相关目录及其含义1. /sys/bus/usb 目录下的含义1.1 /sys/bus/usb/devices/usb11-0:1.0 1-1.1:1.0结构图 设备信息bDeviceClass version busnum & devnum dev bMaxPower idVendor &…...
25上第一周
《数学之美》第三章以“语言模型与中文信息处理”为核心,通过讲述统计语言模型如何破解中文分词、语音识别等难题,展示了数学在解决复杂问题时的优雅与力量。作者用“马尔可夫链”将看似无序的汉字序列转化为可计算的概率问题,这种化繁为简的思维令我得到了许多感悟。尤其当…...
深入解析:RxJava在Android中的应用
深入解析:RxJava在Android中的应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...
模型选择与配置说明
模型选择与配置说明(Detection / Recognition / Classification) 本文系统说明本项目在“检测(det)/识别(rec)/分类(cls)”三条子任务上的模型选择思路、备选方案对比、输入尺寸与性能取舍、部署格式(ONNX/MNN)、以及在 GUI 与代码层面的配置方式。目标是让读者理解“…...
梯度下降算法
Gradient Descent 梯度下降一、核心思想:一个最经典的比喻 想象一下,你是一个蒙着眼睛的登山者,被困在一片漆黑的山林中。你的目标是走到山谷的最低点(寻找最低点)。 你会怎么做?你会用脚感受一下周围的地面,找出哪个方向是“下坡”最陡的。然后朝着那个最陡的下坡方向迈…...
002_文本分类任务的问答
1、下面代码中,random_state作为随机种子作用是什么? train_x, valid_x, train_y, valid_y = model_selection.train_test_split(trainDF[text], trainDF[label], test_size=0.25, random_state=42)这段代码的作用是随机把数据分为两个部分 计算机的“随机数”其实是 伪随机数…...
车牌识别
车牌识别方案对比与实现总结(GUI 三方法:lock / test / rec2) 本文面向实际工程应用,系统梳理当前 GUI 集成的三种车牌识别方法(lock、test、rec2)的技术亮点、设计思路、模型选择、实现过程与关键代码,帮助快速理解与持续优化。目标是:在统一界面中,对比“传统候选+文…...
告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型
Reward-RAG: Enhancing RAG with Reward Driven Supervision 全文摘要 本文介绍了一种名为Reward-RAG的新方法,旨在通过奖励驱动监督增强Retrieval-Augmented Generation(RAG)模型。与以往的RAG方法不同,该方法使用了CriticGPT训练了一个专门的奖励模型,并利用该模型生成合…...
在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察
本文分析了一个包含50个前端项目的编程学习资源,涵盖交互设计、动画效果和实用工具等多种类型,通过用户反馈发现了界面优化、功能扩展和教学改进等方面的潜在需求。a.内容描述 该项目是一个包含50个独立前端项目的编程学习资源,核心功能定位在于通过实际项目练习帮助开发者掌…...
Latex 中百分号怎么打
Latex 中百分号怎么打 由于 % 被用作注释符,所以前面 + \ 进行转义 \(\frac{285.5}{1-2.7\%}\)...
文件上传-条件竞争绕过
条件竞争原理: 条件竞争的逻辑是代码逻辑问题:当我们文件上传到服务器时,先对文件进行保存,然后对文件的后缀名进行判断,符合白名单的保存,不符合就删除,但在删除之前,有另一个对服务器发起的请求,要访问这个文件,那么就可能造成文件被读取和访问。这就是条件竞争。 …...
9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录
HZOJ 写在前面 连着三天吃三坨。本来想着今天大凶忌参加模拟赛然后没模拟赛挺好的,然后7:57临时通知加场,难道这就是大凶?好吧打就打吧,没想到真差点爆零。粗看没一道题可做怀疑自己的水平了然后赛后猛然醒悟是自己蠢如猪。其实这篇前面应该还有两篇,但是奈何这套改完得比…...
C++ 并发
C++ 并发编程是现代软件开发中的核心技术,主要用于利用多核处理器提升程序性能。C++11 及后续标准引入了完善的并发库(<thread>、<mutex>、<condition_variable> 等),使开发者能更安全地编写多线程程序。 1、std::thread std::thread 是 C++11 引入的线程…...
UML 5章
UML是建模语言,能够用面向对象的方法描述任何类型的系统 UML时序图:他通过对象之间发送消息的时间顺序显示多个对象之间的动态协作,重在对象之间的交互,强调时间顺序例UML状态图例...
《微服务事务管理》 - 教程
《微服务事务管理》 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...
python之socket udp服务器实现
import socket# 1. 创建 UDP Socket (SOCK_DGRAM 表示 UDP) receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2. 绑定地址和端口 receiver_address = (, 1883) # 端口号 9999 receiver_socket.bind(receiver_address)print("UDP 接收方已启动,等待…...
kylin SP3安装mysql 8.4.5
环境:OS:kylin SP3mysql:8.4.5 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost ~]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 自由软件基金会。这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性或者适合某…...
Unity中是否可以禁用GC
1)Unity中可以禁用GC吗2)项目是URP管线,渲染模块CPU耗时高,经排查主要是Batches数过高,应怎样进一步排查和优化渲染批次这是第445篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:co…...
经典SQL语句大全
经典SQL语句大全一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- 开始 备份BACKUP D…...
IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章
近日,IvorySQL 与 deepin 操作系统成功完成了兼容性适配认证。这一里程碑式的成就标志着 IvorySQL 在国产操作系统生态中的进一步深化,为用户提供更稳定、高效的数据库解决方案。deepin 简介 深度操作系统 deepin 是一款以“简洁、美观、易用”著称的国产 Linux 发行版,拥有…...
在 Nginx 上搭建静态站点
1、新建站点的配置文件 vi /etc/nginx/conf.d/www.xxx.com.conf2、写入如下内容: server {listen 80;#listen [::]:80;server_name www.xxx.com; # 这里可以写你的域名,或者 _ 表示匹配所有 root /var/www/www.xxx.com; # 你的静态文件目录 index index.html index.htm;locat…...
使用GitHub Dork快速发现漏洞:我的第一个Bugcrowd漏洞挖掘实战
本文详细介绍了如何通过GitHub Dork技术快速发现企业敏感信息泄露漏洞,包含实用的搜索语法和实际案例,帮助安全研究人员高效挖掘漏洞。使用GitHub Dork快速发现漏洞:我的第一个Bugcrowd漏洞挖掘实战 嗨,黑客们,漏洞猎人们! 祝愿你们发现大量漏洞并获得丰厚奖励! 虽然距离…...
kylin SP3安装mysql8.0.41
环境:OS:kylin SP3mysql:8.0.41 glibc2.17,建议安装glibc.2.28版本 查看系统glibc版本[root@localhost ~]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 自由软件基金会。这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性或者适合某…...
DIFY 项目中通过 Makefile 调用 Dockerfile 并采用 sudo make build-web 命令构建 web 镜像的方法和注意事项
DIFY 项目中通过 Makefile 调用 Dockerfile 并采用 sudo make build-web 命令构建 web 镜像的方法和注意事项pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…...
代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素、209.长度最小的子数组
704. 二分查找 思路:刷过很多次了,就是双指针思想,初始化一个在数组最左边的指针index_l,一个在最右边的指针index_r,当index_l < index_r 的时候通过判断index_l 和 index_r所确定的区间,缩小区间,最后夹逼出我们的目标值。 注意的点:最终状态会有两个 :1.l与r相等…...
从 MLPerf Storage v2.0 看 AI 训练中的存储性能与扩展能力
8 月 5 日,全球权威 AI 工程联盟 MLCommons 发布了最新的 MLPerf Storage v2.0 基准测试结果。本次评测吸引了众多厂商参与,包括 Cloud、Shared File、Fabric-Attached Block、Direct-Attached Block 这几大类存储厂商。 由于各厂商在硬件配置、节点规模和应用场景上的差异,…...
Revit二次开发 钢筋生成API(二)
2、自由钢筋生成API 创建一条无约束的自由形状钢筋。之后无法对该钢筋添加约束。public static Rebar CreateFreeForm(Document doc,RebarBarType barType,Element host,IList<IList<Curve>> curves,out RebarFreeFormValidationResult error )这个合自由钢筋生成A…...
创建会计凭证报错:FI/CO接口:待更新的不一致的FI/CO凭证标题数据(转)
问题:使用过账BAPI_ACC_DOCUMENT_POST,自动过账时,报错原因是“FI/CO接口:待更新的不一致的FI/CO凭证标题数据”。 原因: 1、如果头数据里面的公司和行项目公司是一致的,检查行项目,不要对行项目赋公司bukrs。 "it_item-comp_code = wa_account-bukrs. 2、检查金额是…...
Uri uri = new Uri(Path); 这行代码的作用
1. 语法校验 字符串里只要多一个空格、少一个 /、中文没转义,后面 HttpClient 会直接炸。 Uri 构造函数会第一时间给你抛 UriFormatException,早发现早处理。 2. 把“一串字符”升级成“有结构的零件箱” 转成 Uri 后,你就能直接拿这些字段,而不用再 Substring、IndexOf 去…...
Qt函数方法传入参数未使用-警告warning错误error提示解决
前言全局说明某些情况下,函数(方法)会传入参数,但并不一定会使用, 但是,不使用编辑器又会警告一、说明 1.1 环境: Windows 7 旗舰版 Visual Studio 2013二、未使用参数解决 原型 Q_UNUSED(未使用参数)三、示例 3.1 文件名: public:MyThread(QWidget *parent = nullptr){Q_…...
mysql 性能监控,关键指标解析与优化案例剖析
你是否经历过数据库突然变慢却无从下手的困境?某金融平台曾因慢查询堆积导致交易响应暴增300%,某电商大促期间因缓冲池命中率骤降引发订单延迟。性能问题往往具备隐蔽性和突发性特征,本文将揭示MySQL监控的核心参数与实战诊断方法。 连接池监控是性能防护的第一道防线。Thre…...
设计模式
1.分类 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享 元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责…...
Rhinoceros 8.23.25251.13001 犀牛3D建模
描述 Rhinoceros 是由美国Robert McNeel公司最新出品的专业强大的3D建模软件。软件以集百家之长为一体的发展教育理念,拥有NURBS的优秀传统建模教学方法,也有一个网格进行建模插件T-Spline,使建模方式方法有了更多的挑选,然后能创建出更传神、生动的造型。能输入和输出几十…...
Git 常用操作指南
本文为你整理了 Git 的常用操作,无论你是刚接触 Git 还是需要快速查阅,这篇指南都能帮你高效管理代码版本。 🔧 初始配置 开始使用 Git 前,先配置你的用户信息: git config --global user.name "你的用户名" git config --global user.email "你的邮箱&qu…...
《深入理解计算机系统》计算机系统漫游(一) - Invinc
本文记录《深入理解计算机系统》中第1章 计算机系统漫游 的一些知识点。本文记录《深入理解计算机系统》中第1章 计算机系统漫游 的一些知识点。第1章 计算机系统漫游 信息就是位+上下文 系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的…...
从几何分离到语义理解:深度解析3D点云分割与语义分割的本质区别
在三维计算机视觉领域,3D点云作为真实世界场景的核心数据载体,其处理技术直接决定了机器感知环境的精度与效率。 其中,3D点云分割与语义分割是两类关键技术,尽管二者同属点云处理范畴,但在目标定位、信息输出与应用价值上存在本质差异。 前者专注于“几何层面的分离”,通…...
欧拉筛(线性筛)算法分析
前言对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n^2),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期。在数论的学习中,我学到了埃氏筛法,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉筛…...
2021年安徽省大数据与人工智能应用竞赛 大数据(网络赛)-高职组赛题
本套数据数据: 通过网盘分享的文件: 链接: https://pan.baidu.com/s/1ZQXoWQhCOAiGVcFOZozV1g?pwd=json 提取码: json 第二部分:大数据程序编写部分(30分) 任务一、数据抽取转化部分(5分) 1、使用sqoop将MySQL的sakila数据库中的city表中city列以C开头的数据导入到hdfs…...
Alexandresku设计的loki小对象内存分配器
Loki是由 Alexandresku 编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。其中有两个文件 SmallObj.h 、SmallObj.cpp 进行内存管理,可以单独进行使用 三个class,第一层是chunk,第二层是vector<chunk> FixedAllocator,第三层是vector&l…...
C++ 内存管理
C++ 内存管理是程序设计的核心环节,直接影响程序的性能、稳定性和安全性。C++ 不像 Java、Python 等语言有自动垃圾回收机制,而是需要开发者手动管理动态内存(或通过智能指针等机制自动管理)。 1、C++ 内存分区内存区域 存储内容 生命周期 管理方式栈 (Stack) 函数参数、局…...
一些写了和没写的数学!
P8114 [Cnoi2021] 六边形战士 传送 非常好玩的题! 首先你大概率看过一些“无字证明”,其中很经典的是这个: 证明:用若干个边长为 \(1\),顶角为 \(60\) 度的菱形拼成一个边长为 \(n\) 的正六边形,三个方向的菱形个数一定相等。这是一个经典的无字证明,虽然前置的说明要费…...
【光照】[自发光Emission]以UnityURP为例
【从UnityURP开始探索游戏渲染】专栏-直达自发光的基本原理 $Cemissive=Memissive$ 自发光是物体表面主动发射光线的现象,在光照模型中通常作为独立于外部光源的附加项。其核心特点是不受其他光照影响,但可以影响周围环境。 实现流程定义发射颜色和强度:确定基础发光颜色…...
mybatis-plus初体验,解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String
解决报错Invalid value type for attribute factoryBeanObjectType: java.lang.String 推荐这位大佬的博客: https://www.cnblogs.com/muphy/p/18653627 项目结构MyBatis-Plus配置类MyBatisPlusConfig package com.example.config;import com.baomidou.mybatisplus.annotation…...
浅谈制氢电源及英飞凌解决方案
大家对氢元素肯定都不陌生,认识它基本都是从背元素周期表开始的。近年来我们身边多了很多氢的身影,从北京冬奥会的氢燃料电池大巴,再到广州南沙小虎岛电氢智慧能源站,氢也越来越被大家熟知。工业上,氢的使用可是一点都不少,自 1975 年以来,需求量增长了三倍,而且还在继…...
微算法科技(NASDAQ:MLGO)研究分布式量子计算,释放量子计算潜能
在信息时代,数据量呈指数级增长,经典计算机面临算力瓶颈。量子计算以其超强的并行处理能力,被视为下一世代计算范式的颠覆者。然而,单个量子处理器的脆弱性和制造难度限制了其广泛应用。微算法科技(NASDAQ:MLGO)研发团队研究通过分布式量子计算模型,将多个量子计算节点连…...
AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢
AI 重塑招聘三角:Moka 招聘智能体如何实现 HR、候选人与企业的三方共赢在人才竞争进入白热化的今天,招聘早已不是 HR 单方面的 “筛选任务”,而是涉及 HR 效率、候选人体验、企业战略人才储备的三角关系。传统招聘模式下,这三角常常陷入 “HR 疲于奔命却难出成果、候选人等…...
Flash Attention原理
提出问题 Transformer 结构已成为自然语言处理和图像分类等应用中最常用的架构。尽管 Transformer 在规模上不断增大和加深,但处理更长上下文仍然是一个挑战,因为核心的自注意力模块在序列长度上具有二次方的时间和内存复杂度。这导致在处理长序列时速度变慢且内存需求巨大。…...