论文阅读: Disentangled lmage Colorization via Global Anchors

news2024/10/6 6:04:53

Disentangled lmage Colorization via Global Anchors发表于SIGGRAPH ASIA 2022,是一篇基于深度学习的图像彩色化的工作,简单介绍一下。之前曾分享过一篇彩色化的经典论文:经典论文回顾: Colorization using Optimization。 作者认为图像彩色化是一个多模态的问题,也就是同一个物体可以被着色成多种颜色,只要合理即可。现有基于深度学习的算法存在一个很严重的问题就是颜色不一致,如下的teaser所示, 注意其它几个算法在公交车上以及男士的衣服上的着色效果,可以看出一致性较差。
在这里插入图片描述
之所以容易出现这种颜色不一致的问题,主要的原因就是之前的方法独立的预测每一个像素的颜色,没有考虑像素间的相似性。为此本文将彩色化的问题分为两个阶段,首先预测图像中的锚点(color anchors)的颜色,然后将锚点的颜色传播到图像的其他区域。

一、网络结构

本文的网络如下所示, 网络工作在LAB颜色空间,是一个有监督学习,输入是彩色图像的灰度图(L通道),需要预测图像的颜色(ab通道),最后合成彩色图像(Lab = 输入的L + 预测的ab)。网络分为三个模块:

  • 为了降低复杂度,先使用SpixNet对输入图像进行超像素分割;
  • 使用transformer网络预测超像素的颜色分布,使用聚类的算法提取代表性的超像素作为锚点,保留锚点颜色,mask掉非锚点的超像素;
  • 使用transformer,根据锚点颜色预测其它超像素的颜色,并通过超像素的颜色恢复出图像逐像素的颜色,得到输出的彩色图。
    在这里插入图片描述

二、超像素分割

作者认为图像包含大量像素且像素间存在高度相关性,为了降低计算复杂度以及提升后续的着色一致性,可以先将图像进行超像素分割。本文使用的SpixNet来自于 SpixNet: Yang et al. Superpixel Segmentation With Fully Convolutional Networks, CVPR 2020. 输出为一个Soft association map:
A ∈ R H × W × ∣ N p ∣ \mathbf{A} \in \mathbb{R}^{H \times W \times\left|\mathcal{N}_{p}\right|} ARH×W×Np
即输出每个像素属于周围 N p = 9 \mathcal{N}_{p}=9 Np=9 个超像素的可能性,且 ∑ s ∈ N p   A ( p , s ) = 1 \sum_{\mathrm{s} \in \mathcal{N}_{p}} \mathrm{~A}(\mathrm{p}, \mathrm{s})=1 sNp A(p,s)=1

  • SP-Pooling

基于此,对于每一个超像素 s s s, 可以统计有多少像素对其有贡献(即 A ( p , s ) > 0 A(p,s)>0 A(p,s)>0), 并计算超像素 s s s 中心的特征和位置。这个过程称为SP-Pooling,输入是SpixNet输出的Soft association map A A A 以及 通过CNN 提取到的图像特征 F F F. SP-Pooling 定义为:
v s = ∑ p ∈ P s F ( p ) ⋅ A ( p , s ) ∑ p ∈ P s A ( p , s ) , l s = ∑ p ∈ P s p ⋅ A ( p , s ) ∑ p ∈ P s A ( p , s ) (1) \mathbf{v}_{s}=\frac{\sum_{\mathbf{p} \in \mathcal{P}_{s}} \mathbf{F}(\mathbf{p}) \cdot \mathbf{A}(\mathbf{p}, \mathbf{s})}{\sum_{\mathbf{p} \in \mathcal{P}_{s}} \mathbf{A}(\mathbf{p}, \mathbf{s})}, \quad \mathbf{l}_{s}=\frac{\sum_{\mathbf{p} \in \mathcal{P}_{s}} \mathbf{p} \cdot \mathbf{A}(\mathbf{p}, \mathbf{s})}{\sum_{\mathbf{p} \in \mathcal{P}_{s}} \mathbf{A}(\mathbf{p}, \mathbf{s}) \tag1} vs=pPsA(p,s)pPsF(p)A(p,s),ls=pPsA(p,s)pPspA(p,s)(1)

  • SP-Diffusion

