弱监督实例分割 Box-supervised Instance Segmentation with Level Set Evolution 论文笔记

弱监督实例分割 Box-supervised Instance Segmentation with Level Set Evolution 论文笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • 3.1 基于 Box 的实例分割
    • 3.2 基于层级的分割
  • 四、提出的方法
    • 4.1 图像分割中的层级模型
    • 4.2 基于 Box 的实例分割
      • 在 Bounding Box 内的层级进化
      • 输入的数据格式
      • 层级初始化
    • 4.3 训练和推理
      • 损失函数
      • 推理
  • 五、实验
    • 5.1 数据集
    • 5.2 实施细节
    • 5.3 主要结果
    • 5.4 消融实验
      • 层级能量
      • 高层特征的通道数量
      • 训练计划
      • 深度结构特征的有效性
  • 六、结论

写在前面

  这是一篇基于 Box 的弱监督实例分割文章,之前也分享过几篇(主页有,欢迎关注一下呗~),采用旧纸堆里面翻出来的能量函数来做弱监督。

  • 论文地址:Box-supervised Instance Segmentation with Level Set Evolution
  • 代码地址:https://github.com/LiWentomng/boxlevelset
  • 收录于:ECCV 2022
  • 补一下博客篇数,2023年每周一篇,还剩下6篇未补。欢迎关注,长年稳定更新~

一、Abstract

  本文提出一种 single-shot 的基于 box 监督的实例分割方法,致力于整合传统的能量函数模型以及深度神经网络。具体来说,以一种端到端的方式,通过一个连续的 Chan-Vese 能量函数来迭代地学习一系列层级(mask?):采用 SLOLv2 来自适应地预测实例感知的 mask 作为每一个实例层级。所有的输入图像及提取的特征都用来进化层级曲线,其中一个 box 投影函数用来获得初始的边界。通过最小化可微分的能量函数,每个实例的层级在其对应的 box 标注框内被迭代地优化,实验结果很牛皮。

二、引言

  第一段实例分割的目的,应用,之前方法对于标注的依赖。
  第二段介绍现有的基于 Box 的方法,基于伪标签的以及颜色相似度的,即 BBTP 和 Boxinst。本文指出这两种方法过于简化了一个假设:像素或者颜色对被强制共享相同的颜色,于是来自相似形状目标和背景的噪声上下文无可避免地会影响训练,使得性能不太好。
  本文提出一种 single-shot 的基于 box 监督的实例分割方法来解决这些问题,致力于整合传统的能量集合模型以及深度神经网络。以一种端到端的方式在标注的 Bounding box 内,从隐藏的曲线卷积中来迭代地学习一系列层级(mask?)。
  具体来说,引入一种传统 Chan-Vese 能量函数,并采用 SOLOv2来预测实例感知的mask 图来作为每个实例的层级。除输入的特征图外,还采用了一种长范围依赖的深度结构特征来稳定地进化层级曲线,得以向目标边界逼近。通过最小化可微分的能量函数,每个实例的层级在其对应的 box 标注框内被迭代地优化,实验结果很牛皮。

贡献如下:

  • 第一个提出一种基于层级进化的方法用在基于 box 的弱监督实例分割上;
  • 将深度结构特征并入低层级的图像,在 bounding box 区域内实现稳定的层级进化,其中一个 box 的投影函数用于层级初始化。
  • 在 COCO、PASCAL VOC、遥感数据集 iSAID 和医疗数据集 LiTS上效果很好。

三、相关工作

3.1 基于 Box 的实例分割

  讲一下最近的方法,指出 BBTP 和 Boxinst,这两种方法过于简化了一个假设:像素或者颜色对被强制共享相同的颜色,因此来自相似形状目标和背景的噪声上下文无可避免地会影响训练,使得性能不太好。除了这两个外,最近的 BBAM 和 DIscoBox 关注于代理 mask 标签的生成,需要多个阶段的训练或者多个网络结构。而本文提出的基于层级方法以一种端到端的隐含方式通过优化 box 区域内的能量函数来迭代地对齐实例边界。

3.2 基于层级的分割

  主要划分为两类:基于区域和边缘的方法。核心理念是在一个高维度通过一个能量函数来展现隐藏的曲线,而这能够用梯度下降来优化。接下来是一些举例,指出他们的不足:全监督方式训练网络去预测不同的子区域并得到目标的边界,而本文提出的是 box 级别的监督。

