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

目标检测 | 基于Weiler–Atherton算法的IoU求解

目标检测 | 基于Weiler–Atherton算法的IoU求解

IoU

交并比(Intersection over Union, IoU) 是计算机视觉领域中常用的一个评价指标,尤其在目标检测与图像分割任务中,用于衡量预测结果与真实标注之间的重合程度。

其定义如下:

image-20250911114032266

  • 如图所示给定任意两个多边形框\(B_1, B_2\)(预测框与真实框),其 IoU 的计算公式为:

\[\text{IoU}(B_1, B_2) = \frac{|B_1 \cap B_2|}{|B_1 \cup B_2|} \]

其中\(|B_1 \cup B_2|\)为二者并集的面积,\(|B_1 \cap B_2|\)为二者交集的面积。

IoU的取值范围为\([0,1]\),当\(IoU=1\)时表示预测框与真实框完全一致;当\(IoU=0\)时表示预测框与真实框没有任何重叠

通过评价\(IoU\)可以评估目标检测模型的性能

基于Weiler–Atherton算法的IoU求解

Bounding Box

在目标检测任务中,通常使用 包围盒(bounding box) 表示目标的矩形区域。根据任务需求的不同,包围盒可以分为以下几类:

  • 轴对齐包围盒(Axis-Aligned Bounding Box,AABB)

    轴对齐包围盒一般应用于2D的目标检测任务,四条边分别与x轴和y轴对齐,可以表达为:

    \[B_\text{AABB} = (x_c, y_c, w, h), \quad w > 0, \, h > 0 \]

    • 其中\((x_c,y_c)\)为中心坐标,\(w,h\)分别为包围盒的宽和高,也被称为外延(extent)
  • BEV包围盒(Bird’s Eye View Bounding Box,BEV Boudning Box)

    BEV包围盒一般用于自动驾驶任务,在俯视图(BEV)中,每个物体除了位置和尺寸外,还包含一个航向角(yaw)表示方向,可以表达为:

    \[B_\text{BEV} = (x_c, y_c, l, w, \theta), \quad l > 0, \, w > 0, \, \theta \in [-\pi, \pi) \]

    • 其中\((x_c,y_c)\)为中心坐标,\(l,w\)分别为包围盒的长和宽,\(\theta\)为全局坐标系的旋转角度
  • 3D包围盒(3D Boudning Box)

    3D包围盒在BEV包围盒的基础上增加了高度,也是自动驾驶任务中常用的表示格式

    \[B_\text{3D} = (x_c, y_c, z_c, l,w,h, \theta), \quad w, l, h > 0, \, \theta \in [-\pi, \pi) \]

    • 其中\((x_c,y_c,z_c)\)为中心坐标,\(l,w,h\)分别为包围盒的长,宽和高,\(\theta\)为全局坐标系的旋转角度

在本文中,我们以 BEV 包围盒 为例,使用 Weiler–Atherton 算法求解 IoU。对于3D包围盒的 IoU 计算,可通过将 BEV 包围盒在俯视平面上的结果拓展到高度方向来实现。

Corner坐标转换

在计算之前,我们首先需要将多边形从包围盒表示转换为Corner坐标表示(四个顶点的坐标),这个过程可以分为三步,首先给定一个包围盒:

\[B_\text{BEV} = (x_c, y_c, l, w, \theta), \quad l > 0, \, w > 0, \, \theta \in [-\pi, \pi) \]

计算局部坐标系下的四个角点

\[P^\text{local} = \begin{bmatrix} +\frac{l}{2} & +\frac{w}{2} \\ +\frac{l}{2} & -\frac{w}{2} \\ -\frac{l}{2} & -\frac{w}{2} \\ -\frac{l}{2} & +\frac{w}{2} \end{bmatrix} \in \mathbb{R}^{4\times 2} \]

绕中心旋转矩阵

\[P^\text{rotated} = P^\text{local} \cdot R(\theta)^\top \]

其中:

\[R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \]

