Monocular 3D Object Detection with Depth from Motion 论文学习

news2024/11/23 21:35:56

论文链接:Monocular 3D Object Detection with Depth from Motion

1. 解决了什么问题?

从单目输入感知 3D 目标对于自动驾驶非常重要,因为单目 3D 的成本要比多传感器的方案低许多。但单目方法很难取得令人满意的效果,因为单张图像并没有提供任何关于深度的信息,该方案实现起来非常困难。

Two view 场景有两个问题:

  • 多项预测的错误累积起来,使直接的深度预测变得非常困难;
  • 静止状态的相机和运动状态下匹配的模糊性。

2. 提出了什么方法?

受到 3D 目标检测双目方案的启发,本文利用了相机帧间运动(ego-motion)提供的强几何结构关系,进行准确的目标深度估计和检测。其基本原则与双目方法中的深度估计类似。在双目方法中,两个相机被严格约束在同一个平面上,它们之间的距离固定,这个距离就是 baseline。目前的立体 3D 检测方法将该 baseline 作为重要线索,将深度估计问题转换成较容易解决的视差估计问题。类似地,时序上相邻的两帧画面也具有立体匹配关系,但它们的 baseline 是不固定的,依赖于相机的帧间运动。
作者通过具有几何关系的 cost volume 构建立体匹配,作为深度估计的替代方案,用单目理解做进一步的补充,以解决第二个问题。本文提出的 Depth from Motion 使用几何关系将 2D 图像特征提升为 3D 特征, 然后再检测 3D 目标。我们先将复杂的几何关系包含在 cost volume 里面,进行立体估计。为了保证它对任意增广的输入都合理,作者设计了一套流程,在标准空间(即 canonical space)内做姿态变换。此外,作者使用另一个单目 pathway 做补充,用可学习的权重将它们融合起来。

2.1 理论分析

分析了通用的立体深度估计方法。

2.1.1 Object Depth from Binocular Systems

双目方法明确要求两个相机处于同一平面。如下图(a)所示,两个相机的焦距和它们之间的距离(即 baseline)是固定的。根据相机小孔成像模型和相似三角形定理,我们有
d f = b D ⇒ D = f b d \frac{d}{f}=\frac{b}{D}\Rightarrow D=f\frac{b}{d} fd=DbD=fdb
在这里插入图片描述

其中 d d d是两张图像之间在水平方向的视差, f f f是相机的焦距, D D D是目标的深度, b b b是 baseline。根据上式,目标深度估计可以变换为一个容易解决的视差估计问题。

2.1.2 Object Depth from General Two-View Systems

用双目方法来估计目标的深度,依赖于 two-view 立体几何关系。视频里相邻的两帧也具有类似的立体匹配关系。那么我们能否使用 two-view 几何信息来预测目标的深度?

作者将双目方法的几何关系一步步地扩展到通用的 two-view 场景。假设相机在 t 1 t_1 t1 t 2 t_2 t2时刻的位置不相同,而且我们知道相机在每个位置的参数。

首先,我们先假设所有的物体是静止的,后面再考虑物体运动的状况。如上图(b)所示,假设相机运动只涉及平移。从相机姿态的变换中可以得到 Δ x \Delta{x} Δx Δ D \Delta{D} ΔD,在这个平行的例子中,two-view 几何关系满足:

u 1 − c u f = x 1 D 1 , u 2 − c u f = x 2 D 2 , Δ x = x 1 − x 2 , Δ D = D 1 − D 2 \frac{u_1-c_u}{f}=\frac{x_1}{D_1},\quad\quad \frac{u_2-c_u}{f}=\frac{x_2}{D_2},\quad\quad \Delta{x}=x_1-x_2,\quad\quad \Delta{D}=D_1-D_2 fu1cu=D1x1,fu2cu=D2x2,Δx=x1x2,ΔD=D1D2