反过来,如果已知每个超像素的中心特征和位置 以及 Soft association map A A A , 也可以恢复出每个像素的特征(比如颜色)和位置,这个过程称为SP-Diffusion, 定义为:
F ~ ( p ) = ∑ s ∈ N p v S ⋅ A ( p , s ) , p ~ ( p ) = ∑ s ∈ N p l s ⋅ A ( p , s ) (2) \tilde{\mathbf{F}}(\mathbf{p})=\sum_{\mathbf{s} \in \mathcal{N}_{p}} \mathbf{v}_{S} \cdot \mathbf{A}(\mathbf{p}, \mathbf{s}), \quad \tilde{\mathbf{p}}(\mathbf{p})=\sum_{\mathbf{s} \in \mathcal{N}_{p}} \mathbf{l}_{s} \cdot \mathbf{A}(\mathbf{p}, \mathbf{s} \tag2) F~(p)=sNpvSA(p,s),p~(p)=sNplsA(p,s)(2)

之后就是预测出每个超像素中心的颜色,然后通过上述公式恢复出图像中其他像素的颜色。

这部分是预先预先训练的,所以一并给出其损失函数:
L a g g r = 1 N ∑ p ∥ C g t ( p ) − C ~ g t ( p ) ∥ 2 + α S ∥ p − p ~ ∥ 2 (3) \mathcal{L}_{aggr}=\frac{1}{N} \sum_{\mathbf{p}}\left\|\mathbf{C}^{g t}(\mathbf{p})-\tilde{\mathbf{C}}^{g t}(\mathbf{p})\right\|_{2}+\frac{\alpha}{S}\|\mathbf{p}-\tilde{\mathbf{p}}\|_{2} \tag3 Laggr=N1pCgt(p)C~gt(p)2+Sαpp~2(3)

其中, C g t \mathbf{C}^{g t} Cgt p \mathbf{p} p 表示graound truth图像每个像素的颜色 和 位置。 C g t ( p ) \mathbf{C}^{g t}(\mathbf{p}) Cgt(p) p ~ \tilde{\mathbf{p}} p~ 表示根据 Soft association map A A A 和 超像素中心的真实颜色和位置恢复出的逐像素的颜色和位置。上述loss主要考虑这两方面的误差,期望获得更准确的超像素分割,完美的重建图像。

三、锚点颜色预测

通过transformer模型 Probabilistic Color Modeler 生成所有超像素可能的颜色的概率分布,输出是:

P s ∈ R H ~ × W ~ × 313 \mathbf{P}_{s} \in \mathbb{R}^{\tilde{H} \times \tilde{W} \times 313} PsRH~×W~×313

即每个超像素最多只有313种可能的颜色(将ab通道量化为313种颜色),这里给出每个超像素属于这313种颜色的概率分布。比如人脸属于黄色,黑色,白色的可能性大一些,而属于绿色,蓝色可能性为0.

接下来对这些超像素进行聚类,将每个簇中尺寸最大的超像素作为该簇的锚点, 然后mask掉所有非锚点的超像素。
P a = P s ⊙ M s (4) \mathbf{P}_{a}=\mathbf{P}_{s} \odot \mathbf{M}_{s}\tag4 Pa=PsMs(4)

接下来通过采样或认为指定的方式采样每一个锚点超像素的颜色 C s a C^a_s Csa。下一步的工作就是根据锚点超像素预测哪些被mask掉的超像素的颜色。

为什么要这么做呢?为什么不是直接在所有的超像素上采样颜色,而只是在部分锚点超像素上采样颜色,再到下一步预测别的超像素的颜色?其中一个主要的原因就是直接在超像素上采样颜色的话很可能造成颜色不一致,也就是说属于同一个object的超像素很可能采样到不同或者差异很大的颜色。

