Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision

在上一讲《Coursera自动驾驶课程第7讲:Vehicle Lateral Control》中我们了解了如何对汽车进行横向控制

本课程第一个篇章就暂时告一段落了,接下来我们开始学习新的篇章。 课程第二个篇章是状态估计和定位模块。不过在这里我做了一下调整,我们先学习视觉感知模块,即计算机视觉在自动驾驶中是如何应用的。

B站视频链接:https://www.bilibili.com/video/BV1PE411D72p


文章目录

      • 1. The Camera Sensor
        • 1.1 Overview
        • 1.2 Pinhole Camera Model
        • 1.3 Modern Day Cameras
      • 2. Camera Projective Geometry
        • 2.1 Projection: World to Image
        • 2.2 Computing the Projection
        • 2.3 The Digital Image
      • 3. Camera Calibration (重点)
        • 3.1 Problem Formulation
        • 3.2 Linear Methods
        • 3.3 Factoring and Factorizing the P matrix
        • 3.4 Calibration Tools – SUPPLEMENTAL MATERIALS
      • 4. Visual Depth Perception - Stereopsis (重点)
        • 4.1 Overview
        • 4.2 Stereo Camera Model
        • 4.3 Computing 3D Point Coordinates
      • 5. Visual Depth Perception - Computing the Disparity
        • 5.1 Overview
        • 5.2 Disparity Computation
        • 5.3 Stereo Matching
      • 6. Image Filtering
        • 6.1 Overview
        • 6.2 Cross-Correlation
        • 6.3 Convolution
        • 6.4 Applications

1. The Camera Sensor

1.1 Overview

从这一讲开始,我们将学习新的篇章。我们将会了解计算机视觉领域的一些主要概念,包括相机模型及其校准,单目和立体视觉,投影几何和卷积运算等。

目前自动驾驶行业中的大多数公司在其车辆传感器套件中都将摄像头作为其主要传感器。摄像头是一个丰富的传感器,可以捕获有关车辆周围的环境细节。

摄像头捕获的外界信息对于场景理解任务(例如对象检测,分割和识别)特别有帮助。 外界信息使我们能够区分道路标志交通信号灯状态,跟踪转向信号并将重叠的车辆分解为单独的实例。 由于其高分辨率输出,与自动驾驶中使用的其它传感器相比,该摄像机能够收集并提供丰富的信息,同时价格相对也不高。

下面提供两个图片数据链接:https://www.shutterstock.com/image-photo/busy-traffic-during-rush-houramsterdam-
1069610642?src=bLnVCTgF8bcUNe81sHDlVw-1-39
摄像机链接:https://www.shutterstock.com/zh/video/clip-1022389735-camerarepair-sensor-digital-close-up-matrix

在这里插入图片描述


1.2 Pinhole Camera Model

下面我们介绍针孔相机模型,用于描述外界中的某个点与其在图像平面上投影之间的关系。

针孔相机模型中两个最重要的参数针孔与图像平面之间的距离,我们称为焦距,焦距定义了投射到图像上的物体的尺寸,并且在相机对焦时起着重要作用。针孔中心的坐标,我们称为相机中心。尽管针孔摄像头模型非常简单,但是它在表示图像创建过程中却表现出色。

通过确定特定相机配置的焦距相机中心,我们可以数学描述世界上某个物体发出的光线撞击图像平面的位置。针孔摄像机模型的一个历史示例是摄像机暗箱。它的结构简单,在成像表面的前面有一个针孔,可以很容易地重建图像,实际上,如果倾斜的话,这是观看日食的方法。

在这里插入图片描述在这里插入图片描述

1.3 Modern Day Cameras

自从相机暗箱发明以来,相机发展走了很长一段路。当前的相机使我们能够收集极高分辨率的数据。

