论文阅读《Parameterized Cost Volume for Stereo Matching》

论文地址:https://openaccess.thecvf.com/content/ICCV2023/papers/Zeng_Parameterized_Cost_Volume_for_Stereo_Matching_ICCV_2023_paper.pdf
源码地址:https://github.com/jiaxiZeng/Parameterized-Cost-Volume-for-Stereo-Matching


概述

在这里插入图片描述
   现有的立体匹配方法针对大视差场景预测时时间和显存消耗成本大,限制了模型在现实世界的应用。先前的研究工作主要聚焦于使用局部信息的动态代价体进行迭代优化,此类方法虽可以节省内存,但由于缺乏全局视差视野而需要更多的迭代步数才能收敛到目标视差,如图1(a) 所示。为此,文中提出使用高斯分布来编码视差空间。而使用带有固定小方差的单高斯分布对视差空间编码时,每个像素的视差值都服从同一个参数相同的高斯分布,这样的分布对整个视差空间的观察视野有限,不能覆盖整个视差空间,当初始视差与目标视差距离过远时模型难以收敛到目标视差(或需要付出更多的时间成本)。而使用多元高斯分布来表示视差空间可以使得每个像素的视差值都服从一个由多个高斯分布组成的混合分布。这样的分布在视差空间中的视野是全局的,可以均匀地初始化在整个视差范围内。因此,使用多高斯分布可以在迭代开始的阶段迅速收敛。在视差局部调优阶段,多高斯分布的参数会变小,使得模型可以在局部视差空间进行更精细化的匹配。
  为此,文中提出一种参数化的代价体,该代价体使用多元高斯分布编码每个像素的视差空间(参数化为权重、均值、方差),并使用JS散度进行优化。文中提出了一个前馈微分模块来实现该优化过程,该过程包含四个步骤:(1)使用初始的均值与方差采样视差候选值。(2)使用采样的视差候选值计算匹配代价,并基于该代价与多层GRU预测一个优化步长(3)用预测的步长更新三个视差空间的参数,并将更新后的参数作为下个迭代阶段的初始值,同时用均值的加权平均(多元高斯分布的期望)作为当前迭代阶段的视差输出。此外,由于前馈优化在收敛阶段容易发生局部震荡,针对该问题,文中引入基于一个不确定性感知的细化模块来修正最后一次迭代的错误结果。该确定性由权重与方差计算而来,并作为视差结果置信度的度量。该置信度可以指导视差从高可靠性区域扩散传播到低可靠区域。在合成数据集与真实世界数据集上的实验结果表明,该方法可以实现实时推理与SOTA性能。


模型架构

在这里插入图片描述

Parameterized Cost Volume

