【3D分割】Segment Anything in 3D with Radiance Fields

news2024/11/17 9:34:36

论文链接:Segment Anything in 3D with Radiance Fields

代码链接:GitHub - Jumpat/SegmentAnythingin3D: Segment Anything in 3D with NeRFs (NeurIPS 2023)

作者:Jiazhong Cen, Jiemin Fang, Zanwei Zhou, Chen Yang, Lingxi Xie, Xiaopeng Zhang, Wei Shen, Qi Tian

发表单位:上海交通大学、华为公司、华中科技大学启蒙学院 .

会议/期刊:NeurIPS 2023

一、研究背景

计算机视觉领域一直在追求一个可以在任何场景下执行基本任务(如分割)的视觉基础模型。在这些研究中,Segment Anything Model (SAM) 是代表性工作之一,因为它在2D图像中的分割表现非常出色。然而,将SAM的能力扩展到3D场景仍然是一个未解决的难题。作者指出,尽管可以复用SAM的管道来采集和半自动注释大量3D场景数据,但由于3D数据的获取和密集注释远比2D复杂,采用这种数据驱动的方法变得不切实际。

获取并标注3D数据集的复杂性导致3D场景中数据稀缺,同时训练3D模型的计算开销大。这使得在3D场景中使用类似于SAM的分割模型成为一项巨大的挑战。传统的做法可能是从零开始建立一个3D基础模型,但这并不经济。

论文的作者意识到一个替代且高效的解决方案:通过3D表示模型为2D基础模型(即SAM)提供3D感知能力,而不是从头开始构建3D基础模型。为此,他们借鉴了辐射场(Radiance Fields)的理念,提出了一个名为Segment Anything in 3D (SA3D) 的新方法。

辐射场模型作为一种新颖的3D表示方式,通过可微渲染技术将多视图的2D图像与3D空间连接起来。该研究提出将SAM与辐射场整合,以促进3D分割。

论文的主要贡献总结如下:

  1. 提出了SA3D框架:该框架是一个创新性的3D分割方法,结合了2D分割基础模型Segment Anything Model (SAM)与辐射场模型(如NeRF和3D Gaussian Splatting),无需重新设计或重新训练即可执行3D分割任务。SA3D通过2D分割模型的扩展,提供了一种高效的方式,将2D图像信息提升到3D场景中,实现准确的3D分割。

  2. 设计了掩码逆向渲染和自提示机制:该方法包含两大核心步骤:掩码逆向渲染用于将2D分割结果投影到3D空间,自提示机制通过在不同视角下生成可靠的提示点,进一步优化分割结果。这一双重过程不断迭代,最终生成精准的3D掩码。

  3. 引入了特征缓存机制:为了加快推理速度,SA3D引入了特征缓存机制,通过预缓存SAM提取的特征显著提升了分割速度,特别是在高效表示如3D Gaussian Splatting的场景下,可将分割速度缩短至2秒内。

  4. 适应不同类型的辐射场:论文中展示了SA3D在不同类型的辐射场下的适应能力,证明了该方法的通用性,能够处理从前向视角到360度全景场景的多种复杂场景。

  5. 扩展了实验评估:论文提供了大量实验结果,包括消融研究和对各组件的深入分析,进一步展示了SA3D在不同场景和数据集上的表现,验证了该方法的有效性和高效性。

给定一个预先训练的辐射场,SA3D会从一个将单个渲染视图作为输入,并输出3D分割结果针对特定目标。

二、预备知识总结

2.1 神经辐射场(NeRF)

NeRF(Neural Radiance Fields)是用于表示3D场景的连续函数,通过多层感知机(MLP)将空间坐标 x \in \mathbb{R}^3和视角方向d \in \mathbb{S}^2映射到相应位置的颜色 c \in \mathbb{R}^3和体积密度 \sigma \in \mathbb{R}。渲染图像时,NeRF通过光线投射技术生成每个像素点的颜色,公式如下:

I_\theta(r)=\int_{t_n}^{t_f}\omega(r(t))c(r(t),d)dt