相机传感器的分辨率和灵敏度不断提高,使相机成为地球上最普遍使用的传感器之一。你拥有几台相机呢?如果你停止统计所有这些,你会感到惊讶。你的手机,汽车,笔记本电脑中都配备摄像头,这些摄像头几乎无处不在。

在这里插入图片描述在这里插入图片描述

2. Camera Projective Geometry

2.1 Projection: World to Image

如下左图所示,我们对交通信号灯进行投影,会得到一个翻转的图像。但这不是我们最终想要的结果,为了解决这个问题,通常在相机中心前面会定义一个虚拟图像平面,我们将这个虚拟图像平面称为相机模型

将相机模型进行简化,需要开发一个模型,将世界坐标上的点(X,Y,Z)(X,Y,Z)(X,Y,Z)转换为图像坐标(u,v)(u,v)(u,v)

我们可以定义一个平移矢量ttt和一个旋转矩阵RRR来模拟世界坐标系与另一个坐标系之间的转换,将相机姿态参数称为外部参数,因为它们在相机外部,并且特定于相机在世界坐标系中的位置。我们将图像坐标系定义为从光学中心发出的虚拟图像平面的坐标系。但是,图像像素坐标系附加到虚拟图像平面的左上角。接下来,我们定义焦距fff为相机和图像坐标系之间沿相机坐标系的zzz轴距离。

在这里插入图片描述在这里插入图片描述

2.2 Computing the Projection

我们将投影简化为两个步骤。首先需要从世界坐标投影到相机坐标,然后从相机坐标投影到图像坐标

现在介绍一些投影转换用到的专业术语。

首先,是世界坐标投影到相机坐标。这是通过使用刚体变换矩阵TTT执行的,包括旋转矩阵RRR和平移向量ttt

然后是将相机坐标转换为图像坐标。为了执行此转换,定义内参矩阵KKK,是相机的固有参数。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

由于这两个变换都进行了矩阵相乘操作,因此我们可以将矩阵P定义为P=K[R∣t]P=K[R|t]P=K[Rt],即世界坐标到图像坐标的变换矩阵。

现在我们来看一个例子,将世界坐标中的点OworldO_{world}Oworld转换为图像坐标oimageo_{image}oimage,让我们看看在计算此方程式时缺少什么。我们注意到无法执行矩阵乘法。为了解决这个问题,我们将点O的坐标转换为齐次坐标
oimage=[xyz]=K[R∣t][XYZ1]o_{\text {image}}=\left[\begin{array}{l}x \\ y \\ z\end{array}\right]=K[R \mid t]\left[\begin{array}{l}X \\ Y \\ Z \\ 1\end{array}\right]oimage=xyz=K[Rt]XYZ1

现在,我们需要执行最后一步,将图像坐标转换为像素坐标。我们可以通过将xxxyyy除以zzz来获得图像平面中的像素坐标。
[xyz]→[uv1]=1z[xyz]\left[\begin{array}{l}x \\ y \\ z\end{array}\right] \rightarrow\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\frac{1}{z}\left[\begin{array}{l}x \\ y \\ z\end{array}\right]xyzuv1=z1xyz

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.3 The Digital Image

我们已经完成了投影变换,现在我们定义图像中的坐标值。我们先从灰度图像开始。首先将图像的宽度NNN和高度MMM定义为图像的列数和行数。 在灰度图像中,亮度信息以无符号的八位整数形式写入每个像素。

对于彩色图像,我们具有值为3的三维尺寸,我们称之为深度。此深度的每个通道代表图像中存在多少特定颜色。可以使用许多其他颜色表示,但是在这里我们使用RGB表示,即红色,绿色,蓝色。总之,图像由三个像素阵列以M×N数字表示,每个像素代表3D点在2D图像平面上的投影。

在这里插入图片描述在这里插入图片描述

3. Camera Calibration (重点)

3.1 Problem Formulation

