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

《Learning to Reconstruct Botanical Trees from Single Images》学习从单幅图像重建植物树

读书报告下载

https://download.csdn.net/download/weixin_43042683/87448211

论文原文

https://dl.acm.org/doi/10.1145/3478513.3480525

论文视频

https://www.bilibili.com/video/BV1cb4y127Vp/?from=seopage&vd_source=5212838c127b01db69dcc8b2d27ca517

1引言

植物存在在室外与室内各个环境中,细致的植物模型会显著增加绝大虚拟场景的真实感。尽可能模拟所捕获植物的特征在重建模型过程中非常重要的,特别是在需要对树木做出详细研究或与植被相互作用的环境中。从单视图传感器数据中准确地重建一棵树是一个具有挑战性和开放性的问题,原因有很多:首先,树叶经常遮挡部分主要分枝结构。其次,树枝结构错综复杂,不能总是完全捕捉到。第三,从单个视点重建树存在许多可能的解决方案来对相应的3D树几何进行建模。

目前从传感器数据重建树木的方法大多依赖于分别重建主枝结构和树冠。许多技术的核心是获得树冠的几何封套,然后用程序模型生成的树枝填充这些封套。对于图像,用户定义的草图[1]或图像分割[2]可以用来推断这样的3D包络。Neubert等人[3]使用两幅图像来获得3D体素表示,以约束视点模糊性,然后使用粒子流算法对分支结构建模。对于点云,在建立分支几何模型之前,3D包络可以更容易地以更细微的方式生成[4]。

由于植被的巨大几何复杂性,忠实于树木和植物所有定义特征的重建树木和植物模型的目标仍然是一个具有挑战性和悬而未决的问题[5]。许多方法依赖于点云数据,并将重建过程分解为多个步骤或组件。例如,Livny等人[6]使用图形算法显式地重建了主枝,而树叶仅基于一组包围体进行了近似重建。另一方面,Bradley等人[7]使用从立体图像获得的点云,学习结合非刚性网格拟合的统计模型来重建浓密的树叶。Li等人[8]走得更远,通过跟踪萌芽和分叉等拓扑事件,考虑了植物重建的时域。

与点云相比,图像代表了一种更方便的捕捉植被的方式,因为相机在各种设备上都很容易获得,比如手机或无人机。然而,从单视图图像重建树木是一个困难且不适定的问题。单一的图像不能提供足够的细节来有意义地重建树的3D结构。未在中捕获的详细信息图像不容易重建。为了解决这个问题,ke使用多个视图的图像来获得树木的更全面的3D表示,这使得他们能够更精确地重建其分枝结构[9]。Quan等人[10]和Tan等人[11]从运动中捕捉一系列图像并使用其结构来提取3D点云,然后重建树木和植物的详细模型。Argudo等人[2]使用图像分割来生成树冠的3D包络网格以及径向距离图,以渲染地形尺度上的树木重建。

与本文的工作最接近的是Tan等人[12]的方法,该方法也专注于从单幅图像重建树木。在这项工作中,用户需要通过草图手动识别主枝和树冠形状。然后,从预定义的分支模板生成树冠几何图形,并基于生成的分支结构合成树叶。

2 本文研究方法

使用单个图像作为输入,并使用DeepLab-V3进行语义分割,以获得图像的语义掩码,该掩码为每个像素分配三个标签之一:背景、分支和树叶。使用分割模板训练一个神经网络用于物种识别,另一个神经网络用于估计径向包围盒(RBV)。基于预测的物种,得到了一个树模型的参数值。然后,使用预测的语义掩码、估计的RBV和选择的物种参数值来计算具有与输入图像相对应的视觉特征的3D树模型的生长。

图1.框架概述。颜色突出显示输入、输出和生成的数据(黄色)、使用的 神经网络(青色)和程序模型(红色)。

2.1 径向包围体