其中,权重 w(r(t))表示在射线路径 r(t)上的透明度和体积密度的综合效果,公式如下:

\large\omega(r(t))=\exp\left(-\int_{t_n}^t\sigma(r(s))ds\right)\cdot\sigma(r(t))

其中 tn 和 t 分别为光线的近界和远界。

2.2 3D Gaussian Splatting (3D-GS)

3D Gaussian Splatting 是辐射场的一个最新发展。与NeRF不同,3D-GS不通过函数映射来渲染,而是采用一组3D高斯分布来保存渲染所需的颜色和不透明度等属性。对于每条光线 r,它通过叠加多个3D高斯分布来计算最终的颜色,公式如下:

I_\theta(r)=\sum_{i=1}^{|G_r|}\omega_{g_i}c_{g_i}

其中 ωgi​​ 为高斯分布的权重,cgi 为每个高斯分布的颜色值。高斯分布的引入以及光栅化算法的使用,使得3D-GS避免了在空白区域查询,极大提升了渲染和训练速度。

2.3 Segment Anything Model (SAM)

SAM模型采用了编码器-解码器架构,首先通过编码器提取图像的特征,然后结合输入的提示信息(如点、框、文本等)生成相应的2D分割掩码。

编码器 Se:给定图像 I,编码器生成对应的特征 fI:

f_I=S_e(I)

解码器Sd:结合特征 fI和提示信息 P,生成2D分割掩码 M SAM:

\large M_{​{\mathrm{SAM}}}=S_{d}(f_{I},P)

相比之下,编码器在计算上的开销较大,而解码器则相对轻量化。

三、整体框架

整体流程

SA3D的核心目标是通过结合2D分割模型(SAM)和辐射场模型来高效完成3D分割。它通过一个训练好的辐射场模型,接收从单个视角输入的2D提示(如点击点),然后逐步生成3D分割掩码。

  • 输入多视角2D图像:首先,模型从多个视角下拍摄的2D图像开始,这些图像是训练好的辐射场模型的输入。

  • SAM编码器提取特征:将这些2D图像输入到SAM的编码器中,提取图像特征。这些特征随后被缓存下来,形成特征缓存(Feature Cache),用于后续的分割和渲染。

  • 输入提示生成:用户在特定的视角下对目标物体提供2D提示,例如在物体上的点击点。这些提示作为SAM的输入,帮助模型生成初始的2D分割掩码 M_{\mathrm{SAM}}^{(1)},这一掩码表示该视角下的初步分割结果。

  • 投影到3D空间:初步生成的2D掩码通过掩码逆向渲染步骤被投影到3D空间中。此时,使用辐射场的密度信息,将2D掩码与3D物体的几何信息关联起来,形成一个粗略的3D分割掩码。

  • 掩码渲染(Mask Rendering):基于3D掩码,在新的视角下生成新的2D掩码 M_{\mathrm{SAM}}^{(n)}。由于最初的3D掩码可能不够精确,可能会导致新视角下的2D分割不准确。

  • 跨视角自提示(Cross-view Self-prompting):为了提高分割精度,系统自动从新视角的2D渲染掩码中生成提示信息。这些提示与特征缓存中的图像特征结合,进一步优化视角下的2D分割掩码。

  • 迭代过程:这一流程会在多个视角上反复执行,每个视角下生成的2D掩码都通过逆向渲染投影到3D空间中,逐步优化3D分割掩码。

四、核心方法

4.1 3D Mask Representation

对于NeRF,论文采用3D体素网格(3D Voxel Grids)来表示3D掩码。具体来说,每个体素网格的顶点都会存储一个初始为零的软掩码置信度分数。利用这些体素网格,论文通过如下公式将某个视角下的2D掩码渲染为对应的3D掩码:

\large M(r)=\int_{t_n}^{t_f}\omega(r(t))V(r(t))dt

其中:

  • V(r(t)) 表示通过体素网格得到的3D掩码置信度。

  • ω(r(t))是光线渲染权重,基于体素的密度和透明度计算。

