当前位置: 首页 > news >正文

YOLO旋转目标检测之ONNX模型推理

YOLO旋转检测相较于目标检测而言,其只是最后的输出层网络发生了改变,一个最明显的区别便是:目标检测的检测框是xywh,而旋转检测则为xywha,其中,这个a代表angle,即旋转角度,其余的基本相同。
在这里插入图片描述

pt模型推理

这里我们在模型训练完成后,即可进行推理操作,这里我们首先使用默认的模型格式,即pt格式

from ultralytics import YOLO
import cv2
import numpy as np
# 加载模型
model = YOLO("best.pt")  # 加载训练好的旋转框检测模型
# 预测图像
results = model("1.jpg")  # 预测图像
# 可视化参数配置
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 0.6
thickness = 2
colors = [(0,255,0), (255,0,0), (0,0,255)]  # 不同类别的颜色
# 遍历每个检测结果
for result in results:# 获取原始图像并转换为OpenCV格式img = result.orig_img.copy()# 遍历每个旋转框for polygon, cls, conf in zip(result.obb.xyxyxyxy, result.obb.cls, result.obb.conf):# 将坐标转换为整数类型pts = polygon.cpu().numpy().reshape(-1, 2).astype(int)# 绘制多边形边界框cv2.polylines(img, [pts], isClosed=True,color=colors[int(cls)%len(colors)],thickness=thickness)# 构建标签文本label = f"{result.names[int(cls)]} {conf:.2f}"# 计算文本位置(取第一个点上方)text_origin = (pts[0][0], pts[0][1] - 10 if pts[0][1] > 20 else pts[0][1] + 20)# 绘制文本背景(text_w, text_h), _ = cv2.getTextSize(label, font, font_scale, thickness)cv2.rectangle(img,(text_origin[0], text_origin[1] - text_h - 5),(text_origin[0] + text_w, text_origin[1] + 5),colors[int(cls)%len(colors)],-1)  # 填充矩形# 绘制文本cv2.putText(img, label,(text_origin[0], text_origin[1]),font, font_scale,(255,255,255),  # 白色文字thickness)cv2.imwrite("result.jpg", img)

从结果来看,输出的结果的维度为(4,7)其中4代表4个结果,7则是对应的内容,根据拆分结果来看,分别是xywhr以及class_id(类别编号)以及scores(置信度),同时需要注意的是,使用pt的推理结果中,其自动执行了将xywhr转换为xyxyxyxy的操作,这方便我们直接使用opencv中的rectangle方法进行绘图操作。

在这里插入图片描述

ONNX模型推理

ultralytics中提供了将pt文件转换为onnxtflite等多种格式的方法,ONNX(Open Neural Network Exchange)是一种开放的文件格式,用于表示机器学习模型。它使得不同的人工智能框架能够互相交换模型,从而提高了模型的可移植性和互操作性。通过ONNX,开发者可以在一个框架中训练模型,然后将该模型迁移到另一个支持ONNX的框架中进行推理,而无需重新训练或大幅修改模型。

使用ONNX模型进行推理的代码如下:其主要包含数据预处理、模型加载、模型推理三个步骤:

def load_model(weights):"""加载ONNX模型并返回会话对象。:param weights: 模型权重文件路径:return: ONNX运行会话对象"""session = ort.InferenceSession(weights, providers=['CPUExecutionProvider'])logging.info(f"模型加载成功: {weights}")return sessiondef run_inference(session, image_bytes, imgsz=(640, 640)):"""对输入图像进行预处理,然后使用ONNX模型执行推理。:param session: ONNX运行会话对象:param image_bytes: 输入图像的字节数据:param imgsz: 模型输入的尺寸:return: 推理结果、缩放比例、填充尺寸"""im0 = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)  # 解码图像字节数据if im0 is None:raise ValueError("无法从image_bytes解码图像")img, ratio, (dw, dh) = letterbox(im0, new_shape=imgsz)  # 调整图像尺寸img = img.transpose((2, 0, 1))[::-1]  # 调整通道顺序由(640,640,3)变为(3,640,640)img = np.ascontiguousarray(img)img = img[np.newaxis, ...].astype(np.float32) / 255.0  # 归一化处理input_name = session.get_inputs()[0].nameresult = session.run(None, {input_name: img})  # 执行模型推理return result[0], ratio, (dw, dh)def process_images_in_folder(folder_path, model_weights, output_folder, conf_threshold, iou_threshold, imgsz):"""批量处理文件夹中的图像,执行推理、解析和可视化,保存结果。:param folder_path: 输入图像文件夹路径:param model_weights: ONNX模型权重文件路径:param output_folder: 输出结果文件夹路径:param conf_threshold: 置信度阈值:param iou_threshold: IoU 阈值,用于旋转NMS:param imgsz: 模型输入大小"""session = load_model(weights=model_weights)  # 加载ONNX模型if not os.path.exists(output_folder):os.makedirs(output_folder)  # 如果输出文件夹不存在,则创建for filename in os.listdir(folder_path):if filename.endswith(('.jpg', '.png', '.jpeg')):  # 处理图片文件image_path = os.path.join(folder_path, filename)with open(image_path, 'rb') as f:image_bytes = f.read()print("image_path:", image_path)raw_output, ratio, dwdh = run_inference(session=session, image_bytes=image_bytes, imgsz=imgsz)  # 执行推理# 主函数:加载参数
if __name__ == "__main__":folder_path = r"images"  # 输入图像文件夹路径model_weights = r"best.onnx"  # ONNX模型路径output_folder = "results"  # 输出结果文件夹conf_threshold = 0.5  # 置信度阈值iou_threshold = 0.5  # IoU阈值,用于旋转NMSimgsz = (640, 640)  # 模型输入大小process_images_in_folder(folder_path, model_weights, output_folder, conf_threshold, iou_threshold, imgsz)  # 执行批量处理