本文引入径向包围体(RBV)(见图2),以一种保留基本形状特征的抽象方式对树形进行编码。RBV由直立的圆柱体C生成,高度h和半径r由树的最大高度和最大水平范围定义。将圆柱体切片n层,其中每一层代表一个大小为h/n的圆柱形平板。然后,每层被细分为固定数量的扇区。每个扇区半径根据本地占用率的大小而不同。每个圆柱形扇区在此特定位置与树几何体紧密配合,从而产生密集的凹面边界体积。

与树模型的常见表示(如图或网格)相比,RBV提供了基于固定扇区大小编码树形式的优势。与其他固定大小的表示(如体素)相比,RBV只存储树模型的外部形状,从而更有效地编码树形。RBV可以定义固定的层数和扇区数,便于学习3D树结构。

图2.枫树的径向包围体(a),分辨率为2×2(b)、4×4(c)、8×8(d)和16×16(e)

2.2 合成数据集

由于没有公开的3D树木模型的数据库。因此,为了训练神经网络,本文使用发展增长模型生成一个包含七种不同树种(相思树、枫树、橡树、苹果、松树、柳树、桦树)的数据集,并使用本文的框架进行渲染。

2.3 DeepLab-V3

DeepLab-V3是一个最先进的语义分割网络[13],用于可靠地检测植物实例的掩码以及分枝结构和树叶的分离。该网络结构使用以并行或级联方式应用的Arous卷积来捕获多尺度上的输入图像的图像特征。通过这种方式,DeepLab-V3有力地提取了树模型的语义掩码。本文用于检测树的主要分枝结构的面具和树叶的整体形状,以便从照片中忠实地重建树木。然而,训练网络需要语义掩码的地面真实数据和不同语义类别的像素精确标签,但这些数据很难获得。由于不存在为树提供这些语义类标签的数据集,因此使用树模型的渲染来生成合成数据集。

DeepLab-V3使用标准设置对这些数据进行训练,直到它收敛。图3给出了树模型的基本事实和预测的语义掩码。本文目标是提取树叶的主要分枝结构和整体形状,提供了足够的关于树的信息,以便用建模算法真实地重建。

图3.树模型和掩码:使用本文框架来呈现树(A)并生成语义分割掩码(B),这些掩码为树枝(蓝色)、树叶(绿色)和背景(白色)提供像素精确的标签。然后,在合成数据上训练语义分割网络以估计分割掩码(C)。

2.4 学习径向包围盒

由于RBV以固定的层数和扇区对树进行编码,因此它们可以直接用作训练神经网络的表示。用于映射树的语义掩码及其RBV的网络可以定义为:

fRBV(M):M→R

其中M∈M表示语义掩码RRBV。目标是使用经过训练以求解回归的神经网络来估计RBV的值。由于大量参数的回归通常容易出错,所以联合训练最多五个输出分支(头)来预测不同分辨率的RBV的值(图2)。低分辨率RBV的值回归有助于监督高分辨率RBV的值回归。因此,将RBV定义为最多具有五个级别的分辨率。

对于第一级,将RBV定义为具有一个扇区的一层(即,柱面)。然后,逐步分割该体积,以生成具有2层和2个扇区(级别2,4个值)、4层和4个扇区(级别3,16个值)、8层和8个扇区(级别4,64个值)的RBV,以及具有16个扇区的16层(级别5,256个值)。为了将网络训练为一系列输出,将预测较粗分辨率的头部的输出与图像嵌入连接起来,并将其用作具有较高分辨率的头部的输入。一旦经过训练,就可以联合获得每个RBV分辨率的值。

神经网络fRBV被训练来估计RBV作为四个头部的级联,如图4(a)所示。网络的输入是语义掩码, 本文将其分成三层来表示每个类的背景、分支和枝叶。用来训练RBV CNN的RBV的输出扇区值按每 个物种归一化--用于获得最终树木大小的比例因子存储在物种参数集P中。用轻量级的ConvNet架 构嵌入掩模来提取图像特征(图4(b))。