让我们回忆到目前为止我们已经学到的投影方程。可以使用包含外部和固有参数的相机投影矩阵PPP将3D空间中点OOO的齐次坐标转换为图像坐标。
在这里插入图片描述
相机标定问题的定义是找到这些未知的内在和外在相机参数,此处给定nnn个已知3D点坐标及其在图像平面上的对应投影,以红色显示。我们的方法将包括首先获取PPP矩阵,然后将其分解为内在参数KKK和外在旋转参数RRR和平移参数ttt

为了进行标定,我们使用已知几何形状的场景从2D图像中获取3D点的位置,通过测量图像中观察到的点之间的实际3D距离来解决比例尺问题。

在这里插入图片描述在这里插入图片描述

最常用的示例是3D棋盘,其已知大小的正方形提供了要观察的固定点位置。我们以黄色定义坐标框架,然后计算3D点坐标及其在图像中的投影。可以手动完成3D点与2D投影的关联(例如,通过单击紫色点,或使用棋盘检测器自动完成)。然后,我们可以建立方程组来求解PPP的未知参数。现在,让我们形成需要求解的线性方程组。

首先,我们通过矩阵乘法将投影方程扩展为三个方程。
su=p11X+p12Y+p13Z+p14sv=p21X+p22Y+p23Z+p24s=p31X+p32Y+p33Z+p34\begin{aligned} s u &=p_{11} X+p_{12} Y+p_{13} Z+p_{14} \\ s v &=p_{21} X+p_{22} Y+p_{23} Z+p_{24} \\ s &=p_{31} X+p_{32} Y+p_{33} Z+p_{34} \end{aligned}susvs=p11X+p12Y+p13Z+p14=p21X+p22Y+p23Z+p24=p31X+p32Y+p33Z+p34

为了使这些方程式的右侧为零,我们将每个方程式的右侧移到左侧。然后,将第三个方程式代入方程式一和方程式二,最后每一点有两个方程式。
p31Xu+p32Yu+p33Zu+p34u−p11X−p12Y−p13Z−p14=0p31Xv+p32Yv+p33Zv+p34v−p21X−p22Y−p23Z−p24=0p_{31} X u+p_{32} Y u+p_{33} Z u+p_{34} u-p_{11} X-p_{12} Y-p_{13} Z-p_{14}=0\\p_{31} X v+p_{32} Y v+p_{33} Z v+p_{34} v-p_{21} X-p_{22} Y-p_{23} Z-p_{24}=0p31Xu+p32Yu+p33Zu+p34up11Xp12Yp13Zp14=0p31Xv+p32Yv+p33Zv+p34vp21Xp22Yp23Zp24=0

因此,如果我们有nnn个点,则我们有2n2n2n个相关方程。将这些方程式以矩阵形式给出我们所示的齐次线性系统。由于这是齐次线性系统,因此我们可以使用奇异值分解来获得最小二乘解。
[X1Y1Z110000−u1X1−u1Y1−u1Z1−u10000X1Y1Z11−v1X1−v1Y1−v1Z1−v1⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮XNYNZN10000−uNXN−uNYN−uNXN−uN0000XNYNZNX1−vNXN−vNYN−vNYN−uN][p11p12p13p14p21p22p23p24p31p32p33p34]=0\left[\begin{array}{ccccccccccc}X_{1} & Y_{1} & Z_{1} & 1 & 0 & 0 & 0 & 0 & -u_{1} X_{1} & -u_{1} Y_{1} & -u_{1} Z_{1} & -u_{1} \\ 0 & 0 & 0 & 0 & X_{1} & Y_{1} & Z_{1} & 1 & -v_{1} X_{1} & -v_{1} Y_{1} & -v_{1} Z_{1} & -v_{1} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ X_{N} & Y_{N} & Z_{N} & 1 & 0 & 0 & 0 & 0 & -u_{N} X_{N} & -u_{N} Y_{N} & -u_{N} X_{N} & -u_{N} \\ 0 & 0 & 0 & 0 & X_{N} & Y_{N} & Z_{N} & X_{1} & -v_{N} X_{N} & -v_{N} Y_{N} & -v_{N} Y_{N} & -u_{N}\end{array}\right]\left[\begin{array}{c}p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34}\end{array}\right]=0X10XN0Y10YN0Z10ZN010100X10XN0Y10YN0Z10ZN010X1u1X1v1X1uNXNvNXNu1Y1v1Y1uNYNvNYNu1Z1v1Z1uNXNvNYNu1v1uNuNp11p12p13p14p21p22p23p24p31p32p33p34=0

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.2 Linear Methods

