Neural Architecture Search for Deep Image Prior

深度图像先验的神经结构搜索

在这里插入图片描述

论文链接:https://arxiv.org/abs/2001.04776

项目链接:https://github.com/Pol22/NAS_DIP

Abstract

在最近提出的深度图像先验算法(DIP)下,我们提出了一种神经结构搜索(NAS)技术来提高无监督图像去噪、修复和超分辨率的性能。我们发现,进化搜索可以自动优化DIP网络的编码器-解码器(E-D)结构和元参数,这是在正则化这些单个图像恢复任务之前的特定内容。我们的二进制表示对非对称E-D网络的设计空间进行编码,该网络通常在10-20代内收敛,使用500个种群大小产生特定于内容的DIP。优化的架构不断提高经典DIP的视觉质量,以满足各种摄影和艺术内容。

1. Introduction

许多常见的图像恢复任务需要估计缺失的像素数据:去噪和去伪;图像修复;和超分辨率。通常,这些缺失的数据是在平滑先验下从周围像素数据中估计出来的。最近的研究表明,随机初始化卷积神经网络(CNN)的结构可以作为一个有效的先验,正则化估计丢失的像素数据落在自然图像的流形中。这种正则化技术,被称为深度图像先验(Deep Image Prior, DIP)[34],利用图像内的纹理自相似性和CNN的平移等方差,为上述图像恢复任务产生竞争性结果。然而,DIP的有效性取决于所使用的CNN的架构;不同的内容需要不同的CNN架构来获得优异的性能,并注意元参数的选择,如滤波器大小、通道深度、epoch计数等。

本文提出了一种进化策略,在给定单个输入图像的情况下自动搜索最优CNN架构和相关元参数。核心技术贡献是遗传算法(GA)[8],用于表示和优化特定于内容的网络架构,以用作无监督图像恢复任务中的 DIP 正则化器。我们表明,通过架构搜索可以获得优于标准DIP骨干网或随机架构的结果。我们演示了这些性能改进的图像去噪,内容感知填充(也称为修复),以及静态图像的内容升级;图1对比了经典DIP[34]与我们的神经结构搜索(NAS-DIP)的输出。

在这里插入图片描述

与NAS已广泛应用的图像分类不同[29,28,23,11],DIP公式中没有可获得的基础真理。一个编码器-解码器网络(我们寻找其结构)被过拟合以从随机噪声场重构输入图像,从而获得该图像结构的生成模型。GAN [40] 中的并行工作表明,架构设计,特别是解码器的设计,对于学习足够的生成模型至关重要,而且,该架构是特定于内容的。我们的工作是第一个实现编码器-解码器架构设计的自动化,并且在没有监督的情况下这样做,利用最先进的感知度量来指导优化[44]。此外,我们证明了优化的架构是特定于内容的,并且在没有监督的情况下支持视觉风格的聚类。

2. Related Work

**神经架构搜索(NAS)**寻求通过数据驱动优化实现深度神经网络架构设计的自动化[12],最常用于图像分类[47,28],但最近也用于目标检测[47]和语义分割[6]。NAS解决了自动机器学习(AutoML)[20]问题的一个方面,AutoML更普遍地解决了超参数优化和训练元参数的调优。

早期的NAS利用了MLP网络的贝叶斯优化[4],并在CIFAR-10中扩展到CNN[9]。在他们的开创性工作中,Zoph和Le[46]应用强化学习(RL)通过动作空间构建图像分类网络,将动作标记为RNN合成的字符串,奖励由验证数据准确性驱动。降低了最初的高计算开销(800GPU /4周),同时进一步提高了精度。例如,通过探索替代策略,如近端策略优化[31]或Q学习[2],RNN上的强化学习方法现在可以扩展到当代数据集,例如用于ImageNet分类的NASNet[26,47],并且最近在CIFAR-10上探索了GAN[16]。Cai等人对体系结构进行了类似的标记化,但通过在LSTM学习的字符串嵌入上通过保留函数的突变操作对字符串进行顺序变换来探索解空间[5]。我们的工作也将架构编码为(在我们的例子中是二进制)字符串,但通过进化策略进行优化,而不是在强化学习下训练顺序模型。