( u 1 , v 1 ) (u_1,v_1) (u1,v1) ( u 2 , v 2 ) (u_2,v_2) (u2,v2)是两张图像中两个对应的点, D 1 , D 2 D_1,D_2 D1,D2是它们的深度值, x 1 , x 2 x_1,x_2 x1,x2是它们在 3D 空间 x x x轴的位置。于是推导得到:

D 1 = f ( Δ x − u 2 − c u f Δ D ) u 1 − u 2 = Δ D = 0 f Δ x u 1 − u 2 D_1=\frac{f(\Delta{x}-\frac{u_2-c_u}{f}\Delta{D})}{u_1-u_2}\overset{\Delta{D}=0}{\xlongequal{\quad\quad}} \frac{f\Delta{x}}{u_1-u_2} D1=u1u2f(Δxfu2cuΔD) ΔD=0u1u2fΔx

双目方法中的几何关系就是其特殊情况,即 Δ D = 0 \Delta{D}=0 ΔD=0

如上式所示,与双目方法不同,这里的 baseline 不再是固定的,而是依赖于相机的自身运动 Δ x , Δ D \Delta{x}, \Delta{D} Δx,ΔD以及目标的绝对位置 u 2 u_2 u2。因此,目标的深度估计除了依赖于视差 u 1 − u 2 u_1-u_2 u1u2,也依赖于这些因素。

为了更好地理解,作者在 KITTI 基准上以双目方法举例,进行定量比较。一个合理的 baseline 不应过大或过小。Baseline 过大会造成两张图像重叠区域很小;baseline 过小会造成视差非常小,深度估计错误就会增大。所以作者以双目 baseline (KITTI 中是 0.54 m 0.54m 0.54m)为例,用 Δ x − u 2 − c u f Δ D \Delta{x}-\frac{u_2-c_u}{f}\Delta{D} Δxfu2cuΔD得到。因为水平平移距离 Δ x \Delta{x} Δx通常要远远小于 0.54 m 0.54m 0.54m,我们就需要沿着深度方向 ( Δ D ) (\Delta{D}) (ΔD)平移较大的距离,并与 2D 相机中心点保持较远的水平距离 ( u 2 − c u ) (u_2-c_u) (u2cu),从而使 baseline 足够大,适合做立体匹配。例如,为了得到一个 0.54 m 0.54m 0.54m的 baseline,当 Δ D = 5.4 m , f = 700 \Delta{D}=5.4m, f=700 ΔD=5.4m,f=700像素时,我们需要 u 2 − c u = 70 u_2-c_u=70 u2cu=70
Δ D = 2.7 m \Delta{D}=2.7m ΔD=2.7m时,我们需要 u 2 − c u = 140 u_2-c_u=140 u2cu=140。这就是说,对于远离中线的物体,估计会更加准确,不然就可能会遇到问题。

有了这些基础,上图 c 在视差计算中,引入了与目标绝对位置有关的旋转系数,而上图(d) 则引入了相对平移和旋转系数。绝对位置和运动估计的误差越多,深度估计就越发困难。

2.1.3 Achilles Heel of Depth from Motion

依据上面的分析,在 two-view 方法中,直接推导深度信息会牵扯到多项估计,如目标的绝对位置和运动,这些错误累积起来会非常棘手。此外,有多个场景是基于立体的方法无法解决的,比如静态相机没有 baseline,匹配低纹理区域存在的模糊性问题。

因此,受到双目方法的启发,作者将复杂的几何关系包含在一个 plane-sweep cost volume 里面,作为立体匹配的替代方案:考虑到我们无法直接从视差估计深度,于是为每个像素点提供候选的深度值,将这些 2.5 D 2.5D 2.5D点反投到另一帧,再根据像素特征的相似度,学习哪一个深度值是最可能的。此外,为了解决第二个问题,作者引入了用于单目理解的 path,弥补立体估计的缺陷。

2.2 方法

3D 目标检测流程通常包含三个阶段:从输入图像提取特征、将特征上升到 3D 空间、最后检测 3D 目标。下图展示了本文的整体架构,提出了两个关键设计:含有几何信息的 cost volume 和用于立体估计的单目补偿。
在这里插入图片描述