推理出的结果如下:raw_output(1,7,8400), ratio((0.15873015873015872, 0.15873015873015872)为缩放比例, dwdh(0.0, 80.0)是填充尺度。

随后,便是结果解析了,即后处理过程,如下:
这里需要注意的是,输出结果为(8400,7)其中,0-3xywh4scores5class_id6angle

import os
import cv2
import numpy as np
import onnxruntime as ort
import logging"""
YOLO11 旋转目标检测OBB
1、ONNX模型推理、可视化
2、ONNX输出格式: x_center, y_center, width, height, class1_confidence, ..., classN_confidence, angle
3、支持不同尺寸图片输入、支持旋转NMS过滤重复框、支持ProbIoU旋转IOU计算
"""def letterbox(img, new_shape=(640, 640), color=(0, 0, 0), auto=False, scale_fill=False, scale_up=False, stride=32):"""将图像调整为指定尺寸,同时保持长宽比,添加填充以适应目标输入形状。:param img: 输入图像:param new_shape: 目标尺寸:param color: 填充颜色:param auto: 是否自动调整填充为步幅的整数倍:param scale_fill: 是否强制缩放以完全填充目标尺寸:param scale_up: 是否允许放大图像:param stride: 步幅,用于自动调整填充:return: 调整后的图像、缩放比例、填充尺寸(dw, dh)"""shape = img.shape[:2]if isinstance(new_shape, int):new_shape = (new_shape, new_shape)r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])  # 计算缩放比例if not scale_up:r = min(r, 1.0)ratio = r, rnew_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]if auto:dw, dh = np.mod(dw, stride), np.mod(dh, stride)elif scale_fill:dw, dh = 0.0, 0.0new_unpad = (new_shape[1], new_shape[0])ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]dw /= 2  # 填充均分dh /= 2if shape[::-1] != new_unpad:img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))left, right = int(round(dw - 0.1)), int(round(dw + 0.1))img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)return img, ratio, (dw, dh)def _get_covariance_matrix(obb):"""计算旋转边界框的协方差矩阵。:param obb: 旋转边界框 (Oriented Bounding Box),包含中心坐标、宽、高和旋转角度:return: 协方差矩阵的三个元素 a, b, c"""widths = obb[..., 2] / 2heights = obb[..., 3] / 2angles = obb[..., 4]cos_angle = np.cos(angles)sin_angle = np.sin(angles)a = (widths * cos_angle)**2 + (heights * sin_angle)**2b = (widths * sin_angle)**2 + (heights * cos_angle)**2c = widths * cos_angle * heights * sin_anglereturn a, b, cdef batch_probiou(obb1, obb2, eps=1e-7):"""计算旋转边界框之间的 ProbIoU。:param obb1: 第一个旋转边界框集合:param obb2: 第二个旋转边界框集合:param eps: 防止除零的极小值:return: 两个旋转边界框之间的 ProbIoU"""x1, y1 = obb1[..., 0], obb1[..., 1]x2, y2 = obb2[..., 0], obb2[..., 1]a1, b1, c1 = _get_covariance_matrix(obb1)a2, b2, c2 = _get_covariance_matrix(obb2)t1 = ((a1[:, None] + a2) * (y1[:, None] - y2)**2 + (b1[:, None] + b2) * (x1[:, None] - x2)**2) / ((a1[:, None] + a2) * (b1[:, None] + b2) - (c1[:, None] + c2)**2 + eps) * 0.25t2 = ((c1[:, None] + c2) * (x2 - x1[:, None]) * (y1[:, None] - y2)) / ((a1[:, None] + a2) * (b1[:, None] + b2) - (c1[:, None] + c2)**2 + eps) * 0.5t3 = np.log(((a1[:, None] + a2) * (b1[:, None] + b2) - (c1[:, None] + c2)**2) /(4 * np.sqrt((a1 * b1 - c1**2)[:, None] * (a2 * b2 - c2**2)) + eps) + eps) * 0.5bd = np.clip(t1 + t2 + t3, eps, 100.0)hd = np.sqrt(1.0 - np.exp(-bd) + eps)return 1 - hddef rotated_nms_with_probiou(boxes, scores, iou_threshold=0.5):"""使用 ProbIoU 执行旋转边界框的非极大值抑制(NMS)。:param boxes: 旋转边界框的集合:param scores: 每个边界框的置信度得分:param iou_threshold: IoU 阈值,用于确定是否抑制框:return: 保留的边界框索引列表"""order = scores.argsort()[::-1]  # 根据置信度得分降序排序keep = []while len(order) > 0:i = order[0]keep.append(i)if len(order) == 1:breakremaining_boxes = boxes[order[1:]]iou_values = batch_probiou(boxes[i:i+1], remaining_boxes).squeeze(0)mask = iou_values < iou_threshold  # 保留 IoU 小于阈值的框order = order[1:][mask]return keepdef parse_onnx_output(output, ratio, dwdh, conf_threshold=0.5, iou_threshold=0.5):"""解析ONNX模型的输出,提取旋转边界框坐标、置信度和类别信息,并应用旋转NMS。:param output: ONNX模型的输出,包含预测的边界框信息:param ratio: 缩放比例,用于将坐标还原到原始尺度:param dwdh: 填充的宽高,用于调整边界框的中心点坐标:param conf_threshold: 置信度阈值,过滤低于该阈值的检测框:param iou_threshold: IoU 阈值,用于旋转边界框的非极大值抑制(NMS):return: 符合条件的旋转边界框的检测结果"""boxes, scores, classes, detections = [], [], [], []num_detections = output.shape[2]  # 获取检测的边界框数量num_classes = output.shape[1] - 6  # 计算类别数量# 逐个解析每个检测结果for i in range(num_detections):detection = output[0, :, i]x_center, y_center, width, height = detection[0], detection[1], detection[2], detection[3]  # 提取边界框的中心坐标和宽高angle = detection[-1]  # 提取旋转角度if num_classes > 0:class_confidences = detection[4:4 + num_classes]  # 获取类别置信度if class_confidences.size == 0:continueclass_id = np.argmax(class_confidences)  # 获取置信度最高的类别索引confidence = class_confidences[class_id]  # 获取对应的置信度else:confidence = detection[4]  # 如果没有类别信息,直接使用置信度值class_id = 0  # 默认类别为 0if confidence > conf_threshold:  # 过滤掉低置信度的检测结果x_center = (x_center - dwdh[0]) / ratio[0]  # 还原中心点 x 坐标y_center = (y_center - dwdh[1]) / ratio[1]  # 还原中心点 y 坐标width /= ratio[0]  # 还原宽度height /= ratio[1]  # 还原高度boxes.append([x_center, y_center, width, height, angle])  # 将边界框信息加入列表scores.append(confidence)  # 将置信度加入列表classes.append(class_id)  # 将类别加入列表if not boxes:return []# 转换为 NumPy 数组boxes = np.array(boxes)scores = np.array(scores)classes = np.array(classes)# 应用旋转 NMSkeep_indices = rotated_nms_with_probiou(boxes, scores, iou_threshold=iou_threshold)# 构建最终检测结果for idx in keep_indices:x_center, y_center, width, height, angle = boxes[idx]  # 获取保留的边界框信息confidence = scores[idx]  # 获取对应的置信度class_id = classes[idx]  # 获取类别obb_corners = calculate_obb_corners(x_center, y_center, width, height, angle)  # 计算旋转边界框的四个角点detections.append({"position": obb_corners,  # 旋转边界框的角点坐标"confidence": float(confidence),  # 置信度"class_id": int(class_id),  # 类别 ID"angle": float(angle)  # 旋转角度})return detectionsdef calculate_obb_corners(x_center, y_center, width, height, angle):"""根据旋转角度计算旋转边界框的四个角点。:param x_center: 边界框中心的 x 坐标:param y_center: 边界框中心的 y 坐标:param width: 边界框的宽度:param height: 边界框的高度:param angle: 旋转角度:return: 旋转边界框的四个角点坐标"""cos_angle = np.cos(angle)  # 计算旋转角度的余弦值sin_angle = np.sin(angle)  # 计算旋转角度的正弦值dx = width / 2  # 计算宽度的一半dy = height / 2  # 计算高度的一半# 计算旋转边界框的四个角点坐标corners = [(int(x_center + cos_angle * dx - sin_angle * dy), int(y_center + sin_angle * dx + cos_angle * dy)),(int(x_center - cos_angle * dx - sin_angle * dy), int(y_center - sin_angle * dx + cos_angle * dy)),(int(x_center - cos_angle * dx + sin_angle * dy), int(y_center - sin_angle * dx - cos_angle * dy)),(int(x_center + cos_angle * dx + sin_angle * dy), int(y_center + sin_angle * dx - cos_angle * dy)),]return corners  # 返回角点坐标def save_detections(image, detections, output_path):"""在图像上绘制旋转边界框检测结果并保存。:param image: 原始图像:param detections: 检测结果列表:param output_path: 保存路径"""for det in detections:corners = det['position']  # 获取旋转边界框的四个角点confidence = det['confidence']  # 获取置信度class_id = det['class_id']  # 获取类别ID# 绘制边界框的四条边for j in range(4):pt1 = corners[j]pt2 = corners[(j + 1) % 4]cv2.line(image, pt1, pt2, (0, 0, 255), 2)# 在边界框上方显示类别和置信度cv2.putText(image, f'Class: {class_id}, Conf: {confidence:.2f}',(corners[0][0], corners[0][1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 3)cv2.imwrite(output_path, image)  # 保存绘制后的图像