3D-GS采用了3D高斯分布作为基本的渲染单元。论文将掩码置信度作为每个高斯分布的一个新属性,即每个高斯分布要么被完全分配给目标对象,要么被分配给背景。这种设计下不需要额外的掩码网格,而是利用可微光栅化算法进行渲染,公式如下:

M(r)=\sum_{i=1}^{|G_r|}\omega_{g_i}m_{g_i}

其中:

  • ωgi​​ 表示每个高斯分布的权重。

  • mgi 是高斯分布的掩码置信度。

内存优化:与NeRF的体素网格表示相比,3D-GS只需要储存场景中的高斯分布,每个场景的高斯分布通常不超过1000万,远少于32³体素网格所需的条目数(大约3277万)。因此,在GPU内存消耗上,3D-GS更具优势。

计算效率提升:体素网格的表示需要在渲染阶段额外查询每个体素的掩码置信度,而3D-GS则通过直接对每个高斯分布进行处理,减少了计算开销​。

4.2 Mask Inverse Rendering

Mask Inverse Rendering 是SA3D框架中的一个关键步骤,它通过将从2D视图生成的分割掩码投影到3D空间来生成准确的3D掩码。

每个像素的颜色由沿射线的加权颜色和权重决定。公式如下:

I_\theta(r)=\int_{t_n}^{t_f}\omega(r(t))c(r(t),d)dt

其中,ω(r(t)) 是该点的权重,表示该点接近目标表面的程度。权重值较高的点表示该点更接近物体的表面。因此,基于这些权重可以推断出物体在3D空间中的结构。

掩码逆向渲染的目标是将2D掩码投影到3D空间,并基于上述权重生成3D掩码。具体步骤如下:

  • 首先,假设SAM生成的2D掩码为 MSAM(r),当 M SAM(r)=1时,系统的目标是增加与权重 ω 相关的3D掩码值 V(r(t))或 mgi(对于3D-GS来说)。

  • 优化过程采用梯度下降算法,通过最小化投影损失函数来进行。投影损失定义为:

L_{\mathrm{proj}}=-\sum_{r\in R(I)}M_{\mathrm{SAM}}(r)\cdot M(r)

其中 R(I)表示图像 I 中的射线集合。

为了进一步优化3D掩码,论文还引入了一个负修正项,用以保持多视角掩码的一致性。修正后的损失函数为:

L_{\mathrm{proj}}=-\sum_{r\in R(I)}M_{\mathrm{SAM}}(r)\cdot M(r)+\lambda\sum_{r\in R(I)}(1-M_{\mathrm{SAM}}(r))\cdot M(r)

其中 λ 是一个超参数,用于控制负项的大小。通过引入这个负修正项,只有当SAM在多个视角下都一致地将某个区域预测为前景时,SA3D才会将对应的3D区域标记为前景。

通过最小化上述损失函数,SA3D能够在多个视角下优化3D掩码。掩码逆向渲染结合了2D视图中的分割信息和3D辐射场中的几何信息,从而生成精确的3D分割结果。

4.3 Cross-view Self-prompting

Cross-view Self-prompting 演示图

核心思想是在一个视角下生成的2D分割掩码,用于自动生成新的提示点,以便在其他视角中进一步优化分割掩码。这种自提示机制帮助系统在多个视角之间实现一致的分割效果,以下是对图中内容的流程阐述:

(1.1)选择最高置信度的点:首先,系统从当前的2D分割结果中选择一个具有最高置信度的点(图中红色圆点表示)。这一点代表系统在该位置上对于物体前景区域的分割信心最高。

(1.2) 方形区域掩码:选择了最高置信度的点后,系统会围绕该点生成一个方形区域,并将其掩码掉。这一操作防止同一个区域被多次选择,从而确保分割提示点均匀分布。

(1.3)基于3D距离的置信度衰减:接下来,系统根据该点在3D空间中的位置,对该点及其周围区域进行置信度衰减。置信度衰减是通过3D距离来计算的,表示在物体上相邻的点不再具有相同的提示优先级。具体衰减公式如下:

\large\text{Confidence decay}=e^{-\alpha\cdot d(p_i,p_j)}

其中,d(pi,pj) 是两个点之间的3D距离,α 是一个控制衰减速度的参数。这个公式确保随着距离的增大,提示点的置信度逐渐衰减,从而避免在相近的区域选择多个提示点。

接着选择新点并重复流程:

(2.1)选择新的高置信度点:在初次提示生成并掩码后,系统继续从剩余区域中选择下一个具有最高置信度的点。这一过程与步骤1.1类似,新的提示点同样是根据当前2D分割结果的置信度确定的。

(2.2)掩码新的方形区域:选择新点后,系统再次生成一个新的方形掩码区域,将该区域的置信度降低,并避免该区域再次被选作提示点。

(2.3)基于距离的置信度衰减:类似于步骤1.3,系统对新选定点周围的区域根据距离进行置信度衰减,防止选取过于相邻的点。这一步骤通过公式继续计算,并且随着更多提示点的选择,置信度衰减的影响在整个图像中逐步扩展。

这一选择和掩码、置信度衰减的流程会在所有视角下不断重复,直到所有必要的提示点生成完毕。生成的提示点随后被输入到SAM模型中,用于在不同视角下生成更准确的2D掩码。

两个重要策略——Self-prompting Strategy 和 IoU-aware View Rejection

4.3.1 Self-prompting Strategy(自提示策略)

在系统处理每个新视角时,基于当前3D掩码渲染的2D掩码可能存在一定的不准确性。因此,系统会通过一个自提示机制从当前视角的2D掩码中自动提取提示点。这些提示点通过以下策略自动生成:

  • 置信度选择:通过计算2D掩码中每个像素的置信度,选择那些置信度最高的像素点作为新的提示点(例如图中选择的红色点)。

  • 置信度公式:置信度 C(pi) 表示每个点 pi是前景物体的可能性,可以通过如下公式计算:

C(p_i)=\mathrm{softmax}(\mathrm{SAM}(p_i))

其中,SAM(pi) 是SAM模型对点 pi 的分割结果,softmax函数用于归一化每个像素点的前景概率。

  • 通过上述置信度计算选取提示点后,系统会将这些提示点输入SAM的解码器部分,生成当前视角下的精确2D分割掩码。这一步使得SA3D能够通过自动提示生成机制,不断优化不同视角下的分割精度。

自提示策略会在每个视角下反复进行,通过多个视角的遍历,逐步生成更精确的3D分割掩码。

4.3.2 IoU-aware View Rejection(基于IoU的视角拒绝策略)

IoU-aware View Rejection 是一个用于过滤掉低质量视角的策略,确保SA3D只在有助于优化的视角上进行分割优化。IoU(交并比)用于衡量新视角下的2D分割掩码与已有分割结果之间的重叠程度。具体流程如下:

\mathrm{IoU}(M_{​{\mathrm{new}}},M_{​{\mathrm{ref}}})=\frac{|M_{​{\mathrm{new}}}\cap M_{​{\mathrm{ref}}}|}{|M_{​{\mathrm{new}}}\cup M_{​{\mathrm{ref}}}|}

在每个新的视角下,系统首先通过3D掩码生成一个新的2D分割掩码。为了判断该视角的分割结果是否值得进一步优化,系统会计算这个视角下的新分割掩码与之前视角的分割结果之间的交并比。交并比的计算公式如下:

其中:

  • Mnew 表示当前视角下生成的2D掩码。

  • Mref​ 表示前一个视角下的2D分割掩码。

IoU门限值过滤。如果某个视角的2D分割结果与之前视角的分割结果有很大的差异,即交并比较低,则系统可能会拒绝该视角,认为其分割结果不可靠。这种过滤策略确保了系统不会花费计算资源在低质量的视角上。视角拒绝基于以下条件进行:

\text{Reject view if IoU}(M_{\mathrm{new}},M_{\mathrm{ref}})<\tau