简单的线性标定方法具有多个优点。

  • 易于制定。
  • 具有封闭形式的解决方案。

其缺点是:

  • 无法直接获取内部和外部相机参数。
  • 我们的线性模型没有考虑复杂的情况,例如径向和切向畸变。
  • 最后,由于我们是通过线性最小二乘法进行求解的,无法对我们的解决方案施加约束,例如要求焦距为非负值。

3.3 Factoring and Factorizing the P matrix

相机投影矩阵PPP本身可用于将3D点投影到2D中,但是它有几个缺点。它不会告诉相机的姿势,也不会告诉相机的内部几何形状。幸运的是,我们可以使用称为RQRQRQ分解的线性代数运算,将PPP分解为内在参数矩阵KKK和外部旋转参数RRR和平移参数$$t。

让我们看看我们如何执行这种分解。首先,将PPP的表示形式更改为相机中心CCC的函数。CCC是与P相乘时投影为零的点。我们将KKK乘以矩阵以形成两个子矩阵KRKRKR−KRC-KRCKRC。我们将KKKRRR的组合称为MMM矩阵。
PC=0K[R∣t]C=0K(RC+t)=0t=−RCP=K[R∣−RC]P=[KR∣−KRC]P C=0 \\K[R \mid t] C=0 \\K(R C+t)=0 \\t=-R C \\P=K[R \mid-R C] \\P=[K R \mid-K R C]PC=0K[Rt]C=0K(RC+t)=0t=RCP=K[RRC]P=[KRKRC]

现在我们可以将投影矩阵PPP表示为MMM−MC-MCMC。已知可以将任何矩阵分解为上三角矩阵RRR和正交基,将MMM分解为上三角R和正交基Q。在线性代数中,此过程称为RQ分解,即QR分解的一种更常见的变体。在QR分解中,我们首先有正交Q,然后是上三角R。请注意,RQ分解的输出与旋转矩阵R是不同的变量,不要混淆它们。

现在,让我们看看如何通过对齐这两个表达式来使用矩阵M的RQ因式分解的输出来检索K,R和t

固有校准矩阵K是RQ分解的输出R。旋转矩阵R是正交基Q
M=RQ=KRM=\mathcal{R} Q=K RM=RQ=KR
最后,我们可以直接从P矩阵最后一列的K中提取转换向量。
t=−K−1P[:,4]=−K−1MCt=-K^{-1} P[:, 4]=-K^{-1} M Ct=K1P[:,4]=K1MC

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.4 Calibration Tools – SUPPLEMENTAL MATERIALS

下面是相机标定常用的软件工具。

  • OpenCV: https://docs.opencv.org/master/d4/d94/tutorial_camera_calibration.html
  • Matlab: https://www.mathworks.com/help/vision/ug/single-camera-calibrator-app.html
  • ROS: http://wiki.ros.org/camera_calibration

4. Visual Depth Perception - Stereopsis (重点)

4.1 Overview

自动驾驶汽车需要具备十分准确的深度感知能力,以确保汽车安全运行。如果不知道前方汽车有多远,那么在开车时如何避免它们呢?激光雷达和毫米波雷达通常被认为是可用于感知任务的3D传感器。但是,我们也可以使用多视图几何结构从两个或多个摄像机获得深度信息,在自动驾驶汽车中常用到立体摄影机

