SLAM|1. 相机投影及相机畸变

一个能思考的人,才真是一个力量无边的人。——巴尔扎克

本章主要内容:
1.针孔相机模型
2.相机成像的几个坐标系图像
3.畸变及相机标定

本节主要介绍在照相机拍摄过程中,现实物体如何跟照片上的像素关联起来,具体涉及相机成像的物理过程和坐标系转换。

1.1 针孔相机模型

针孔相机模型是目前大多数相机的成像模型,其成像原理为小孔成像,回顾一下按照光线在同一介质中按直线传播的原理,在小孔另一面,会形成倒立按比例缩小的实像。
在这里插入图片描述

如果不借助其他东西,这个成像过程会遵循如下原理:小孔越小,成像越好,但会越暗。如下图,小孔直径从2mm变到0.35mm过程,图像越来越清晰,但也越来越暗。
在这里插入图片描述

我们想要的照片,是既要清晰,又要有足够的亮度,即让足够的光线进来,捕获到更多的环境细节,为了解决这个问题,现代相机会使用透镜来聚集光线,在保证有较大进光面的同时,让光线也能汇聚到较小范围。
在这里插入图片描述

关于透镜,有两个概念:聚焦与失焦
聚焦:从物体不同部分射出的光线,通过镜头之后,聚焦在底片的一个点上,使影像具有清晰的轮廓与真实的质感,这个过程称为聚焦。
失焦:即接收的点的信息未聚焦到一起会导致成像模糊。
注意:物体“聚焦”有特定距离(景深),在景深内可清晰成像,景深外成像模糊。

加入透镜之后,成像规律会有一点变化,此时当物体离透镜不同距离时,会形成不同的像。当物体处于凸透镜的 2 倍焦距之外,会形成倒立的、缩小的实像。一倍焦距到二倍焦距之间,则会形成倒立的、放大的实像。成像物体则在一倍焦距内,成正立的、放大的虚像。
一般地,相机成像时,物体在透镜的二倍焦距之外。而对于投影仪,则会把成像物体放在一倍焦距到二倍焦距之间。对于放大镜,成像物体则在一倍焦距内。
在这里插入图片描述

最后,将成像处实像,用感光元件接收后,就形成了拍摄的照片。在比较早的年代,感光元件使用胶片,胶片的原理是通过光产生化学反应来记录。而到了数码时代,感光元件则使用了CCD或者CMOS,其原理是将光转化为模拟电信号来记录。
电子感光元件也叫图像传感器(sensor),分为两种:一种是广泛使用的 CCD(电荷耦合)元件,另一种是 CMOS(互补金属氧化物半导体)器件。其产生的模拟信号,首先经过模拟信号放大器进行信号放大,进而经过数模转换电路(DAC)变为数字图像,数字图像再经过 ISP(Image Signal Processor)图像处理器进行数字图像处理,最后数字图像经过压缩编码算法,存储到 SD 卡中成为一个照片文件。

  1. CCD
    CCD 全称 Charge Coupled Device,它使用一种高感光度的半导体材料制成,由许多感光单位组成,通常以百万像素为单位。当 CCD 表面受到光线照射时,每个感光单位会将电荷反映在组件上,即把光转换为电荷,所有的感光单位所产生的信号加在一起,就构成了一幅完整的画面。
  2. CMOS
    CMOS 全称 Complementary Metal-Oxide Semiconductor,它主要是利用硅和锗这两种元素所做成的半导体,使其在 CMOS 上共存着 N 极和 P 极的半导体,这两个互补效应所产生的电流即可被处理芯片记录为影像。
    两者最主要的区别在于:CCD 传感器的图像质量优于 CMOS 传感器,而 CMOS 传感器在成像速度、功耗、价格等方面优于 CCD 传感器。

1.2 相机成像的几个坐标系

要把相机拍摄的照片与实际物体关联起来,就要建立三维世界到二维图像平面的映射关系,这个过程主要通过几个坐标系之间的转换来实现。

1.2.1成像坐标系之间的关系

相机成像的坐标系主要有四个,分别是世界坐标系,相机坐标系,图像坐标系与像素坐标系。世界坐标系下物体的光线(世界坐标系),通过透镜(相机坐标系),投射到感光原件上(图像坐标系),最后计算机在像素坐标系(离散化过程)上做处理。
在这里插入图片描述

