目标检测中的损失函数(三) | SIoU WIoUv1 WIoUv2 WIoUv3
🚀该系列将会持续整理和更新BBR相关的问题,如有错误和不足恳请大家指正,欢迎讨论!!!
SCYLLA-IoU(SIoU)来自挂在2022年arxiv上的文章:《SIoU Loss: More Powerful Learning for Bounding Box Regression》
文章介绍了一个新的损失函数SIoU,用于边界框回归的训练。传统的边界框回归的损失函数依赖于预测框与真实框之间的距离、重叠面积和长宽比等度量,但是没有考虑预测框与真实框之间的方向。因此,SIoU引入了角度敏感的惩罚项,使得在训练过程中预测框更快地向最近的坐标轴靠近,从而减少了自由度,提高了训练速度和准确度。
SIoU损失函数 = 角度损失 + 距离损失 + 形状损失 + IoU损失
Angle Cost(角度惩罚)
目的是让预测框优先向X或Y轴对齐,减少“漂移”自由度,数学表达中引入了角度惩罚函数。
Distance Cost(距离惩罚)
在角度惩罚的影响下重新定义了中心点距离损失,更贴合于角度优化。
Shape Cost(形状惩罚)
对预测框的宽高比和尺寸的偏差进行惩罚,提升尺度与比例的拟合性,使用遗传算法为每个数据集优化 θ控制惩罚强度。
IoU Cost
使用标准IoU定义衡量预测框和目标框之间的重叠程度。
Wise-IoU(WIoU)来自挂在2023年arxiv上的文章:《Wise-IoU: Bounding Box Regression Loss with Dynamic Focusing Mechanism》
文章主要介绍了一种基于动态非单调聚焦机制(FM)的IoU损失函数WIoU,用于BBR的损失函数。WIoU采用异常度来评估锚框的质量,并提供了一种聪明的梯度增益分配策略,使其关注普通质量的锚框并提高检测器的整体性能。
文章详细地对已有且使用广泛地IoU loss做了一个详细地描述,分析了它们存在的问题。
该文作者做了一个详细地讲解:
Wise-IoU 作者导读:基于动态非单调聚焦机制的边界框损失_wiseiou-CSDN博客文章浏览阅读4.9w次,点赞176次,收藏662次。目标检测作为计算机视觉的核心问题,其检测性能依赖于损失函数的设计。边界框损失函数作为目标检测损失函数的重要组成部分,其良好的定义将为目标检测模型带来显著的性能提升。近年来的研究大多假设训练数据中的示例有较高的质量,致力于强化边界框损失的拟合能力。但我们注意到目标检测训练集中含有低质量示例,如果一味地强化边界框对低质量示例的回归,显然会危害模型检测性能的提升。Focal-EIoU v1 被提出以解决这个问题,但由于其聚焦机制是静态的,并未充分挖掘非单调聚焦机制的潜能。_wiseiouhttps://blog.csdn.net/qq_55745968/article/details/128888122?spm=1001.2014.3001.5502
🌍 WIoU的动机就是针对目标检测训练集中含有的低质量数据如何进行才能更好地进行边界框回归呢?
这篇文章的确缺少很多实验去说明超参数的设置以及这样的做法能否带来一个很好的性能。
主要有四个超参数,分别是alpha、delta、t和n。
✅ 创新点:
-
与以往采用策略(如 Focal Loss、Focal-EIoU)不同,WIoU 提出了动态的、非单调的梯度权重函数
-
基于outlier degree(离群度)计算每个 anchor box 相对质量的动态指标,从而调整梯度权重
🎯 解决的问题:
-
避免盲目加强对高质量或低质量样本的学习
-
减少低质量样本带来的“有害梯度”
-
提高模型对“普通质量样本”的关注,有利于泛化
在ultralytics-main/ultralytics/utils/metrics.py中的实现:
class WIoU_Scale:''' monotonous: {None: origin v1True: monotonic FM v2False: non-monotonic FM v3}momentum: The momentum of running mean'''iou_mean = 1.monotonous = False# 论文里面用的是0.05,作者说这样比较可解释一些# 1 - pow(0.05, 1 / (890 * 34))_momentum = 1 - 0.5 ** (1 / 7000) # 1e-2_is_train = Truedef __init__(self, iou):self.iou = iouself._update(self)@classmethoddef _update(cls, self):if cls._is_train: cls.iou_mean = (1 - cls._momentum) * cls.iou_mean + \cls._momentum * self.iou.detach().mean().item()@classmethoddef _scaled_loss(cls, self, gamma=1.9, delta=3):if isinstance(self.monotonous, bool):if self.monotonous:return (self.iou.detach() / self.iou_mean).sqrt()else:beta = self.iou.detach() / self.iou_meanalpha = delta * torch.pow(gamma, beta - delta)return beta / alphareturn 1def bbox_iou(box1, box2, xywh=True, GIoU=False, DIoU=False, CIoU=False, SIoU=False, EIoU=False, WIoU=False, Focal=False, alpha=1, gamma=0.5, scale=False, eps=1e-7):# Returns Intersection over Union (IoU) of box1(1,4) to box2(n,4)# Get the coordinates of bounding boxesif xywh: # transform from xywh to xyxy(x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1)w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_else: # x1, y1, x2, y2 = box1b1_x1, b1_y1, b1_x2, b1_y2 = box1.chunk(4, -1)b2_x1, b2_y1, b2_x2, b2_y2 = box2.chunk(4, -1)w1, h1 = b1_x2 - b1_x1, (b1_y2 - b1_y1).clamp(eps)w2, h2 = b2_x2 - b2_x1, (b2_y2 - b2_y1).clamp(eps)# Intersection areainter = (b1_x2.minimum(b2_x2) - b1_x1.maximum(b2_x1)).clamp(0) * \(b1_y2.minimum(b2_y2) - b1_y1.maximum(b2_y1)).clamp(0)# Union Areaunion = w1 * h1 + w2 * h2 - inter + epsif scale:self = WIoU_Scale(1 - (inter / union))# IoU# iou = inter / union # ori iouiou = torch.pow(inter/(union + eps), alpha) # alpha iouif CIoU or DIoU or GIoU or EIoU or SIoU or WIoU:cw = b1_x2.maximum(b2_x2) - b1_x1.minimum(b2_x1) # convex (smallest enclosing box) widthch = b1_y2.maximum(b2_y2) - b1_y1.minimum(b2_y1) # convex heightif CIoU or DIoU or EIoU or SIoU or WIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1c2 = (cw ** 2 + ch ** 2) ** alpha + eps # convex diagonal squaredrho2 = (((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4) ** alpha # center dist ** 2if CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47v = (4 / math.pi ** 2) * (torch.atan(w2 / h2) - torch.atan(w1 / h1)).pow(2)with torch.no_grad():alpha_ciou = v / (v - iou + (1 + eps))if Focal:return iou - (rho2 / c2 + torch.pow(v * alpha_ciou + eps, alpha)), torch.pow(inter/(union + eps), gamma) # Focal_CIoUelse:# iou - (rho2 / c2 + (v * alpha_ciou + eps) ** alpha)return iou - (rho2 / c2 + torch.pow(v * alpha_ciou + eps, alpha)) # CIoUelif EIoU:rho_w2 = ((b2_x2 - b2_x1) - (b1_x2 - b1_x1)) ** 2rho_h2 = ((b2_y2 - b2_y1) - (b1_y2 - b1_y1)) ** 2cw2 = torch.pow(cw ** 2 + eps, alpha)ch2 = torch.pow(ch ** 2 + eps, alpha)if Focal:return iou - (rho2 / c2 + rho_w2 / cw2 + rho_h2 / ch2), torch.pow(inter/(union + eps), gamma) # Focal_EIouelse:return iou - (rho2 / c2 + rho_w2 / cw2 + rho_h2 / ch2) # EIouelif SIoU:# SIoU Loss https://arxiv.org/pdf/2205.12740.pdfs_cw = (b2_x1 + b2_x2 - b1_x1 - b1_x2) * 0.5 + epss_ch = (b2_y1 + b2_y2 - b1_y1 - b1_y2) * 0.5 + epssigma = torch.pow(s_cw ** 2 + s_ch ** 2, 0.5)sin_alpha_1 = torch.abs(s_cw) / sigmasin_alpha_2 = torch.abs(s_ch) / sigmathreshold = pow(2, 0.5) / 2sin_alpha = torch.where(sin_alpha_1 > threshold, sin_alpha_2, sin_alpha_1)angle_cost = torch.cos(torch.arcsin(sin_alpha) * 2 - math.pi / 2)rho_x = (s_cw / cw) ** 2rho_y = (s_ch / ch) ** 2gamma = angle_cost - 2distance_cost = 2 - torch.exp(gamma * rho_x) - torch.exp(gamma * rho_y)omiga_w = torch.abs(w1 - w2) / torch.max(w1, w2)omiga_h = torch.abs(h1 - h2) / torch.max(h1, h2)shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4)if Focal:return iou - torch.pow(0.5 * (distance_cost + shape_cost) + eps, alpha), torch.pow(inter/(union + eps), gamma) # Focal_SIouelse:return iou - torch.pow(0.5 * (distance_cost + shape_cost) + eps, alpha) # SIouelif WIoU:if Focal:raise RuntimeError("WIoU do not support Focal.")elif scale:# WIoU_Scale._scaled_loss(self)return getattr(WIoU_Scale, '_scaled_loss')(self), (1 - iou) * torch.exp((rho2 / c2)), iou # WIoU https://arxiv.org/abs/2301.10051else:return iou, torch.exp((rho2 / c2)) # WIoU v1if Focal:return iou - rho2 / c2, torch.pow(inter/(union + eps), gamma) # Focal_DIoUelse:return iou - rho2 / c2 # DIoUc_area = cw * ch + eps # convex areaif Focal:return iou - torch.pow((c_area - union) / c_area + eps, alpha), torch.pow(inter/(union + eps), gamma) # Focal_GIoU https://arxiv.org/pdf/1902.09630.pdfelse:return iou - torch.pow((c_area - union) / c_area + eps, alpha) # GIoU https://arxiv.org/pdf/1902.09630.pdfif Focal:return iou, torch.pow(inter/(union + eps), gamma) # Focal_IoUelse:return iou # IoU
在ultralytics-main/ultralytics/utils/loss.py中的调用,替换掉原有的那两行代码:
iou = bbox_iou(pbox, tbox[i], WIoU=True, scale=True).squeeze()
if type(iou) is tuple:lbox += (iou[1].detach() * (1.0 - iou[0])).mean()
else:lbox += (1.0 - iou).mean()
这样写会报一个错误:
AttributeError: 'tuple' object has no attribute 'squeeze'
需要写成这个样子:
iou = bbox_iou(pbox, tbox[i], WIoU=True, scale=True)if type(iou) is tuple:if len(iou) == 2:lbox += (iou[1].detach().squeeze() * (1 - iou[0].squeeze())).mean()iou = iou[0].squeeze()else:lbox += (iou[0] * iou[1]).mean()iou = iou[2].squeeze()else:lbox += (1.0 - iou.squeeze()).mean() iou = iou.squeeze()
以上的实现来源于此:https://github.com/z1069614715/objectdetection_script/blob/master/yolo-improve/iou.pyhttps://github.com/z1069614715/objectdetection_script/blob/master/yolo-improve/iou.py
相关文章:
目标检测中的损失函数(三) | SIoU WIoUv1 WIoUv2 WIoUv3
🚀该系列将会持续整理和更新BBR相关的问题,如有错误和不足恳请大家指正,欢迎讨论!!! SCYLLA-IoU(SIoU)来自挂在2022年arxiv上的文章:《SIoU Loss: More Powerful Learnin…...
51、【OS】【Nuttx】【OSTest】参数解析:参数处理过程
背景 接上两篇 blog: 49、【OS】【Nuttx】【OSTest】参数解析:测试项 50、【OS】【Nuttx】【OSTest】参数解析:函数定义 getopt_common 来看 getopt_common 的实现过程 首先校验输入参数是否为空,如果没有输入参数࿰…...
python实现基于Windows系统计算器程序
Python实现Windows系统计算器程序(含高级功能) 下面我将介绍如何使用Python创建一个功能完整的Windows风格计算器程序,包含基本运算和高级数学功能。 1. 使用Tkinter实现基础计算器 import tkinter as tk from tkinter import ttk import …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません &(~た・~ない)ほうがいいです 1、前言(1)情况说明(2)工程师…...
AI Rack架构高速互连的挑战:损耗设计与信号完整性的设计框架
在AI驱动的时代,系统设计已经从单一PCB的视角,逐步转向以整个rack为单位来考量。 对于信号完整性而言,焦点以不再局限于单一PCB上的损耗,而是扩展到芯片与芯片之间的端到端互连损耗(end-to-end interconnect loss&…...
React useCallback函数
应用场景:父组件向子组件传递函数类型的props时...
【CTFer成长之路】XSS的魔力
XSS闯关 level1 访问url: http://c884a553-d874-4514-9c32-c19c7d7b6e1c.node3.buuoj.cn/level1?usernamexss 因为是xss,所以对传参进行测试,修改?username1,进行访问 会发现username参数传入什么,welcome之后就…...
多模态RAG演进-MRAG1.0->MRAG2.0->MRAG3.0
MRAG1.0 MRAG1.0是MRAG框架的初始阶段,通常被称为“伪MRAG”。它是对RAG范式的简单扩展,支持多模态数据。MRAG1.0通过利用现有的基于文本的检索和生成机制,实现了从RAG到MRAG的平稳过渡。 MRAG1.0的架构包括三个关键组件: 文档解…...
超预期!淘宝闪购提前开放全国全量,联合饿了么扭转外卖战局
饿了么由守转攻。 作者|景行 编辑|杨舟 淘宝饿了么,终于落子,“淘宝闪购”,横空出世,仅仅2天,业务加速。 4月30日上午,当外卖战场陷入沉寂时,淘宝宣布将即时零售业务“小时达”升级为“淘宝闪…...
Proxmox VE 8.4 显卡直通完整指南:NVIDIA 2080 Ti 实战
背景: PCIe Passthrough 技术允许虚拟机直接访问物理GPU设备,绕过宿主机系统,从而获得接近原生性能的图形处理能力. 参照:从Proxmox VE开始:安装与配置指南。在R740服务器完成了proxmox的安装,并且安装了一…...
算法技巧——打表
什么是打表? 打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得一个有序表或常量表,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的…...
JavaScript基础-逻辑运算符
在JavaScript编程中,逻辑运算符用于判断表达式的真假,并根据结果执行特定的操作。掌握逻辑运算符是理解条件控制结构的关键之一。本文将详细介绍JavaScript中的三种主要逻辑运算符:&&(逻辑与)、||(…...
P20:Inception v3算法实战与解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 使用InceptionV3实现天气识别 一、模型结构 Inception v3是Google团队在2015年提出的第三代Inception模型,属于卷积神经网络(CNN&…...
C++ - 数据容器之 list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
一、创建与初始化 引入 <list> 并使用 std 命名空间 #include <list>using namespace std;创建一个空 list list<int> my_list;创建一个包含 5 个元素,每个元素初始化为 0 的 list list<int> my_list(5);创建一个包含 5 个元素…...
deepseek 技巧整理
1、导出word 和excel 功能,在使用以下提示词。 请帮我列出减肥期间可以吃的水果,并分析该水果含有的营养元素,以表格的形式星现。1.要以html的方式输出 2.要可以直接运行 3.页面要提供可以直接下载word和excel功能...
柔性PZT压电薄膜多维力传感器在微创手术机器人的应用
随着医疗技术的迅速发展,微创手术机器人正在成为外科手术的重要助手。与传统开放式手术相比,微创手术创伤小、恢复快、感染率低,对手术器械的精细操控性和感知能力提出了更高要求。多维力传感器作为机器人“触觉”的核心部件,对提…...
Java学习手册:Spring Boot 自动配置与快速开发
一、Spring Boot 自动配置概述 Spring Boot 的自动配置是其核心特性之一,它能够根据项目的依赖和配置自动地进行 Spring 应用程序的配置。自动配置的工作流程如下: SpringBootApplication 注解 :这是自动配置的起点,它是一个组合…...
ValueError: expected sequence of length 8 at dim 2 (got 0)
问题描述 在PyCharm中使用强化学习运行Python代码时报错ValueError: expected sequence of length 8 at dim 2 (got 0)。 问题原因 实际上原因就是gym中的env对象的reset、step等方法的返回值作了改动 解决方法 1、第一步: 将代码块中的(记得改的需…...
AI赋能新媒体运营:效率提升与能力突破实战指南
AI赋能新媒体运营:效率提升与能力突破实战指南 在信息爆炸的新媒体时代,运营人员面临着内容产出压力大、数据分析复杂、用户互动需求高等多重挑战。AI技术的迅猛发展为新媒体运营带来了革命性的变革可能。本文将为您揭示如何利用AI工具提升工作效率、培…...
单词规律(简单)
思路和同构字符串那道题一样。、但是这道题要注意的地方就是,检查 pattern 和 s 的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较,而不能用“!”,“!”比较的是对象引用而非内容。 class Soluti…...
QGraphicsView QGraphicsScene QGraphicsItem 的关系
在Qt的图形视图框架中,QGraphicsView、QGraphicsScene和QGraphicsItem 三者协同工作,构成一个分层的结构,用于高效管理和显示复杂的图形界面。以下是它们的关系和职责的详细说明: 1. 核心角色 类名职责类比QGraphicsItem场景中的…...
re题(52)BUUCTF-[FlareOn5]Minesweeper Championship Registration
BUUCTF在线评测 jadx打开if条件就是flag...
c++环境和vscode常用的一些有用插件
环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…...
UE自动索敌插件Target System Component
https://www.fab.com/zh-cn/listings/9088334d-3bde-4e10-a937-baeb780f880f 一个完全用 C 编写的 UE插件,添加了对简单相机锁定/瞄准系统的支持。它最初在蓝图中开发和测试,然后转换并重写为 C 模块和插件。 特征: 可通过一组可在…...
从括号匹配看栈:数据结构入门的实战与原理
在计算机科学的世界里,数据结构是程序员的 “瑞士军刀”,不同的数据结构适用于不同的场景,能高效解决各类问题。其中,栈作为一种简单却强大的数据结构,在很多实际应用中发挥着关键作用。今天,我们就通过一个…...
ReLU函数及其Python实现
ReLU函数及其Python实现 文章目录 ReLU函数及其Python实现1. ReLU函数定义2. Python实现3. 在深度学习中的应用总结 1. ReLU函数定义 ReLU(Rectified Linear Unit,修正线性单元)函数是深度学习中常用的激活函数之一。它的定义非常简单&#…...
Rain World 雨世界 [DLC 解锁] [Steam Epic] [Windows SteamOS]
Rain World 雨世界 [DLC 解锁] [Steam & Epic] [Windows & SteamOS] 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明…...
n8n 工作流画布上下左右移动的操作方法
n8n 工作流画布上下左右移动的操作方法 1. n8n 工作流画布上下移动2. n8n 工作流画布左右移动3. n8n 工作流画布扩大和缩小4. n8n 工作流画布缩放到适合 1. n8n 工作流画布上下移动 鼠标滚轮向上滚动是向上移动鼠标滚轮向下滚动是向下移动 2. n8n 工作流画布左右移动 按照Shi…...
Linux 常用命令合集
一、用户权限管理 切换管理员身份 sudo su:普通用户临时获取 root 权限,需输入当前用户密码。管理员提示符:root主机名:路径#。退出管理员:exit,返回普通用户状态。 以管理员身份执行命令 sudo 命令 参数:…...
B站Michale_ee——ESP32_IDF SDK——FreeRTOS_7 流数据缓冲区、消息缓冲区
一、Stream Buffer流数据缓冲区 流数据缓冲区用来处理像音频之类的流数据; 1.API简介 (1)创建流数据缓冲区 (2)向流数据缓冲区中发送数据 (3)从流数据缓冲区中接收数据 2.示例代码及运行结果…...
HCL(HashiCorp Configuration Language)是一种结构化配置语言
HCL(HashiCorp Configuration Language)是一种结构化配置语言,语法简洁且可读性强,广泛用于 Docker Buildx Bake、Terraform、Nomad 等工具的配置。以下是其核心语法规则和示例: 1. 基础结构 HCL 使用 块(…...
k9s 一个基于终端的 Kubernetes 集群管理工具(TUI)
k9s 是一个基于终端的 Kubernetes 集群管理工具(TUI),通过快捷键和交互式命令快速操作资源。以下是其核心用法和常见场景: 1. 基本命令 启动 k9s k9s # 默认连接当前 kubeconfig 配置的集群k9s -n <namespace> # 指定命…...
高等数学-第七版-下册 选做记录 习题10-1
1. 4. 5....
DBeaver连接人大金仓数据库V9
1、官网下载驱动jdbc 打开官网地址,找到下面的V9R1-JDBC,点击后面的下载即可,保存到本地 2、解压最新版的驱动程序 3、把***_JDBC文件夹内的驱动程序复制到DBeaver安装目录下的plugins文件夹里 4、打开dbeaver程序,增加kingbase…...
跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?!
跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?! 文章目录 一、事务的基本操作1. 开启事务2. 执行事务内操作3. 提交事务4. 回滚事务 二、验证示例(适用于 MySQL 5.7)步骤 1:准备测试表和数据步骤 2:…...
【KWDB 创作者计划】利用KWDB解决工业物联网场景中的海量数据管理难题的思考
利用KWDB解决工业物联网场景中的海量数据管理难题 一、什么是KWDB?二、工业物联网场景中的数据管理痛点2.1 数据量大且增长迅速2.2 数据多样性2.3 实时性需求2.4 数据分析复杂性 三、KWDB 的技术优势与架构解读3.1 时间序列数据的高效管理3.2 高吞吐写入性能3.3 灵活…...
分享国产AI工作流集成数据库完成业务处理
在现代企业应用中,业务流程的自动化和数据管理是提高效率的关键。Taskflow 作为一个强大的任务流管理工具,可以通过集成数据库实现复杂业务逻辑的处理。本文将分享如何利用 Taskflow 集成数据库,优化业务流程,并展示一个实际案例。…...
【每日八股】复习 Redis Day5:集群(上)
文章目录 复习昨日内容缓存雪崩、击穿、穿透的问题描述及解决方案如何保证数据库和缓存的一致性普通方案进阶方案 如何保证缓存删除一定成功?针对业务一致性要求高的场景,如何确保缓存与数据库的一致性?如何避免缓存失效?如何实现…...
linux进程的复制和替换
Linux 进程的复制与替换 一、主函数参数 在 C 语言里,main 函数能够接收参数,其标准形式如下: int main(int argc, char* argv[], char* envp[]);argc:代表命令行参数的数量,为整数类型。argv:是一个字符…...
【质量管理】现代TRIZ问题识别中的功能分析——相互接触分析
在文章【质量管理】现代TRIZ中问题识别中的功能分析——组件分析-CSDN博客中我们知道了如何对产品进行组件分析,那么组件分析出来有什么作用呢?组件分析就是为了接下来相互接触分析使用的。 什么是相互接触 相互接触分析是功能分析的一部分,…...
一种快速计算OTA PSRR的方法(Ⅱ)
1.仿真验证 1.1仿真设置 1.1.1 Test-bench原理 1.1.2 管子参数设置 为了公平地比较性能,设置所有OTA 的输入晶体管M1和M2为相同的gm和偏置电流1uA。 具体晶体管宽长比设置参见5.参考资料中的论文2。 1.2仿真验证 1.2.1 CM OTA 1)小信号参数 M1 M…...
【C++】通过红黑树封装map和set
前言: 通过之前的学习,我们已经学会了红黑树和map、set。这次我们要实现自己的map和set,对,使用红黑树进行封装! 当然,红黑树内容这里就不在赘述,我们会复用红黑树的代码,所以先将…...
【Java IO流】字节输入流FileInputStream、字节输出流FileOutputStream
目录 0.前言 1.FileInputStream 1.1 概述 1.2 构造方法 1.3 成员方法 1.4 FileInputStream读取文件案例演示 2.FileOutputStream 2.1 概述 2.2 构造方法 2.3 成员方法 2.4 写入文本文件案例演示 3.FileInputStream FileOutputStream拷贝文件 0.前言 本文讲解的是…...
信息收集新利器:SSearch Chrome 插件来了
SSearch 下载地址 SSearch 😣用途 每次谷歌语法搜索时还得自己写,我想省事一点,弄了一个插件,先加了几个常用的语法,点击后会跳转到对应搜索页面,也可以直接在搜索框微调 后续也会加些其他语法 &#…...
【AI面试准备】AI误判案例知识库优化方案
面试题:建立内部知识库:收集AI误判案例训练领域专属模型。 在回答关于“建立内部知识库收集AI误判案例训练领域专属模型”的面试问题时,建议从以下结构化框架展开,既能体现专业性,又能展现解决问题的系统性和实际落地…...
从零开始讲DDR(8)——AXI 接口MIG 使用(1)
一、前言 在之前的系列文章中,我们已经讨论过了MIG ip的接口内容,配置方式和modelsim独立仿真相关的内容,因此,本文对于之前已经讨论过的相关内容只做简单描述,着重介绍AXI 接口MIG使用上与普通ui接口的不同之处。感兴…...
字符和编码(python)
位数:英文字符使用 1 个字节表示,中文字符通常使用 3 个字节。示例:汉字 “汉” 的 UTF-8 编码是 \xE6\xB1\x89。优点:兼容 ASCII,广泛用于网络传输和文件存储。 Python 中的字符串类型 在 Python 中,字…...
【STM32】定时器输入捕获
STM32 定时器输入捕获功能笔记 一、什么是输入捕获(Input Capture) 输入捕获是利用定时器的输入通道,在检测到信号电平变化(如上升沿或下降沿)时,立即将当前计数器的值捕获并保存到捕获寄存器(…...
spring-ai集成langfuse
1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…...
SALOME源码分析: ParaVis
本文分析SALOME中ParaVis模块。 注1:限于研究水平,分析难免不当,欢迎批评指正。注2:文章内容会不定期更新。 一、核心组件 二、关键流程 三、FAQs 网络资料 SALOME Scientific visualisationPARAVIS Module - Architecture …...