图4本文框架中使用的网络体系结构。在图像嵌入(a)的基础上,使用密集层的级联来预测具有四种不同分辨率的RBV。输入到该网络的是用公共ConvNet体系结构(b)获得的图像嵌入特征向量。使用ConvNet架构(b)和几个附加层(b)来预测类别概率识别树种。

2.5 物种鉴定的神经网络学习

为了从照片中全自动地重建树木模型,获得树木的种类也是很重要的。我们的目标是学习从树的语义掩码到物种标识符U的映射。这种神经网络可以定义为:

其中M∈M表示语义掩码,U∈U表示物种标识符。将该网络实现为从语义掩码中提取图像特征的 ConvNet架构(图4( b))。在图像嵌入的基础上,训练三个完全连通的层和一个用于分类的输出层(图 4(c))。一旦获得了物种标识符,就使用它来选择一组预定义的参数P,这些参数可以与发展模型一起 使用来种树。

2.6 双模态树开发

本文发展模式提供了两种增长模式。首先,可以使用生长的现象学模型来表达树木的发育[14]。此外,还可以将树的发育表达为树枝在空间中自组织的过程[15]。现象学生长模式根据植物学在树枝尺度上的观察模拟树木的发育,而自组织模式则用于在树木尺度上生长出整体逼真的形状。

在本文的方法中,树模型被定义为非循环图G={N,E},它由节点n∈N、边e∈E和一组全局参数组成。G中的一个节点是根节点。每个节点n存储定义树模型的树枝段的状态的属性,例如直径、年龄、在3D空间中的位置和活力。树的发展表现为在模拟过程中对节点属性值的添加、删除和修改。

现象学增长采用增长函数,该增长函数根据节点在每个模拟步骤中的当前状态为节点分配新的状态。这一功能描述了已被充分研究的生物学过程,如叶序、向光性、向重力性、枝条脱落、芽的激素控制和枝条重复。

在自组织生长的情况下,在树模型周围的3D包围体中分布标记A。生长的枝条被吸引到这个空间中的标志物,这些标志物位于沿生长方向延伸的锥形体积内。在分支附近的标记被移除。这导致分支避免生长到相同的空间区域,并促进分支对空间的竞争。

2.7 利用双模生长重建树

在使用开发模型生成树几何图形之前,通过以下方式均匀分布标记A:首先,将垂直定向的、与x轴共同对齐的四边形放置到3D场景中,并使用遮罩M(图5a)对其进行纹理处理。然后,在纹理包含分支的2D四边形上放置标记像素(图5b)。这会导致为每个像素生成一个标记。标记A的位置是通过将它们放置在由指示分支占用的M中的相应蓝色像素覆盖的位置来计算的。在此步骤之后,根据M的像素分布将标记A分布在3D空间中的二维四边形上。

一旦3D场景充满了标记,就可以使用开发模型的自组织模式来生长模型。本文使用向上向量初始化生长方向,并将种子放置在最下面的标记A的位置。继续生长,直到消耗完所有的标记,并出现平面分枝结构(图5c)。然后,我们将平面分支结构重定向到RBV的3D空间,以获得自然的分支结构(图5d)。对于每个分支点∈G,我们确定包含它的层。在层级i中,选择扇区左半部分或右半部分来计算几何中心。然后,计算重定向向量,通过绕y轴旋转(图5e,f),我们将从出现的分支与其对齐。由于几何中心指示扇区体积的范围,因此分支向每一层的最大扇区旋转。请注意,冲突是隐式解决的,因为分支不会增长到占用的空间。

图5.双模式生长模型使用分段掩码M和RBV来约束树的生长。本文使用分支的分割掩码(a)通过对分割掩码(b)进行采样来在3D空间的2D平面上放置标记。然后,使用这些标记来指导平面分支结构(c)的生长过程。为了获得3D分支结构,通过基于RBV(d,e,f)中扇区的几何中心确定旋转向量来旋转分支。根据分支点在RBV中的位置,使用RBV扇区的左半部分(e)或右半部分(e)来计算几何中心和结果旋转向量v_o。