四、提出的方法

  一些符号:输入的图像 I i m g I_{img} Iimg,高层深度特征 I f e a t I_{feat} Ifeat,初始层级 ϕ 0 \phi_0 ϕ0

  

4.1 图像分割中的层级模型

  对层级方法的回顾:将图像分割视为一种连续的能量最小化问题。
  Mumford-Shah 层级模型:给定一图像 I I I,找到一组参数化的轮廓 C C C,将图像层级 Ω ∈ R 2 \Omega\in\mathbb{R}^2 ΩR2 划分为 N N N 个不联通的区域 Ω 1 , ⋯   , Ω N \Omega_1, \cdots, \Omega_N Ω1,,ΩN。Mumford-Shah 能量函数 F M S \mathcal F^{MS} FMS 定义如下:
F M S ( u 1 , ⋯   , u N , Ω 1 , ⋯   , Ω N ) = ∑ i = 1 N ( ∫ Ω i ( I − u i ) 2 d x d y + μ ∫ Ω i ∣ ∇ u i ∣ 2 d x d y + γ ∣ C i ∣ ) , \mathcal F^{MS}(u_1,\cdots,u_N,\Omega_1,\cdots,\Omega_N)=\sum\limits_{i=1}^{N}(\int\limits_{\Omega_i}(I-u_i)^2dxdy+\mu\int\limits_{\Omega_i}|\nabla u_i|^2dxdy+\gamma|C_i|), FMS(u1,,uN,Ω1,,ΩN)=i=1N(Ωi(Iui)2dxdy+μΩi∣∇ui2dxdy+γCi),其中 u i u_i ui 为接近于输入 I I I 的光滑分段函数,目的是确保每个区域 Ω i \Omega_i Ωi 内的光滑。 μ \mu μ γ \gamma γ 为加权系数。
  之后 Chan 和 Vese 简化了这一能量函数:
F CV ( ϕ , x , c 2 ) = ∫ Q ∣ I ( x , y ) − c 1 ∣ 2 H ( ϕ ( x , y ) ) d x d y + ∫ Q ∣ I ( x , y ) − c 2 ∣ 2 ( 1 − H ( ϕ ( x , y ) ) ) d x d y + γ ∫ Q ∣ ∇ H ( ϕ ( x , y ) ) ∣ d x d y \begin{aligned}\mathcal{F}^{\text{CV}}(\phi,x,c_2)&=\int\limits_{Q}\left|I(x,y)-c_1\right|^2H(\phi(x,y))dxdy\\ &+\int\limits_{Q}\left|I(x,y)-c_2\right|^2(1-H(\phi(x,y)))dxdy+\gamma\int\limits_{Q}\left|\nabla H(\phi(x,y))\right|dxdy\end{aligned} FCV(ϕ,x,c2)=QI(x,y)c12H(ϕ(x,y))dxdy+QI(x,y)c22(1H(ϕ(x,y)))dxdy+γQH(ϕ(x,y))dxdy其中 H H H 为 Heaviside 海塞函数, ϕ ( x , y ) \phi(x,y) ϕ(x,y) 为层级函数,如果为 0 则表示轮廓 C = { ( x , y ) : ϕ ( x , y ) = 0 } C=\{(x,y):\phi(x,y)=0\} C={(x,y):ϕ(x,y)=0} 将图像空间 Ω \Omega Ω 划为两个不连通区域,内部轮廓为 C  ⁣ : Ω 1 = { ( x , y ) : ϕ ( x , y ) > 0 } C\colon\Omega_1=\{(x,y):\phi(x,y)>0\} C:Ω1={(x,y):ϕ(x,y)>0},外部轮廓为 C  ⁣ : Ω 2 = { ( x , y ) : ϕ ( x , y ) < 0 } C\colon\Omega_2=\{(x,y):\phi(x,y)<0\} C:Ω2={(x,y):ϕ(x,y)<0}。上式右边一二项倾向于拟合数据,第三项用一个非负系数 γ \gamma γ 归一化 0 0 0 层级轮廓。 c 1 c_1 c1 c 2 c_2 c2 分别为 C C C 内部和 C C C 外部的输入 I ( x , y ) I(x,y) I(x,y) 的均值。
  于是通过 c 1 c_1 c1 c 2 c_2 c2 找到一个层级函数 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0 来优化能量函数 F CV \mathcal{F}^{\text{CV}} FCV,从而得到图像的分割结果。