平移到全局坐标系

\[P^\text{global}=P^\text{rotated}+ \begin{bmatrix} x_c & y_c \\ x_c & y_c \\ x_c & y_c \\ x_c & y_c \end{bmatrix} \]

将上述的三个过程合并为齐次坐标系矩阵:

\[\begin{bmatrix} x_1 & y_1 & 1 \\ x_2 & y_2 & 1 \\ x_3 & y_3 & 1 \\ x_4 & y_4 & 1 \end{bmatrix} = \begin{bmatrix} + \frac{l}{2} & + \frac{w}{2} & 1 \\ + \frac{l}{2} & - \frac{w}{2} & 1 \\ - \frac{l}{2} & - \frac{w}{2} & 1 \\ - \frac{l}{2} & + \frac{w}{2} & 1 \end{bmatrix} \cdot \begin{bmatrix} \cos\theta & \sin\theta & x_c \\ -\sin\theta & \cos\theta & y_c \\ 0 & 0 & 1 \end{bmatrix} \]

Weiler–Atherton算法

Weiler–Atherton算法是一种计算任意两个非凹图形交集的算法,可以被分为四个步骤:

  • 求解所有相交点
  • 求解所有被包围的顶点
  • 将相交点和被包围的顶点放入一个数组中,按照逆时针进行排序
  • 按照顺序连接为新的多边形求解其面积

给定任意两个包围盒的Cornor坐标表示\(B_1,B_2\in\mathbb{R}^{4 \times 2}\)

image-20250911152406728

计算所有相交点

给定任意两条线段\(L_1=(x_1,y_1),L_2=(x_2,y_2)\)\(M_1=(x_3,y_3),M_2=(x_4,y_4)\),我们可以如下求出其交点:

定义\(r=L_2-L_1,s=M_2-M_1\),有:

\[t=\frac{(M_1-L_1)\times s}{r\times s},u=\frac{(M_1-L_1)\times r}{r\times s} \]

其中\(\times\)为二维向量叉乘,定义如下:

\[(x_1,y_1)\times(x_2,y_2)=x_1y_2 - y_1x_2 \]

那么线段\(P,Q\)的交点为:

\[P_{insect}= \begin{cases} L_1 + t r, & \text{if } r\times s \neq 0 \text{ and } t \in [0,1], u \in [0,1] \\[1ex] \text{无交点}, & \text{otherwise} \end{cases} \]

通过线段相交算法我们可以求出任意两个线段之间的交点(如图所示的紫色点)

image-20250911153300694

计算所有被对方包围起来的顶点

给定任意一个包围盒\(B\in\mathbb{R}^{4 \times 2}\)与点\(P\),我们可以通过如下过程求解点\(P\)是否在包围盒\(B\)中:

定义\(P_a=B[0, :],P_b=B[1, :],P_d=B[3, :]\)

求得:

\[t=\frac{AP\cdot AB}{||AB||^2},u=\frac{AP\cdot AD}{||AD||^2} \]

其中\(AB=P_b-P_a,\ AD=P_d-P_a,\ AP = P-P_a\)

如图所示,当\(t\in[0,1]\and u\in[0,1]\)时,点\(P\)位于包围盒中\(B\)

image-20250912214349621

通过上述流程我们可以求解所有在对方包围盒的顶点(如图所示的绿色点)

image-20250911153246025

顶点极角排序

为了方便连接每个顶点,接下来我们将所有顶点按照极坐标系下的角度进行排序,给定任意两点\(P_1(x_1,y_1)\)\(P_2(x_2,y_2)\),有比较函数如下:

\[\text{cmp}(P_1,P_2) = \begin{cases} \text{true}, & \Theta_{P_1} < \Theta_{P_2} \\[0.5em] \text{false}, & \Theta_{P_1} \geq \Theta_{P_2} \\[0.5em] \end{cases} \]

其中