其中,τ 是预设的IoU阈值,通常可以根据实验设置一个合理的值,例如 0.5。

通过这种基于IoU的视角拒绝策略,SA3D能够过滤掉那些可能导致误差的视角,从而提高整体分割的准确性和效率。这一策略确保系统只在有用的视角上进行优化,从而避免了无用的计算开销。

五、实验结果

在实验中,SA3D被集成到三种不同类型的辐射场模型中,分别是:

  • Vanilla-NeRF:这是基于MLP(多层感知机)的纯隐式表示方法,用于建模3D场景。

  • TensoRF:一种混合表示方法,采用向量矩阵(VM)分解和轻量级MLP解码器来构建3D场景。

  • 3D-GS(3D Gaussian Splatting):显式使用3D高斯分布,不依赖任何神经网络来表示3D场景。

实验结果表明,SA3D能够无缝适应多种辐射场表示模型,且展示了其在各种场景和任务中的通用性。

实验使用了多个数据集进行定量评估,包括:

  • NVOS数据集:基于LLFF数据集,包含几个前向场景。该数据集提供带有涂鸦的参考视图和目标视图的注释分割掩码。

  • SPIn-NeRF数据集:手动注释了一些NeRF数据集,用于评估交互式3D分割性能。

  • Replica数据集:提供了高质量的室内场景重建,包括密集几何、高清纹理、语义类等丰富的信息。

定性分析使用了以下数据集:

  • LLFF数据集:用于展示在复杂3D场景中的分割性能。

  • MIP-360数据集:展示了SA3D在全景场景中的表现。

  • LERF数据集:该数据集包含了更加真实且具有挑战性的场景,用于进一步验证SA3D在更复杂场景中的适应性。

SA3D的实现基于PyTorch,并在Nvidia Geforce RTX3090 GPU上进行训练。不同的辐射场模型的预训练迭代次数如下:

  • Vanilla-NeRF:200,000次迭代。

  • TensoRF:在LLFF和MIP-360数据集上进行了20,000次迭代训练,其他数据集上进行了40,000次迭代。

  • 3D-GS:进行了30,000次迭代。

NVOS 的定量结果。 “FC”表示特征缓存。比较方法的时间成本是根据其论文中的描述来估计的。

SPIn-NeRF 数据集的定量结果。 “FC”表示特征缓存。 “TRF”表示“TensoRF”。

Replica的定量结果 (mIoU)。 “FC”表示特征缓存。【3D GS性能不佳-错误学习的几何图形会混淆分割模型并导致性能下降】

不同场景中的一些可视化结果

在不同数量的视图上进行消融以生成 3D 掩模。括号中的数字表示视角次数占总训练视角次数的百分比。 “FC”表示特征缓存。

不同 IoU 感知拒绝阈值的消融 τ 在副本 Office_0 上。

不同负项系数的消融 λ 在副本 Office_0 上。

自我提示策略的置信度衰减项的消融。

LLFF-fern场景和 360-bonsai场景的 SAM 2D 分割结果和 SA3D 3D 分割结果。 SA3D 生成 SAM 分割结果中缺失的更多细节。

六、结论

辐射场为SA3D提供了细粒度的深度估计(或几何信息),这对于捕捉物体的复杂细节如小孔和间隙非常重要。二维分割模型(如SAM)在处理这些细节时经常面临挑战,尤其是由于分辨率限制导致的分割误差。虽然SAM具有细粒度分割能力,但在某些情况下仍会忽略这些小区域。通过引入辐射场,SA3D能够利用三维几何信息来纠正这些误差,从而提升分割性能。

在投影损失(Projection Loss)中引入了负细化项,用以处理那些被SAM忽略的区域。例如,当SAM忽略物体上的小孔和间隙时,2D掩码可能会穿过这些区域,并投射到物体后的背景上。随着视角的变化,原先的错误分割区域会从目标物体的后方转移到侧面。这时,由于视角不同,SAM对这些区域的预测会发生变化,前景预测不再包括这些错误区域。通过负细化项,这些区域的掩码置信度会被有效抑制,从而提升分割的准确性。