3 实验结果

图6.合成生成的四种不同树种的树木模型:橡树(左上)、相思树(右上)、松树(左下)和柳树(右下)。本文方法使能够以较高的视觉保真度重建主要分支结构和整体形状。对于每个输入树模型,展示了用不同的随机种子和带有RBV和分割掩码的双峰生长生成的两个重建模型。

图7.三种不同真实树木的重建保真度。使用神经网络进行语义分割,从照片(a)-(c)中获得树枝和树叶的掩码。然后,使用新的径向包围体表示和双模式生长算法来重建真实的分支结构(d)。得到的树显示出与照片(e,f)中 可以观察到的视觉特征相似的视觉特征。

图8.多棵树的重建:要重建多棵树,首先检测树的边界框(a)以获得裁剪后的图像(e,f)。然后,对于每个裁剪的图像,计算与(b,c)中的RGB图像重叠的语义分割掩码(g,h)。然后,预测RBV(d)来重建树模型(i)。

图9.两种失败的情况:对于所示的照片(a),语义分割网络不能将前景树像素与背景和其他树像素完全分开(b)。因此,RBV网络无法预测正确的RBV(c),进而导致重建结果与捕获的树形(d)不匹配。

4本文的优缺点

优点:本文是第一个探索从单张照片全自动重建树木的方法。使用该框架生成的树木模型具有较高的视觉保真度。具体如下:(1)提出了径向包围体作为树木模型的轻量级固定大小的3D表示;(2)提出了一个由三个神经网络组成的管道,允许检测和分割照片中的树木,估计它的 3D基于径向边界体积的结构,并识别树物种;(3)引入了一种新的树木双模态发育模型,该模型结合了现象学生长和自组织生长。

局限性:(1)在通过训练人工数据上的神经网络在处理不同树种的真实照片,区域鸿沟的弥合仍然是一个具有挑战性的问题;(2)不能对具有不相交的水平分支结构的树进行有意义的编码。RBV在每个地段仅存储单个距离值,这限制了对更复杂的树形状进行编码;(3)在实验过程中对于前景树像素和背景树相似不能保证完全分开,导致重建效果与原始树形不匹配。

参考文献

[1] Tan P, Fang T, Xiao J, et al. Single image tree modeling[J]. ACMTransactions on Graphics (TOG), 2008, 27(5): 1-7.

[2] Argudo O, Chica A, Andujar C. Single-picture reconstruction andrendering of trees for plausible vegetation synthesis[J]. Computers &Graphics, 2016, 57: 55-67.

[3] Neubert B, Franken T, Deussen O. Approximate image-based tree-modelingusing particle flows[M]//ACM SIGGRAPH 2007 papers. 2007: 88-es.

[4] Livny Y, Pirk S, Cheng Z, et al. Texture-lobes for tree modelling[J].ACM Transactions on Graphics (TOG), 2011, 30(4): 1-10.

[5] Neubert B, Pirk S, Deussen O, et al. Improved model‐and view‐dependentpruning of large botanical scenes[C]//Computer Graphics Forum. Oxford, UK:Blackwell Publishing Ltd, 2011, 30(6): 1708-1718.

[6] Livny Y, Pirk S, Cheng Z, et al. Texture-lobes for tree modelling[J].ACM Transactions on Graphics (TOG), 2011, 30(4): 1-10.

[7] Bradley D, Nowrouzezahrai D, Beardsley P. Image-based reconstructionand synthesis of dense foliage[J]. ACM Transactions on Graphics (TOG), 2013,32(4): 1-10.

[8] Li Y, Fan X, Mitra N J, et al. Analyzing growing plants from 4D pointcloud data[J]. ACM Transactions on Graphics (TOG), 2013, 32(6): 1-10.

