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

【论文笔记】Text2QR

论文:Text2QR: Harmonizing Aesthetic Customization and Scanning Robustness for Text-Guided QR Code Generation

Abstract

二维码通常包含很多信息但看起来并不美观。stable diffusion的出现让平衡扫描鲁棒性和美观变为可能。
为了保证美观二维码的稳定生成,引入了QR美观蓝图(QR Aesthetic Blueprint, QAB)模块,生成蓝图图像,对整个生成过程进行控制。随后,可扫描性增强潜在细化(the Scannability Enhancing Latent Refinement, SELR)过程在潜在空间内细化输出,从而强化了可扫描的鲁棒性。
这个方法利用了stable diffusion的强大生成能力,在图像美观性和二维码可扫描行之间进行权衡。

Github仓库

1 Introduction

现在有很多工作致力于改善二维码的美观性,但是大多导致了扫描的不稳定。

本文提出了Text2QR,提供无缝生成二维码的解决方案,平衡用户定义的美观性和强大的可扫描性。
框架通过三个关键步骤展开:

  • 用户通过使用stable diffusion生成他们喜欢的图案来启动该流程。
  • 协同作用开始于QAB模块中图像的混合。这个模块生成一张蓝图,合并预先生成的图像(引导图像)中的内容,并准确反映QR码中的编码信息。然后将这张蓝图图像输入ControlNet,指导Stable Diffusion保留用户定义的美观性,并维持QR码明暗块之间的所需关系。虽然生成的结果会带来解码挑战,但是其表现出明显的明暗块分布,同时保持与用户偏好一致。
  • 构建了能量方程,量化生成结果中的内容和消息的一致性。通过对潜在代码进行梯度上升迭代来优化该能量方程,逐渐增强扫描鲁棒性,同时保持内容一致性。

本文的贡献:

  • Text2QR,在二维码生成中协调用户定义的美观性和强大的可扫描性。
  • 引入QAB模块和SELR流程,用于保持美观的同时优化扫描稳健性。
  • 更优越的效果

3 Preliminary

先阐明QR码扫描仪从美观的QR码图像中解码二进制信息的过程。
给定带有QR码的彩色图像,首先通过提取亮度通道(YCbCr颜色空间中的Y通道),将其转化为灰度表示,表示为 I ∈ R H × W I\in \mathbb{R}^{H\times W} IRH×W,包含 L L L个灰度级(通常为256)。
设QR码包含 n × n n\times n n×n个模块,每个模块的大小为 a × a a\times a a×a个像素,有 n ⋅ a ≤ min ⁡ ( H , W ) n\cdot a\leq \min(H, W) namin(H,W)。这样就构建出了一个包含 n 2 n^2 n2个模块的网格,记作 M k M_k Mk,其中 k ∈ [ 1 , 2 , ⋯ , n 2 ] k\in [1,2,\cdots,n^2] k[1,2,,n2]。这个网格将图像 I I I划分为 n 2 n^2 n2个块,表示为 I M k ∈ R a × a I_{M_k}\in\mathbb{R}^{a\times a} IMkRa×a