\[\Theta_P = \begin{cases} \arctan2(y, x), & \arctan2(y, x) \ge 0 \\ \arctan2(y, x) + 2\pi, & \arctan2(y, x) < 0 \end{cases} \]

但是\(\arctan2\)这个操作非常消耗资源,所以我们不会直接计算极角$\theta $,我们会进行如下优化:

给定极坐标系的坐标$(r,\theta) \(,我们可以构建一个关于\)\theta\(的函数\)g(\theta)=|\cos\theta|\cos\theta$,这个函数会在第一,二象限递减,第三,四象限递增,接下来有:

\[\begin{align}g(\theta) & = \frac{r^2}{r^2} \, g(\theta) \\& =\frac{r^2 \, |\cos\theta| \cos\theta}{r^2}\\& =\frac{|r \cos\theta| \cdot (r \cos\theta)}{r^2} \\ \end{align} \]

其中我们将极坐标系公式代入原式:

\[x = r \cos\theta, \quad y = r \sin\theta, \quad r = \sqrt{x^2 + y^2} \]

得到:

\[\begin{align} g(\theta) &=\frac{|r \cos\theta| \cdot (r \cos\theta)}{r^2} \\&=\frac{|x|\cdot x}{x^2+y^2} \end{align} \]

在实际计算中为了防止除0我们会在分母加上一个非常小的数\(\varepsilon\)

\[g(\theta) =\frac{|x|\cdot x}{x^2+y^2+\varepsilon} \]

我们可以给出优化版本的比较函数\(\text{cmp}(\cdot,\cdot)\)

\[\text{cmp}(P_1,P_2) = \begin{cases} \text{false}, & (x_1,y_1) = (x_2,y_2) \\[0.5em] \text{true}, & y_1 > 0,\, y_2 < 0 \\[0.5em] \text{false}, & y_1 < 0,\, y_2 > 0 \\[0.5em] \text{true}, & y_1 > 0,\, y_2 > 0,\, g(\theta_1) > g(\theta_2) \\[0.5em] \text{true}, & y_1 < 0,\, y_2 < 0,\, g(\theta_1) < g(\theta_2) \\[0.5em] \end{cases}\text{其中 } g(\theta) = \frac{|x|\cdot x}{x^2+y^2+\varepsilon} \]

image-20250913111912987

形成新的多边形并计算面积

给定任意二维向量\(L=(x_1,y_1),M=(x_2,y_2)\),我们可以求解二者共同起点所构成的三角形面积\(S_{LM}\)

\[S_{LM}=\frac{1}{2}|L\times M|=\frac{1}{2}|x_1y_2-y_1x_2| \]

给定已经按照极角进行排序的点集\(\{P_1,\dots,P_n|n\leq8\}\),我们可以将这些点按照顺序连接为一个闭合的多边形\(I\),这个多边形由\(n-2\)个三角形所组成,每个三角形\(S_n\)的面积为\(S_n=\frac{1}{2}|(P_{n+1}-P_1)\times (P_{n+2}-P_1)|\),那么我们可以算出这个多边形的面积:

\[S_{I}=\sum^{n-2}_{i=1}\frac{1}{2}|(P_{i+1}-P_1)\times (P_{i+2}-P_1)| \]

image-20250913112659777

计算IoU

上文我们已经得到BEV包围盒\(B_1\)\(B_2\)的交集面积为\(S_I\),那么我们可以如下算得\(IoU\)

\[IoU =\frac{Intersection}{Union}= \frac{S_I}{S_{B_1}+S_{B_2}-S_I} \]

如果\(B_1,B_2\)为3D包围盒,可以如下增加一个高度项:

\[IoU =\frac{Intersection}{Union}= \frac{H_I}{H_U}\frac{S_I}{S_{B_1}+S_{B_2}-S_I} \]

其中

\[\begin{align} H_I=&\max(0,\min(z_{B_1}+\frac{h_{B_1}}{2}, z_{B_1}+\frac{h_{B_2}}{2})-\max(z_{B_1}-\frac{h_{B_1}}{2},z_{B_2}-\frac{h_{B_2}}{2}))\\H_U=&h_{B_1}+h_{B_2}-H_I \end{align} \]