世界坐标系:用于表示空间物体的绝对坐标,使用(Xw,Yw,Zw)表示,世界坐标系可通过旋转和平移得到相机坐标系。
相机坐标系:以相机的光心为坐标系原点,Xc.Yc轴平行于图像坐标系的x,y轴,相机的光轴为Zc轴,坐标系满足右手法则,相机的光心可理解为相机透镜的几何中心。
图像物理坐标系:坐标原点在CCD图像平面的中心x,y轴分别平行于图像像素坐标系的(u,v)轴,坐标用(x,y)表示。
图像像素坐标系:表示三维空间物体在图像平面上的投影,像素是离散化的,其坐标原点在CCD图像平面的左上角,u轴平行于CCD平面水平向右,v轴垂直于u轴向下,坐标使用(u,v)来表示。图像宽度W,高度H。

1.2.2 坐标计算

在这里插入图片描述

三维坐标投影到成像平面的坐标(完成三维到二维点的映射),可以通过相似三角形得出,对于相机坐标系下的P(X,Y,Z),成像坐标为:
f Z = − X ′ X = − Y ′ Y \frac{f}{Z}=-\frac{X^{\prime}}{X}=-\frac{Y^{\prime}}{Y} Zf=XX=YY
为了方便运算,取对称的镜像进行计算,效果等价。
在这里插入图片描述

f Z = X ′ X = Y ′ Y \frac{f}{Z}=\frac{X^{\prime}}{X}=\frac{Y^{\prime}}{Y} Zf=XX=YY
可得:
X ′ = f X Z X^{\prime}=f \frac{X}{Z} X=fZX
Y ′ = f Y Z Y^{\prime}=f \frac{Y}{Z} Y=fZY
计算机中的图像,是一个个像素构成,且其并不是图像中心为坐标原点,而是一般把左上角规定为坐标原点,要在计算机中处理图像信息,需要在得到成像平面上的坐标后,把成像坐标,转为像素坐标。
在这里插入图片描述

其中O1是投影后的坐标系原点,位于图像中心,而在计算机图像处理库中(如OpenCV),则是定义的左上角O0为图像坐标系原点,横坐标轴为u轴,向右,纵坐标轴为v轴,向下。
相机内感光原件(如cmos)是一个一个小格子拼接而成的,可以认为是离散的,这个小格子可能不是正方形,要将投影坐标P’转化为像素坐标,需要经历如下过程:
计算P’到图像中心的像素距离
u ′ = X ′ α x = f α x X Z = f x X Z u^{\prime}=\frac{X^{\prime}}{\alpha_{x}}=\frac{f}{\alpha_{x}} \frac{X}{Z}=f_{x} \frac{X}{Z} u=αxX=αxfZX=fxZX
v ′ = Y ′ α y = f α y Y Z = f y Y Z v^{\prime}=\frac{Y^{\prime}}{\alpha_{y}}=\frac{f}{\alpha_{y}} \frac{Y}{Z}=f_{y} \frac{Y}{Z} v=αyY=αyfZY=fyZY
其中f为成像焦距,αx与αy为u,v方向像素的长度。
最后转为O0下的坐标
实现摄像机下三维世界的点到像素平面二维图像平面的点的映射,f为单位米转化为像素的数量,非线性变换如下
u = u ′ + c x = f x X Z + c x u=u^{\prime}+c_{x}=f_{x} \frac{X}{Z}+c_{x} u=u+cx=fxZX+cx
v = v ′ + c y = f y Y Z + c y v=v^{\prime}+c_{y}=f_{y} \frac{Y}{Z}+c_{y} v=v+cy=fyZY+cy
引入齐次坐标,改为线性变换,以方便运算
$\left(\begin{array}{ccc}
u \
v \
1
\end{array}\right)=\frac{1}{Z}\left(\begin{array}{ccc}
f_{x} & 0 & c_{x} \
0 & f_{y} & c_{y} \
0 & 0 & 1
\end{array}\right)\left(\begin{array}{c}
X \
Y \
Z
\end{array}\right)=\frac{1}{Z} K P \$
其中
K = ( f x 0 c x 0 f y c y 0 0 1 ) K=\left(\begin{array}{ccc} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right) K= fx000fy0cxcy1
就是通常所说的相机内参矩阵
通过内参矩阵K,就可以将相机坐标系的下三维的坐标点转换为图像上的二维像素坐标。而对于世界坐标系上的坐标,转换到相机坐标系中则涉及的是不同坐标系中坐标转换,这个会在第二章中进行讲解。