立体视觉最早是在1838年由Charles Wheatstone所提出。他提出,因为每只眼睛从略微不同的水平位置观看世界,所以每只眼睛看到的图像彼此并不相同。由于两眼的水平位置不同,从而给出了水平视差的深度提示,也称为双眼视差。但是,在历史上,立体视觉的发现要早于此。实际上,莱昂纳多·达·芬奇(Leonardo da Vinci)的一些图纸也通过立体视觉描绘了精确的深度几何形状。

现在,我们深入研究立体声传感器的几何形状。立体声传感器通常由具有平行光轴的两个摄像机组成,通常也会称为双目相机

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.2 Stereo Camera Model

已知两个摄像机之间的旋转和平移关系以及3D3D3DOOO在两个摄像机上的投影,像素位置分别为OLOLOLOROROR,我们可以计算出点OOO3D3D3D坐标。

为了使计算更容易,我们做一些假设。

  • 首先,假设用于构造立体声传感器的两个摄像机是相同的。
  • 其次,假设在制造立体声传感器时,尽最大努力使两个摄像机的光轴对齐。

现在让我们定义立体声传感器的一些重要参数。焦距仍然是相机中心与图像平面之间的距离。其次,基线为左右相机中心之间的距离。

为方便处理,我们将投影图转换为鸟瞰图以便于可视化。如下所示,我们得到了两个相似三角形,根据三角形相似,我们得到两个方程:
Zf=XxL\frac{Z}{f}=\frac{X}{x_{L}}fZ=xLX

Zf=X−bxR\frac{Z}{f}=\frac{X-b}{x_{R}}fZ=xRXb

通过以上方程,我们就可以得到深度信息。

在这里插入图片描述在这里插入图片描述

4.3 Computing 3D Point Coordinates

现在我们计算3D坐标,我们将视差ddd定义为左右图像中同一像素的图像坐标之间的差。视差公式为:
d=xL−xRd=x_{L}-x_{R}d=xLxR

根据上一小节建立的相机模型,深度Z为:
Z=fbd\\Z=\frac{f b}{d}Z=dfb
然后我们也可以到到XXXYYY
X=ZxLf,Y=ZyLfX=\frac{Z x_{L}}{f}, \quad Y=\frac{Z y_{L}}{f}X=fZxL,Y=fZyL

现在,我们已经知道了如何从立体传感器计算3D坐标。这里出现了两个小问题。

  • 首先,我们需要计算焦距基线。也就是说,我们需要标定立体摄像机
  • 其次,我们需要找到每个左右图像像素对之间的对应关系,以便能够计算它们的视差,这部分可以通过视差估计算法得到。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

5. Visual Depth Perception - Computing the Disparity

5.1 Overview

为了计算视差,我们需要能够在左右立体摄像机图像中找到相同的点。 对于此类问题,最直接的解决办法是穷举法,即在左边的图像中确定像素位置,然后在右边图像中搜寻所有像素,找到与之相匹配的。 但时这种方法效率极低,通常不会用于自动驾驶汽车。 在这里插入图片描述


5.2 Disparity Computation

让我们重新看一下立体相机的设置,看看为什么这样的简化处理是有效的。我们已经确定了如何将单个点投影到两个摄像机。

现在,沿着连接3D点和左侧摄像机中心的线移动它。它在左摄像机图像平面上的投影不变。但是,注意到右摄像机平面上的投影,该投影沿水平线移动。这条水平线被称为对极线。我们可以将对应搜索限制在对极线上,从而将搜索范围从2D2D2D减少到1D1D1D,即从平面搜索变为线段搜索。

要注意的一件事是,水平对极线仅在两个摄像机的光轴平行时才会出现。在不平行的光轴的情况下,对极线偏斜。在这种情况下,我们将不得不得出多视图几何图形,这超出了本课程的介绍范围。在经过两次校准的情况下(例如我们的立体声相机),倾斜的对极线不是一个大问题。实际上,我们可以通过称为立体整流的过程使光轴平行。校正后,我们回到水平极线。这里将不介绍如何执行校正,因为标准计算机视觉软件包(例如OpenCV和MATLAB)中提供了实现方式。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.3 Stereo Matching