网络架构优化的进化策略最早在90年代初针对MLP进行了探索[25]。采用遗传算法(GA)对结构和权值进行优化[1,33],而不是依赖于反向传播,以减少遗传算法的评估瓶颈;然而,这对于当代的CNN来说是不切实际的。而选择和种群剔除策略[11,29,28]已经被用于在ImageNet上开发高性能的图像分类网络[23,28]。我们的工作是独特的,因为我们通过GA优化探索图像恢复编码器-解码器网络架构,因此,我们的架构表示与先前的工作不同。

单图像恢复在经典视觉和深度学习中得到了广泛的研究,其中先验是规定的或从代表性数据中学习的。纹理合成之前的一个常见方法是马尔可夫随机场(MRF),其中成对项编码空间相干性。一些修复作品利用了这种MRF公式[22,18,24],包括从输入[10]或多个外部[17,14]图像中获取patch的方法,或者使用一些匹配良好的patch的随机传播[3]。单幅图像中的patch自相似性也被用于单幅图像的超分辨率[15]和去噪。深度图像先验(Deep Image Prior, DIP)[34] (及其视频扩展[42])利用CNN的翻译等方差来学习和转移接受域内的patch。最近,单幅图像GAN[32]被提出用于学习多分辨率外观模型,DIP被应用于图像层分解[13]。我们的工作目标是原始论文中提出的DIP用例[34];即超分辨率、去噪和区域修复。所有这三个用例都在计算机视觉和图形学文献中进行了大量的研究,并且当使用经过训练的深度神经网络在代表性数据上执行该任务时,所有用例都展示了显著的性能优势。生成对抗网络(Generative Adversarial Networks, GAN)通过学习具有代表性的语料库图像数据[41]的结构和外观,更广泛地用于修复和超分辨率[43,36],在某些情况下,通过独立模型明确地保持局部和全局一致性[21]。我们的方法和DIP的不同之处在于,我们不训练网络来执行特定的任务。相反,我们使用未经训练(随机初始化)的网络来执行任务,通过使用神经结构搜索在任务特定损失下将这样的网络过度拟合到单个图像。

3. Architecture Search for DIP

DIP的核心原理是学习一个生成式CNN G θ G_θ Gθ(其中 θ θ θ 是学习到的网络参数,例如权重)从与 x x x高度和宽度相同的噪声场 N \mathcal{N} N重构 x x x,像素点取自均匀随机分布。Ulyanov等人[34]提出了一种对称的编码器-解码器网络架构, G θ G_θ Gθ具有跳跃连接,包括五对(上)卷积层,根据图像恢复应用(去噪、修复或超分辨率)和待处理的图像内容具有不同的架构。对于单个给定图像 x x x,应用重构损失来学习 G θ G_θ Gθ
θ ∗ = arg ⁡ min ⁡ θ ∥ G θ ( N ) − x ∥ 2 2 (1) \theta^{*}=\arg\min_{\theta}\|G_{\theta}(\mathcal{N})-x\|_{2}^{2} \tag{1} θ=argθminGθ(N)x22(1)
我们的核心贡献是不仅优化 θ θ θ,还使用遗传算法(GA)优化架构 G G G,通过感知质量指标 [44] 进行指导,如现在所述。

3.1. 网络表示

我们将编码器-解码器(E-D)架构空间编码为一个定长二进制序列,表示N对编码器-解码器单元 U = { U 1 , . . . , U N } U=\{U_{1},...,U_{N}\} U={U1,...,UN}。如下[34], G G G是一个全卷积E-D网络,并对卷积层的连通性和元参数进行了优化。给定单元 U n U_n Un包括编码器 E n E_n En和解码器 D n D_n Dn两个卷积级,分别记为 E n E_n En D n D_n Dn,每个卷积级需要7位来编码其参数元组。单元 U n U_n Un总共需要 14 + 4 N 14+4N 14+4N 位进行编码,作为该单元的附加 4 N 4N 4N位块,对一个元组进行编码,该元组指定从其编码器级到每个解码器级(即在其自身和其他单元内)的跳跃连接的配置。因此,在神经结构搜索DIP (NAS-DIP)中,一个结构的总二进制表示为 N ( 14 + 4 N ) N(14 + 4N) N(14+4N)。对于我们的实验,我们使用 N = 6 N = 6 N=6,但注意编码器或解码器级的有效数量根据可能绕过该级的跳跃连接而变化。图2展示了E-D单元的组织(右)和单个E-D单元的详细架构(左)。