image-20250913115701052

参考文献

https://en.wikipedia.org/wiki/Weiler–Atherton_clipping_algorithm

https://github.com/lilanxiao/Rotated_IoU

相关文章:

目标检测 | 基于Weiler–Atherton算法的IoU求解

**交并比(Intersection over Union, IoU)** 是计算机视觉领域中常用的一个评价指标,尤其在目标检测与图像分割任务中,用于衡量预测结果与真实标注之间的重合程度。目标检测 | 基于Weiler–Atherton算法的IoU求解 IoU 交并比(Intersection over Union, IoU) 是计算机视觉领…...

对比Java学习Go——函数、集合和OOP

Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了…...

MySQL集群高可用架构 - 指南

MySQL集群高可用架构 - 指南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-si…...

【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT专业的工具替代

【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT专业的工具替代pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

如何在Spring MVC中处理请求参数

在Spring MVC中处理请求参数是通过使用各种注解来实现的。以下是在Spring MVC中处理不同类型请求参数的方法。 使用 @RequestParam注解 当你想要从查询字符串中获取单个参数值时,你可以使用 @RequestParam注解。例如: @GetMapping("/search") public String search…...

redis实现缓存2-解决缓存穿透,缓存击穿

具体实现: ShopServiceImpl package com.hmdp.service.impl;import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.hmdp.dto.Result; import com.hmdp.entity.Shop; …...

单克隆抗体人源化:从鼠源缺陷到全人源突破,3 大阶段破解临床应用难题

单克隆抗体(McAb)凭借高特异性、强靶向性,在疾病预防、诊断与治疗中占据核心地位。1975 年,Khler 和 Milstein 创立杂交瘤技术,首次实现人工制备 McAb,为生物医药领域开辟新路径。但初代鼠源性 McAb 存在两大关键缺陷,严重限制临床应用:一是免疫原性高,进入人体后易被…...

在Kubernetes中DaemonSet无法在master节点调度的问题

在Kubernetes中,DaemonSet确保全部(或某些特定)Node运行一个Pod的副本。当有Node加入集群时,DaemonSet会自动在新加入的Node上部署Pod。这对于运行像日志收集器、监控代理或其他形式的守护进程非常有用。 默认情况下,出于安全性的考虑,Kubernetes master节点不允许调度普…...

9 12-

9 12改一道题改了一天,自闭了,总结无法描述,还是自己太糖了/ll P8776 线段树优化DP转移9 13模拟赛唯一一场没有睡着的模拟赛 T1很快想到了换根DP,秒掉 T2很快想到了 \(N^2\) 的暴力,然后经过我的观察发现转移形似杨辉三角,就推了出来 T3T4毫无思路剩下一个半小时直接跑路…...

桌面客户端的主要类型和技术方案