k k k个模块被解码为1位信息 I ~ k \tilde{I}_k I~k,代表0或1,其中 I ~ ∈ R n × n \tilde{I}\in \mathbb{R}^{n\times n} I~Rn×n表示整张二进制图的结果。
通常扫描仪对于每个模块的中心子区域内的像素进行采样。
θ \theta θ为以模块 M k M_k Mk为中心、大小为 x × x x\times x x×x的正方形区域, p ∈ { 1 , 2 , ⋯ , H } × { 1 , 2 , ⋯ , W } \mathbf{p}\in\{1,2,\cdots,H\}\times \{1,2,\cdots,W\} p{1,2,,H}×{1,2,,W}表示 I I I的像素坐标。解码后的二进制值 I ~ k \tilde{I}_k I~k可以记作:
v k = 1 x 2 ∑ p ∈ θ I M k ( p ) ; I ~ k = { 0 if  v k ≤ T b , 1 if  v k ≥ T w , − 1 otherwise . v_k=\frac{1}{x^2}\sum_{\mathbf{p}\in\theta}I_{M_k}(\mathbf{p});\tilde{I}_k= \begin{cases} 0 \qquad & \text{if} \ v_k\leq\mathcal{T}_b, \\ 1 \qquad & \text{if} \ v_k\geq\mathcal{T}_w, \\ -1 \qquad & \text{otherwise}. \end{cases} vk=x21pθIMk(p);I~k= 011if vkTb,if vkTw,otherwise.
其中 T b \mathcal{T}_b Tb T w \mathcal{T}_w Tw是二值化的阈值。考虑到对称性,令 T b = L ⋅ ( 1 − η ) / 2 \mathcal{T}_b=L\cdot (1-\eta)/2 Tb=L(1η)/2 T w = L ⋅ ( 1 + η ) / 2 \mathcal{T}_w=L\cdot(1+\eta)/2 Tw=L(1+η)/2,其中 η ∈ ( 0 , 1 ) \eta\in(0,1) η(0,1)。超参数 η \eta η可以控制二值化过程的严格性。
在这里插入图片描述

4 Method

![[Pasted image 20240330222807.png]]

4.1 Overall

第一阶段,用户准备 I g I^g Ig M \mathcal{M} M(依赖关联参数 c c c z 0 z_0 z0)。
第二阶段,关键一步是通过创新的QAB模块将 I g I^g Ig M \mathcal{M} M中封装的信息无缝集成,以制定全面的蓝图,记为 I b I^b Ib
随后, I b I^b Ib在ControlNet C \mathcal{C} C中进行处理,以对stable diffusion model施加影响。这个影响涉及通过受控过程调整中间特征,定义为:
I s = G ( c , z 0 ∣ C ( I b , c , z 0 ) ) I^s=\mathcal{G}(c,z_0|\mathcal{C}(I^b,c,z_0)) Is=G(c,z0C(Ib,c,z0))
这种整合确保了协同输出 I s I^s Is和谐地平衡了源自 I g I_g Ig的审美偏好和 M \mathcal{M} M的结构约束。
最后阶段, I s I^s Is通过SELR模块进行迭代微调,改进了扫描鲁棒性,同时保留了美术品质。

最后输出是一个美观的二维码 Q Q Q

4.2 QR Aesthetic Blueprint

该模块旨在通过集成二维码信息和引导图像细节来创建可扫描的蓝图。

最初,从引导图像 I g I^g Ig中提取亮度通道,表示为 I y g I^g_y Iyg。为了确保可以比较的分布,分别使用直方图偏振(Histogram polarization)进行亮度调整和模块重组的方法进行像素重新排列来预处理 I y g I^g_y Iyg M \mathcal{M} M。最后,应用自适应半色调方法(Adaptive-Halftone)将二者混合,产生蓝图图像 I b I^b Ib

4.2.1 Histogram polarization

该模块的主要目的是协调 I y g I^g_y Iyg的直方图分布和QR码的直方图分布。该过程增强了 I y g I^g_y Iyg的对比度,产生高对比度的图像 I h c I^{hc} Ihc
直方图偏振操作由查找表 H \mathcal{H} H表示,其将像素值从一个灰度级映射到另一个灰度级。

对于每一个像素 p \mathbf{p} p,令 τ = I y g ( p ) \tau=I^g_y(\mathbf{p}) τ=Iyg(p) τ ′ = I h c ( p ) \tau'=I^{hc}(\mathbf{p}) τ=Ihc(p),将过程表示为:
τ ′ = H ( τ ) \tau'=\mathcal{H}(\tau) τ=H(τ)
n τ n_\tau nτ表示灰度级 τ ∈ [ 0 , L ) \tau\in[0,L) τ[0,L)的出现次数,为每一个灰度级 τ \tau τ引入累积分布函数(Cumulative Distribution Function, CDF):
cdf ( τ ) = ∑ i = 0 τ n i H × W \text{cdf}(\tau)=\sum_{i=0}^\tau \frac{n_i}{H\times W} cdf(τ)=i=0τH×Wni
目标是令生成的 I h c I^{hc} Ihc [ 0 , T b ) ∪ [ T w , L ) [0,\mathcal{T}_b)\cup[\mathcal{T}_w,L) [0,Tb)[Tw,L)范围内具有平坦的直方图。同时排除在 [ T b , T w ) [\mathcal{T}_b,\mathcal{T}_w) [Tb,Tw)中出现的情况。为了实现这一点,首先创建一个新图像 I h e I^{he} Ihe,其线性化CDF的值的范围为 [ 0 , L − T w + T b ) [0,L-\mathcal{T}_w+\mathcal{T}_b) [0,LTw+Tb)。令 τ ~ = I h e ( p ) \tilde{\tau}=I^{he}(\mathbf{p}) τ~=Ihe(p),于是有:
τ ~ = ( L − T w + T b ) ⋅ cdf ( τ ) \tilde{\tau}=(L-\mathcal{T}_w+\mathcal{T}_b)\cdot \text{cdf}(\tau) τ~=(LTw+Tb)cdf(τ)
随后,通过添加 T w − T b \mathcal{T}_w-\mathcal{T}_b TwTb来移动值的范围 [ T b , L ) [\mathcal{T}_b,L) [Tb,L)从而获得 I h c I^{hc} Ihc
τ ′ = H ( τ ) = { τ ~ if  τ ~ < T b , τ ~ + T w − T b if  τ ~ ≥ T b . \tau'=\mathcal{H}(\tau)=\begin{cases} \tilde{\tau} \qquad & \text{if} \ \tilde{\tau}<\mathcal{T}_b, \\ \tilde{\tau}+\mathcal{T}_w-\mathcal{T}_b \qquad & \text{if} \ \tilde{\tau}\geq\mathcal{T}_b. \\ \end{cases} τ=H(τ)={τ~τ~+TwTbif τ~<Tb,if τ~Tb.
![[Pasted image 20240331123739.png]]

4.2.2 Module reorganization

为了将QR码 M \mathcal{M} M I h c I^{hc} Ihc混合,首先将 I h c I^{hc} Ihc二值化为二值图像 I b i n I^{bin} Ibin。该二值图像指导module reorganization方法,记为 E r \mathcal{E}_r Er,该方法在保留编码信息的同时重新排列 M \mathcal{M} M的模块。该过程可以表述为:
I b i n ( p ) = { 0 if  I h c ( p ) < T b , 1 if  I h c ( p ) > T w , I^{bin}(\mathbf{p})=\begin{cases} 0 \qquad & \text{if} \ I^{hc}(\mathbf{p})<\mathcal{T}_b, \\ 1 \qquad & \text{if} \ I^{hc}(\mathbf{p})>\mathcal{T}_w, \\ \end{cases} Ibin(p)={01if Ihc(p)<Tb,if Ihc(p)>Tw,
M r = E r ( M , I b i n ) \mathcal{M}^r=\mathcal{E}_r(\mathcal{M},I^{bin}) Mr=Er(M,Ibin)

4.2.3 Adaptive-Halftone blending

考虑第 k k k个模块区域 M k M_k Mk,我们输入经过histogram polarization后的图像块 I M k h c I_{M_k}^{hc} IMkhc和一个目标值 M k r = 0 or  1 M_k^r=0\ \text{or} \ 1 Mkr=0 or 1。目标是获得蓝图 I b I^b Ib,其中 I M k b I_{M_k}^b IMkb可以被解码为正确的信息,同时保留尽可能多的图像内容。

为了达成这个目标,引入了全新的blending method:Adaptive-Halftone blending(自适应半色调混合)。
具体地,对于每个模块 M k M_k Mk,令 θ k \theta_k θk是一个大小为 u × u u\times u u×u的方形区域,以图像块 I M k h c ( u ≤ a ) I^{hc}_{M_k}(u\leq a) IMkhc(ua)为中心。用 M k r \mathcal{M}_k^r Mkr来填充 I θ k h c I_{\theta_k}^{hc} Iθkhc以生成 I M k b I_{M_k}^b IMkb。通过最小化该模块内的编码距离来优化放行区域大小 u u u u u u对应的该模块的模拟解码值定义为 E k ( I M k b ∣ u ) E_k(I_{M_k}^b|u) Ek(IMkbu)
E k ( I M k b ∣ u ) = 1 a 2 [ ∑ p ∈ θ k L ⋅ M k r + ∑ p ∉ θ k I M k b ( p ) ] = 1 a 2 [ u 2 ⋅ L ⋅ M k r + ∑ p ∉ θ k I M k b ( p ) ] \begin{align} E_k(I_{M_k}^b|u)&=\frac{1}{a^2}[\sum_{\mathbf{p}\in\theta_k} L\cdot \mathcal{M}_k^r+\sum_{\mathbf{p}\notin\theta_k} I_{M_k}^b(\mathbf{p})] \\ &=\frac{1}{a^2}[u^2\cdot L\cdot\mathcal{M}_k^r+\sum_{\mathbf{p}\notin\theta_k} I_{M_k}^b(\mathbf{p})] \end{align} Ek(IMkbu)=a21[pθkLMkr+p/θkIMkb(p)]=a21[u2LMkr+p/θkIMkb(p)]
特别地,当 u = a u=a u=a时,有 E k ( I M k b ∣ u ) = L ⋅ M k r E_k(I_{M_k}^b|u)=L\cdot\mathcal{M}_k^r Ek(IMkbu)=LMkr。目标是最小化编码距离:
u k = argmin ⁡ v ∣ ∣ E k ( I M k b ∣ u ) − L ⋅ ( η ⋅ M k r + 1 − η 2 ) ∣ ∣ u_k={\underset{v}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-L\cdot(\eta\cdot\mathcal{M}_k^r+\frac{1-\eta}{2})|| uk=vargmin∣∣Ek(IMkbu)L(ηMkr+21η)∣∣
根据 T b \mathcal{T}_b Tb T w \mathcal{T}_w Tw的定义,可以简写上式:
s k = { argmin ⁡ s ∣ ∣ E k ( I M k b ∣ u ) − T b ∣ ∣ if  M k r = 0 , argmin ⁡ s ∣ ∣ E k ( I M k b ∣ u ) − T w ∣ ∣ if  M k r = 1 , s_k=\begin{cases} {\underset{s}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-\mathcal{T}_b|| \qquad & \text{if} \ \mathcal{M}_k^r=0, \\ {\underset{s}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-\mathcal{T}_w|| \qquad & \text{if} \ \mathcal{M}_k^r=1, \\ \end{cases} sk= sargmin∣∣Ek(IMkbu)Tb∣∣sargmin∣∣Ek(IMkbu)Tw∣∣if Mkr=0,if Mkr=1,
为每个模块都填充了合适尺寸的同心方形块后,继续将标记(包括查找器和对齐标记)粘贴到最终的蓝图 I b I^b Ib上。

下图展示了从不同的蓝图生成不同的 I s I^s Is
在这里插入图片描述

此调整涉及当 I h c I^{hc} Ihc有效封装模块信息以保留更多图像内容时缩小块的大小。
相反,当需要更明显的控制信号来确保模块在 I s I^s Is中的可扫描性时,它会扩大块的大小。

4.3 Scannability Enhancing Latent Refinement

生成的 I s I^s Is遵循施加的 M r \mathcal{M}^r Mr的结构约束,但因为仍有大量错误的模块,因此不可扫描。为了解决此问题,可扫描性增强潜在细化(Scannability Enhancing Latent Refinement, SELR)提供了很细致的强化过程来增强扫描鲁棒性。

包括取景器和对其图案的标记对于确定QR码的位置和角度至关重要,从而影响其扫描性。因此,在细化之前将它们的外观整合到 I s I^s Is上,记作 I s ^ \hat{I^s} Is^
在这里插入图片描述

使用VAE将增强图像 I s ^ \hat{I^s} Is^编码为潜在代码 z s z_s zs,将VAE的模型记作 E V \mathcal{E}_V EV。总体目标函数 L L L可以被分为三项之和:标记损失 L m \mathcal{L}_m Lm,编码损失 L c \mathcal{L}_c Lc,协调损失 L h \mathcal{L}_h Lh
L ( z ) = λ 1 L m ( D V ( z ) , I b ) + λ 2 L c ( D V ) ( z ) , I b ) + λ 3 L h ( D V ) ( z ) , I s ) \begin{aligned} \mathcal{L}(z)&=\lambda_1\mathcal{L}_m(\mathcal{D}_V(z),I^b) \\ &+\lambda_2\mathcal{L}_c(\mathcal{D}_V)(z),I^b) \\ &+\lambda_3\mathcal{L}_h(\mathcal{D}_V)(z),I^s) \end{aligned} L(z)=λ1Lm(DV(z),Ib)+λ2Lc(DV)(z),Ib)+λ3Lh(DV)(z),Is)
其中, λ 1 \lambda_1 λ1 λ 3 \lambda_3 λ3用于平衡各项之间的权重。 D V \mathcal{D}_V DV代表VAE编码器的解码器。 z z z是由 z s z_s zs初始化并在不断迭代中通过最小化目标函数来微调的潜变量,控制生成的QR码 Q = D V ( z ) Q=\mathcal{D}_V(z) Q=DV(z)的可扫描性和美观质量。代码损失 L c \mathcal{L}_c Lc是通过Artcoder: an end-to-end method for generating scanning-robust stylized qr codes这篇文章提出的方法计算的,该方法采用SSLayer提取模块值,通过竞争机制计算基于模块的代码损失。

4.3.1 Marker loss

扫描仪根据标记区域中的特定像素比来识别QR码。
引入一个二元掩码 K c c \mathcal{K}_{cc} Kcc,专门用于过滤标记的交叉中心区域,目的是保护基本标记功能免受因美学定制而造成的潜在损害。形式上,标记损失函数 L m \mathcal{L}_m Lm定义如下:
L m ( Q , I b ) = K c c ⋅ ∣ ∣ Q y − I b ∣ ∣ 2 \mathcal{L}_m(Q,I^b)=\mathcal{K}_{cc}\cdot||Q_y-I^b||^2 Lm(Q,Ib)=Kcc∣∣QyIb2
其中 Q y Q_y Qy表示二维码 Q Q Q的亮度通道。
这个公式确保了标记的完整性,同时允许对QR码的非标记区域进行美观修改。重点是优化视觉质量,同时保持原始扫描能力。

这个损失函数计算了 L 2 L^2 L2-Wasserstein距离,记为 W 2 W_2 W2,计算 Q Q Q的特征图和 I s I^s Is的距离。
特别地,

4.3.2 Harmonizing Loss

解决了与标记和代码相关的可扫描性问题后,要进一步确保通过协调损失来保留美学品质。特征图 f i f_i fi通过预训练的VGG-19网络的 i ∈ [ 1 , 6 , 11 , 18 , 25 ] i\in[1,6,11,18,25] i[1,6,11,18,25]层提取而出,损失可以被计算为:
L h = ∑ i W 2 ( f i ( Q ) , f i ( I s ) ) \mathcal{L}_h=\sum_i W_2(f_i(Q),f_i(I^s)) Lh=iW2(fi(Q),fi(Is))
P 1 , P 2 P_1,P_2 P1,P2分别为 R n \mathbb{R}^n Rn上具有 μ 1 , μ 2 ∈ R n \mu_1,\mu_2\in\mathbb{R}^n μ1,μ2Rn的平均值、非奇异协方差矩阵 C 1 , C 2 ∈ R n × n C_1,C_2\in\mathbb{R}^{n\times n} C1,C2Rn×n L 2 L^2 L2-Wasserstein距离 W 2 ( P 1 , P 2 ) W_2(P_1,P_2) W2(P1,P2)可以被定义为:
A = trace ( C 1 + C 2 − 2 ( C 1 C 2 C 1 ) 1 2 ) A=\text{trace}(C_1+C_2-2(\sqrt{C_1}C_2\sqrt{C_1})^{\frac{1}{2}}) A=trace(C1+C22(C1 C2C1 )21)
W 2 ( P 1 , P 2 ) = ∣ ∣ μ 1 − μ 2 ∣ ∣ 2 + A W_2(P_1,P_2)=\sqrt{||\mu_1-\mu_2||^2+A} W2(P1,P2)=∣∣μ1μ22+A
协调损失的集成确保优化的输出不仅满足功能要求,而且保留美学品质。本质上,SELR模块利用标记、编码、协调损失来优化生成的QR码的可扫描性和美观性。

相关文章:

【论文笔记】Text2QR

论文&#xff1a;Text2QR: Harmonizing Aesthetic Customization and Scanning Robustness for Text-Guided QR Code Generation Abstract 二维码通常包含很多信息但看起来并不美观。stable diffusion的出现让平衡扫描鲁棒性和美观变为可能。 为了保证美观二维码的稳定生成&a…...

【ReadPapers】A Survey of Large Language Models

LLM-Survey的llm能力和评估部分内容学习笔记——思维导图 思维导图 参考资料 A Survey of Large Language Models论文的github仓库...

站群CMS系统

站群CMS系统是一种用于批量建立和管理网站的内容管理系统&#xff0c;它能够帮助用户快速创建大量的网站&#xff0c;并实现对这些网站的集中管理。以下是三个在使用广泛的站群CMS系统&#xff0c;它们各具特色&#xff0c;可以满足不同用户的需求。 1. Z-BlogPHP Z-BlogPHP是…...

landsat8数据产品说明

1、下载数据用户手册 手册下载网址&#xff0c;搜索landsat science关键词&#xff0c;并点击到官网下载。 2、用户手册目录 3、landsat8数据产品说明 具体说明在手册的第四章&#xff0c;4.1.4数据产品章节&#xff0c;具体描述如下&#xff1a; 英文意思&#xff1a; L8 的…...

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收&#xff0c;主要注重基本底层原理讲解&#xff0c;进一步实战待后续文章 垃圾回收&#xff0c;无论是Java 还是 Golang&#xff0c;基本的逻辑都是基于 标记-清理 的&#xff0c; 标记是指标记可能需要回收的对象&#xff0c…...

OpenHarmony:全流程讲解如何编写ADC平台驱动以及应用程序

ADC&#xff08;Analog to Digital Converter&#xff09;&#xff0c;即模拟-数字转换器&#xff0c;可将模拟信号转换成对应的数字信号&#xff0c;便于存储与计算等操作。除电源线和地线之外&#xff0c;ADC只需要1根线与被测量的设备进行连接。 一、案例简介 该程序是基于…...

计算机学生求职简历的一些想法

面试真的是一件非常难的事情&#xff0c;因为在短短的半小时到一个小时&#xff0c;来判断一个同学行不行&#xff0c;其实是很不全面的。作为一个求职的同学应该怎么办呢&#xff1f;求职的同学可以提前做一些准备&#xff0c;其中比较重要的要数简历的编写。 简历的作用 简…...

网工内推 | 售前专场,需熟悉云计算技术,上市公司,提成高

01 神州数码 招聘岗位&#xff1a;售前工程师 职责描述&#xff1a; 1.负责所在区域华为IT产品线&#xff08;服务器、存储、云、虚拟化&#xff09;的售前技术支持工作&#xff0c;包括客户交流、方案编写、配置报价、投标支持、测试等&#xff1b; 2.与厂商相关人员建立和保…...

excel匹配替换脱敏身份证等数据

假如excel sheet1中有脱敏的身份证号码和姓名&#xff0c;如&#xff1a; sheet2中有未脱敏的数据数据 做法如下&#xff1a; 1、在sheet2的C列用公式 LEFT(A2,6)&REPT("*",8)&RIGHT(A2,4) 做出脱敏数据&#xff0c;用来与sheet1的脱敏数据匹配 2、在sheet…...

[技术笔记] Flash选型之基础知识芯片分类

1、按照接口分类 分为 Serial串口Flash 和 Parallel并口Flash&#xff1b; 市场大量使用Serial Flash&#xff1b;价格便宜&#xff1b;已满足系统对数据读写速度的要求&#xff1b; Serial Flash已经可以代表 NOR Flash&#xff1b; 小知识&#xff1a; 1&#xff09;在…...

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具&#xff0c;通过安装适用的插件&#xff0c;可以扩展Jenkins的功能&#xff0c;并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…...

C++初学者:如何优雅地写程序

我喜欢C语言的功能强大&#xff0c;简洁&#xff0c;我也喜欢C#的语法简单&#xff0c;清晰&#xff0c;写起来又方便好用。 一、为什么不用C语言写程序。 C语言用来做题目&#xff0c;考试研究是很方便的&#xff0c;但是用来写程序做软件&#xff0c;你就会发现&#xff0c…...

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树&#xff0c;比如下面这幅图&#xff0c;红色的边就组成了两棵不同的生成树&#xff1a; 对于加权图&#xff0c;每条边都有权重&#xff08;用最小生成树算法的现实场景中&#xff0c;图的边权重…...

LeetCode刷题记(一):1~30题

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…...

芒果YOLOv5改进89:卷积SPConv篇,即插即用,去除特征图中的冗余,FLOPs 和参数急剧下降,提升小目标检测

芒果专栏 基于 SPConv 的改进结构,改进源码教程 | 详情如下🥇 👉1. SPConv 结构、👉2. CfSPConv 结构 💡本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv5改进专栏完整目录链接:…...

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…...

【Leetcode】top 100 二分查找

35 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 基础写法&#xff01;&#xff01;&#xff01;牢记…...

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…...

HarmonyOS 应用开发之FA模型与Stage模型应用组件

应用配置文件概述&#xff08;FA模型&#xff09; 每个应用项目必须在项目的代码目录下加入配置文件&#xff0c;这些配置文件会向编译工具、操作系统和应用市场提供描述应用的基本信息。 应用配置文件需申明以下内容&#xff1a; 应用的软件Bundle名称&#xff0c;应用的开发…...

6个黑科技网站,永久免费

1、http://mfsc123.com https://www.mfsc123.com 一个非常赞的免费商用素材导航网站。 收集了各种免费、免版权的图片、插画、视频、视频模板、音乐、音效、字体、图标网站。 再也不用担心版权问题&#xff0c;都能免费商用&#xff0c;自媒体作者必备。 而且还在每个网站…...

Linux 内核优化简笔 - 高并发的系统

简介 Linux 服务器在高并发场景下&#xff0c;默认的内核参数无法利用现有硬件&#xff0c;造成软件崩溃、卡顿、性能瓶颈。 当然&#xff0c;修改参数只是让Linux更好软件的去利用已有的硬件资源&#xff0c;如果硬件资源不够也无法解决问题的。而且当硬件资源不足的时候&am…...

整型之韵,数之舞:大小端与浮点数的内存之旅

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱’博客 所属栏目&#xff1a;人工智能 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 1.0 整形提升 我们先来看看代码。 int main() {char a 3;char b 127;char …...

变量作用域

变量作用域 标识符的作用域是定义为其声明在程序里的可应用范围, 或者即是我们所说的变量可见性。换句话说,就好像在问你自己,你可以在程序里的哪些部分去访问一个制定的标识符。变量可以是局部域或者全局域。 全局变量与局部变量 定义在函数内的变量有局部作用域,在一个…...

数据结构:链表的双指针技巧

文章目录 一、链表相交问题二、单链表判环问题三、回文链表四、重排链表结点 初学双指针的同学&#xff0c;请先弄懂删除链表的倒数第 N 个结点。 并且在学习这一节时&#xff0c;不要将思维固化&#xff0c;认为只能这样做&#xff0c;这里的做法只是技巧。 一、链表相交问题 …...

用WHERE命令可以在命令行搜索文件

文章目录 用WHERE命令可以在命令行搜索文件概述笔记没用的小程序END 用WHERE命令可以在命令行搜索文件 概述 想确认PATH变量中是否存在某个指定的程序(具体是在PATH环境变量中给出的哪个路径底下?). 开始不知道windows有where这个命令, 还自己花了2个小时写了一个小程序. 后…...

持续交付/持续部署流水线介绍(CD)

目录 一、概述 二、典型操作流程 2.1 CI/CD典型操作流 2.2 CI/CD操作流程说明 2.3 总结 三、基于GitHubDocker的持续交付/持续部署流水线&#xff08;公有云&#xff09; 3.1 基于GitHubDocker的持续交付/持续部署操作流程示意图 3.2 GitHubDocker持续交付/持续部署流水…...

第四百三十八回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容&#xff0c;本章回中将介绍如何在页面上显示蒙板层.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…...

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…...

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming&#xff0c;即面向切面编程。 想象你是汉堡店的厨师&#xff0c;每一份汉堡都有好几层&#xff0c;这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡&#xff0c;如果按照传统的方…...

Android 使用LeakCanary检测内存泄漏,分析原因

内存泄漏是指无用对象&#xff08;不再使用的对象&#xff09;持续占有内存或无用对象的内存得不到及时释放&#xff0c;从而造成内存空间的浪费称为内存泄漏。 平时我们在使用app时&#xff0c;少量的内存泄漏我们是发现不了的&#xff0c;但是当内存泄漏达到一定数量时&…...