现在我们将介绍我们的第一个基本立体匹配算法。对于每条对极线,在左侧图像上取一个像素,将这些左图像像素与同一对极线上的右图像中的每个像素进行比较。接下来,选择最接近左像素的右图像像素,这可以通过最小化成本来实现

例如,这里的成本可以是像素强度的平方差。最后,我们可以通过从左边减去右边的图像位置来计算视差。

关于立体匹配问题,这里给出了一个一个调查链接,感兴趣的读者可以看看。

在这里插入图片描述在这里插入图片描述

6. Image Filtering

6.1 Overview

现在让我们开始探讨为什么要使用图像滤波。图像形成过程容易受到许多不同噪声的影响。在下图有一位摄影师,这是麻省理工学院的一张非常著名的照片,用于测试计算机视觉算法。

现在,让我们通过随机将某些像素变为白色而将其他像素变为黑色,来向该图像添加噪声。我们如何从如此嘈杂的图像中检索出原始图像的合理视觉外观呢?图像滤波是消除噪声的简单有效的方法。您还将看到,根据过滤器的不同,可以有效地对图像执行各种操作。但首先,让我们看看如何进行图像过滤有助于降低噪声。

如果查看图像阵列,则会注意到噪声通常会导致像素值异常,高值邻域中的低值像素或低值邻域中的高值像素。减少这种噪声的一种方法是计算整个邻域的平均值,并用该平均值替换离群值像素。让我们将GGG定义为滤波操作的输出。这里,2k+12k+12k+1是滤波器的大小。在这种情况下,我们邻域的大小为3。 uuuvvv是中心像素图像坐标。计算平均值得出右上部邻域为80,左下部邻域为10。最后一步是用相应的均值替换每个邻域的中心像素。至此,我们成功地降低了噪声并平滑了该邻域中的图像阵列值。
在这里插入图片描述


6.2 Cross-Correlation

权重矩阵HHH称为。这种通用形式称为互相关,因为它定义了每个彼此像素之间以及附近其他像素彼此之间的相关性 。对于上面定义的均值滤波器,我们现在使用以下内核表示。一个3×33\times33×3的矩阵,t充为1。另一个用作降噪的内核是高斯内核,其中中心的权重大于相邻的权重,权重依次按高斯分布。

现在,让我们将这些内核嵌入我们的图像,下面是两种滤波器效果。均值滤波器导致图像有些模糊,我们可以通过调整滤波器的特定参数来减少这种模糊。

在这里插入图片描述在这里插入图片描述

6.3 Convolution

现在,我们将定义另一个用于图像过滤的有用操作:卷积
关于卷积知识的介绍可以看看吴恩达老师的深度学习课程或文章《4.1)深度卷积网络:卷积神经网络基础》。

在这里插入图片描述在这里插入图片描述

6.4 Applications

现在让我们介绍互相关卷积运算的一些重要应用。互相关可用于模板匹配。模板匹配是我们已知图案或模板,我们想在图像中找到其对应位置的问题。这可以通过在模板和图像之间找到互相关输出的最高值的位置来完成。

为了更好地可视化此效果,让我们将互相关的彩色输出叠加在目标图像之上。在这里,红色是较高的互相关响应,而蓝色是非常低的响应。这样,模板和图像的位置就是互相关输出中具有最高值的像素的u,vu,vu,v坐标。我们可以通过将模板叠加在刚刚找到的u,vu,vu,v坐标上来检查我们的相关性是否正确。

可以使用卷积执行的另一个重要应用是图像梯度计算。可以通过与执行有限差分的内核进行卷积来计算图像梯度。图像梯度对于边缘和拐角的检测非常有用,例如在自动驾驶中广泛用于图像特征和物体检测。