1.3 图像畸变

如果相机成像过程没有畸变,则一个正方形投影成像后,还是一个正方形,但实际情况往往不是这样。大家拍照中可能也会发现,在拍一个人时,可能会把一个脸不大的人,脸拍出来却比较大,这时候不一定是你拍照技术的问题,有可能是因为相机畸变。相机成像过程的图像畸变主要是镜片加工与安装的缺陷造成的。
在这里插入图片描述

相机畸变主要由于相机镜头的光学性质造成的。相机镜头中的光线经过折射、反射等多个光学过程,导致不同位置的物体在图像中呈现出不同的形变。这种形变被称为畸变。畸变可以分为两种:径向畸变和切向畸变。

1.3.1 径向畸变

径向畸变来自透镜形状不规则以及建模的方式,导致镜头不同部分焦距不同。光线在远离透镜中心的地方偏折更大(向外偏移远离中心为枕型畸变,左图)或更小(向中心靠拢为桶形畸变,右图)。
在这里插入图片描述

下图显示矩形网格因径向畸变而产生的位移。越远离光轴中心的地方,矩形网格上的点偏移越大。
在这里插入图片描述

对于径向畸变,常用如下公式进行修正
x corrected  = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y corrected  = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) 其中:  r 2 = x 2 + y 2 \begin{array}{l} x_{\text {corrected }}=x\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right) \\ y_{\text {corrected }}=y\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right) \end{array} \\ \text { 其中: } r^{2}=x^{2}+y^{2} xcorrected =x(1+k1r2+k2r4+k3r6)ycorrected =y(1+k1r2+k2r4+k3r6) 其中r2=x2+y2
k1,k2,k3称为径向畸变校正系数。

1.3.2 切向畸变

切向畸变来自于整个摄像机的组装过程。由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的,如下图所示。
在这里插入图片描述

切向图像畸变使用如下公式进行修正
x corrected  = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y corrected  = y + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] 其中 : r 2 = x 2 + y 2 \begin{aligned} x_{\text {corrected }} & =x+\left[2 p_{1} x y+p_{2}\left(r^{2}+2 x^{2}\right)\right] \\ y_{\text {corrected }} & =y+\left[p_{1}\left(r^{2}+2 y^{2}\right)+2 p_{2} x y\right] \end{aligned} \\ 其中: r^{2}=x^{2}+y^{2} xcorrected ycorrected =x+[2p1xy+p2(r2+2x2)]=y+[p1(r2+2y2)+2p2xy]其中:r2=x2+y2
其中 p1,p2为切向畸变系数。
将径向畸变与切向畸变校正,结合在一起,便是常用的畸变校正过程。
x corrected  = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y corrected  = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] 其中 : r 2 = x 2 + y 2 \begin{array}{l} x_{\text {corrected }}=x\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right)+\left[2 p_{1} x y+p_{2}\left(r^{2}+2 x^{2}\right)\right] \\ y_{\text {corrected }}=y\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right)+\left[p_{1}\left(r^{2}+2 y^{2}\right)+2 p_{2} x y\right] \end{array} \\ 其中: r^{2}=x^{2}+y^{2} xcorrected =x(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]ycorrected =y(1+k1r2+k2r4+k3r6)+[p1(r2+2y2)+2p2xy]其中:r2=x2+y2
等式右边的(x, y)为得到的图像中的理想点,但是存在畸变,于是把其带入等式右边,经过径向和切向变换后,得到左边的畸变校正后的实际点坐标(xcorrected, ycorrected),取出对应颜色值作为(x, y)的颜色值即可。通过去畸变,可以完成图像的矫正,如下图:
在这里插入图片描述

1.4* 鱼眼相机模型