在这里插入图片描述

每个单元 U n U_n Un包含以下二进制表示,其中上标表示参数元组的元素:

  • E n s ∈ [ 0 , 1 ] \mathrm{E}_{n}^{s}\in[0,1] Ens[0,1](1 位)二进制指示符,表示单元 U n U_n Un的编码器级是否被跳跃(旁路)。
  • E n f ∈ [ 0 , 7 ] \mathrm{E}_{n}^{f}\in[0,7] Enf[0,7](3 位)编码卷积编码器学习的滤波器大小 f = 2 E n f + 1 f=2E_{n}^{f}+1 f=2Enf+1
  • E n h ∈ [ 0 , 7 ] \mathrm{E}_{n}^{h}\in[0,7] Enh[0,7](3 位)编码滤波器的数量 h = 2 E n h − 1 h=2^{E_{n}^{h}-1} h=2Enh1等,由编码器级输出通道。
  • D n s ∈ [ 0 , 1 ] \mathrm{D}^s_n\in[0,1] Dns[0,1](1位)单元 U n U_n Un的解码器级是否被跳跃(旁路)的二进制指示符。
  • D n f ∈ [ 0 , 7 ] \mathrm{D}_{n}^{f}\in[0,7] Dnf[0,7](3 位)编码由上卷积解码器级学习的滤波器大小 f = 2 D n f + 1 f = 2{D_{n}^{f}+1} f=2Dnf+1
  • D n h ∈ [ 0 , 7 ] \mathrm{D}_{n}^{h}\in[0,7] Dnh[0,7](3 位)编码滤波器的数量 f = 2 D n f + 1 f = 2^{D_{n}^{f}+1} f=2Dnf+1等,由解码器级输出通道。
  • R n ∈ B 4 N \mathrm{R}_{n}\in\mathbb{B}^{4N} RnB4N (4N 位)将门控跳跃连接编码为 [ ρ n 1 , . . . , ρ n N ] [\rho_{n}^{1},...,\rho_{n}^{N}] [ρn1,...,ρnN]; 每个 4 位组 ρ n i ∈ [ 0 , 15 ] \rho_{n}^{i}\in[0,15] ρni[0,15]确定门控跳跃路径 r n i r^i_n rni是否从 E n E_n En 接到 D i D_i Di,如果是,则确定有多少个滤波器/通道(即,如果 r n i = 0 r^i_n = 0 rni=0,则跳跃门打开)。

NAS-DIP-T。我们探索了编码最大历元计数T = 500∗(2t−1)的表示的一种变体,通过对T进行两个额外的比特编码,从而使NAS-DIP-T的表示长度为N(14 + 4N) + 2。

对称NAS-DIP。我们还探索了表示的紧凑变体,该表示强制 E n = D n E_n = D_n En=Dn用于所有参数,强制学习对称的E-D架构,并且只需要10位来编码 U n U_n Un。然而,我们随后表明,这种对称架构几乎总是不如通过我们的搜索发现的不对称架构(子节4.1)。

3.2. 进化优化

DIP提供了一种特定的体系结构,可以从均匀随机噪声场 N \mathcal{N} N中正则化给定源图像 x x x的重建。固定N常数,我们使用遗传算法(GA)在结构空间中搜索最优结构 G ∗ G^∗ G,以恢复源图像的“恢复”版本,例如去噪,修复或升尺度版本 x ^ \hat{x} x^
x ^ = G θ ∗ ∗ ( N ) . (2) \hat{x}=G_{\theta^{*}}^{*}(\mathcal{N}). \tag{2} x^=Gθ(N).(2)
基因模拟自然选择的过程,通过交叉繁殖、适合比例繁殖和突变的过程,使个体的后代连续繁殖。在我们的实现中,这些个体是通过二进制表示编码的网络配置。