相关文章:

YOLO旋转目标检测之ONNX模型推理

YOLO旋转检测相较于目标检测而言&#xff0c;其只是最后的输出层网络发生了改变&#xff0c;一个最明显的区别便是&#xff1a;目标检测的检测框是xywh&#xff0c;而旋转检测则为xywha&#xff0c;其中&#xff0c;这个a代表angle&#xff0c;即旋转角度&#xff0c;其余的基本…...

C++八股--three day --设计模式之单例和工厂

对于C编程中的思想&#xff0c;最常见的就是考察设计模式了 那么我们在面试中常考的设计模式包含以下几种&#xff1a;单例模式&#xff0c; 接下来我们按顺序介绍 1.单例模式&#xff1a; 一个类只能创建一个实例&#xff1a;常应用于日志模块&#xff0c;数据库模块 …...

GAMES202-高质量实时渲染(Assignment 2)

目录 作业介绍环境光贴图预计算传输项的预计算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 实时球谐光照计算 GitHub主页&#xff1a;https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 作业介绍 物体在不同…...

一、Shell 脚本基础

一、Shell 简介 1.Shell 的定义与作用 Shell&#xff0c;通常被称为命令行解释器 (Command Line Interpreter)&#xff0c;是用户 &#x1f464; 与 Linux/Unix 操作系统内核进行交互 ↔️ 的“桥梁” &#x1f309;。它扮演着翻译官 &#x1f5e3;️ 的角色&#xff1a; 接…...

redis持久化-RDB

redis持久化-RDB 文档 redis单机安装redis常用的五种数据类型redis数据类型-位图bitmapredis数据类型-基数统计HyperLogLogredis数据类型-地理空间GEOredis数据类型-流Streamredis数据类型-位域bitfield 官方文档 官网操作命令指南页面&#xff1a;https://redis.io/docs/l…...

经典算法 石子合并问题

石子合并问题 问题描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。试设计出一个算法,计算出将N堆石子合并成1堆最大得分和最小得分。 输入描述…...

2025A卷华为OD机试真题-数组二叉树(C++/Java/Python)-100分