鱼眼镜头一般是由十几个不同的透镜组合而成的,在成像的过程中,入射光线经过不同程度的折射,投影到尺寸有限的成像平面上,使得鱼眼镜头与普通镜头相比起来拥有了更大的视野范围。下图表示出了鱼眼相机的一般组成结构。最前面的两个镜头发生折射,使入射角减小,其余的镜头相当于一个成像镜头,这种多元件的构造结构使对鱼眼相机的折射关系的分析变得相当复杂。
在这里插入图片描述

1.4.1*鱼眼相机成像模型

研究表明鱼眼相机成像时遵循的模型可以近似为单位球面投影模型。可以将鱼眼相机的成像过程分解成两步:第一步,三维空间点线性地投影到一个球面上,它是一个虚拟的单位球面,它的球心与相机坐标系的原点重合;第二步,单位球面上的点投影到图像平面上,这个过程是非线性的。下图表示出了鱼眼相机的成像过程。
在这里插入图片描述

我们知道,普通相机成像遵循的是针孔相机模型,在成像过程中实际场景中的直线仍被投影为图像平面上的直线。但是鱼眼相机如果按照针孔相机模型成像的话,投影图像会变得非常大,当相机视场角达到180°时,图像甚至会变为无穷大。所以,鱼眼相机的投影模型为了将尽可能大的场景投影到有限的图像平面内,允许了相机畸变的存在。并且由于鱼眼相机的径向畸变非常严重,所以鱼眼相机主要的是考虑径向畸变,而忽略其余类型的畸变。

1.4.2* 鱼眼相机投影函数

为了将尽可能大的场景投影到有限的图像平面内,鱼眼相机会按照一定的投影函数来设计。根据投影函数的不同,鱼眼相机的设计模型大致能被分为四种:等距投影模型、等立体角投影模型、正交投影模型和体视投影模型。下面的四种鱼眼相机的投影模型反映出了空间中的一点P是如何投影到球面上,然后到图像平面上成像的。
1、等距投影模型
在这里插入图片描述

上述式子中,rd表示鱼眼图像中的点到畸变中心的距离,是鱼眼相机的焦距,是入射光线与鱼眼相机光轴之间的夹角,即入射角。
2、等立体角投影模型

在这里插入图片描述

3、正交投影模型
在这里插入图片描述

4、体视投影模型
在这里插入图片描述

本章小结

本节以针孔相机模型作为基本模型,简要介绍了相机成像原理,相机模型中的几个坐标系及相机的畸变及相机标定的方法。最后鱼眼相机模型作为扩展介绍。
通过相机标定,可以获得相机内参及畸变系数,这解决了相机坐标系,图像坐标系,像素坐标系之间的转换过程,属于投影过程。而世界坐标系到相机坐标系之间的转换,则涉及到不同坐标系之间的空间转换,这部分涉及的参数为外参,这部分内容在下节进行讲解。

本章思考

1.叙述相机内参的物理意义。如果一部相机的分辨率变为原来的两倍而其他地方不变,那么它的内参将如何变化?
注:分辨率在不同场合意义不尽相同,这里取传感器的总的感光单元数量作为分辨率,而一些资料中会以某边排列的感光元件数量作为分辨率。在底片面积不变的情况下,分辨率变为原来两倍,指感光单元数量变为原来两倍。如1200w像素变为2400w像素。
2.调研全局快门(global shutter)相机和卷帘快门(rolling shutter)相机的异同。它们在SLAM中有何优缺点?
附录
1.1相机内参标定简介
到目前为止,相机成像有两大转换过程,相机投影及畸变消除,主要由:
K = ( f x 0 c x 0 f y c y 0 0 1 ) K=\left(\begin{array}{ccc} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right) K= fx000fy0cxcy1
内参矩阵以及畸变参数:Distortioncoefficients=(k1,k2,k3, p1,p2),这两种参数来决定。而求出这两类参数的过程,就是相机标定,目前相机常用的方法是借助棋盘格标定板,在相机前面拿着标定板上下左右前后移动,然后借助标定算法来求出以上参数,常用的标定算法有张正友标定法。

1.2 相机内参标定工具

1.2.1 OpenCV