通过使用编码的体系结构运行预先指定的DIP图像恢复任务来评估个体。我们考虑无监督或“盲目”恢复任务(去噪、修复、超分辨率),其中理想的 x ^ \hat{x} x^ 是未知的(正在寻找),因此无法指导 GA 搜索。代替这一基本真理,我们采用一种感性的度量(子节3.2.1)通过反向传播训练 G θ ∗ ( N ) G^∗_θ (\mathcal{N}) Gθ(N)来评估任何候选架构生成的视觉质量,以最小化任务特定的重建损失:
L d e − n o i s e ( x ; G ) = m i n θ ∣ G θ ( N ) − x ∣ . L i n − p a i n t ( x ; G ) = m i n θ ∣ M ( G θ ( N ) ) − M ( x ) ∣ . L u p s c a l e ( x ; G ) = m i n θ ∣ D ( G θ ( N ) ) − x ∣ . \begin{align} &&\mathcal{L}_{de-noise}(x;G)&={min_{\theta}|G_{\theta}(\mathcal{N})-x|.} \tag{3} \\ &&\mathcal{L}_{in-paint}(x;G)&=min_{\theta}|M(G_{\theta}(\mathcal{N}))-M(x)|. \tag{4} \\ &&\mathcal{L}_{upscale}(x;G)&=min_{\theta}|D(G_{\theta}(\mathcal{N}))-x|. \tag{5} \end{align} Ldenoise(x;G)Linpaint(x;G)Lupscale(x;G)=minθGθ(N)x∣.=minθM(Gθ(N))M(x)∣.=minθD(Gθ(N))x∣.(3)(4)(5)
其中 D D D是一个下采样算子,通过双线性插值将其目标减小到 x x x的大小, M ( . ) M(.) M(.)是一个在待修复区域内返回零的掩膜算子。

现在,我们描述遗传算法搜索的一次迭代,直到在前几代中获得的改进是边际的(滑动时间窗口内平均和最大种群适应度的变化都低于阈值)。

3.2.1 总体抽样和适应度

我们初始化一个K = 500个解的群体,均匀采样 B N ( 14 + 4 N ) {\mathbb{B}^{N(14+4N)}} BN(14+4N),以种子初始架构 G = { G 1 , G 2 , . . . , G K } \mathcal{G}=\{G_{1},{G_{2}},...,G_{K}\} G={G1,G2,...,GK}。每个架构下 x ^ \hat{x} x^的视觉质量使用学习感知度量(LPIPS评分)[44]作为个体适应度的代理进行盲评估:
f ( G i ) = P ( a r g m i n x ^ L ( x ^ ; G θ ) ) (6) f(G_i)=\mathrm{P}(argmin_{\hat{x}}\mathcal{L}(\hat{x};G_\theta)) \tag{6} f(Gi)=P(argminx^L(x^;Gθ))(6)
其中, L \mathcal{L} L为任务特定损失(公式3-5), P ( . ) P(.) P(.)为种群中给定个体 G i G_i Gi的感知得分[44]。我们从GAN文献中探索了几种盲感知评分,包括Inception Score[30]和Frechet Inception Distance[19],但在我们的评估中发现LPIPS与PSNR和SSIM的相关性更好,从而提高了NAS-DIP的收敛性。