[9]Reche-Martinez A, Martin I, Drettakis G. Volumetric reconstruction andinteractive rendering of trees from photographs[M]//ACM SIGGRAPH 2004 Papers.2004: 720-727.

[10] Quan L, Tan P, Zeng G, et al. Image-based plant modeling[M]//ACMSIGGRAPH 2006 Papers. 2006: 599-604.

[11] Tan P, Zeng G, Wang J, et al. Image-based tree modeling[M]//ACMSIGGRAPH 2007 papers. 2007: 87-es.

[12] Tan P, Fang T, Xiao J, et al. Single image tree modeling[J]. ACMTransactions on Graphics (TOG), 2008, 27(5): 1-7.

[13] Chen L C, Papandreou G, Kokkinos I, et al. Deeplab: Semantic imagesegmentation with deep convolutional nets, atrous convolution, and fullyconnected crfs[J]. IEEE transactions on pattern analysis and machineintelligence, 2017, 40(4): 834-848.

[14] Měch R, Prusinkiewicz P. Visual models of plantsinteracting with their environment[C]//Proceedings of the 23rd annualconference on Computer graphics and interactive techniques. 1996: 397-410.

[15] Palubicki W, Horel K, Longay S, et al. Self-organizing tree models forimage synthesis[J]. ACM Transactions On Graphics (TOG), 2009, 28(3): 1-10.

相关文章:

《Learning to Reconstruct Botanical Trees from Single Images》学习从单幅图像重建植物树

读书报告下载https://download.csdn.net/download/weixin_43042683/87448211论文原文https://dl.acm.org/doi/10.1145/3478513.3480525论文视频https://www.bilibili.com/video/BV1cb4y127Vp/?fromseopage&vd_source5212838c127b01db69dcc8b2d27ca5171引言植物存在在室外与…...

vant 4 正式发布,支持暗黑主题,那么是如何实现的呢

2022年10月25日首发于掘金,现在同步到公众号。11. 前言大家好,我是若川。我倾力持续组织了一年多源码共读,感兴趣的可以加我微信 lxchuan12 参与。另外,想学源码,极力推荐关注我写的专栏《学习源码整体架构系列》&…...

MySQL的复制 二

复制是MySQL的一项功能,使服务器能够将更改从一个实例恢复到另一个实例 主服务器(master)将所有数据和结构更改记录到二进制日志中。二进制日志格式是基于语句的、基于行的和混合的。 从属服务器(slave)从主服务器请求…...

秒杀项目之秒杀商品展示及商品秒杀

目录前言一、登录方式调整二、生成秒杀订单2.1 绑定秒杀商品2.2 查看秒杀商品2.3 订单秒杀2.3.1 移除seata相关(方便测压)2.3.2 生成秒杀订单2.3.3 前端页面秒杀测试注意前言 博主博客用到的资源都会同步分享到资源包中 一、登录方式调整 第1步&#xf…...

教育行业需要什么样的数字产品?

数字化转型的浪潮已经席卷了各行各业,不仅出现在互联网、电商、建筑等行业,还应用在了教育行业。数字化的教育ERP软件能够在满足学校需求的基础上,帮助学校完善各类工作流程,提高工作效率。 对于一个拥有多个校区,上万…...

Spring MVC

一、Spring MVC介绍 a. Spring MVC是一个Web框架 b. Spring MVC是基于Servlet API构成的 MVC 是 Model View Controller 的缩写。 MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。 学习Spring MVC目标: a.连接功能:将用户&#xff…...

类与对象(上)

类与对象(上) 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间…...

正确安装 torch_geometric库

step1: 查看pytorchcuda 版本 torch-scatter torch-sparse torch-cluster torch-spline-conv 这些关联包要与torch版本匹配。 import torch print(torch.__version__) print(torch.cuda.is_available()) torch.version.cuda或者 pip list查看版本 step2&#xff…...

【Unity VR开发】结合VRTK4.0:自身移动(滑动)