2025华为OD机试题库-(2025A卷+E卷+D卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 示例 1 示例 2 解题思路 代码 c++ java python 题目描述 二叉树也可以用数组来存储,给定一个数组,树的根节点的值储存在下标1,对于储存在下标n的节点,他的左子节点…...

NHANES指标推荐:TyG指数

文章题目&#xff1a;Association between the Triglyceride-glucose index and fragility fractures among US adults: insights from NHANES DOI&#xff1a;10.1186/s13098-025-01669-w 中文标题&#xff1a;美国成年人甘油三酯-葡萄糖指数与脆性骨折之间的关联&#xff1a;…...

文件操作--文件下载读取漏洞

本文主要内容 文件下载 产生 任意语言代码下载功能函数 检测 白盒 代码审计 黑盒 漏扫工具、公开漏洞、手工看参数值及功能点&#xff08;资源下载&#xff09; 利用 常见文件 后台首页日志等可见文件 敏感文件 数据库配置文件、各种接口文件、密匙…...

4.0/Q2,Charls最新文章解读

文章题目&#xff1a;The nonlinear association of ratio of total cholesterol to high density lipoprotein with cognition ability: evidence from a community cohort in China DOI&#xff1a;10.3389/fnut.2025.1525348 中文标题&#xff1a;总胆固醇与高密度脂蛋白比值…...

Linux-常用监控工具

以下是对 Linux 系统中常用监控工具&#xff08;netstat、ss、dmesg&#xff09;的系统性介绍&#xff0c;涵盖其核心功能、典型用法及实际应用场景&#xff0c;帮助您分析系统状态和内核参数调整后的效果&#xff1a; 1. netstat -s&#xff1a;网络协议栈统计监控 功能 net…...

【HarmonyOS Next】地图使用详解(三)标点定位问题

背景 在使用geoLocationManager的getCurrentLocation方法获得的用户定位经纬度的坐标系为 WGS84 &#xff0c;但是mapkit使用的是GCJ02坐标系。因此&#xff0c;我们在使用获取用户经纬度然后直接生成标记时&#xff0c;会出现坐标偏移问题。如下&#xff1a; 解决方案 使用…...

Linux运维中常用的磁盘监控方式

在Linux运维中&#xff0c;磁盘监控是一项关键任务&#xff0c;因为它能帮助我们预防磁盘空间不足或性能问题导致的服务中断或数据丢失。让我们来看看有哪些常用的磁盘监控方法吧&#xff01; 1. 查看磁盘使用情况&#xff08;df命令&#xff09; df命令用于显示文件系统的…...

前端面经-VUE3篇--vue3基础知识(二)计算属性(computed)、监听属性(Watch)

一、计算属性(computed) 计算属性&#xff08;Computed Properties&#xff09;是 Vue 中一种特殊的响应式数据&#xff0c;它能基于已有的响应式数据动态计算出新的数据。 计算属性有以下特性&#xff1a; 自动缓存&#xff1a;只有当它依赖的响应式数据发生变化时&#xff…...

双向链表详解

一、双向链表介绍 二、实现双向链表 1.定义双向链表的结构 2.双向链表的初始化 3.双向链表的尾插 4.双向链表的头插 5.双向链表的打印 6.双向链表的尾删 7.双向链表的头删 8.查找指定位置的数据 9.在指定位置之后插入数据 10.删除指定位置的数据 11.链表的销毁 三、…...

基于SpringBoot+Vue实现的电影推荐平台功能一

一、前言介绍&#xff1a; 1.1 项目摘要 2023年全球流媒体用户突破15亿&#xff0c;用户面临海量内容选择困难&#xff0c;传统推荐方式存在信息过载、推荐精准度低等问题。传统推荐系统存在响应延迟高&#xff08;平均>2s&#xff09;。随着互联网的快速发展&#xff0c;…...

预订接口优化:使用本地消息表保证订单生成、库存扣减的一致性

&#x1f3af; 本文介绍了一种优化预订接口的方法&#xff0c;通过引入本地消息表解决分布式事务中的最终一致性问题。原先的实现是在一个事务中同时扣减库存和创建订单&#xff0c;容易因网络不稳定导致数据不一致。改进后的方法将业务操作和消息发送封装在本地事务中&#xf…...

深度学习与 PyTorch 基础

笔记 1 深度学习简介 1.1 深度学习概念 深度学习是机器学习的一类算法, 以人工神经网络为结构, 可以实现自动提取特征 深度学习核心思想是人工神经网络为结构, 自动提取特征 1.2 深度学习特点 自动提取特征 解释性差 大量数据和高性能计算能力 非线性转换(引入非线性因…...

libevent库详解:高性能异步IO的利器

目录 一、libevent 简介 主要特点&#xff1a; 二、事件模型原理 1. event_base 2. event 3. evconnlistener&#xff08;TCP监听器&#xff09; 4. bufferevent 简化流程如下&#xff1a; 三、libevent 使用示例 1. 创建事件主循环 2. 创建监听器&#xff08;TCP&a…...

第一章:A Primer on Memory Consistency and Cache Coherence - 2nd Edition

引言&#xff1a; 许多现代计算机系统&#xff0c;包括同构和异构架构的系统&#xff0c;都在硬件层面支持共享内存。在共享内存系统中&#xff0c;每个处理器核心都可以对单一的共享地址空间进行读写操作。对于共享内存计算机而言&#xff0c;内存一致性模型定义了其内存系统在…...

NVIDIA Omniverse在数字孪生中的算力消耗模型构建方法

引言&#xff1a;虚拟实验室的算力经济学 在高校虚拟实验室建设中&#xff0c;数字孪生系统的实时物理仿真精度与算力成本之间存在显著矛盾。以H800 GPU集群为例&#xff0c;单个8卡节点每秒可处理2.3亿个物理粒子交互&#xff0c;但若未建立精准的算力消耗模型&#xff0c;资…...

C++ 动态内存管理详讲

1. 四个全局函数的定义与作用 这四个函数只负责空间的开辟和释放&#xff0c;不会调构造和析构 (1) ::operator new cpp void* operator new(size_t size); // 全局版本 功能&#xff1a;分配 size 字节的未初始化内存。 底层实现&#xff1a;调用 malloc(size)。 调用场…...

纹理对象创建

纹理对象通俗点就是贴图&#xff0c;像游戏的皮肤什么就是纹理。常间的结构就是激活纹理单元&#xff08;0-15有16个&#xff09;&#xff0c;将纹理对象挂在纹理单元上&#xff0c;纹理采样器需要采哪个样品就与哪个单元挂钩就行了&#xff0c;加载纹理对象需要用到stb_image库…...

如何利用dify 生成Fine‑tune 需要的Alpaca 格式数据

如果你选择llamafactory 格式进行微调&#xff0c;它只是格式是Alpaca格式&#xff0c;dify 的agent dsl 如下&#xff0c;你可以导入本地的dify 或者导入cloud 版本的&#xff1b;测试版本是0.1.5 app:description: 上传文件&#xff0c;基于文件内容&#xff0c;使用 Silico…...

软件第三方测试:关键部分、意义、流程及方法全解析?

软件第三方测试是保障软件质量的关键部分&#xff0c;它由专业的机构来开展&#xff0c;这个机构不隶属于开发方和使用方&#xff0c;能以客观公正的视角找出软件问题。 测试意义 软件第三方测试意义重大&#xff0c;它依靠专业技术&#xff0c;依照严格流程&#xff0c;对软…...

贪心算法解决会议安排问题

文章目录 前言 一、什么是贪心算法&#xff1f; 贪心算法的基本概念&#xff1a;贪心算法并不从整体最优上加以考虑&#xff0c;所做的选择只是在某种意义上的局部最优选择。 二、会议安排题目 1.题目理解 2.思路剖析 总结 前言 本文将主要介绍贪心算法需要注意的地方以…...

高露洁牙膏是哪个国家的品牌?高露洁牙膏哪一款最好?

高露洁是来自于美国一个比较有知名度的品牌&#xff0c;在1806年的时候创立。总部是在美国纽约公园大道&#xff0c;在1873年时&#xff0c;高露洁就已经开始销售罐装牙膏。 在1896年时期推出可折叠管牙膏&#xff0c;在口腔护理产品发展的过程中拥有着不容忽视的地位。在1992…...

lin接口在线计算数据帧的校验位

在线校验计算链接&#xff1a;https://linchecksumcalculator.machsystems.cz/ 插入图片&#xff1a;...

Linux-07-Shell

一、Shell概述: Shell是一个命令行解释器&#xff0c;它接受应用程序/用户命令&#xff0c;然后调用操作系统内核 二、Shell中的变量: 1.系统预定义的变量: $HOME,$PWD,$SHELL,$USER等 2.用户自定义的变量: (1).基本语法: 定义变量:变量名变量值&#xff0c;注意前后不能…...

【云盘】使用阿里云盘托管项目大文件

【云盘】使用阿里云盘托管项目大文件 由于经常需要切换服务器运行项目实验&#xff0c;不同服务器在项目实验过程中会产生不同的数据、模型等较大文件&#xff0c;不能像代码那样能够使用git托管&#xff0c;因此考虑使用阿里云盘作为”第三方平台“托管这些大文件。 一、使用…...

《缓存策略:移动应用网络请求的“效能密钥” 》

用户体验无疑是重中之重&#xff0c;而网络请求性能&#xff0c;恰似一座桥梁&#xff0c;连接着用户与应用丰富的内容和功能。当网络不佳或者请求频繁时&#xff0c;缓慢的响应速度常常让用户兴致索然&#xff0c;甚至可能导致用户流失。此时&#xff0c;缓存策略就如同一位幕…...

深入解析C++11委托构造函数:消除冗余初始化的利器

一、传统构造函数的痛点 在C11之前&#xff0c;当多个构造函数需要执行相同的初始化逻辑时&#xff0c;开发者往往面临两难选择&#xff1a; class DataProcessor {std::string dataPath;bool verbose;int bufferSize; public:// 基础版本DataProcessor(const std::string&am…...

文章七《深度学习调优与超参数优化》

&#x1f680; 文章7&#xff1a;深度学习调优与超参数优化——你的AI模型需要一场"整容手术" 一、模型调优核心策略&#xff1a;像调整游戏装备一样优化模型 1. 学习率调整&#xff1a;掌控训练的"油门踏板" 比喻&#xff1a;把模型训练想象成赛车游戏&…...

python入门(1)变量与输入输出

一、变量 使用规则 变量名值例子 a13变量名规则 变量名可以用大小写字母、数字、下划线。 数字、下划线不可开头 例子 name name1 1name name_first _first 二、输入输出 输出print print(*objects,sep"",end"\n") objects:多个要输出的值 sep:每个…...

藏文情感分析器入门学习实践

&#x1f3af; 项目目标&#xff1a; 输入一段藏文短句。自动分析这句话的情感倾向&#xff1a;积极&#xff08;正面&#xff09;/消极&#xff08;负面&#xff09;/中立。 &#x1f50d; 技术原理简介 情感分析是什么&#xff1f; 情感分析&#xff08;Sentiment Analysi…...

爱胜品ICSP YPS-1133DN Plus黑白激光打印机报“自动进纸盒进纸失败”处理方法之一

故障现象如下图提示&#xff1a; 用户的爱胜品ICSP YPS-1133DN Plus黑白激光打印机在工作过程中提示自动进纸盒进纸失败并且红色故障灯闪烁&#xff1b; 给出常见故障一般处理建议如下&#xff1a; 当您的爱胜品ICSP YPS-1133DN Plus 黑白激光打印机出现“自动进纸盒进纸失败”…...

数据库索引重建与优化操作在数据库性能维护与数据更新频繁场景下的应用

数据库索引重建与优化操作在数据库性能维护与数据更新频繁场景下的应用 数据库索引的作用与重要性 索引的定义与作用 数据库索引是一种特殊的数据结构&#xff0c;用于加快数据库表的数据检索速度。它类似于书籍的目录&#xff0c;能够快速定位到需要的数据页&#xff0c;而不必…...

前端应用开发技术历程的简要概览

前端应用开发技术详解 一、萌芽期&#xff08;1990s - 2004&#xff09; 技术特征 HTML 3.2 / HTML 4.01 是主流版本。 样式用 CSS1/CSS2&#xff0c;但大部分样式写在 <style> 标签甚至行内。 动态效果主要通过 JavaScript 控制 DOM&#xff0c;兼容性极差。 代表事…...

SPOJ 11576 TRIP2 - A Famous King’s Trip 【Tarjan+欧拉回路】

自我吐槽 &#xff08;哭 题目传送门 SPOJ 洛谷 题目大意 让你在简单无向图上删去2条边&#xff0c;使该图联通并存在欧拉回路 输出字典序最小的一对边 思路 考虑到存在欧拉回路的充要条件&#xff0c;即 i n x ≡ 0 ( m o d 2 ) ∀ i ( 1 ≤ i ≤ n ) in_x\equiv 0 (\m…...

DeepSeek R1:强化学习范式的推理强化模型

定位与目标 DeepSeek R1 的推出并非 DeepSeek V3 的简单迭代,而是一次在训练范式上的大胆探索。与传统大模型主要依靠监督微调(SFT)后进行强化学习不同,R1 将重点放在推理能力和行为对齐上,尝试通过大规模强化学习直接激发模型的推理潜力。其目标是利用强化学习的反馈机制,…...

ubuntu22.04安装显卡驱动与cuda+cuDNN

背景&#xff1a; 紧接前文&#xff1a;Proxmox VE 8.4 显卡直通完整指南&#xff1a;NVIDIA 2080 Ti 实战。在R740服务器完成了proxmox的安装&#xff0c;并且安装了一张2080ti 魔改22g显存的的显卡。配置完了proxmox显卡直通&#xff0c;并将显卡挂载到了vm 301&#xff08;…...

使用python爬取百度搜索中关于python相关的数据信息

Python爬取百度搜索"Python"相关数据信息 一、准备工作 在开始爬取之前&#xff0c;需要了解以下几点&#xff1a; 百度搜索有反爬机制&#xff0c;需要合理设置请求头百度搜索结果页面结构可能会变化需要遵守robots.txt协议&#xff08;百度允许爬取搜索结果&…...

Bootstrap(自助法)​​:无需假设分布的统计推断工具

核心思想​​ Bootstrap 是一种​​重采样&#xff08;Resampling&#xff09;技术​​&#xff0c;通过在原始数据中​​有放回地重复抽样​​&#xff0c;生成大量新样本集&#xff0c;用于估计统计量&#xff08;如均值、方差&#xff09;的分布或模型性能的不确定性。 ​​…...

lib和dll介绍和VS2019生成实例

目录 lib文件和dll文件的作用dll和lib的优缺点VS2019 编译YOLOv5的dll和lib lib文件和dll文件的作用 (1)lib是编译时需要的&#xff0c;dll是运行时需要的。 如果要完成源代码的编译&#xff0c;有lib就够了。 如果也使动态连接的程序运行起来&#xff0c;有dll就够了。 在开发…...

tinycudann安装过程加ubuntu18.04gcc版本的升级(成功版!!!!)

使用的是 Linux&#xff0c;安装以下软件包 sudo apt-get install build-essential git安装 CUDA 并将 CUDA 安装添加到您的 PATH。 例如&#xff0c;如果您有 CUDA 12.6.3&#xff0c;请将以下内容添加到您的/usr/local/~/.bashrcexport PATH"/usr/local/cuda-12.6.3/bi…...

数字智慧方案5869丨智慧健康医疗养老大数据整体规划方案(76页PPT)(文末有下载方式)

资料解读&#xff1a;智慧健康医疗养老大数据整体规划方案 详细资料请看本解读文章的最后内容。 随着科技的飞速发展&#xff0c;健康医疗领域正经历着一场深刻的变革。特别是在大数据和人工智能技术的推动下&#xff0c;智慧健康医疗养老的整体规划方案逐渐浮出水面。本文将…...

使用huggingface_hub需要注意的事项

在安装huggingface_hub的时候要注意如果你的python是放在c盘下时记得用管理员模式命令行来安装huggingface_hub&#xff0c;否则安装过程会报错&#xff0c;之后也不会有huggingface-cli命令。 如果安装时因为没有用管理员权限安装而报错了&#xff0c;可以先卸载huggingface-…...

Matplotlib核心课程-2

4.1 数据加载、储存 4.1.1 从数据文件读取数据 导入支持库&#xff1a; import numpy as np from pandas import Series,DataFrame import pandas as pd 从csv文件读取数据&#xff0c;一般方法&#xff1a; pd.read_csv(../data/ex1.csv,encodinggbk) 从csv文件读取数据&#…...

友元函数和友元类

友元 友元是 C 提供的一种 打破封装 的机制&#xff0c;允许 友元函数 或 友元类 访问某个类的 非公有成员&#xff08;private/protected&#xff09;。 友元函数 友元函数 可以 直接访问 类的所有 成员&#xff0c;它是 定义在类外部 的 普通函数 &#xff0c;不属于任何类…...

5.2刷题

P1064 [NOIP 2006 提高组] 金明的预算方案 背包&#xff0b;附属品DP #include<bits/stdc.h> using namespace std; #define int long long int n, m, v, p, q; struct node{int id, v, s, f; }a[100]; int b[32010], dp[32010]; bool cmp(node a, node b){if(a.id b.…...