个体被随机选择(和替换)进行繁殖,以填充下一代的解决方案。产生更高质量输出的架构更有可能被选择。然而,种群多样性是通过这一过程的随机性和在后代基因组中引入随机突变而得到鼓励的。我们采用精英主义;种群中处于底层的5%被淘汰,而处于顶端的5%则不受干扰地传递给下一代——因此,连续几代中最适合的个体至少与过去的个体一样适合。中间的90%用于生产下一代的剩余部分。按适合度 p ( G i ) = f ( G i ) / ∑ j = 1 K f ( G j ) p(G_{i})=f(G_{i})/\sum_{j=1}^{K}f(G_{j}) p(Gi)=f(Gi)/j=1Kf(Gj),随机选择2个个体,通过杂交和突变进行繁殖(子节3.2.2)为连续的一代产生新的后代。这个过程不断重复,直到种群数量与前一代相匹配。

3.2.2 交叉和变异

个体是通过基因交叉繁殖的; 给定两个形式为 G { ( E 1 , R 1 , D 1 ) , . . . , ( E N , R N , D N ) } ∈ B N ( 14 + 4 N ) G\{(E_{1},R_{1},D_{1}),...,(E_{N},R_{N},{D}_{N})\}\in\mathbb{B}^{N(14+4N)} G{(E1,R1,D1),...,(EN,RN,DN)}BN(14+4N)的恒定长度二元基因组;拼接点 S = [ 1 , N ] S = [1, N] S=[1,N] 是随机选择的,使得来自一对父母 A 和 B 的单元通过复制来自 A 的单元 U N < S U_{N<S} UN<S 和来自 B 的单元 U N ≥ S U_{N≥S} UNS 进行组合。这种交叉可能会产生语法上无效的基因组,例如由于基因组中单位之间的张量大小不兼容。在评估期间,无效的体系结构评估为零,禁止后续代选择它。

种群多样性是通过选择过程的随机性和在后代基因组中引入随机突变而得到鼓励的。后代基因组中的每一个比特都以低概率随机翻转;我们将在子节4.2中探讨这个速率与收敛性之间的权衡。

4. Experiments and Discussion

我们对DIP的神经结构搜索技术(NAS-DIP)进行了评估,该技术适用于最初为DIP[34]提出的三种盲图像恢复任务:图像修复、超分辨率和去噪。

数据集。我们对三个公共数据集进行了评估:1)Places2 [45];常用的修复照片数据集(测试分区采样为[21]);2) Behance art Media (BAM!) [38];艺术品的数据集,使用BAM的测试分区!在[14]中被选为评价修复中的8种媒介风格;3)DIP[34];用于评估Ulyanov等人原始DIP算法的图像数据集。其中对后者的图像进行基线比较,根据[35]和作者的公开实现复制[34]中公布的具体网络架构。结果通过三个客观指标量化;PSNR(如DIP)和结构相似度(SSIM)[37]被用于根据基本事实进行评估,我们还报告了在GA优化中用作适应度评分的感知度量(LPIPS)[44]。

训练的细节。我们在Tensorflow中实现了NAS-DIP,所有实验使用ADAM和10−3的学习率。对于NAS-DIP epoch计数为2000,否则将通过优化搜索此参数和其他元参数。为了缓解NAS中的评估瓶颈(每个架构提案平均需要2-3分钟),我们将评估步骤分配到 16 个 Nvidia Titan-X GPU 上,每个 GPU 能够同时评估两个提案,平均 NAS-DIP 搜索时间总共为 3-6 小时(平均需要 10-20 代才能收敛)。我们的DIP实现扩展了作者的DIP公共代码[34]。重现性是NAS-DIP优化的关键;对于给定的源图像,相同的基因组必须产生相同的感知分数。除了固定所有随机种子(例如用于批量采样和固定初始噪声场)之外,我们还采取了额外的技术步骤来避免cuDNN中的不确定性,例如避免原始DIP代码中图像填充中的原子添加操作。

4.1. 网络表示

我们在第3.1节中提出的架构表示的三种变体上评估了所提出的NAS方法:NAS-DIP, NAS-DIP-T(其中epoch计数也得到了优化),以及NAS-DIP强制对称E-D网络的约束版本。对于所有实验,N=5使E-D网络具有多达10(上)个卷积层和门控跳跃连接。使用PSNR与原始DIP[34]和SSIM进行比较来评估性能,并且还报告了用于指导NAS的LPIPS评分。表2提供了对Ulyanov等人[34]的图像的直接比较;