语录: 依山傍水房树间,行也安然,住也安然; 一条耕牛半顷田,收也凭天,荒也凭天; 雨过天晴驾小船,鱼在一边,酒在一边; 夜晚妻子话灯前,今也谈谈…...

G1垃圾回收器详解

文章目录前言一、思考问题二、官方文档三、基本介绍四、G1的内存模型五、G1的标记过程六、G1的垃圾回收1、G1过程梳理2、Young GC3、Mixed GC4、Full GC七、参数介绍八、典型问题1、疏散失败(Evacuation Failure)2、大对象分配(Humongous All…...

tws耳机哪个牌子音质好?tws耳机音质排行榜

随着蓝牙耳机市场的不断发展,使用蓝牙耳机的人也逐渐增多,近年来更是超越有线耳机成为最火爆的数码产品之一。那么,tws耳机哪个牌子音质好?下面,我来给大家推荐几款音质好的tws耳机,可以当个参考。 一、南…...

TIA博途中DB数据块清零的具体方法示例

TIA博途中DB数据块清零的具体方法示例 TIA中数据块如何实现清零? 在TIA指令集内有多个移动指令可对DB块内数据进行清零处理。对于S7-1500 CPU或ET200SP CPU来说,可使用BLKMOV、FILL以及SCL的POKE_BLK指令。但是这些指令对DB块清零时,要求DB块必需为非优化DB。 对于优化的DB…...

iptables防火墙屏蔽指定ip的端口

因为需要测试客户端程序与hadoop服务器之间正常通信需要开通的端口, 所以在hadoop各服务器上使用iptables防火墙屏蔽了测试客户端程序的ip和所有端口。然后,根据报错信息提示的端口号来逐步放开直到能正常通信下载文件。 在服务器端屏蔽指定ip访问所有端口 #查看…...

JavaScript Math(算数) 对象

JavaScript Math(算数) 对象 Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 描述 与其他全局对象不同的是,Math 不是一个构造器。Math 的所…...

超详细的JAVA高级进阶基础知识04

目录 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1 Arrays 类介绍 4.2 冒泡排序 4.3 选择排序 4.4 二分查找 4.5 正则表达式 4.5.1 String 类中与正则有关的常见方法 4.5.2 练习 4.5.3 今日学习目标 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1…...

Python 运算符?

什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 5 9 。 例子中,4 和 5 被称为操作数, 称为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符…...

linux nuxt 部署 问题汇总

安装node centos 7 请选择 node版本 v16.1.0 进行安装, npm 版本 7.11.2 亲测这个版本有效,否则会出现 Error: Cannot find module ‘node:fs/promises‘ 等问题 node安装亲参照: Linux node 安装教程_linux node安装_围城少年的博客…...

C++内存管理

文章目录1. c的内存管理例题2.c管理方式1.c的内置类型1.申请一个空间并初始化2.申请连续的空间并初始化3.总结2.c的自定义类型2.总结3.operator new与operator delete函数4.new和delete的实现原理1.内置类型2.自定义类型内存泄露问题&&delete先析构的原因编译器实现机制…...

电子招投标系统源码之 —采购数字化转型快人一步,以大数据支撑供应链管理未来

采购数字化转型快人一步,以大数据支撑供应链管理未来 招标采购为主的一站式全流程数字化采供协同。平台满足询比价、招标、竞价、拍卖、协议直采、商城采购等多种采购定价方式,采购过程全程留痕可追溯。平台支持企业通过WEB、APP、小程序等终端完成采购需…...

ie获取cookie数据,中文乱码;cookie中文乱码终极解决办法

终极解决办法 cookie存中文数据是会出现乱码的,所以在存数据前,得先“编码”,取的时候先“解码” JS方法-编码:encodeURI("你好") 结果:"%E4%BD%A0%E5%A5%BD"JS方法-解码:decodeURI(&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

基于 TAPD 进行项目管理

起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...