尽管SA3D通过辐射场提升了分割性能,但由于3D-GS(3D Gaussian Splatting)生成的伪影,系统性能在某些情况下有所下降。具体来说,3D-GS在处理Replica等合成数据集时,因缺乏足够的纹理信息支持,容易产生伪影。3D-GS使用Colmap技术从多视角图像获取初始点云,但在处理纹理不完整或细节缺失的图像时,可能会导致伪影的产生(3D-GS 过度拟合特定视图并在空间中生成大量半透明伪像)。由于这些伪影在三维空间中呈半透明状态,2D掩码在渲染时可能会错误地投影到这些伪影上,进而影响整体性能。

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

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

相关文章

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight&#xff08;V1.4.5&#xff09; 版本更新&#xff0c;新增 Ranger、Solr DataLight 迎来了重大的版本更新&#xff0c;现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化&#xff0c;新增了对 Ranger 和 Solr 服务组件的支持&#xff0c;同时对多项已…

微服务的优点及在云原生时代的合理落地方式

云计算de小白 那么&#xff0c;微服务到底能给业务带来什么好处&#xff1f;在云原生时代&#xff0c;如何更合理地实现微服务&#xff1f; 架构没有好坏之分&#xff0c;只有适合与不适合。然而&#xff0c;当我们对比微服务架构与单体架构时&#xff0c;可以发现微服务有以…

【【通信协议之UDP协议】】

通信协议之UDP协议 UDP &#xff08;user Datagram Protocol )用户数据报协议 整个的UDP数据格式 如下所示 TCP协议与UDP协议的区别 TCP协议面向连接&#xff0c;是流传输协议&#xff0c;通过连接发送数据&#xff0c;而 UDP 协议传输不需要连接&#xff0c;是数据包协议 …

[3]Opengl ES着色器

术语&#xff1a; VertexShader&#xff1a;顶点着色器&#xff0c;用来描述图形图像位置的顶点坐标&#xff1b; FragmentShader&#xff1a;片元着色器&#xff0c;用来给顶点指定的区域进行着色&#xff1b; Vertex&#xff1a;顶点 Texture&#xff1a;纹理…

【中级通信工程师】终端与业务(十一):市场营销计划、实施与控制

【零基础3天通关中级通信工程师】 终端与业务(十一)&#xff1a;市场营销计划、实施与控制 本文是中级通信工程师考试《终端与业务》科目第十一章《市场营销计划、实施与控制》的复习资料和真题汇总。本章的核心内容涵盖了市场营销计划的编制、实施过程以及控制方式&#xff0…

【Java异常】(简简单单拿捏)

【Java异常】&#xff08;简简单单拿捏&#xff09; 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子&#xff08;try-catch自定义异常&#xff09; 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…

Python :AVIF 图片与其他图片格式间的批量转换

图片格式 AVIF转换为常见的格式&#xff0c;比如 JPG 或 PNG。本文介绍如何使用 Pillow 库实现AVIF与其他格式的相互转换。 环境配置 使用 Python 环境管理工具 conda 和常用库 Pillow 来处理图片格式转换。环境的详细信息&#xff1a; Conda: 24.7.1Python: 3.8.19Pillow: 10…

【HTML|第1期】HTML5视频(Video)元素详解:从起源到应用

日期&#xff1a;2024年9月9日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对…

plt绘图日常训练

目录 练习1练习2练习3练习4练习5 前几节课已经介绍plt常用的函数&#xff0c;这节课主要是一些练习&#xff0c;方便大家熟悉 练习1 主要学习plt.figure()及plt的基本操作 import matplotlib.pyplot as plt import numpy as npxnp.linspace(-3,3,50) y1 2*x1 y2x**2plt.figur…

Windows下安装 LLama-Factory 保姆级教程