在这里插入图片描述

视觉输出和收敛图如图4所示。在随机初始化之后,在10-20代之后,在所有情况下,性能收敛到高于DIP基线的值[34],相对适应度增益高达30%。

在这里插入图片描述

对于修复和去噪任务,非对称网络的表现优于任何对称网络,包括在原始DIP中发布的用于这些图像和任务的网络。对于超分辨率,发现对称网络优于非对称网络,并且以这种方式约束基因组有助于发现高性能网络。在所有情况下,尽管之前观察到 T 在 DIP 下获得良好重建中的重要性,但优化epoch计数 T 是没有帮助的[34]。表1扩展了NAS-DIP的实验,在三个数据集上平均性能:BAM!随机抽取80张图片,8种风格各10张;Places2中包含的50个图像子集[21];[34]中使用了7张图像的DIP。对于所有三个任务和所有三个数据集,NAS-DIP发现网络优于DIP[34]。

在这里插入图片描述

4.2. 评估突变率

种群精英主义需要适度的突变率 p ( r ) p(r) p(r)来保证种群多样性和收敛,但过高的突变率会在较低的质量水平上发生收敛。我们在表3中计算 p m = { 0.01 , 0.02 , 0.05 , 0.10 } p_{m}=\{0.01,0.02,0.05,0.10\} pm={0.01,0.02,0.05,0.10};观察到对于所有任务,5%的位翻转概率(即N = 5时每个子代平均4位翻转)鼓励收敛到最高适应度值。根据PSNR和SSIM外部指标,这反过来又与最高的视觉质量相关。

在这里插入图片描述

图6提供了与收敛图一起的表示视觉输出。一般来说,在恒定种群规模K = 500的情况下,在单个GPU上花费几个小时在10-20代之间实现收敛。

在这里插入图片描述

4.3. 内容感知修复

为了提供内容感知在修复中的定性性能,我们将我们提出的方法与几个当代基线进行比较:PatchMatch[3]和Image Melding[7],它们从单个源图像中采样patch;以及使用数百万或训练图像的两种方法,生成卷积神经网络方法“上下文编码器”[27],最近的GAN修复工作[21],以及风格感知修复[14]。我们使用Places2的风景照片与相同的基线进行比较,图7给出了视觉比较,表1给出了对[21]中包含的图像集的定量结果,其中包含了该作品中发表的相同掩膜区域。

在这里插入图片描述

4.4 发现的架构

NAS-DIP 发现的架构如图 5a 所示,在架构空间 ( B N ( 14 + 4 N ) B^{N(14+4N)} BN(14+4N) ) 中使用 t-SNE投影作为收敛时的解决方案总体(第 20 代),用于代表性超分辨率任务,其中对称寻找 E-D 网络(源图像插图)。

在这里插入图片描述

不同的更强候选架构集群已经出现,每个集群都利用所有10个卷积阶段和类似的滤波器大小,但具有不同的跳跃激活和通道宽;颜色编码表示适合度。图5b显示了在[35]中发布的该任务的默认架构的示意图,以及为该任务发现的最佳架构和图像。

图8显示了80个最佳表现的网络用于绘制BAM!内容相同的艺术品(花),但呈现8种不同的艺术风格。每张图像都在损失公式4下通过NAS-DIP进行处理;代表性输出如图8所示。通过B N(14+4N)的t-SNE可视化表现最佳的架构揭示了风格特定的集群;钢笔和墨水,石墨草图,3D图形渲染,漫画和矢量艺术作品都形成不同的组,而其他的,如水彩画形成几个集群。我们得出结论,具有共同视觉风格的图像在网络架构中表现出共性,这是图像重建所必需的。这一发现表明了NAS-DIP在建筑搜索之外的潜在应用,例如在视觉美学方面的无监督聚类。

在这里插入图片描述

5. Conclusion