2.2.1 Overview

2D Feature Extraction

受到双目方法启发,给定两张输入图像 ( I t , I t − δ t ) (I_t,I_{t-\delta{t}}) (It,Itδt),首先使用 2D 主干网络提取特征 ( F t , F t − δ t ) (\mathcal{F}_t,\mathcal{F}_{t-\delta{t}}) (Ft,Ftδt)

2D 主干网络使用的是带空间金字塔池化及特征上采样的 ResNet-34。其上面接着一个小型的 U-Net,将 SPP 特征图上采样至全分辨率。使用两种 necks,一个输出几何特征 F t F_t Ft做立体匹配,一个输出语义特征 F s e m F_{sem} Fsem。为保证 F s e m F_{sem} Fsem能得到正确的监督信号, F s e m F_{sem} Fsem也用于辅助的 2D 检测。

Stereo Matching and View Transformation

用预定义的离散深度层级提升 F t \mathcal{F}_t Ft,得到立体空间的 F m o n o s t \mathcal{F}_{mono}^{st} Fmonost,用于后续的单目理解。
得到 ( F t , F t − δ t ) (\mathcal{F}_t,\mathcal{F}_{t-\delta{t}}) (Ft,Ftδt)之后,我们通过它们之间的姿态变换构建出 stereo cost volume F s t e r e o s t \mathcal{F}_{stereo}^{st} Fstereost。用一个 dual-path 3D 聚合网络对这两个 volumes 做过滤,估计深度分布 volume D P D_P DP D P ( u , v , : ) D_P(u,v,:) DP(u,v,:)代表了像素 ( u , v ) (u,v) (u,v)在所有深度层级的分布。使用投影的 LiDAR 点云来监督该深度的预测。

然后用 D P D_P DP来提升语义特征 F s e m \mathcal{F}_{sem} Fsem。再将其和几何立体特征 P f u s e P_{fuse} Pfuse结合,即最终的立体特征,再从其中采样体素特征。如上图所示,这个过程将立体空间的特征变换到体素空间,体素空间结构规整,更适合做目标检测。

Voxel-Based 3D Detection

融合通道维度和高度维度,将 3D 特征 V 3 D V^{3D} V3D变换到 BEV 空间,使用 2D hourglass 网络聚合 BEV 特征。最终,用一个轻量的 head 预测 3D 框和类别。训练损失包括两个部分:深度回归损失、2D/3D 检测损失。

2.2.2 Geometry-Aware Stereo Cost Volume Construction

立体匹配的关键部分就是 cost volume。与双目场景不同,两帧之间的姿态变换是刚性的,由平移和旋转组成。这个差异影响了其构建 cost volume,很难对输入数据做增广。

对于立体 volume 的每个位置 x = ( u , v , w ) \mathbf{x}=(u,v,w) x=(u,v,w),我们可以推导出反投影矩阵 W \mathcal{W} W,将 F t − δ t \mathcal{F}_{t-\delta{t}} Ftδt变形(warp)至第 t t t帧,然后与相应的特征 concat:

F s t e r e o s t ( u t , v t , w t ) = concat [ F t ( u t , v t ) , F t − δ t ( u t − δ t , v t − δ t ) ] \mathcal{F}_{stereo}^{st}(u_t,v_t,w_t)=\text{concat}\left[\mathcal{F}_t(u_t,v_t), \mathcal{F}_{t-\delta{t}}(u_t-\delta{t},v_t-\delta{t})\right] Fstereost(ut,vt,wt)=concat[Ft(ut,vt),Ftδt(utδt,vtδt)]

( u t − δ t , v t − δ t , d ( w t − δ t ) ) T = W ( u t , v t , d ( w t ) ) T , W = K T K − 1 (u_{t-\delta{t}},v_{t-\delta{t}}, d(w_t-\delta{t}))^T=\mathcal{W}(u_t,v_t,d(w_t))^T,\quad\quad \mathcal{W}=KTK^{-1} (utδt,vtδt,d(wtδt))T=W(ut,vt,d(wt))T,W=KTK1