4.2 基于 Box 的实例分割

在 Bounding Box 内的层级进化

  给定输入图像 I ( x , y ) I(x,y) I(x,y),旨在标注的 bounding box B \mathcal{B} B 区域内隐式地进化出一组层级来预测目标边界曲线。由 SOLOv2 预测出的尺寸为 H × W H\times W H×W 的 mask M ∈ R H × W × S 2 M\in\mathbb{R}^{H\times W\times S^2} MRH×W×S2 包含 S × S S\times S S×S 个可能的实例图。每一个可能的实例图仅包含一个实例,他们的中心位于 ( i , j ) (i,j) (i,j)。位置 ( i , j ) (i,j) (i,j) 处预测出 mask 类别概率 p i , j ∗ > 0 p^{*}_{i,j}>0 pi,j>0 时被视为正样本。然后将 box B \mathcal{B} B 内的每个正样本图作为层级 ϕ ( x , y ) \phi(x,y) ϕ(x,y),其输入图像 I ( x , y ) I(x,y) I(x,y) 相应的像素空间被视为 Ω \Omega Ω,即 Ω ∈ B \Omega\in\mathcal{B} ΩB。当 C = { ( x , y ) : ϕ ( x , y ) = 0 } C=\{(x,y):\phi(x,y)=0\} C={(x,y):ϕ(x,y)=0} 时,对应的 C C C 为分割出的边界,此时 box 区域被划分为不相连的前景和背景区域。

  通过优化下面的能量函数来学习一系列的层级 ϕ ( x , y ) \phi(x,y) ϕ(x,y)