我们展示了在最近提出的深度图像先验(DIP)[34]下用于图像重建的第一个神经结构搜索(NAS),以编码器-解码器(E-D)网络架构的形式学习给定源图像的特定内容先验。在图像分类网络的进化搜索技术取得成功之后[29,28],我们利用遗传算法来搜索表示不对称E-D架构的二进制空间,并证明了其在图像去噪、修复和超分辨率方面的有效性。对于后一种情况,我们观察到我们基因组的约束版本产生对称网络超过非对称网络,这有利于其他两个任务。所有图像恢复任务都是“盲”,并通过感知质量的代理度量来指导优化[44]。在所有情况下,我们观察到发现的网络的性能明显超过了经典的DIP,并且从图像恢复到无监督风格聚类的特定内容架构的潜力。未来的工作可以追求后一种并行应用,以及探索超越完全卷积E-D的架构空间的进一步泛化,以纳入池化和归一化策略。

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

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

相关文章

MySQL之undo日志

聊聊undo log 什么是undo log undo log&#xff08;回滚事务&#xff09;&#xff0c;在事务没有提交前&#xff0c;MySQL将记录更新操作的反向操作到undo log日志中&#xff0c;以便进行回退保证事务的原子性 undo log的作用 1.提供回滚操作 我们在进行数据更新操作的时候…

uniapp和vue3+ts实现自定义头部导航栏左侧胶囊内容

由于某些原因&#xff0c;可能需要我们自己定义头部导航栏的内容&#xff0c;实现各种设计师画的设计稿&#xff0c;所以就需要这个自定义的组件&#xff0c;实现的内容&#xff1a;自定义标题和左侧胶囊图标内容&#xff0c;也可以自定义搜索内容到里面&#xff0c;实现的效果…

html-video:计算视频是否完整播放 / 计算视频完播率

一、video 播放视频 <video width"100%"id"myVideo"object-fit"fill":autoplay"true":loop"false":enable-auto-rotation"true":enable-play-gesture"true":src"videoInfo.videoUrl":pos…

人工智能(pytorch)搭建模型21-基于pytorch搭建卷积神经网络VoVNetV2模型,并利用简单数据进行快速训练

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型21-基于pytorch搭建卷积神经网络VoVNetV2模型&#xff0c;并利用简单数据进行快速训练。VoVNetV2模型是计算机视觉领域的一个重要研究成果&#xff0c;它采用了Voice of Visual Residual&…

安装vmware_esxi 超详细

安装vmware_esxi 超详细 </h2><div id"cnblogs_post_body" class"blogpost-body blogpost-body-html">esxi安装手册 1、esxi介绍 ESXI原生架构模式的虚拟化技术&#xff0c;是不需要宿主操作系统的&#xff0c;它自己本身就是操作系统。因此…

vue3跟vue2的区别?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3和vue2的区别 目录 一、Vue3介绍 哪些变化 速度更快 体积更小 更易维护 compositon Api …

06 # 枚举类型