这里 ( u t , v t , w t ) (u_t,v_t,w_t) (ut,vt,wt) ( u t − δ t , v t − δ t , w t − δ t ) (u_{t-\delta{t}}, v_{t-\delta{t}},w_{t-\delta{t}}) (utδt,vtδt,wtδt)代表两帧的立体空间的像素坐标。计算相应深度的式子是 d ( w ) = w ⋅ Δ d + d m i n d(w)=w\cdot \Delta{d}+d_{min} d(w)=wΔd+dmin Δ d \Delta{d} Δd是划分的深度间隔, d m i n d_{min} dmin是检测范围内的最小深度值。 W \mathcal{W} W是反投影矩阵,将内参矩阵 K K K、自车运动(刚性变换) T T T K − 1 K^{-1} K1相乘得到,这里假定两帧的内参矩阵相同。作者发现,任意的数据增广,如图像缩放和翻转,都能影响反投矩阵 W \mathcal{W} W的合理性。从增广图像构建 geometry-aware stereo cost volume 并不简单。

因此,作者设计了一个方法来解决该问题。如下图(a),需要在两个增广的图像特征 ( F t , F t − δ t ) (\mathcal{F}_t, \mathcal{F}_{t-\delta{t}}) (Ft,Ftδt)中找到对应的特征。核心思想就是保证 warp 变换是在 3D 真实世界(即标准空间)中进行。例如,如果我们对输入的两张图片进行翻转、缩放和裁剪操作,首先要将预先定义的深度层级附加到 F t \mathcal{F}_t Ft里每个 2D 网格坐标的后面,将每个 2.5 D 2.5D 2.5D坐标提升为 3 D 3D 3D。变换时,通过修改内参矩阵 K K K(缩放和裁剪操作等比例对应着相机的焦距和中心点坐标),可以抵消缩放和裁剪造成的影响。然后,翻转立体网格 G ~ t s t \tilde{G}_t^{st} G~tst,得到标准空间的 G t s t G_t^{st} Gtst。对新网格做姿态变换,得到 G t − δ t s t G_{t-\delta{t}}^{st} Gtδtst,将它投影到 2 D 2D 2D平面,得到若干个 G ~ t − δ t \tilde{G}_{t-\delta{t}} G~tδt网格图。最后,再对 G ~ t − δ t \tilde{G}_{t-\delta{t}} G~tδt做一遍图像增广,就可以采样相应的特征了。

这样,我们就能对输入图像做任意的增强,而不会影响到 ego-motion 变换的内在合理性。
在这里插入图片描述

2.2.3 Monocular Compensation

立体深度估计和单目深度估计的底层逻辑是不同的:立体估计依赖于匹配,而单目估计则依赖于数据驱动的先验信息,和对一张图像的语义与几何信息的理解。如上所述,有一些场景是立体估计也无法处理的。因此,作者加入了单目上下文的先验,以补充立体深度估计的缺陷。

如上图(b) 所示,使用了两个 3D hourglass 网络,分别聚合单目和立体特征。这两个 path 的网络有着相同的结构,但 F m o n o s t \mathcal{F}_{mono}^{st} Fmonost的输入通道数是 F s t e r e o s t \mathcal{F}_{stereo}^{st} Fstereost的一半。这样在立体空间,我们就有了两个形状一样的特征 volumes P m o n o P_{mono} Pmono P s t e r e o P_{stereo} Pstereo。为了聚合这俩特征,作者设计了一个简单而有效的机制。首先,将 P m o n o P_{mono} Pmono P s t e r e o P_{stereo} Pstereo concat 起来,输入进一个简单的 2D 1 × 1 1\times 1 1×1卷积网络,沿着深度通道聚合,将通道从 2 D 2D 2D压缩为 D D D。然后将该特征输入 sigmoid 函数,得到权重 ω f u s e \mathcal{\omega}_{fuse} ωfuse,它指导如何融合 P m o n o P_{mono} Pmono P s t e r e o P_{stereo} Pstereo。卷积网络记做 ϕ \phi ϕ,计算过程如下:

ω f u s e = σ ( ϕ ( P m o n o , P s t e r e o ) ) , P f u s e = ω f u s e ∘ P s t e r e o + ( 1 − ω f u s e ) ∘ P m o n o \mathcal{\omega}_{fuse}=\sigma(\phi(P_{mono},P_{stereo})),\quad\quad P_{fuse}=\omega_{fuse}\circ P_{stereo}+(1-\omega_{fuse})\circ P_{mono} ωfuse=σ(ϕ(Pmono,Pstereo)),Pfuse=ωfusePstereo+(1ωfuse)Pmono

这里 σ \sigma σ表示 sigmoid 函数, ∘ \circ 表示逐元素相乘。将立体特征 P f u s e P_{fuse} Pfuse输入 softmax 函数,然后直接用于预测深度分布,再输入进后续网络做 3D 检测。

这个设计简洁、高效。图像上每个位置的权重分布都由单目和立体的深度分布得到。可以通过可视化 ω f u s e \omega_{fuse} ωfuse权重,来验证本方法的有效性。

2.2.4 Pose-Free Depth from Motion

这样我们就有了一个统一的架构,从连续帧进行深度估计并检测 3D 物体了。在双目场景中,自车姿态(如 baseline)是一个重要信息。给定姿态变换,我们就能估计出深度信息。尽管在实际使用时很容易获取姿态,作者仍提供了一个无需姿态的方案。这对移动设备很重要。

学习姿态的关键在于目标的表达形式。任意刚性姿态变换都可解耦成平移和旋转,各自有三个自由度。以前的工作通常是回归三维平移量和三个欧拉角。回归平移量 t t t很直接。对于旋转角度的回归,则使用了一个单位四元组 q \mathbf{q} q来表示旋转角度目标。

姿态解码器网络的输出是一个七维向量,包括三维平移量和四维未归一化的四元组。解码器包括一个 bottleneck 层和三个卷积层。基线模型用 L1 损失进一步监督输出:

L t = ∥ t − t ^ ∥ 1 , L r = ∥ q − q ^ ∥ q ^ ∥ ∥ 1 , L p o s e = L t + λ r L r \mathcal{L}_{t}=\left\|\mathbf{t-\hat{t}}\right\|_1,\quad\quad \mathcal{L}_r=\left\|\mathbf{q-\frac{\hat{q}}{\left\|\hat{q}\right\|}}\right\|_1,\quad\quad \mathcal{L}_{pose}=\mathcal{L}_t+\lambda_r \mathcal{L}_r Lt= tt^ 1,Lr= qq^q^ 1,Lpose=Lt+λrLr
这个损失有多个问题:

  • 需要对不同的场景调整权重 λ r \lambda_r λr,代价比较高;
  • 用两张图片直接回归 3D eog-motion 有域差异问题;
  • 训练时仍然需要姿态标注信息,并非完全不需要姿态信息。

因此,作者使用了一个自监督损失。该损失包括一个外观匹配损失 L p \mathcal{L}_p Lp和深度平滑损失 L s \mathcal{L}_s Ls
L p o s e ( I t , I t − δ t ) = L p ( I t , I t − δ t → t ) + λ s L s \mathcal{L}_{pose}(I_t,I_{t-\delta{t}})=\mathcal{L}_p(I_t, I_{t-\delta{t}\rightarrow t})+\lambda_s \mathcal{L}_s Lpose(It,Itδt)=Lp(It,Itδtt)+λsLs

这里 I t − δ t → t I_{t-\delta{t}\rightarrow t} Itδtt表示第 t t t帧合成了第 t − δ t t-\delta{t} tδt帧的图像、深度和预测的姿态。 L p , L s \mathcal{L}_p, \mathcal{L}_s Lp,Ls定义如下:

L p ( I t , I t − δ t → t ) = α 2 ( 1 − SSIM ( I t , I t − δ t → t ) ) + ( 1 − α ) ∥ I t − I t − δ t → t ∥ \mathcal{L}_p(I_t, I_{t-\delta{t}\rightarrow t})=\frac{\alpha}{2}(1-\text{SSIM}(I_t, I_{t-\delta{t}\rightarrow t}))+(1-\alpha)\left\|I_t-I_{t-\delta{t}\rightarrow t}\right\| Lp(It,Itδtt)=2α(1SSIM(It,Itδtt))+(1α)ItItδtt
L s ( D ^ t ) = ∣ δ x D ^ t ∣ e − ∣ δ x I t ∣ + ∣ δ y D ^ t ∣ e − ∣ δ y I t ∣ \mathcal{L}_s(\hat{D}_t)=|\delta_x \hat{D}_t|e^{-|\delta_x I_t|}+|\delta_y \hat{D}_t|e^{-|\delta_y I_t|} Ls(D^t)=δxD^teδxIt+δyD^teδyIt

L p \mathcal{L}_p Lp是用 Structural Similarity (SSIM) 项和 L1 损失项构成。 L s \mathcal{L}_s Ls在低纹理梯度区域( δ x , δ y \delta_x,\delta_y δx,δy值较小),用于正则化预测深度图 D ^ t \hat{D}_t D^t。作者使用了激光雷达信号来监督深度值的学习,而只用了自监督损失来学习姿态。由于是用绝对深度值来监督学习深度信息,我们就能够得到姿态信息,即便没有姿态的标注。

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

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

相关文章

[Volo.Abp升级笔记]使用旧版Api规则替换RESTful Api以兼容老程序

Volo.Abp 配置应用层自动生成Controller,增删查改服务(CrudAppService)将会以RESTful Api的方式生成对应的接口 (官方文档),这与旧版本的Abp区别很大。RESTful固然好,虽然项目里新的Api会逐步使用RESTful Api代替旧的&…

JavaScript运算符

减法运算符 在JavaScript中,我们可以使用简单的减法来计算一下你的出生年龄,例如: const zhangSan 2023 - 2000; console.log(zhangSan);● 当然,我们也可以在控制台中,一次性传入多个值; const zhangS…

测试模型中理解压力测试和负载测试

压力测试 对应的性能测试模式就是固定线程,通过使用固定线程的模式对服务进行性能测试,或者使用阶梯型的线程递增模式进行性能测试。 通过控制线程数来进行不同场景的测试。 关注指标:处理能力(QPS或者说TPS)&#…

matplotlib绘制点线图