在这里插入图片描述在这里插入图片描述

总结,在本讲中我们学到了:

  • 如何表示数字图像。
  • 3D点如何与图像中的像素相关。
  • 如何从一对图像计算3D点坐标,
  • 如何使用互相关和卷积运算处理图像。

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

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

相关文章

Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching

在上一讲《Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision》中我们学习了计算机视觉基本知识。 本讲我们将学习计算机视觉中的视觉特征模块。 B站视频链接:https://www.bilibili.com/video/BV1PE411D72p 文章目录1. Introduction to Image f…

Coursera自动驾驶课程第10讲:Feedforward Neural Networks

在上一讲《Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching》中我们学习了如何进行图像特征检测,特征匹配以及如何构建视觉里程计来估计相机的运动。 本讲我们将学习神经网络模块,关于神经网络或深度学习网上…

守护进程和守护线程

对于JAVA而言,一般一个应用程序只有一个进程——JVM。除非在代码里面另外派生或者开启了新进程。 而线程,当然是由进程开启的。当开启该线程的进程离开时,线程也就不复存在了。 所以,对于JAVA而言,线程是完全可以由自…

Coursera自动驾驶课程第11讲:2D Object Detection

在上一讲《Coursera自动驾驶课程第10讲:Feedforward Neural Networks》中我们学习了神经网络的基础知识,包括损失函数,梯度下降,正则化,卷积网络等。 本讲我们将学习深度学习的一个重要应用:图像目标检测。…

Coursera自动驾驶课程第12讲:Semantic Segmentation

在上一讲《Coursera自动驾驶课程第11讲:2D Object Detection》我们学习了深度学习的一个重要应用:目标检测。 本讲我们将学习深度学习的另一个重要应用:语义分割。这是图片像素级的一个重要应用。 B站视频链接:https://www.bili…

多线程知识梳理(2) - 并发编程的艺术笔记

layout: post title: 《Java并发编程的艺术》笔记 categories: Java excerpt: The Art of Java Concurrency Programming. <img src"http://upload-images.jianshu.io/upload_images/658453-a94405da52987372.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240…

Coursera自动驾驶课程第13讲:Least Squares

在上一讲《Coursera自动驾驶课程第12讲&#xff1a;Semantic Segmentation》我们学习了深度学习的另一个重要应用&#xff1a;语义分割。至此&#xff0c;本课程的视觉感知模块就介绍完了。 从本讲开始&#xff0c;我们将学习一个新的模块&#xff0c;也是本课程的第三个模块&…

Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters

在上一讲《Coursera自动驾驶课程第13讲&#xff1a;Least Squares》我们学习了最小二乘法相关知识。 本讲我们将学习20世纪最著名的一个算法&#xff1a;卡尔曼滤波。具体包括线性卡尔曼滤波&#xff08;KF&#xff09;&#xff0c;扩展卡尔曼滤波(EKF)&#xff0c;误差状态卡…

详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection

本文介绍一篇两阶段的3D目标检测网络&#xff1a;Voxel R-CNN&#xff0c;论文已收录于AAAI 2021。 这里重点是理解本文提出的 Voxel RoI pooling。 论文链接为&#xff1a;https://arxiv.org/pdf/2012.15712.pdf 项目链接为&#xff1a;https://github.com/djiajunustc/Voxe…

java容器类1:Collection,List,ArrayList,LinkedList深入解读

1、 Iterable 与 Iterator Iterable 是个接口&#xff0c;实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符和返回值方法名描述Iterator<T>iterator()返回一个内部元素为T类型的迭代器default voidforEach(Consumer<?…

无限场景开放式仿真器 PGDrive:Improving the Generalization of End-to-End Driving through Procedural Generation