一个角色判断例子 function initByRole(role) {if (role 1 || role 2) {// do sth} else if (role 3 || role 4) {// do sth} else if (role 5) {// do sth} else {// do sth} }上面的代码存在的问题&#xff1a; 可读性差&#xff1a;很难记住数字的含义可维护性差&…

Redis 基础、字符串、哈希、有序集合、集合、列表以及与 Jedis 操作 Redis 和与 Spring 集成。

目录 1. 数据类型 1.1 字符串 1.2 hash 1.3 List 1.4 Set 1.5 sorted set 2. jedis操作redis 3. 与spring集成 1. 数据类型 1.1 字符串 String是最常用的数据格式&#xff0c;普通的kay-value都归结为此类&#xff0c; value值不仅可以是string&#xff0c;可以是数字…

【Apifox】token的使用方式和脚本示例

前言&#xff0c;关于token的使用&#xff0c;仅做了简单的demo测试token效果。 一、手动登录获取token 顾名思义&#xff0c;因为只有登录之后才有token的信息&#xff0c;所以在调用其他接口前需要拥有token才能访问。 操作步骤 1)添加环境变量、全局参数 这里拿测试环境举…

前端编码规范

文章目录 一、背景二、内容1、注释规范&#xff08;1&#xff09;文件注释&#xff08;2&#xff09;函数注释&#xff08;3&#xff09;单行注释&#xff08;3&#xff09;多行注释 2、命名规范&#xff08;1&#xff09;项目命名&#xff08;2&#xff09;目录命名&#xff0…

Bug 检查 0x7B:INACCESSIBLE_BOOT_DEVICE(未解决)

环境&#xff1a; HP ProDesk 480 G7 Win10 专业版 问题描述&#xff1a; INACCESSIBLE_BOOT_DEVICE bug 检查的值为0x0000007B。 此 bug 检查表明 Microsoft Windows 操作系统在启动过程中无法访问系统分区 原因&#xff1a; 1.INACCESSIBLE_BOOT_DEVICE bug 检查经常发生…

大数据Hadoop-HDFS_元数据持久化

大数据Hadoop-HDFS_元数据持久化 &#xff08;1&#xff09;在HDFS第一次格式化后&#xff0c;NameNode&#xff08;即图中的主NameNode&#xff09;就会生成fsimage和editslog两个文件&#xff1b; &#xff08;2&#xff09;备用NameNode&#xff08;即图中的备NameNode&…

【Lustre相关】功能实践-03-文件级冗余(FLR)

一、前言 DDN-03.11-File Level Redundancy (FLR) Category:FLR 1、功能介绍 在文件级冗余&#xff08;File Level Redundancy&#xff0c;FLR&#xff09;特性出现之前&#xff0c;Lustre文件系统数据冗余完全依赖于后端存储设备&#xff08;如RAID6&#xff09;。 Lustre在L…

SpringCloudSleuth+Zipkin 整合及关键包汇总

背景 整合了一下 SpringCloudSleuth Zipkin&#xff0c;本来是很简单的东西&#xff0c;但是最终导出依赖包时没注意&#xff0c;导致目标服务上始终没有纳入 Zipkin 的链路追踪中&#xff0c;本文记录这个过程及关键依赖包。 部署zipkin 官网下载最新的 zipkin 可执行包&a…

创建Asp.net MVC项目实现视图页面数据传值显示

MVC中视图传值 ViewData ViewBag TempData 举例创建三中传值方式实现页面数据展示 MVC中视图传值 Asp.net MVC中Controller向View传值有多种方式,这里简单说一下其中3种方式 ViewData、ViewBag和TempData ViewData ViewData存储数据&#xff0c;ViewData的声明和赋值方…

代码随想录算法训练营第五十九天| 503.下一个更大元素II 42. 接雨水

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 503.下一个更大元素II class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:res [-1] * len(nums)stack []for i in…

Springboot 使用 阿里的 druid 连接池 启用 wall sql防火墙的情况下怎么支持多sql同时执行?

1、问题如上&#xff0c;看了不少网上的文章&#xff0c;在我这都不生效&#xff0c;网上主要的解决思路有两个。 第一个是&#xff1a;去掉配置文件中的 wall filter # 修改之前 spring.datasource.druid.filtersstat,wall,log4j# 修改之前 spring.datasource.druid.filte…

【Pytorch】Visualization of Feature Maps(5)——Deep Dream

学习参考来自&#xff1a; PyTorch实现Deep Dreamhttps://github.com/duc0/deep-dream-in-pytorch 文章目录 1 原理2 VGG 模型结构3 完整代码4 输出结果5 消融实验6 torch.norm() 1 原理 其实 Deep Dream大致的原理和【Pytorch】Visualization of Feature Maps&#xff08;1&…

一次Apollo Client升级导致的生产404 Not Found问题排查记录

概述 本文记录一次升级Apollo Client组件到1.7.0后遇到的重大生产事故。只想看结论的&#xff0c;可直接快进到文末。实际上&#xff0c;第一句话就是一个结论。 另&#xff0c;本文行文思路事后看起来可行略显思路清晰&#xff0c;实际上排查生产问题时如无头苍蝇&#xff0…

45、Flink 的指标体系介绍及验证(3)- 完整版

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…