代码: import numpy as np import matplotlib.pyplot as pltX, Y (np.linspace(-3, 3, 100),np.linspace(-3, 3, 100))U, V np.mgrid[-3:3:100j, 0:0:100j]seed_points np.array([[-2, 0, 1], [-2, 0, 1]])fig0, ax0 plt.subplots() strm ax0.streamplot(X, Y…

阿里云GPU服务器价格表(A100、A10、V100、T4)

阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折,阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…

Java集合类都有哪些?

Collection 是所有单列集合的父类 Map 是所有双列集合的父类,一次添加一对元素 单列集合 上图中,蓝色是实现类,红色是接口 Collection 下面分为两种单列集合 -- List 、 Set List 集合 List 下又分为三种 -- ArrayList 、 LinkList 、 …

react的state和useState你了解多少?带你深入react state useState

state和useState是react中很重要的概念,虽然笔者一直在用,但是总感觉有些地方认识不够透彻。于是乎,笔者重新阅读学习了react官方文档,感觉受益匪浅。希望能用尽量通俗简洁的语言把吸收的知识表述清楚,便写下此文。 如…

二、DDL-3.数据类型

分为3种:数值类型、字符串类型、日期时间类型。 一、数值类型 【案例】 年龄: age TINYINT UNSIGNED——范围(0,255)够用 分数:score double(4,1)——分数0-100有小数,4—最高位数&#xff0…

学习开闭原则的方法:成为编程高手的秘诀

成为一名优秀的编程高手,掌握开闭原则是至关重要的。开闭原则是软件设计中的核心概念之一,它能够帮助我们构建可扩展、可维护的代码,提升自身的编程水平。在本文中,我们将分享学习开闭原则的方法,揭示成为编程高手的秘…

记android studio打包踩雷

由于包太大考虑离线打包但是折腾一通打包完之后才发现,如果使用了插件市场上面的付费插件 离线打包时走不通的,只能老老实实付费云打包。

数据结构--图的存储 十字链表、邻接多重表

数据结构–图的存储 十字链表、邻接多重表 十字链表存储有向图 空间复杂度:O(|V||E|) 如何找到指定顶点的所有出边?——顺着绿色线路找 如何找到指定顶点的所有入边?——顺着橙色线路找 注意:十字链表只用于存储有向图 \color{re…

杨辉三角 II

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex 0 输出: [1] 示例 3: 输入: rowIndex 1 输出: [1,1]…

redis 相关

redis相关面试题 redis支持哪几种数据形式? String,hash,set,zset,list redis主要消费什么物理资源? 内存,key-value的形式, redis 具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘 I/O 速度为严…

实现视频监控场景下的抽烟目标检测:改进 YOLOv5 的关键方法与代码实现

文章目录 概要技术细节小结 概要 目标检测是计算机视觉领域的重要任务之一,而改进现有的目标检测模型以实现对细微差异目标的准确检测是当前研究的热点。本文将探讨如何通过对 YOLOv5 进行改进,以增强其对细微差异目标的感知能力。我们将介绍一些关键方…

CN期刊《教师博览》是什么级别的刊物?

CN期刊《教师博览》是什么级别的刊物? 《教师博览》创刊于1993年,经国家新闻出版总署批准,江西省教育厅主管的省级G4学术期刊。 《教师博览》 是江西教育厅主管、江西教育期刊社主办的一份面向全国发行的教育杂志,其文摘版创办于…

pdf怎么分成多个文件?教你4招PDF拆分!

有时候,我们可能需要将一个包含多个页面的PDF文件拆分成多个独立的文件。这样做可以方便我们在需要的时候单独查看或处理某些页面,提高工作效率。本文将介绍四种常用的方法来将PDF文件分割成多个文件,包括使用Adobe Acrobat、记灵在线工具、P…

地埋式积水在线监测系统助力城市内涝解决方案

一、方案背景 随着我国城镇化快速发展,城市建设产生的大量地面硬底化,大部分的降雨将形成地表径流,仅有少量雨水渗入地下,导致城市内涝等一系列问题。当前,全国多地发生洪涝,我国南北方全面进入主汛期。与往…

linux文件系统只读导致监听异常

项目经理发来截图,监听无法启动了,截图如下 orcl:/home/oraclehydb> lsnrctl start LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 18-JUL-2023 11:29:54 Copyright (c) 1991, 2013, Oracle. All rights reserved. Starting /u01/app/…

流体力学中动力粘度和运动粘度的定义和区别

流体力学中动力粘度和运动粘度的定义和相互关系 在流体力学中,常遇到动力粘度和运动粘度参数。本文讲解这两个参数的含义和相关关系。 1.动力粘度(Dynamic viscosity) 1.1 动力粘度定义 动力粘度(dynamic viscosity&#xff0…

2023年在线帮助文档的特点和市场趋势变化

2023年在线帮助文档的特点和市场趋势变化将受到多种因素的影响。随着技术的不断进步和用户需求的变化,在线帮助文档将呈现出一些新的特点和趋势。 以下是可能出现的一些特点和市场趋势变化: 多样化的内容形式: 传统的在线帮助文档通常是以…