桌面客户端开发已经不再是传统的单一技术栈,而是衍生出了多种方案,各有优劣。下图清晰地展示了这些技术方案的演进与分类: flowchart TD A[桌面客户端技术方案] --> B1["原生开发<br>(Native App)"] A --> B2["跨平台开发<br>(Cross-Platf…...

AGX Orin平台RTC驱动导致reboot系统卡住障碍调试

AGX Orin平台RTC驱动导致reboot系统卡住障碍调试pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace …...

C 语言实现动态数组、链表、栈与队列

从代码到原理:C语言实现动态数组、链表、栈与队列 在数据结构的世界里,线性结构是构建复杂算法的基石。动态数组、链表、栈和队列作为最经典的线性结构,各自拥有独特的存储方式与操作特性,适用于不同的业务场景。本文将结合C语言实现代码,从结构定义、核心操作到实际应用,…...

git reset

在一个文件夹内,初始化其为 git 本地仓库,然后新建一个文件,提交至本地仓库,再修改这个文件,再提交至本地仓库。此时此刻的提交记录:如果用 git reset 命令回到当前所在位置,是不会有任何变化的。用 git reset 命令回到位于当前提交之前的提交,这一步操作也可以复原:如…...

ICPC 2025 网络赛第一场 M

这道题我本来是建立多层图然后跑dijkstra来解决,但是由于N=5000,所以会包空间导致RE或者MLE,注意到其实这道题是从1到n都来一遍,其实就可以考虑k-1和k的关系,k在k- 1的基础上面跑最短路,跑完了之后我们对比传送门的两个点到1的距离,这样它可以更新新的最短路。 #include…...

Brute It -TryHackMe

Brute It -TryHackMe 一、信息收集使用nmap对网站ip开放端口进行搜集使用dirsearch发现网站下面有个admin目录访问看看是一个管理员登录界面在这个页面右键源代码发现了给我们的提示,告诉我们这个网站的账户是admin,我们抓包使用yakit进行爆破二、枚举爆破接下来使用hydra对网…...

题解:P12336 第三心脏

题目链接。作者没看过第三心脏,所以作者猜测第三个心脏应该是用铁做的,由于铁粉是黑的,所以这道题目是黑。养成良好习惯,不留根号,式子变为: \[a^2+b^2+c^2+d^2=\left(a\oplus b\oplus c\oplus d\right)^2 \]注意到 \(a\ge 1\) 所以 \(a^2+b^2+c^2+d^2>d^2\) 又注意到…...

Spring篇知识点(1)

一、Spring框架的特性 IOC和DI支持:Spring 的核⼼就是⼀个⼤的⼯⼚容器,可以维护所有对象的创建和依赖关系,Spring ⼯⼚⽤于⽣成Bean,并且管理 Bean 的⽣命周期,实现⾼内聚低耦合的设计理念。 AOP编程支持:方便实现对程序进行权限拦截、运行监控等切面功能 声明式事务支持…...

在CentOS 7系统中彻底移除MongoDB数据库

彻底移除CentOS 7系统中的MongoDB数据库,需要进行以下步骤:停止MongoDB服务:首先确保MongoDB服务已经停止,可以通过下面的命令来执行这一操作:sudo systemctl stop mongod 如果您的MongoDB服务名称不是默认的 mongod,请将上述命令中的 mongod替换为实际的服务名称。删除M…...

【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架 - 实践

【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&q…...

2025.9.13总结

T1 神秘结论,因为轮数是可以算出来的,然后依次把次数取 min 然后堆起来就是对的。可以 \(O(n)\) 做完。 T2 一次修改的作用是明显的。 答案最大为 2,因为可以 max->2highbit->2(highbit+1)-1。 考虑答案为 1,那么就是跨过所有 0。但是因为覆盖后后面和前面的都没了,…...

开源排名算法工具raink:利用LLM实现智能文档排序

本文介绍Bishop Fox开源的raink工具,该工具采用基于大语言模型的列表排序算法,能够解决复杂排名问题,包括将代码差异与安全公告关联,并详细说明其算法原理及在漏洞识别中的应用场景。raink:使用LLM进行文档排序 TL;DR:Bishop Fox发布了raink,这是一个使用新型基于LLM的列…...

lcjmSSL域名SSL证书免费申请

想为您的网站轻松开启HTTPS安全加密吗?lcjmSSL(来此加密)为您提供完全免费的SSL证书服务!无论是单个站点、多个域名还是需要守护整个子站群的泛域名证书,我们都能满足。单证书最高支持100个域名的极致灵活性,助您以零成本构建更安全、更可信的网站环境。立即体验,为您的…...

uniapp原生插件 TCP Socket 利用文档

uniapp原生插件 TCP Socket 利用文档pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...

【PyQt5】实现输入延迟响应:3秒无输入后自动读取内容

思路:每次输入框内容改变,都重置 QTimer 倒计时为 3 秒;当持续 3 秒无输入后,QTimer 超时,获取当前输入框内容。UI 代码(untitled.py):点击查看代码 from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName(&qu…...

线性代数基础

暂无...

微积分基础

暂无...

Windows 自带的SSH中配置X11

本文介绍了给Windows 11中自带的SSH配置X11的方法1.安装 Windows的Xserver很多如:Xming 和 VcXsrv。Xming和VcXsrv都是X服务器软件,允许在Windows系统上运行Linux图形界面应用程序。它们的关系可以从以下方面概括:历史渊源 Xming最初由Colin Harrison于2004年开发,基于X.Or…...

在Kubernetes client-go库中如何有效构建CRD的informer

在Kubernetes ecosystem中,client-go库是一个强大的集合,它提供了与Kubernetes API进行交互的工具,使得我们可以在自己的应用程序中进行创建、配置以及管理Kubernetes资源。而对于自定义资源的定义(CRD),client-go也提供了informer的机制,此机制能够帮助我们监听资源的变…...

中大型水闸安全监测的重要性及实施方法 - 指南

中大型水闸安全监测的重要性及实施方法 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !i…...

如何通过LangChain实现记忆功能的总结

真正贴近人类的智能体,关键在于拥有 “记忆能力”。就像人与人相处时,我们会记住对方的喜好、过往的交流细节,并以此调整后续的沟通方式;具备记忆的智能体,同样能在与用户的互动中,主动留存对话信息、记录关键需求,甚至沉淀用户偏好,进而在未来的交互中给出更精准、更贴…...

python 轻量级别的网页包Streamlit

Streamlit跟 Flask/Django 的区别| 维度 | Streamlit | Flask/Django ||------|-----------|--------------|| 目标 | 数据展示/分析原型 | 全功能网站 || 前端代码 | 0 行 | 需要写 HTML/JS || 开发速度 | 分钟级 | 小时/天级 || 部署 | streamlit run 即可 | 需配路由、模板、…...

完整教程:技术小白如何快速的了解opentenbase?--把握四大特色

完整教程:技术小白如何快速的了解opentenbase?--把握四大特色pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&quo…...

9.13日模考总结

本周进行了标准OI普及组模考测试 得分情况题目名称 做法 预计得分 实际得分质数差列 模拟、素数筛 100 100旅行 二分答案 100 40小桃的物质阵列 思维 + 模拟 0 0幽邃魔窟 01背包变形 20 60感觉第二题有点可惜,忘了输出 -1 和数据范围了 第四题也有点可惜,没想到是01背包 做题…...

高斯消元

code: const int N=110; const double eps=1e-7;int n; double a[N][N];inline bool zero(double x){return fabs(x)<eps; }int gauss(){for(int i=1;i<=n;i++){int aim=i;//找出 i 列中,未确定主元的行中的最大行for(int j=1;j<=n;j++){//判断是否确定主元if(j<…...

wpf-MVVM+IOC/ID

一、MVVM+IOC/ID承接上文《WPF-理解与使用MVVM,请勿滥用》;这里讲解 MVVM+IOC/ID 的案例。本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/19089194...

uni-app iOS 性能监控全流程 多器具协作的实战优化指南

uni-app iOS 性能监控全流程 多器具协作的实战优化指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mono…...

矩阵快速幂

模板题:洛谷p1939 code: #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=5,mod=1e9+7; int n,siz=3; struct matrix{LL m[N][N];//构造函数matrix(){memset(m,0,sizeof m);}//重载*运算符matrix operator*(const matrix& B)cons…...

使用 C# 设置 Excel 单元格格式 - 教程

使用 C# 设置 Excel 单元格格式 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importan…...

grafana部署并使用harbor监控模板

1、部署grafana helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm pull grafana/grafana --version 9.4.4 --untar cd grafana/# 修改values文件ingress:enabled: true # 开启ingressingressClassName: tr…...

【ARM Cache 及 MMU 系列文章 6.1 -- Cache maintenance 指令及相关寄存器有哪些?】

Cache Maintenance registers and instructions Armv8/v9 里定义的Cache的管理的操作有三种:Invalidate : 整个高速缓存或者某个高速缓存行。高速缓存上的数据会被丢弃。 Clean : 整个高速缓存或者某个高速缓存行。相应的高速缓存行会被标记为脏,数据会写回到下一级高速缓存…...

十八、CPU的控制流:正常控制流和异常控制流

目录一、什么是控制流?二、正常控制流三、异常控制流四、正常控制流 vs. 异常控制流总结与重要性一、什么是控制流? 控制流指的是程序计数器(PC或EIP/RIP)随时间变化的序列。简单来说,就是CPU执行指令的顺序。 从你按下电源键开始,CPU就在不停地取指令、执行指令,PC寄存…...

大模型基础|位置编码|RoPE|ALiBi

转自:https://zhuanlan.zhihu.com/p/650469278 Transformer 模型在处理序列数据时,其自注意力机制使得模型能够全局地捕捉不同元素之间的依赖关系,但这样做的代价是丧失了序列中的元素顺序信息。由于自注意力机制并不考虑元素在序列中的位置,所以在输入序列的任何置换下都是…...

成品app直播源码搭建,sql优化原则 - 云豹科技

成品app直播源码搭建,sql优化原则SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器…...

使用Clang静态分析技术追踪Heartbleed漏洞

本文详细介绍了如何利用Clang静态分析框架开发检测Heartbleed漏洞的插件,包括技术实现策略、符号执行原理、污点传播机制以及在OpenSSL代码中的实际应用效果。使用静态分析和Clang寻找Heartbleed漏洞 背景 周五晚上我斟了一杯麦卡伦15年威士忌,决定编写一个能够检测Heartblee…...

每日Java并发面试系列(5):基础篇(线程池的核心原理是什么、线程池大小设置为多少更合适、线程池哪几种类型?ThreadLocal为什么会导致内存泄漏?) - 实践

每日Java并发面试系列(5):基础篇(线程池的核心原理是什么、线程池大小设置为多少更合适、线程池哪几种类型?ThreadLocal为什么会导致内存泄漏?) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…...

累死你的不是工作,而是工作方式

《浪潮之巅》的作者吴军,在《得到》专栏里,提及了Google刚进中国时候的一件事。刚开始,Google总部对中国研发团队的评价非常低,因为“出工不出活儿”,北京的三四个工程师都抵不上Google总部的一个工程师。 后来吴军帮忙分析了原因,他发现,那些工程师都不善于找到最重要的…...

川土微CA-IF1051S、CA-IF1051VS 支持CAN FD

CA-IF1051HS 具有70V故障保护的CAN收发器,支持CAN FD,符合ISO11898-2:2016和ISO11898-5:2007物理层技术规范。该系列器件设计用于高速CANFD网络,可支持高达5Mbps的传输速率。CAN总线端口提供高达70V的故障保护,满足恶劣环境中的过压保护需求。接收器输入共模范围(CMR)高达3…...

模仿玩家习惯的简单AI系统:GoCap

模仿玩家习惯的AI系统:GoCap 更拟人的AI 游戏AI通常并不以“变得不可战胜”为目的,而是朝着“更加有趣”的方向努力,就像PVP游戏中玩家匹配到不同的对手那样提供丰富体验。如果游戏AI也能像不同玩家一样就好了,可还是用设计行为树的方式来制定不同的AI的话,一定需要不少的…...

浅谈马拉车

浅谈马拉车 马拉车其实挺好理解的,写篇博客以便复习。 正题 简介 Manacher主要的思想是回文串的对称性,即在一个大回文串中,一定存在一个与\(X\)关于回文对称中心对称的子串\(Y\),故我们利用已知的回文串搞事情.算法流程考虑回文串有ABA(对称中心为一个字符)和ABBA(对称中心…...

Redisson 分布式锁的实现原理 - 教程

Redisson 分布式锁的实现原理 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important;…...