OpenCV是一款广泛使用的计算机视觉库,其中包含相机内参标定的相关函数。在OpenCV中,使用calibrateCamera函数进行相机内参标定,该函数使用棋盘格等标定板,通过对标定板拍摄的多幅图像进行处理,得出相机的内参参数。OpenCV还提供了相关的可视化工具,如drawChessboardCorners函数,用于显示标定板的角点,以及projectPoints函数,用于将3D点投影到2D图像平面上。

  1. 循环读取图片
  2. 使用findChessboardCorners函数检测角点(需提前输入角点数)
  3. 使用find4QuadCornerSubpix函数对角点进行亚像素精确化
  4. 可用drawChessboardCorners将角点显示
  5. 根据角点数和尺寸创建一个理想的棋盘格(用point向量存储所有理论上的角点坐标)
  6. 通过calibrateCamera函数由理想坐标和实际图像坐标进行标定,可得到标定结果
  7. 由projectPoints函数计算反向投影误差

1.2.2 MATLAB

MATLAB也提供了相机内参标定的工具箱,包括Camera Calibration Toolbox和Image Processing Toolbox等。Camera Calibration Toolbox使用标定板对相机进行标定,并提供了可视化工具,如ShowExtrinsics函数,用于显示相机的外参参数。Image Processing Toolbox提供了更加高级的算法,如多目相机标定,以支持更加复杂的应用场景。
简单过程如下:

  1. 应用程序中找到Camera Calibration
  2. 添加标定板拍摄图片(按Ctrl可一次添加多张)
  3. 输入棋盘格每格的尺寸大小
  4. 显示已检测出的棋盘格,点击Calibration,开始标定。
  5. 得到标定结果(平均误差小于0.5即可认为结果可靠)
  6. 可查看标定结果和程序

1.2.3 ROS

ROS(Robot Operating System)是一种常用的机器人操作系统,其中包含相机内参标定的相关包,如camera_calibration。该包通过对标定板拍摄的多幅图像进行处理,计算出相机的内参参数,并自动保存标定结果。此外,ROS还提供了一系列可视化工具,如image_view,用于显示相机的图像和标定结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—异常断电导致服务器挂载分区无法访问的数据恢复案例

服务器数据恢复环境: 某品牌服务器同品牌存储,Linux centos7EXT4文件系统。 服务器故障: 意外断电导致服务器操作系统不能正常启动。经过修复后系统可以正常启动,但是挂载的分区无法正常访问。使用fsck修复这个问题分区&#xff…

[含文档+PPT+源码等]精品基于PHP实现的培训机构信息管理系统的设计与实现

基于PHP实现的培训机构信息管理系统的设计与实现背景,可以从以下几个方面进行阐述: 一、社会发展与教育需求 随着经济的不断发展和人口数量的增加,教育培训行业迎来了前所未有的发展机遇。家长对子女教育的重视程度日益提高,课外…

基于SSM+小程序的童装商城管理系统(商城3)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的童装商城管理系统实现了管理员及用户。 1、管理员实现了 首页、个人中心、用户管理、分类列表管理、童装商城管理、系统管理、订单管理。 2、用户实现了 注册、登录、首…

行为设计模式 -命令模式- JAVA

命令模式 一.简介二. 案例2.1 接收者(Receiver)2.2 命令接口实现对象(ConcreteCommand)2.3 调用者( invoker)2.4 获取Receiver对象2. 5 装配者客户端测试 三. 结论3.1 要点3.2 示例 前言 本设计模式专栏写了…

LCR 024. 反转链表 最细图片逐行解析过程

LCR 024. 反转链表 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例…

云计算平台上的DevOps实践

文章目录 什么是DevOps云计算平台上的DevOps优势自动化部署弹性伸缩地理分布 实施DevOps的关键组件版本控制系统持续集成/持续交付工具配置管理工具监控和日志管理 实践案例使用AWS CodePipeline进行持续集成/持续交付利用AWS Auto Scaling实现弹性使用AWS CloudFormation进行基…

DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器

在Uniapp中,悬浮菜单支持拖动和吸附功能,可以为用户带来更加灵活和便捷的操作体验。以下是对这两个功能的详细解释: 悬浮菜单支持拖动 提高用户体验:用户可以根据自己的需要,将悬浮菜单拖动到屏幕上的任意位置&#x…