本机配置 品牌&#xff1a;联想拯救者Y9000x-2022CPU&#xff1a;12th Gen Intel Core™ i7-12700H 2.30 GHzRAM&#xff1a;24.0 GB (23.8 GB 可用)GPU&#xff1a; NVIDIA GeForce RTX 3060 Laptop GPU 6GCUDA版本&#xff1a;12.3 (可以在PowerShell下输入 nvidia-smi 命令…

短剧向左,体育向右,快手前途未卜?

最近&#xff0c;辗转于多项业务的快手收到了来自于市场“寓褒于贬”的评价。 麦格理发表报告表示&#xff0c;短剧业务正成为快手近期新的增长动力&#xff0c;亦维持对快手的正面看法&#xff0c;给予“跑赢大市”评级&#xff0c;预期上市前投资者出售2%股份对基本面没有太…

深入理解 `torch.nn.Linear`:维度变换的过程详解与实践(附图、公式、代码)

在深度学习中&#xff0c;线性变换是最基础的操作之一。PyTorch 提供了 torch.nn.Linear 模块&#xff0c;用来实现全连接层&#xff08;Fully Connected Layer&#xff09;。在使用时&#xff0c;理解维度如何从输入映射到输出&#xff0c;并掌握其具体的变换过程&#xff0c;…

更改远程访问端口

1、背景 在客户现场&#xff0c;由于安全限制&#xff0c;在内网的交换机中配置的某些限制&#xff0c;不允许使用22端口作为远程访问服务器的端口&#xff0c;此时就需要更改远程访问的端口。 2、前提 在修改默认的远程访问端口22时&#xff0c;可以需要在Linux服务器中支持…

三.python入门语法1

目录 1. 算数运算和关系运算 1.1. 算术运算符 1.2. 关系运算符 习题 2.赋值运算和逻辑运算 2.1. 赋值运算符 2.2. 逻辑运算符 3.位运算符 1&#xff09;位与运算&#xff08;A&B&#xff09; 2&#xff09;位或运算&#xff08;A|B&#xff09; 3&#xff09;异或位…

uni-app运行到 Android 真机和Android studio模拟器

文章目录 1、运行到Android 真机2、运行到Android studio模拟器2.1、运行到Android studio模拟器Android studio的安装步骤2.2、安装android SDK2.3、新增虚拟设备2.4、项目运行 3、安装报错3.1、安卓真机调试提示检测不到手机【解决办法】3.2、Android Studio中缺少System Ima…

OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序&#xff08;附源码&#xff09; 现看看demo演示。 本文将介绍如何使用Streamlit和OpenCV…

Excel锁定单元格,使其不可再编辑

‌在Excel中&#xff0c;锁定单元格后仍然可以编辑‌&#xff0c;这主要涉及到对特定单元格或区域的锁定与保护工作表的设置。以下是实现这一功能的具体步骤&#xff1a; ‌解除工作表的锁定状态‌&#xff1a;首先&#xff0c;需要全选表格&#xff08;使用CtrlA快捷键&#x…

C语言进程

什么是进程 什么是程序 一组可以被计算机直接识别的 有序 指令 的集合。 通俗讲&#xff1a;C语言编译后生成的可执行文件就是一个程序。 那么程序是静态还是动态的&#xff1f; 程序是可以被存储在磁盘上的&#xff0c;所以程序是静态的。 那什么是进程 进程是程序的执行过…

VS code 使用 Jupyter Notebook 时显示 line number

VS code 使用 Jupyter Notebook 时显示 line number 引言正文引言 有些时候,我们在 VS code 中必须要使用 Jupyter Notebook,但是默认情况下,Jupyter Notebook 是不显示 Line number 的,这对于调试工作的定位是不友好的,这里我们将介绍如何让 Jupyter Notebook 显示 Line…

认识联合体和枚举

目录 一.联合体 1.联合体的声明 2.联合体的特点 &#xff08;一&#xff09;内存共享 &#xff08;二&#xff09;大小等于最大成员的大小 另一特殊情况: &#xff08;三&#xff09;一次只能使用一个成员 3.联合体相比较于结构体 &#xff08;一&#xff09;内存分配 …