公式化:不妨使用 C ( x ) = c x d C(x)=c_{x}^{d} C(x)=cxd 表示代价体,传统的方法是密集地从一个离散的视差分布 { 0 , 1 , … , D − 1 } \{0, 1, …, D − 1\} {0,1,,D1}中枚举所有可能的视差候选 d d d,,这样会消耗大量的内存和计算资源。相比之下,动态代价体积的方法只从一个初始化的视差 d ∈ N d ~ d\in N_{\tilde{d}} dNd~中采样视差候选 d d d,其中 N N N表示邻域的大小,这样可以减少内存和计算的开销,但是需要多次迭代来逼近真实的视差。在本文中,作者使用一个参数化的代价体(多元高斯分布)来编码视差空间:
C ( x , θ ) = { c x d ( θ ) } , d ( θ ) ∼ ∑ i = 1 i = M α i N ( μ i , σ i 2 ) . (1) \begin{aligned} C(x,\theta)& =\{c_{x}^{d(\theta)}\}, \\ d(\theta)& \sim\sum_{i=1}^{i=M}\alpha_i\mathcal{N}(\mu_i,\sigma_i^2). \end{aligned}\tag{1} C(x,θ)d(θ)={cxd(θ)},i=1i=MαiN(μi,σi2).(1)
其中, θ = { α i , μ i , σ i } i = 1 M \theta=\{\alpha_i,\mu_i,\sigma_i\}_{i=1}^M θ={αi,μi,σi}i=1M 为多元高斯分布的参数,包括权重参数 α = { α i } i = 1 M \alpha=\{\alpha_{i}\}_{i=1}^{M} α={αi}i=1M, 均值 μ = { μ i } i = 1 M \mu=\{\mu_{i}\}_{i=1}^{M} μ={μi}i=1M 与标准差(文中用标准差来替代方差) σ = { σ i } i = 1 M \sigma=\{\sigma_{i}\}_{i=1}^{M} σ={σi}i=1M M M M 为高斯分布的数量。 ∼ \sim 表示从分布中采样,且有 ∑ i = 1 M α i = 1 \sum_{i=1}^{M}\alpha_{i}=1 i=1Mαi=1。通过从多个高斯分布中系数采样可以保持动态代价体的高效性,且通过在整个视差范围中均匀初始化多个高斯分布可以获得一个全局视差视野,有利于模型快速收敛到目标视差。
优化:为了高效地对高斯分布参数进行学习,将真实视差定义为一个目标高斯分布 N ( μ g t , σ g t ) \mathcal{N}(\mu_{gt},\sigma_{gt}) N(μgt,σgt) 并基于JS散度训练使得多元高斯分布的参数逼近于目标分布,其中 μ g t \mu_{gt} μgt 为目标视差值, σ g t \sigma_{gt} σgt 为预定义的参数,模型的优化目标可以表示为:
m i n 1 2 ( F ( N g t ∣ ∣ ∑ i = 1 i = M α i N i ) + F ( ∑ i = 1 i = M α i N i ∣ ∣ N g t ) ) , s . t . ∑ i = 1 i = M α i = 1 , (2) \begin{gathered}min~\frac12(F(\mathcal{N}_{gt}||\sum_{i=1}^{i=M}\alpha_i\mathcal{N}_i)+F(\sum_{i=1}^{i=M}\alpha_i\mathcal{N}_i||\mathcal{N}_{gt})),\\s.t.~\sum_{i=1}^{i=M}\alpha_i=1,\end{gathered}\tag{2} min 21(F(Ngt∣∣i=1i=MαiNi)+F(i=1i=MαiNi∣∣Ngt)),s.t. i=1i=Mαi=1,(2)
其中 F ( P ∣ ∣ Q ) = ∑ d ∈ D P ( d ) l o g P ( d ) Q ( d ) F(P||Q)=\sum_{d\in\mathcal{D}}P(d)log\frac{P(d)}{Q(d)} F(P∣∣Q)=dDP(d)logQ(d)P(d) 为KL 散度。 N i \mathcal{N}_i Ni N ( μ i , σ i 2 ) \mathcal{N}(\mu_{i},\sigma_{i}^{2}) N(μi,σi2) 的缩写,然后将有约束的优化问题写成对应的拉格朗日函数:
L = 1 2 ( F ( N g t ∣ ∣ ∑ i = 1 i = M α i N i ) + F ( ∑ i = 1 i = M α i N i ∣ ∣ N g t ) ) + λ ( ∑ i = 1 i = M α i − 1 ) , (3) \begin{aligned}L&=\frac12(F(\mathcal{N}_{gt}||\sum_{i=1}^{i=M}\alpha_i\mathcal{N}_i)+F(\sum_{i=1}^{i=M}\alpha_i\mathcal{N}_i||\mathcal{N}_{gt}))\\&+\lambda(\sum_{i=1}^{i=M}\alpha_i-1),\end{aligned}\tag{3} L=21(F(Ngt∣∣i=1i=MαiNi)+F(i=1i=MαiNi∣∣Ngt))+λ(i=1i=Mαi1),(3)
其中 λ \lambda λ 表示拉格朗日乘数。求解这个等式之前,先引入两个必要的公理。
  公理1 给定两个高斯分布 N p \mathcal{N}_{p} Np N q \mathcal{N}_{q} Nq, 其KL散度 F ( N p ∣ ∣ N q ) F(\mathcal{N}_p||\mathcal{N}_q) F(Np∣∣Nq)为:
F ( N p ∣ ∣ N q ) = l o g σ q σ p + σ p 2 + ( μ p − μ q ) 2 2 σ q 2 − 1 2 . (4) F(\mathcal{N}_p||\mathcal{N}_q)=log\frac{\sigma_q}{\sigma_p}+\frac{\sigma_p^2+(\mu_p-\mu_q)^2}{2\sigma_q^2}-\frac12.\tag{4} F(Np∣∣Nq)=logσpσq+2σq2σp2+(μpμq)221.(4)
  公理2 给定两个多元高斯分布 ∑ i = 1 i = M α i p N i p , Q = ∑ i = 1 i = M α i q N i q \sum_{i=1}^{i=M}\alpha_{i}^{p}\mathcal{N}_{i}^{p}, \quad Q =\sum_{i=1}^{i=M}\alpha_{i}^{q}\mathcal{N}_{i}^{q} i=1i=MαipNip,Q=i=1i=MαiqNiq,其KL散度的紧凑上界为:
F ( P ∣ ∣ Q ) ≤ ∑ i = 1 i = M F ( α i p ∣ ∣ α i q ) + ∑ i = 1 i = M α i p F ( N i p ∣ ∣ N i q ) . (5) F(P||Q)\leq\sum_{i=1}^{i=M}F(\alpha_i^p||\alpha_i^q)+\sum_{i=1}^{i=M}\alpha_i^pF(\mathcal{N}_i^p||\mathcal{N}_i^q).\tag{5} F(P∣∣Q)i=1i=MF(αip∣∣αiq)+i=1i=MαipF(Nip∣∣Niq).(5)
  基于公理2,可以得到公式3中的上界:
L ≤ 1 2 ( ∑ i = 1 i = M F ( 1 M ∣ ∣ α i ) + ∑ i = 1 i = M 1 M F ( N g t ∣ ∣ N i ) + ∑ i = 1 i = M F ( α i ∣ ∣ 1 M ) + ∑ i = 1 i = M α i F ( N i ∣ ∣ N g t ) ) + λ ( ∑ i = 1 i = M α i − 1 ) , (6) \begin{aligned} L\leq \frac12(\sum_{i=1}^{i=M}F(\frac1M||\alpha_i)+\sum_{i=1}^{i=M}\frac1MF(\mathcal{N}_{gt}||\mathcal{N}_i) \\ +\sum_{i=1}^{i=M}F(\alpha_i||\frac{1}{M})+\sum_{i=1}^{i=M}\alpha_iF(\mathcal{N}_i||\mathcal{N}_{gt})) \\ +\lambda(\sum_{i=1}^{\boldsymbol{i}=M}\alpha_i-1), \end{aligned}\tag{6} L21(i=1i=MF(M1∣∣αi)+i=1i=MM1F(Ngt∣∣Ni)+i=1i=MF(αi∣∣M1)+i=1i=MαiF(Ni∣∣Ngt))+λ(i=1i=Mαi1),(6)
根据公式4,优化 L L L的上界时候,参数 α i , μ i , σ i \alpha_i,\mu_i,\sigma_i αi,μi,σi的梯度可以表示为:
∂ σ i = 1 2 ( σ i 2 − σ g t 2 − Δ 2 M σ i 3 − α i σ i + α i σ i σ g t 2 ) , ∂ μ i = − Δ 2 ( 1 M σ i 2 + α i σ g t 2 ) , ∂ α i = β i + λ , β i = 1 2 ( − 1 M α i + l o g σ g t M α i σ i + σ i 2 + Δ 2 2 σ g t 2 + 1 2 ) , λ = − 1 M ∑ i = 1 i = M β i , Δ = μ g t − μ i . (7) \begin{aligned} \partial\sigma_{i}& =\frac12(\frac{\sigma_i^2-\sigma_{gt}^2-\Delta^2}{M\sigma_i^3}-\frac{\alpha_i}{\sigma_i}+\frac{\alpha_i\sigma_i}{\sigma_{gt}^2}), \\ \partial\mu_{i}& =-\frac\Delta2(\frac1{M\sigma_i^2}+\frac{\alpha_i}{\sigma_{gt}^2}), \\ \partial\alpha_{i}& =\beta_i+\lambda, \\ \beta_{i}& =\frac12(-\frac1{M\alpha_i}+log\frac{\sigma_{gt}M\alpha_i}{\sigma_i}+\frac{\sigma_i^2+\Delta^2}{2\sigma_{gt}^2}+\frac12), \\ \lambda& =-\frac1M\sum_{i=1}^{i=M}\beta_i, \\ \Delta & =\mu_{gt}-\mu_i. \end{aligned}\tag{7} σiμiαiβiλΔ=21(Mσi3σi2σgt2Δ2σiαi+σgt2αiσi),=2Δ(Mσi21+σgt2αi),=βi+λ,=21(Mαi1+logσiσgtMαi+2σgt2σi2+Δ2+21),=M1i=1i=Mβi,=μgtμi.(7)
因为在推理过程中目标视差 μ g t \mu_{gt} μgt 未知,为此使用类似RAFT的神经网络的方式来不断预测视差参差值,从而逼近目标视差值,因此在 t t t阶段的参数可以表示为:
σ i t + 1 = σ i t − ∂ σ i t , μ i t + 1 = μ i t − ∂ μ i t , α i t + 1 = α i t − ∂ α i t . (8) \begin{aligned}\sigma_i^{t+1}&=\sigma_i^t-\partial\sigma_i^t,\\\mu_i^{t+1}&=\mu_i^t-\partial\mu_i^t,\\\alpha_i^{t+1}&=\alpha_i^t-\partial\alpha_i^t.\end{aligned}\tag{8} σit+1μit+1αit+1=σitσit,=μitμit,=αitαit.(8)
  基于动态代价体积的方法在每次迭代时,预测一个步长,用来调整上一次迭代的视差结果,使其更接近真实的视差。这些方法相当于用一个固定方差的单高斯分布来近似视差空间,其中方差的值由真实视差的方差决定。由于单高斯分布的视角有限,这些方法难以在大视差范围内捕捉到全局的信息,因此需要多次迭代才能收敛到真实视差。相比之下,文中所提出的方法用多个高斯分布来表示视差空间,每个高斯分布都有自己的权重,均值和方差,这些参数可以在优化过程中动态更新。这样做的好处是,多高斯分布可以在初始时提供一个全局的视角,覆盖整个视差空间,然后在迭代过程中逐渐收敛到真实视差,实现从粗到细的匹配。此外,多高斯分布之间还可以进行信息交互,加速优化过程,提高收敛速度和准确度。

Feed-forward Differential Module

  如图3所示,该模块首先从当前的多高斯分布中采样视差候选值。然后,根据这些视差候选值计算匹配代价,并利用多层GRU 来预测优化步骤。最后,优化步骤用于计算参数的梯度并更新参数。
Multiple Gaussian Sampling:文中选择从当前的多高斯分布中采样视差候选值,每个高斯分布独立采样。具体来说,对于第 i i i个高斯分布,候选值在 [ µ i − 3 σ i , µ i + 3 σ i ] [µ_i − 3σ_i , µ_i + 3σ_i ] [µi3σi,µi+3σi]的范围内均匀采样。
Optimization Step Prediction:根据视差候选值通过相关性来计算匹配代价。首先,不同高斯分布的代价被几个权值共享的2D卷积层独立编码。编码后的代价以及均值 µ µ µ与方差 σ σ σ和权重 α α α,被拼接作为输入送入多层GRUs,通过一个双层卷积来预测优化步骤 ∆ ∆
Parameters Update: 使用梯度下降算法来更新多元高斯分布的参数。由于公式7中的梯度数值不稳定,在更新前对梯度进行裁剪。然后用裁剪后的梯度来更新参数,如公式8所示。为了限制更新后的 α α α在0和1之间,对 α α α进行裁剪和归一化,如下所示:
α ^ i t + 1 = min ⁡ ( max ⁡ ( α i t + 1 , 0 ) , 1 ) ∑ i min ⁡ ( max ⁡ ( α i t + 1 , 0 ) , 1 ) . (9) \hat{\alpha}_i^{t+1}=\frac{\min(\max(\alpha_i^{t+1},0),1)}{\sum_i\min(\max(\alpha_i^{t+1},0),1)}.\tag{9} α^it+1=imin(max(αit+1,0),1)min(max(αit+1,0),1).(9)
  更新后的参数用于下一轮的迭代,根据多元高斯分布的期望来预测视差值:
μ ˉ t + 1 = ∑ i = 1 M α ^ i t + 1 μ i t + 1 . (10) \bar{\mu}^{t+1}=\sum_{i=1}^M\hat{\alpha}_i^{t+1}\mu_i^{t+1}.\tag{10} μˉt+1=i=1Mα^it+1μit+1.(10)

Uncertainty-aware Refinement Module

  为了避免在收敛阶段优化过程中的局部震荡问题,文中引入一个不确定感知精细化模块用于提高视差细节区域的结果。首先将权重 α α α,方差 σ σ σ和均值 µ µ µ输入一系列卷积层,后接一个sigmoid函数,来估计一个不确定性图 U U U。然后将不确定性图和视差图以及左图特征拼接起来,通过卷积层来预测一个残差图 R R R,其中每一层除了最后一层都使用了leaky-relu函数。最后用不确定性图 U U U来指导残差图 R R R和视差图 µ ˉ \bar{µ} µˉ的融合,如下所示:
μ ^ = μ ˉ + R ⋅ U . (11) \hat{\mu}=\bar{\mu}+R\cdot U.\tag{11} μ^=μˉ+RU.(11)


损失函数

   为了让预测的高斯分布能逼近目标视差分布,使用 L 1 L1 L1损失在每个阶段约束生成的分布的均值:
L m t = ∑ i = 1 M ∥ μ i t − μ g t ∥ 1 , (12) \mathcal{L}_m^t=\sum_{i=1}^M\|\mu_i^t-\mu_{gt}\|_1,\tag{12} Lmt=i=1Mμitμgt1,(12)
  使用 L 1 L1 L1 损失约束最后阶段的视差输出与标签视差:
L d t = ∥ μ ˉ t − μ g t ∥ 1 . (13) \mathcal{L}_d^t=\|\bar{\mu}^t-\mu_{gt}\|_1.\tag{13} Ldt=μˉtμgt1.(13)
  同样使用 L 1 L1 L1 损失约束精细化后的视差图:
L r = ∥ μ ^ − μ g t ∥ 1 . (14) \mathcal{L}_r=\|\hat{\mu}-\mu_{gt}\|_1.\tag{14} Lr=μ^μgt1.(14)
&esmp; 总的损失函数为:
L = ∑ t = 1 T γ t ( L m t + L d t ) + λ L r , (15) \mathcal{L}=\sum_{t=1}^T\gamma^t(\mathcal{L}_m^t+\mathcal{L}_d^t)+\lambda\mathcal{L}_r,\tag{15} L=t=1Tγt(Lmt+Ldt)+λLr,(15)


实验结果

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

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

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

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

相关文章

【C语言】操作符详解(四):结构成员访问操作符

结构成员访问操作符 结构体 ⭐C语言已经提供了内置类型,如: char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学生,描述一本书,这时单一的内置类型是不行的。描述一个学生需要名…

MATLAB 最小二乘空间直线拟合 (37)

MATLAB 最小二乘空间直线拟合 (37) 一、算法介绍二、算法实现1.代码一、算法介绍 对于空间中的这样一组点:大致呈直线分布,散乱分布在直线左右, 我们可采用最小二乘方法拟合直线,使用下面的代码可以得到图中的结果。(其中图片中的点解释和具体的实现代码如下所示) C++…

云计算:Vmware 安装 FusionCompute

