ArtCoder: An End-to-end Method for Generating Scanning-robust Stylized QR Codes-CVPR2021
二维码风格化论文阅读+风格迁移讲解
论文:
https://arxiv.org/abs/2011.07815
代码:
https://github.com/SwordHolderSH/ArtCoder
二维码的原理:
二维码原理
QR码基本结构
QR码是一种基于Reed-Solomon(RS)编码规则的矩阵符号,由黑白方块模块组成,分为功能图案和编码区域。
-
功能图案:这些图案不用于编码数据,包括:
- 定位图案(Finder Patterns):三个相同的定位图案分别位于QR码的左上角、右上角和左下角,用于定位和确定QR码的方向。
- 分隔图案(Separator Patterns):用于分隔定位图案。
- 定时图案(Timing Patterns):用于确定QR码的大小。
- 对齐图案(Alignment Patterns):这些是可选的,用于微调QR码的对齐。可以被视为三个叠加的同心正方形,并且由5×5黑色模块、3×3白色模块和单个中央黑色模块构成。对齐图案的数量取决于QR码的版本。
-
编码区域:QR码的数据编码部分,分为:
- 信息模块(Message Modules):实际数据存储的地方。
- 填充模块(Padding Modules):用于填充QR码中未使用的空间。
- 奇偶校验模块(Parity Modules):用于错误校正,是RS编码的一部分。
-
RS编码块:一系列模块组成的块,使用Reed-Solomon编码对消息字符串进行编码,以进行错误检测和校正。
-
QR码的版本:QR码有40种不同大小,称为版本,遵循ISO标准。每个版本号对应QR码矩阵的特定大小:
- 版本1:21×21模块。
- 版本2:25×25模块。.
- …以此类推,每边增加4个模块,直到:
- 版本40:177×177模块。
论文
CONTRIBUTION
• 提出了一种新颖的端到端方法ArtCoder 来生成个性化、多样化且耐扫描的风格化QR 码。
• 提出采样模拟层(Sampling-Simulation layer)来提取QR 码的消息,并引入基于模块的代码丢失以保持风格化QR 码的扫描鲁棒性。
• 提出了一种竞争机制,以保证风格化二维码在扫描鲁棒性和视觉效果上的高质量。
• 风格化的二维码中的所有模块都更加隐形,并且与整个图像融合得很好。
RELATED WORKS
风格迁移
- 参数化
参数方法迭代更新初始图像,直到满足所需的全局统计数据。Gatys等人利用 CNN 和 Gram 矩阵的强大功能,开创了参数化 NST 方法。 - 非参数化
非参数方法使用简单的补丁表示,并通过最近邻搜索找到最相似的补丁。 非参数 NST 方法由 Li 等人首创。 他们使用马尔可夫随机场(MRF)重新表述风格迁移,即从风格图像中搜索神经补丁以匹配内容图像的结构。
在最初的NST模型中,损失函数用于指导图像风格迁移的过程,确保生成的图像既符合内容图像的内容也表示风格图像的风格。损失函数由两部分组成:内容损失(Content Loss)和风格损失(Style Loss)。下面是损失函数的具体公式以及各符号的含义:
-
内容损失(Content Loss):
L c o n t e n t ( p , x , l ) = 1 2 ∑ i , j ( F i j l − P i j l ) 2 L_{content}({p}, \mathbf{x}, l) = \frac{1}{2} \sum_{i,j} (F^{l}_{ij} - P^{l}_{ij})^2 Lcontent(p,x,l)=21i,j∑(Fijl−Pijl)2- p p p:原始的内容图像。
- x x x:生成的图像,通过迭代优化以匹配内容和风格。
- l l l:CNN中的特定层级。
- F i j L F_{ij}^L FijL:在层 l l l中,原始内容图像的特征表示(即滤波器在位置j的激活)。
- P i j L P_{ij}^L PijL:在层 l l l中,生成图像的特征表示。
内容损失测量的是生成图像在特定层级上的特征表示与内容图像特征表示之间的差异。
-
风格损失(Style Loss):
E l = 1 4 N l 2 M l 2 ∑ i , j ( G i j l − A i j l ) 2 E_l = \frac{1}{4N^2_l M^2_l} \sum_{i,j} (G^{l}_{ij} - A^{l}_{ij})^2 El=4Nl2Ml21i,j∑(Gijl−Aijl)2- A l A^l Al:原始风格图像在层l的Gram矩阵。
- G l G^l Gl:生成图像在层l的Gram矩阵。
- N l N^l Nl:层l中滤波器的数量。
- M l M^l Ml:层l中特征图的大小。
Gram矩阵的元素( G^{l}_{ij} )是滤波器响应之间的相关性度量,计算公式为:
G i j l = ∑ k F i k l F j k l G^{l}_{ij} = \sum_{k} F^{l}_{ik} F^{l}_{jk} Gijl=k∑FiklFjkl风格损失测量的是生成图像在特定层级上的风格表示(即Gram矩阵)与风格图像的风格表示之间的差异。
-
总损失(Total Loss):
L t o t a l ( p , a , x ) = α L c o n t e n t ( p , x ) + β ∑ l = 0 L w l E l L_{total}(\mathbf{p}, \mathbf{a}, \mathbf{x}) = \alpha L_{content}(\mathbf{p}, \mathbf{x}) + \beta \sum_{l=0}^{L} w_l E_l Ltotal(p,a,x)=αLcontent(p,x)+βl=0∑LwlEl- α α α:内容损失的权重。
- β β β:风格损失的权重。
- w w w:不同层级风格损失的权重。
- l l l:参与计算的CNN层级总数。
总损失是内容损失和风格损失的加权和,其中风格损失是所有层级风格损失的加权求和。通过最小化总损失,可以在保持内容的同时,使生成图像的风格与目标风格图像相匹配。
在风格迁移的过程中,通过梯度下降等优化算法调整生成图像x的像素值,从而最小化损失函数 L t o t a l L_{total} Ltotal。通过这种方式,生成的图像既保留了内容图像的视觉内容,又复现了风格图像的风格特征。
二维码的艺术化
-
模块变形Module-deformation
首先选择一个方形模块作为变形的基础,然后对这个方形模块进行一定的变形操作,比如缩小、拉伸、旋转等,使其形状发生改变。接着,在变形后的区域中插入另一幅图像,使其与原始图像融合在一起。通过这种方法,可以实现对图像的局部区域进行精细的处理,同时保持整体图像的连贯性和完整性。(代表工作:Visualead和 Halftone QR codes) -
模块重组Module-reshuffle
基于模块重组的方法受到了开创性工作Qart代码的启发,该工作提出可以利用Gauss-Jordan Elimination Proce-dure来重新排列模块的位置,以满足混合图像的特征。(GJEP可以用来重新排列QR码的可控模块,而不会影响其扫描鲁棒性。这意味着通过这种方法重新排列后的QR码仍然可以被标准扫描器正确读取。)随后,为了提高QR码的视觉质量,后续工作设计了不同的策略来重新排列模块,利用不同的图像特征,例如感兴趣区域、中央显著性、全局灰度值等。在本文中,作者使用重排列后的QR码作为代码目标 M -
NST-based method
Xu等人首先引入NST技术来生成风格化QR码,并提出SEE(Stylized aEsthEtic)QR码。(即首先通过NST模型对QR码进行风格化,然后通过后处理算法修复由风格化引起的所有错误模块) 他们的方法解决了风格迁移会损害扫描鲁棒性的问题,但是由风格化引起的错误模块通过后处理算法进行修复,这会产生无法与整个图像很好融合的干扰模块。(问题所在)
METHODS
整体架构
在视觉效果上,Q结合了 I s I_s Is的风格特征和 I c I_c Ic的语义内容; 就功能而言,任何标准 QR 码阅读器都可以扫描 Q 以显示消息 M。
Q = Ψ ( I s , I c , M ) Q=Ψ(Is, Ic,M) Q=Ψ(Is,Ic,M)
L t o t a l = λ 1 L s t y l e ( I s , Q ) + λ 2 L c o n t e n t ( I c , Q ) + λ 3 L c o d e ( M , Q ) L_{total} =λ_1L_{style}(Is, Q) + λ_2L_{content}(Ic, Q)+ λ_3L_{code}(M, Q) Ltotal=λ1Lstyle(Is,Q)+λ2Lcontent(Ic,Q)+λ3Lcode(M,Q)
-
L t o t a l , L c o n t e n t , L s t y l e , L c o d e L_{total},L_{content},L_{style},L_{code} Ltotal,Lcontent,Lstyle,Lcode:总损失,内容损失,风格损失,二维码损失
-
I s I_{s} Is:目标风格图像
-
I c I_{c} Ic:内容目标图像
-
M M M:生成的消息message
-
Q Q Q:风格化后的二维码
特征提取:
- 风格和内容特征:使用预训练的VGG-19神经网络来提取风格目标图像(Is)和内容目标图像(Ic)的特征。VGG-19网络在图像风格迁移领域广泛使用,能够捕捉到图像的层次结构特征。
- 二维码特征:通过提出的采样模拟层(Sampling-Simulation, SS层)来提取QR码的二维码特征。这一步骤模拟了QR码读取器的采样过程,以确保最终生成的美化QR码能够被正确扫描。
优化器迭代与错误处理:
- 在优化器的每次迭代中,虚拟二维码读取器 R Q R R_{QR} RQR 将读风格化后的二维码 Q 来区分所有错误和正确模块并纠正模块 。
- 对于第 k 个模块 M k M_k Mk,如果 M k M_k Mk 错误,我们控制激活映射 K 来激活the k-th sub-code-loss L c o d e M k {L_{code}^{M_k}} LcodeMk
- 对于第 k 个模块 M k M_k Mk,如果 M k M_k Mk 正确,那么激活图K会停用第k个子代码损失 L c o d e M k {L_{code}^{M_k}} LcodeM