F ( ϕ , I , c 1 , c 2 , B ) = ∫ Ω ∈ B ∣ I ∗ ( x , y ) − c 1 ∣ 2 σ ( ϕ ( x , y ) ) d x d y + ∫ Ω ∈ B ∣ I ∗ ( x , y ) − c 2 ∣ 2 ( 1 − σ ( ϕ ( x , y ) ) ) d x d y + γ ∫ Ω ∈ B ∣ ∇ σ ( ϕ ( x , y ) ) ∣ d x d y \begin{aligned} \mathcal{F}\left(\phi, I, c_{1}, c_{2}, \mathcal{B}\right) & =\int_{\Omega \in \mathcal{B}}\left|I^{*}(x, y)-c_{1}\right|^{2} \sigma(\phi(x, y)) d x d y \\ & +\int_{\Omega \in \mathcal{B}}\left|I^{*}(x, y)-c_{2}\right|^{2}(1-\sigma(\phi(x, y))) d x d y+\gamma \int_{\Omega \in \mathcal{B}}|\nabla \sigma(\phi(x, y))| d x d y \end{aligned} F(ϕ,I,c1,c2,B)=ΩBI(x,y)c12σ(ϕ(x,y))dxdy+ΩBI(x,y)c22(1σ(ϕ(x,y)))dxdy+γΩB∣∇σ(ϕ(x,y))dxdy其中 I ∗ ( x , y ) I^{*}(x,y) I(x,y) 表示归一化后的图像 I ( x , y ) I(x,y) I(x,y) γ \gamma γ 为非负系数, σ \sigma σ s i g m o i d sigmoid sigmoid 函数,其被视为层级 ϕ ( x , y ) \phi(x, y) ϕ(x,y) 的特征函数。相比于传统的 Heaviside 海塞函数, s i g m o i d sigmoid sigmoid 更为光滑,能够更好地表示预测实例的特征以及提高层级进化在训练过程中的收敛。上式右边一二项旨在强制预测的 ϕ ( x , y ) \phi(x, y) ϕ(x,y) 统一内部区域 Ω \Omega Ω 和外部区域 Ω ˉ \bar\Omega Ωˉ c 1 c_1 c1 c 2 c_2 c2 Ω \Omega Ω Ω ˉ \bar\Omega Ωˉ 的均值,定义如下:
c 1 ( ϕ ) = ∫ Ω ∈ B I ∗ ( x , y ) σ ( ϕ ( x , y ) ) d x d y ∫ Ω ∈ B σ ( ϕ ( x , y ) ) d x d y ,    c 2 ( ϕ ) = ∫ Ω ∈ B I ∗ ( x , y ) ( 1 − σ ( ϕ ( x , y ) ) ) d x d y ∫ Ω ∈ B ( 1 − σ ( ϕ ( x , y ) ) ) d x d y c_1(\phi)=\dfrac{\int\limits_{\Omega\in\mathbb{B}}I^*(x,y)\sigma(\phi(x,y))dxdy}{\int\limits_{\Omega\in\mathbb{B}}\sigma(\phi(x,y))dxdy},~~c_2(\phi)=\dfrac{\int\limits_{\Omega\in\mathcal{B}}I^*(x,y)(1-\sigma(\phi(x,y)))dxdy}{\int\limits_{\Omega\in\mathcal{B}}(1-\sigma(\phi(x,y)))dxdy} c1(ϕ)=ΩBσ(ϕ(x,y))dxdyΩBI(x,y)σ(ϕ(x,y))dxdy,  c2(ϕ)=ΩB(1σ(ϕ(x,y)))dxdyΩBI(x,y)(1σ(ϕ(x,y)))dxdy能量函数 F \mathcal{F} F 可以在训练过程中利用梯度反向传播来优化。当时间步 t ≥ 0 t\ge0 t0 时,能量函数 F \mathcal{F} F ϕ \phi ϕ 的微分可表示为:
∂ ϕ ∂ t = − ∂ F ∂ ϕ = − ∇ σ ( ϕ ) [ ( I ∗ ( x , y ) − c 1 ) 2 − ( I ∗ ( x , y ) − c 2 ) 2 + γ d i v ( ∇ ϕ ∣ ∇ ϕ ∣ ) ] \dfrac{\partial\phi}{\partial t}=-\dfrac{\partial F}{\partial\phi}=-\nabla\sigma(\phi)[(I^*(x,y)-c_1)^2-(I^*(x,y)-c_2)^2+\gamma div\left(\dfrac{\nabla\phi}{|\nabla\phi|}\right)] tϕ=ϕF=σ(ϕ)[(I(x,y)c1)2(I(x,y)c2)2+γdiv(∣∇ϕϕ)]其中 ∇ \nabla d i v div div 分别为空间求导以及散度算子。于是 ϕ \phi ϕ 的更新为:
ϕ i = ϕ i − 1 + Δ t ∂ ϕ i − 1 ∂ t \phi_i=\phi_{i-1}+\Delta t\dfrac{\partial\phi_{i-1}}{\partial t} ϕi=ϕi1+Δttϕi1上式可以视为沿着能量函数下降方向的一个隐式的曲线进化,而最优的实例边界 C C C 可以借助迭代拟合 ϕ i − 1 \phi_{i-1} ϕi1,从而最小化能量函数 F \mathcal{F} F 获得:
inf ⁡ Ω ∈ B { F ( ϕ ) } ≈ 0 ≈ F ( ϕ i ) \operatorname*{inf}_{\Omega\in\mathcal{B}}\{\mathcal{F}(\phi)\}\approx0\approx\mathcal{F}(\phi_i) ΩBinf{F(ϕ)}0F(ϕi)

输入的数据格式

  除输入低水平的图像特征 I u I_u Iu 外,还采用嵌入了图像语言信息的高层深度特征 I f I_f If 来获得更加鲁棒的结果。将 SOLOv2 中所有 FPN 层的 mask 特征 F m a s k F_{\text mask} Fmask 送入到一个卷积层来提取高层特征 I f I_f If。此外,还通过树滤波器来增强 I f I_f If,这利用了最小跨越树(minimal spanning tree?)来建模长距离依赖并保存目标结构。为层级进化构建的整体能量函数为:
F ( ϕ ) = λ 1 ∗ F ( ϕ , I u , c u 1 , c u 2 , B ) + λ 2 ∗ F ( ϕ , I f , c f 1 , c f 2 , B ) , \mathcal F(\phi)=\lambda_1*\mathcal F(\phi,I_u,c_{u_1},c_{u_2},\mathcal B)+\lambda_2*\mathcal F(\phi,I_f,c_{f_1},c_{f_2},\mathcal B),\quad\text{} F(ϕ)=λ1F(ϕ,Iu,cu1,cu2,B)+λ2F(ϕ,If,cf1,cf2,B),其中 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2 分别为平衡两种特征的权重, c u 1 c_{u_1} cu1 c u 2 c_{u_2} cu2 c f 1 c_{f_1} cf1 c f 2 c_{f_2} cf2 分别为输入 I u I_u Iu I f I_f If 的均值。