这一部分的损失函数主要度量 Probabilistic Color Modeler 预测的超像素的颜色的好坏:
L d i s t = 1 N ~ ∑ s − P s g t ( s ) log ⁡ P s ( s ) (5) \mathcal{L}_{d i s t}=\frac{1}{\tilde{N}} \sum_{\mathbf{s}}-\mathbf{P}_{s}^{g t}(\mathbf{s}) \log \mathbf{P}_{s}(\mathbf{s})\tag5 Ldist=N~1sPsgt(s)logPs(s)(5)
其中, P s \mathbf{P}_{s} Ps 表示预测的某个超像素的颜色分布(313维的向量), P s g t \mathbf{P}_{s}^{g t} Psgt 表示将 GT经过SpixNet后,每一个超像素的中心的真实颜色转换成one-hot向量的结果。 这里是一个交叉熵损失,主要度量超像素预测的颜色是或合理,比如人脸上的超像素预测黄色、白色、黑色概率大是合理的,但如果预测数来红色概率大,那就不合理了。

四、彩色图像生成

最后一部分通过Color Generator模型生成所有超像素中心的颜色,这也是一个transformer的模型,优点自然是可以考虑超像素间的相似性,将锚点超像素的颜色传播到其他mask掉的超像素。然后通过公式(2)所示的SP-Diffusion操作,反算出图像逐像素的颜色(注意这里输出的是ab通道),然后将输入图像的L通道 + 此处预测出的ab通道,合成一张彩色图像。最后,使用RefineNet对图像进行简单优化得到最终结果。

这一部分损失函数如下所示,需要注意的是,因为彩色化是一个一对多的问题,没有正确答案,因此只是度量感知距离,而非生成结果跟GT图像的视觉差异。详细参见论文。
L color  = 1 N ~ ∑ s − P s g t ( s ) log ⁡ P s ′ ( s ) + β ∑ l ω l ∥ Φ l ( C g t ) − Φ l ( C ) ∥ 1 (6) \mathcal{L}_{\text {color }}=\frac{1}{\tilde{N}} \sum_{s}-\mathbf{P}_{s}^{g t}(\mathbf{s}) \log \mathbf{P}_{s}^{\prime}(\mathbf{s})+\beta \sum_{l} \omega_{l}\left\|\Phi_{l}\left(\mathbf{C}^{g t}\right)-\Phi_{l}(\mathbf{C})\right\|_{1}\tag6 Lcolor =N~1sPsgt(s)logPs(s)+βlωlΦl(Cgt)Φl(C)1(6)

网络是在IMAGENET上训练,每张图像既有灰度图又有彩色图。训练过程中,先训练SpixNet,然后固定之,端到端训练网络中另外两个model。

五、实验结果

定性分析:本文结果好很多,但细节仍有待改进。
在这里插入图片描述
定量分析:只需关注FID,Colorfulness两个指标,这是度量感知距离的,其余指标不太具有参考性。
在这里插入图片描述

六、简单总结

  • 本文将彩色化问题分解为两个阶段:代表性锚点超像素颜色预测 和 图像其他超像素颜色预测,实现了较好的一致性。
  • 缺点是锚点数量固定,使得object较多的图像比如毕业照或人群图像,彩色化结果颜色会比较单调。

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

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

相关文章

【数据库】索引

MySQL索引 1、B树索引 是InnoDB引擎默认的索引 B树结构 B树是平衡树,即所有叶子节点都在同一层的多叉树 每个节点中key和指针交替排列,两个key之间的指针指向的是大于等于左边key且小于等于右边key的节点 叶子节点顺次连接,所以沿着B树的叶…

ADAU1860调试心得(5)ADC-DAC直通程序

硬件、驱动全部都搞好了,我觉得调试记录的话,就从最简单的开始,先做一个直通的例程。先把这个板子弄出声来,会用sigmastudio,会做ADAU开发的兄弟们应该很熟悉,同样的配方,同样的味道&#xff0c…

Nginx--单向链表分析

1.基本数据结构 1.1结点 struct ngx_list_part_s {void *elts;ngx_uint_t nelts;ngx_list_part_t *next; };结构成员分析 void* elts :数组元素指针 ngx_uint_t :数组里面的元素数量 ngx_list_part_t*…

英文Assignment写作引用格式怎么分析?

英文Assignment写作中我们常常使用不同作家和研究员的观点,论证来支持自己的想法。引用他们原文的时候我们必须使用具体引用格式。不同学校对引用格式都有不同的要求。事实上,有很多不同的引用格式,大约有超过200种引用格式。例如我们耳熟能详…

一文读懂!异常检测全攻略!从统计方法到机器学习

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41 📘 本文地址:https://showmea…

Day12--优化分类页面的效果