目录 一、理论 1.FusionCompute 二、实验 1.Vmware 安装 FusionCompute(CNA) 2.Vmware 安装 FusionCompute(VRM) 三、问题 1. VRM-WEB登录失败 2.Windows cmd中无法ping通虚拟机 一、理论 1.FusionCompute (…

孩子还是有一颗网安梦——Bandit通关教程:Level 13 → Level 14

🕵️‍♂️ 专栏《解密游戏-Bandit》 🌐 游戏官网: Bandit游戏 🎮 游戏简介: Bandit游戏专为网络安全初学者设计,通过一系列级别挑战玩家,从Level0开始,逐步学习基础命令行和安全概念…

TrustZone之强制隔离

TrustZone有时被称为一个强制执行的保护系统。请求者表示其访问的安全性,而内存系统决定是否允许该访问。内存系统基于何种方式进行检查呢? 在大多数现代系统中,内存系统的检查是由互连完成的。例如,Arm NIC-400允许系统设计人员为每个连接的完成者指定以下内容: • 安全…

孩子还是有一颗网安梦——Bandit通关教程:Level 12 → Level 13

🕵️‍♂️ 专栏《解密游戏-Bandit》 🌐 游戏官网: Bandit游戏 🎮 游戏简介: Bandit游戏专为网络安全初学者设计,通过一系列级别挑战玩家,从Level0开始,逐步学习基础命令行和安全概念…

飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型

5MW飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型,仿真运行速度快。 飞轮储能变流器采用双PWM环设计,并网电压电…

优先考虑静态成员类

在Java中,静态成员类(static nested class)是一种嵌套在另一个类中的类,且被声明为静态。静态成员类不依赖于外部类的实例,可以直接通过外部类的类名来访问。 优先考虑使用静态成员类的情况通常是当这个类与外部类的实…

ShenYu网关注册中心之HTTP注册原理

文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 HttpClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解,注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disruptor1.2.…

【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念: 对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆,这类小饭馆有个很显著的特点:洗菜、切菜、炒菜都是同一个人完成,如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分…

Axure的动态面板

目录 动态面板 什么是Auxre动态模板 动态模板的步骤 应用场景 实战案例 轮播图 多功能登录界面 主界面左侧菜单栏 动态面板 什么是Auxre动态模板 动态面板是Axure中的一个重要功能,它允许用户创建可交互的页面,并模拟用户与页面的交互。通过添加元素…

智能守护,数据安全稳中求胜!上海迅软DSE助力家具家电行业引领潮流!

随着中国经济的蓬勃发展,家具家电企业正迎来“精品制造”的时代,业内竞争日益激烈。为了提升产品竞争力、扩大市场占有率,企业亟需加强对自主品牌的安全建设,确保品牌的自主知识产权、产品生产资料以及销售信息等核心数据不受泄漏…

文本处理工具doctran(集成LLM和NLP库)

今天给大家推荐一款文本处理工具,可以Extract、Redact、Summarize、Refine、Translate、Interrogate,这个工具就是文档转换框架doctran。 欢迎关注公众号 doctran基于OpenAI的GPT模型和开源的NLP库来剖析文本数据。该工具也可以在LangChain框架document…

【MODBUS】Modbus是什么?

Modbus协议,从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,和12C、SP|类似,总线就意味着有主机,有从机,这些设备在同一条总线上。 Modbus支持单主机,多个从机&#xf…

Python (八)网络编程

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

最新CRMEB商城源码开源版v5.2.2版本+前端uniapp

CRMEB开源商城系统是一款全开源可商用的系统,前后端分离开发,全部100%开源,在小程序、公众号、H5、APP、PC端都能用,使用方便,二开方便!安装使用也很简单!使用文档、接口文档、数据字典、二开文…

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

探秘闭包:隐藏在函数背后的小秘密(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

LeetCode1143.最长公共子序列

这道题看完就大概知道要用动态规划,然后想想如何建立动态转移方程,就很简单了,我都感觉我不是想出来的,是根据直觉应该是这样的然后边想边写就出来,以下是我的代码: class Solution {public int longestCom…

【Java】线程池的创建

目录 ​编辑 一、什么是线程池 二、创建和使用 导入必要的包: 创建线程池: 提交任务给线程池执行: 自定义Runnable和Callable任务: 关闭线程池: 我的其他博客 一、什么是线程池 在Java中,线程池是…