本文介绍一个拥有无限场景开放式驾驶仿真器&#xff1a;PGDrive&#xff0c;通过 Procedural Generation 技术可以生成无限多的驾驶场景&#xff0c;由香港中文大学周博磊团队开发。 论文地址&#xff1a;https://arxiv.org/pdf/2012.13681.pdf 项目地址&#xff1a;https://…

java容器类2:Map及HashMap深入解读

Java的编程过程中经常会和Map打交道&#xff0c;现在我们来一起了解一下Map的底层实现&#xff0c;其中的思想结构对我们平时接口设计和编程也有一定借鉴作用。(以下接口分析都是以jdk1.8源码为参考依据) 1. Map An object that maps keys to values. A map cannot contain du…

两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud

本文介绍一篇两阶段的3D目标检测网络&#xff1a;SIENet。 这里重点是理解本文提出的 Hybrid-Paradigm Region Proposal Network 和 Spatial Information Enhancement module。 论文链接为&#xff1a;https://arxiv.org/abs/2103.15396 项目链接为&#xff1a;https://githu…

java容器类3:set/HastSet/MapSet深入解读

介绍 Set&#xff1a;集合&#xff0c;是一个不包含重复数据的集合。&#xff08;A collection that contains no duplicate elements. &#xff09; set中最多包含一个null元素&#xff0c;否者包含了两个相同的元素&#xff0c;不符合定义。 上一篇学习了Java中的容器类的一…

Bandit算法原理及Python实战

目录 1&#xff09;什么是Bandit算法 为选择而生。 Bandit算法与推荐系统 怎么选择Bandit算法&#xff1f; 2)常用Bandit算法 Thompson sampling算法 UCB算法 Epsilon-Greedy算法 Greedy算法 3&#xff09;Bandit算法Python实战 参考资料&#xff1a; 推荐系统里面有…

ava容器类4:Queue深入解读

Collection的其它两大分支&#xff1a;List和Set在前面已近分析过&#xff0c;这篇来分析一下Queue的底层实现。 前三篇关于Java容器类的文章&#xff1a; java容器类1&#xff1a;Collection,List,ArrayList,LinkedList深入解读 java容器类2&#xff1a;Map及HashMap深入解…

Waymo离线点云序列3D物体检测网络 (3D Auto Labeling): Offboard 3D Object Detection from Point Cloud Sequences

本文介绍一篇Waymo基于点云序列的3D物体检测网络&#xff1a;3D Auto Labeling&#xff0c;论文已收录于CVPR 2021。 这里重点是理解本文提出的 Object-centric Auto Labeling。 论文链接为&#xff1a;https://arxiv.org/abs/2103.05073 2021-09-02补充&#xff1a;本文作者…

Waymo自动驾驶数据集介绍与使用教程

本文将对Waymo自动驾驶数据集&#xff08;Waymo Open Dataset&#xff09;进行介绍。 论文链接为&#xff1a;https://arxiv.org/abs/1912.04838v7 项目链接为&#xff1a;https://github.com/waymo-research/waymo-open-dataset 数据集链接为&#xff1a;https://waymo.com…

Java 并发基础——线程安全性

线程安全&#xff1a;多个线程访问某个类时&#xff0c;不管运行时环境采用何种调度方式或者这些线程将如何交替执行&#xff0c;并且在主调代码中不需要任何额外的同步或协调&#xff0c;这个类都能表现出正确的行为&#xff0c;那么久称这个类是线程安全的。 在线程安全类中封…

详解一阶段3D物体检测网络 SE-SSD: Self-Ensembling Single-Stage Object Detector From Point Cloud

本文介绍一篇一阶段的3D物体检测网络&#xff1a;SE-SSD&#xff0c;论文已收录于 CVPR 2021。 这里重点是理解本文提出的 Consistency Loss 、Orientation-Aware Distance-IoU Loss、Shape-Aware Data Augmentation。 论文链接为&#xff1a;https://arxiv.org/pdf/2104.0980…