微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式

前言 因官方文档描述不清晰,本文主要介绍微信小程序动画 实现过程 / 实现方式。 实现过程 推荐你对照 官方文档 来看本文章,这样更有利于理解。 简单来说,整个动画实现过程就三步: 创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的 export 方法…

Kafka认证时Successfully logged in真的认证成功了?

背景 某个应用需要配置 Kafka 集群信息,且需要在验证集群是否可达。基本实现思路是创建一个生产者对象,然后发送一条测试数据,调用 Producer 的 send 方法发送消息后,再调用 get() 方法,即同步发送消息,测…

基于spootboot学生选课系统设计与实现

资料下载 https://download.csdn.net/download/qq_63753925/89888794 https://download.csdn.net/download/qq_63753925/89888793 https://download.csdn.net/download/qq_63753925/89885091 https://download.csdn.net/download/qq_63753925/89882320 摘 要 近年来&#xf…

机器人转人工时,开启实时质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们实现步骤1. 修改拨号方案2. 启用拨号方案 前言 在客户与机器人对话中,是不能开启质检功能的。因为机器人识别会与质检识别产生冲突。如果用户想通过机器人转接到人工时,开启质检功能,记录客户与人工之间的对话。应该如…

MySQL史上最全总结

MySQL学习笔记 安装与配置myini文件内容:初始化MySQL: MySQL语法:SQL-DDL数据库1.创建数据库2.查看数据库3.修改4.删除 数据库中的表管理1.创建表2.查找3.修改4.删除5.截断表 SQL-DML1.添加数据1.1插入多条数据1.2表内容复制 2.修改数据3.删除 TRUNCATE和…

Android中的epoll机制

深入理解Android中的epoll机制 在Android系统中,epoll广泛用于高效管理网络和文件的I/O操作。它通过减少CPU资源消耗和避免频繁的内核态-用户态切换,实现了在多连接、多任务环境中的高性能。epoll的特性使其非常适合Android系统中网络服务器、Socket通信…

php伪协议和move_uploaded_file、rename、copy等文件操作

move_uploaded_file、rename、copy 三个函数的区别: move_uploaded_file 函数是专门用于将通过 HTTP 上传的临时文件移动到指定位置的。如果你想要将一个已经存在的文件移动到另一个位置,而不是上传的文件,那么你应该使用 rename 函数或 co…

Java SPI 机制详解

面向对象设计鼓励模块间基于接口而非具体实现编程,以降低模块间的耦合,遵循依赖倒置原则,并支持开闭原则(对扩展开放,对修改封闭)。然而,直接依赖具体实现会导致在替换实现时需要修改代码&#…

自动驾驶性能分析时,非常有用的两个信息

自动驾驶的关键路径如下,传感器的数据发送给感知模块;感知模块根据传感器数据来确定车辆所处的环境,比如前方有没有障碍物,是不是和车道线保持着适当的距离等;感知处理之后的数据传递给规控模块,规控根据车…

【Spring】Cookie与Session

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 一、Cookie是什么? Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…

【大模型系列】Mini-InternVL(2024.10)

Paper:https://arxiv.org/pdf/2410.16261Github:https://github.com/OpenGVLab/InternVL/tree/main/internvl_chat/shell/mini_internvlAuthor:Zhangwei Gao et al. 上海人工智能实验室 文章目录 0 总结(省流版)1 模型结构1.1 InternViT-300M…

MySQL 数据库备份与恢复全攻略

MySQL 数据库备份与恢复全攻略 引言 在现代应用中,数据库是核心组件之一。无论是个人项目还是企业级应用,数据的安全性和完整性都至关重要。为了防止数据丢失、损坏或意外删除,定期备份数据库是必不可少的。本文将详细介绍 MySQL 数据库的备…

大语言模型数据流程源码解读(基于llama3模型)

文章目录 前言一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类二、数据进入LlamaModel(LlamaPreTrainedModel)类1、input_ids的embedding编码2、position_ids位置获取3、causal_mask因果mask构建1、causal_mask调用2、因果mask代码解读(_update_causal_mask)4、hidden_s…