层级初始化

  利用 box 投影函数来促进模型自动地生成一个粗糙估计的初始层级 ϕ 0 \phi_0 ϕ0
  通过赋值 GT box 上的每个位置来得到二值化的区域 m b ∈ { 0 , 1 } H × W m^b\in\{0,1\}^{H\times W} mb{0,1}H×W。每一个实例预测的 mask 得分 m p ∈ { 0 , 1 } H × W m^p\in\{0,1\}^{H\times W} mp{0,1}H×W 被视为前景概率。box 投影函数 F ( ϕ 0 ) b o x \mathcal{F}(\phi_0)_{box} F(ϕ0)box 定义如下:
F ( ϕ 0 ) b o x = P d i c e ( m x p , m x b ) + P d i c e ( m y p , m y b ) \mathcal{F}(\phi_0)_{box}=\mathcal{P}_{dice}(m_x^p,m_x^b)+\mathcal{P}_{dice}(m_y^p,m_y^b) F(ϕ0)box=Pdice(mxp,mxb)+Pdice(myp,myb)其中 m x p m_x^p mxp m x b m_x^b mxb m y p m_y^p myp m y b m_y^b myb 分别为 x x x y y y 坐标轴上mask 预测值 m p m^p mp 和二值化 GT 区域 m b m^b mb 的投影, P d i c e \mathcal{P}_{dice} Pdice 表示这一投影操作具有 1-D dice 系数加权。

4.3 训练和推理

损失函数

  损失函数 L L L 包含两部分,分类损失 L c a t e L_{cate} Lcate 和 box 监督下的实例分割损失 L i n s t L_{inst} Linst L = L c a t e + L i n s t L= L_{cate}+L_{inst} L=Lcate+Linst,其中 L c a t e L_{cate} Lcate 为 Focal 损失, L i n s t L_{inst} Linst 为可微分的层级能量函数:
L i n s t = 1 N p o s ∑ k 1 { p i , j ∗ > 0 } { F ( ϕ ) + α F ( ϕ 0 ) b o x } L_{inst}=\dfrac{1}{N_{pos}}\sum_k\mathbb{1}_{\{p_{i,j}^{*}>0\}}\{\mathcal{F}(\phi)+\alpha\mathcal{F}(\phi_0)_{box}\} Linst=Npos1k1{pi,j>0}{F(ϕ)+αF(ϕ0)box}其中 N p o s N_{pos} Npos 表示正样本的索引, p i , j ∗ {p_{i,j}^{*}} pi,j 为目标位置 ( i , j ) (i,j) (i,j) 上的类别概率。 1 \mathbb{1} 1 为索引函数,这能确保仅有正的实例 mask 样本才能执行层级进化,如果 p i , j ∗ > 0 p_{i,j}^{*}>0 pi,j>0 1 \mathbb{1} 1 为 1,反之为 0。 α \alpha α 为权重系数,实验设置为 0.3.

推理

  推理过程和 SOLOv2 一致:输入图像,利用 NMS 产生有效的 mask。仅有一点不同:采用了额外的一个卷积层来生成高层特征。

五、实验

5.1 数据集

  Pascal VOC、COCO、iSAID、LiTS。

5.2 实施细节

  AdamW 优化器,8 块 V100(还是够壕~),12 或 36 个 epochs。ResNet + ImageNet 预训练权重作为 Backbone。COCO 数据集:学习率 1 0 − 4 10^{-4} 104,batch 16。Pascal VOC 数据集:初始学习率 5 × 1 0 − 5 5\times10^{-5} 5×105,batch 8,在这两个数据集上,尺度随机缩放 640-800。iSAID 和 LiTS 有着相同的设置,COCO AP 作为评估指标,非负权重 γ \gamma γ 设为 1 0 − 4 10^{-4} 104

5.3 主要结果

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

在这里插入图片描述

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