1.提出一个问题,当你点击一级分类的时候,在三级分类中滚动自己的进度条。切换到之后的另一级分类再看看其三级分类时不是再最顶部。 我的操作: 1》在cate.vue中: *************************************************************…

大数据必看:大厂十年架构师职业生涯实战经验总结,《大规模分布式系统架构与设计实战》

前言 这段时间一直在读一本书《大规模分布式系统架构与设计实战》,这是淘宝千峰老师的作品,是从程序员到首席架构师十多年职业生涯的实战经验总结。 这本书其实是围绕着Fourinone在讲分布式,并非分布式理论,所以只适用于想研究F…

【allegro 17.4软件操作保姆级教程五】布线前准备之过孔、差分对、布线集合添加

目录 1.1 过孔添加与设置 1.2 添加差分对 1.3 添加布线集合 1.1 过孔添加与设置 布线换层时需要由过孔贯穿,而软件本身是没有过孔可以直接调用的,所以需要手动添加和设置。一般我们使用的都是通孔,盲孔和埋孔成本高,一般不使用。…

PG::Photography

nmap -Pn -p- -T4 --min-rate1000 192.168.171.76 nmap -Pn -p 22,80,139,445,8000 -sCV 192.168.171.76 查看8000端口的内容 CMS的关键字“Built with Koken” 存在的漏洞需要认证 https://www.exploit-db.com/exploits/48706 在端口枚举时,该靶机有smb服务&am…

MyBatis-Plus之DML编程控制

1. id生成策略控制 前面我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容,我们更想要的是按照数据库表字段进行自增长,在解决这个问题之前,我们先来分析下ID该如何选择: 不同的表应…

vscode一键生成佛祖保佑永无bug

工欲善其事,必先利其器 今天给大家分享一个vscode注释插件-koroFileHeader,可以快速给我们的文件和函数添加注释,快来看看吧 安装 打开vscode拓展,搜索“koroFileHeader”,安装,重新启动一下 使用 快捷键 生…

【配置nacos】使用application.yml配置文件来配置spring-cloud-starter-alibaba-nacos-config

1.首先修改pom.xml文件&#xff0c;引入spring-cloud-starter-alibaba-nacos-config依赖 <!--Nacos配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><…

Java#26(常见算法: 排序算法)

目录 一.冒泡排序 相邻元素之间两两比较,大的放右边,小的放左边 二.选择排序 从0索引开始,拿着每一个索引上的元素和后面的元素依次标胶,小的放在前面,大的放在后面 三.插入排序 假如0到n索引的数据遵循从小到大排序,就可以将0-n看做有序的,则n1到最大索引都是无序的 四…

【日常系列】LeetCode《19·BFS 和 DFS》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 589 &#xff1a;N 叉树的前序遍历 https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 提示&#xff1a; 节点总数在范围 [0, 104]内 0 &l…

最简单的git图解(git rebase)

今天我们来讲解下git rebase命令&#xff0c;以及git rebase命令与git merge命令的区别。 git rebase图解&#xff1a; 假设我们目前有master、demo两个分支&#xff0c;而且demo分支上从master分支上切出来的&#xff1a; 从上图中可以看到&#xff0c;我们从C2提交点切出来了…

图像边缘检测与图像分割常用算法研究分析-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 引言✳️ 一、经典边缘检测算子✳️ 1.1 Roberts 算子与实验验证✳️ 1.2 Sobel 算子原理与实验验证✳️ 1.3 Prewitt 算子与实验验证✳️ 1.4 Log 算子与实验验证✳️ 1.5 Canny 算子与实验验证✳️ 二、图像分割原理及其实验验证✳️ 2.1 基于阈值处理的…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (5)- 自定义功能块(下)

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

logback 集成 logstash

logback 集成 logstash 相关环境参考&#xff1a; Java 输出 JSON 日志 1. 添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.2</version> </depend…

TextRank算法实践

TextRank算法实践 PageRank算法思想 TextRank算法的思想主要源于PageRank算法&#xff0c;PageRank算法主要用于给互联网网页排序&#xff0c;根据网页之间的跳转来构造一个初始权重矩阵&#xff08;转移矩阵&#xff09;&#xff0c;默认每个网页质量都是1 使用一个向量v&…

基于多目标粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…