5.4 消融实验

  消融实验在 Pascal VOC 数据集上进行:

层级能量

在这里插入图片描述

高层特征的通道数量

  表 7。

在这里插入图片描述

训练计划

  表 8。

深度结构特征的有效性

  表 9。

六、结论

  本文提出了一种 single-shot 的基于 box 的弱监督实例分割方法,能够以端到端的方式迭代地学习一系列层级函数:一种实例感知 mask 图用于预测和作为层级,输入的图像和提取的深度特征用于进化层级曲线,其中一个投影损失函数用于获得初始的边界。通过最小化可微分的能量函数,每个实例的层级能够在相应的 bounding box 标注内迭代地优化,大量的实验表明方法很牛。

写在后面

  本文结合若干年前的能量函数方法与现有的深度学习方法进行弱监督实例分割,属实是一锄头挖进往日的纸质期刊堆了,不排除有越来越多的方法~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7+LAMP+DVWA靶机搭建

一、什么是DVWA Damn Vulnerable Web Application (DVWA)(译注&#xff1a;可以直译为&#xff1a;"该死的"不安全Web应用程序)&#xff0c;是一个编码差的、易受攻击的 PHP/MySQL Web应用程序。 它的主要目的是帮助信息安全专业人员在合法的环境中&#xff0c;练习…

【自动化】selenium配置步骤 | 备份本地资源

1、安装jdk 2、设置环境变量 .1、CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar .2、JAVA_HOME C:\Program Files\Java\jdk1.8.0_231 .3、PATH 新增 %JAVA_HOME%\bin 3、安装chrome 版本&#xff1a;85.0.4183.83 4、禁用chrom…

AOP配置管理

AOP配置管理4&#xff0c;AOP配置管理4.1 AOP切入点表达式4.1.1 语法格式4.1.2 通配符4.1.3 书写技巧4.2 AOP通知类型4.2.1 类型介绍4.2.2 环境准备4.2.3 通知类型的使用前置通知后置通知环绕通知基本使用注意事项返回后通知异常后通知通知类型总结知识点1&#xff1a;After知识…

基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇

本文目录前言做项目的三大好处强强联手(天狗组合)专栏作者简介专栏的优势后端规划1. SpringBoot 和 SpringCloud 的选择2. Mybatis 和 MybatisPlus 和 JPA 的选择3. MySQL 和 Mongodb 的选择4. Redis 和 RocketMQ5. 后端规划小总结后端大纲提前掌握的知识点一期SpringBoot二期S…

经典文献阅读之--LOCUS 2.0(LiDAR为中心的多传感器LSLAM)

0. 简介 在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块&#xff0c;在两年后LOCUS2.0出世&#xff0c;LOCUS 2.0包括一种新的基于法线的广义迭代最近点&#xff08;GICP&#xff09;公式&#xff0c;该公式减少了点云对齐的计算时间&#xff0c;一种自适应体…

PowerTCP Sockets for .NET 6.1.5 Crack

PowerTCP Sockets for .NET PowerTCP Sockets for .NET 包含易于使用的 TCP 和 UDP 组件&#xff0c;可帮助您创建 Internet 客户端应用程序&#xff0c;只需几行代码和方便的事件。Ping 组件使用 ICMP、UDP 和 TCP 启用服务器验证&#xff0c;而跟踪组件执行异步跟踪路由以实…

三、数据链路层

&#xff08;一&#xff09;纠错与检错1、奇偶校验码&#xff08;再研究下&#xff0c;原理知道&#xff0c;具体过程无法重现&#xff09;分为奇校验和偶校验&#xff0c;奇偶校验位在首部或尾部&#xff0c;奇偶校验满信息位奇偶校验位&#xff08;1&#xff09;原理&#xf…

多线程 (七) 阻塞队列的使用及其实现

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

科大奥瑞物理实验——交流电桥

实验名称&#xff1a;交流电桥 1. 实验目的&#xff1a; 掌握电桥平衡原理、平衡条件&#xff1b;理解交流电桥构造&#xff0c;熟悉交流电桥平衡方法&#xff1b;分析平衡过程中各桥臂调节顺序&#xff0c;判断最佳平衡点&#xff1b;理解复阻抗概念&#xff0c;电桥平衡时复…

虚拟机centos7配置Hadoop单节点伪分布配置教程

系列文章目录 centos7配置静态网络常见问题归纳_张小鱼༒的博客-CSDN博客 centos7克隆虚拟机完成后的的一些配置介绍_张小鱼༒的博客-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一、前期准备 二、Hadoop介绍 2.1、Apache Hadoop 2.2、Cloudera Hadoop 2.3…

基于Vision Transformer的图像去雾算法研究与实现(附源码)

基于Vision Transformer的图像去雾算法研究与实现 0. 服务器性能简单监控 \LOG_USE_CPU_MEMORY\文件夹下的use_memory.py文件可以实时输出CPU使用率以及内存使用率&#xff0c;配合nvidia-smi监控GPU使用率 可以了解服务器性能是否足够&#xff1b;运行时在哪一步使用率突然…

第一个vue-cli项目

第一个vue-cli项目 12.1、什么是vue-cli vue-cli官方提供的一个脚手架&#xff0c;用于快速生成一个vue的项目模板&#xff1b;   预先定义好的目录结构及基础代码&#xff0c;就好比咱们在创建Maven项目时可以选择创建一个骨架项目&#xff0c;这个估计项目就是脚手架&…

编写一个函数,输入一个日期,计算其距年底的时间

--编写一个函数&#xff0c;输入一个日期&#xff0c;计算其距年底的时间 create or replace function f_end(i_date varchar2) return number is/*声明四个变量&#xff0c;v_end:存放输入的日期的年底日期 v_date:存放经过转化为日期型的输入字符串 v_minus:存放两个日期之差…

Springboot怎么实现WebSocket通信(二)

前言上一篇文章分享了单机模式下&#xff0c;websocket的基本使用方法&#xff0c;但在实际的业务中&#xff0c;通常是不会这样使用的&#xff0c;大部项目都是分布式部署的&#xff0c;一个工程布署了多个服务节点&#xff0c;前端并不直接请求具体服务节点&#xff0c;而是先…

xijs更新指南(v1.2.1)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用函数逻辑问题, 帮助开发者更高效的开展业务开发.接下来就和大家一起分享一下v1.2.1 版本的更新内容以及后续的更新方向.1. 添加算法模块分类该模块主要由 WangLei802 贡献, 添加内容如下:添加冒泡排序算法及其…

什么是工程项目管理工作?其特点是什么?

什么是工程项目管理工作&#xff1f;其特点是什么&#xff1f; 工程项目管理是为了实现工程项目的有效、高效和可持续管理而进行的一系列活动。 工程项目的管理就像是驾驭一艘巨大的船只&#xff0c;需要一位经验丰富的船长来领导整个团队。 通过工程项目管理&#xff0c;项…

fiddler(抓包)的用法和HTTP 协议的基本格式

目录 fiddler(抓包)用法&#xff1a; HTTP 协议的基本格式 HTTP请求&#xff1a; 首行 认识HTTP方法 GET和POST的典型区别&#xff1a; 认识请求“报头”&#xff08;header&#xff09; HTTP 响应 HTTP状态码&#xff1a; 状态码的分类&#xff1a; 认识响应 …

python语法基础

&#x1f41f;在本次博客主要想大家介绍一些简单的python语法的注意事项&#xff0c;从代码缩进到注释规则&#xff0c;从标准输入到标准输出&#xff0c;以及位运算符等方面了解python的基础使用方法。那么我们接下来直接开始步入正题&#xff0c;开始我们的python语法的讲解吧…

【SpringCloud】SpringCloud Nacos详解(集群配置)

目录前言一.Nacos集群逻辑图二.Nacos集群搭建1.搭建数据库&#xff0c;初始化数据库表结构2.下载Nacos3.配置Nacos3.启动Nacos4.配置启动nginx5.测试是否成功6.设置服务的nacos地址7.新增一个配置&#xff0c;查看数据看是否进行持久化了前言 在我前面两篇讲的都是单个nacos&a…

c++11 多线程使用

文章目录创建线程异常导致死锁实现两个线程交互的打印奇数和偶数(面试题)创建线程 1.创建线程的方式: 1.拷贝构造禁止了2.允许移动构造3.无参构造后我们可以对对象进行赋值操作4.传递可调用对象(例如包装器,泛函数,lambda,普通函数,静态成员函数) 参数列表 进行创建 2.样例…