重新审视全局统计聚合以改进图像复原|旷视

论文标题: Revisiting Global Statistics Aggregation for Improving Image Restoration 

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

作者单位:旷视科技

github地址:https://github.com/megvii-research/TLC

沿整个空间维度聚合的全局空间统计数据广泛用于高性能图像恢复器。例如,HINet 采用的实例归一化 (IN) 中的均值、方差,以及应用于 MPRNet 的 Squeeze and Excitation (SE) 中的全局平均池化(即均值)。本文首先表明,在训练/测试阶段分别在基于补丁/基于整个图像的特征上聚合的统计数据可能分布非常不同,并导致图像恢复器的性能下降。它已被以前的作品广泛忽视。为了解决这个问题,我们提出了一种简单的方法,即测试时间本地统计转换器(TLSC),它仅在测试时间将统计聚合操作的区域从全局替换为本地。无需重新训练或微调,我们的方法显着提高了图像恢复器的性能。特别是,通过将带有 TLSC 的 SE 扩展到最先进的模型,MPRNet 在 GoPro 数据集上的 PSNR 提高了 0.65 dB,达到了 33.31 dB,超过了之前的最佳结果 0.6 dB。此外,我们简单地将 TLSC 应用于高级视觉任务,即语义分割,并取得了有竞争力的结果。进行了大量的数量和质量实验,以证明 TLSC 解决了边际成本问题,同时获得了显着收益。

旷视提出TLSC:重新审视全局统计聚合以改进图像恢复

训练和测试的统计分布:

应用场景:

1、Extending TLC to SE Block

2、Extending TLC to IN

3、Extending to transposed self-attention

NTIRE冠军方案 | NAFSSR

论文:https://arxiv.org/pdf/2204.08714v2.pdf

代码:https://github.com/megvii-research/NAFNet

近日,New Trends in Image Restoration and Enhancement (以下简称:NTIRE) 比赛结果揭晓,旷视研究院荣获双目图像超分辨率赛道的冠军。NTIRE 即“图像恢复与增强的新趋势”,是近年来计算机图像恢复领域最具影响力的一场全球性赛事,由苏黎世联邦理工学院计算机视觉实验室(Computer Vision Laboratory, ETH Zurich)主办,每年都会吸引大量的关注者和参赛者。

双目图像超分辨率挑战赛 (Stereo Image Super-Resolution Challenge)作为 NTIRE 研讨会的一部分与 CVPR 2022 一起举办,本次大赛的目的是从低分辨率(LR)双目图像重建高分辨率(HR)双目图像。

赛题简介

图像恢复(Image Restoration) 任务,旨在将降质的图像(如带噪声的,模糊的,低分辨率的…)恢复成清晰的图像。而本次的赛题,双目超分辨率任务,目标是用低分辨率的一对左右视角的立体图像来重建高分辨率的立体图像。与单张图像的超分辨率任务不同,双目超分辨率可以利用场景的左右两个视角提供的互补信息,从而提升图像恢复质量。

旷视夺冠算法介绍

对于双目超分辨率任务,最直接的想法是将左右视角的两张图片独立的恢复成清晰图像,互不影响。而我们的工作,Nonlinear Activation Free Network for Image Restoration [2] (以下简称:NAFNet)在单张图像恢复领域提供了一个简单且强有力的基线。其效果如下图所示:

0ec55234-029b-42ff-b2f4-86d6a3d69186.gif

图1. NAFNet 的降噪/去模糊效果
受此启发,我们直接利用 NAFNet 进行单张图像的超分辨率重建。虽然已经能取得不错的性能,但是这样的做法忽略了双目任务的特殊性:没有充分利用两个视角提供的互补信息。为此,我们在使用 NAFNet 分别提取左右两个视角的单图像特征之外,引入了立体交叉注意力模块(Stereo Cross Attention Module, 以下简称: SCAM)来融合左右视角的图像特征。我们称该方法为 NAFSSR: Stereo Image Super-Resolution Using NAFNet (以下简称:NAFSSR),其总体结构如下图所示:

image.png
图2. NAFSSR 总体结构
其中 NAFBlock 直接采用了 NAFNet 的模块,而 SCAM 细节如下图所示:

image.png

图3. SCAM

它用于融合 NAFNet 提取到的左右视图特征。

在模型设计之外,我们发现训练/测试时的统计值分布不一致问题(对于该问题,可以参考我们的另外一项工作,TLSC [3])在双目超分辨率任务中依然存在,会降低图像恢复的质量,所以我们采用了 TLSC 以缓解该不一致问题。

结合模型设计与训练/测试时的策略,我们在 Flicker1024 测试集上的性能如下图所示:

image.png
图4. NAFSSR 的在客观指标上和现有先进方法的对比
可视化结果如下图所示:
image.png

更多可视化结果,方法细节,可以参考我们的论文:

[1] NAFSSR: Stereo Image Super-Resolution Using NAFNet

[2] Simple Baselines for Image Restoration

[3] Revisiting Global Statistics Aggregation for Improving Image Restoration

来源:旷视研究院
作者:旷视研究院

BERT-Pre-training of Deep Bidirectional Transformers for Language Understanding

Transformer模型是目前机器翻译等NLP问题最好的解决办法,比RNN有大幅提高。Bidirectional Encoder Representations from Transformers (BERT) 是预训练Transformer最常用的方法,可以大幅提升Transformer的表现。

bert主要使用两个任务做训练:

1、预测被遮挡的单词

2、判断两句话是否相邻

任务一:

·𝐞: one-hot vector of the masked word “cat”.
• 𝐩: output probability distribution at the masked position.
• Loss = CrossEntropy(𝐞, 𝐩) .
• Performing one gradient descent to update the model parameters.

Task 2: Predict the Next Sentence

Given the sentence:
“calculus is a branch of math”.
• Is this the next sentence?
“it was developed by newton and leibniz”

Input:两句话之间有sep符号分开,cls表示分类任务
[CLS] “calculus is a branch of math”
[SEP] “it was developed by newton and leibniz”
• [CLS] is a token for classification.
• [SEP] is for separating sentences.

Input:
[CLS] “calculus is a branch of math”
[SEP] “it was developed by newton and leibniz”
• Target: true

Combining the two methods:

• Input:
“[CLS] calculus is a [MASK] of math
[SEP] it [MASK] developed by newton and leibniz”.
• Targets: true, “branch”, “was”.

bert同时使用两种任务结合:


Loss 1 is for binary classification (i.e., predicting the next
sentence.)
• Loss 2 and Loss 3 are for multi-class classification (i.e., predicting
the masked words.)
• Objective function is the sum of the three loss functions.
• Update model parameters by performing one gradient descent

数据集:

BERT的bidirectional如何体现的?

论文研究团队有理由相信,深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。从中可以看出BERT的双向叫深度双向,不同于以往的双向理解,以往的双向是从左到右和从右到左结合,这种虽然看着是双向的,但是两个方向的loss计算相互独立,所以其实还是单向的,只不过简单融合了一下,而bert的双向是要同时看上下文语境的,所有不同。

为了训练一个深度双向表示(deep bidirectional representation),研究团队采用了一种简单的方法,即随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token,(我理解这种情况下,模型如果想预测出这个masked的词,就必须结合上下文来预测,所以就达到了双向目的,有点类似于我们小学时候做的完形填空题目,你要填写对这个词,就必须结合上下文,BERT就是这个思路训练机器的,看来利用小学生的教学方式,有助于训练机器)。论文将这个过程称为“Masked Language Model”(MLM)。

Masked双向语言模型这么做:随机选择语料中15%的单词,把它抠掉,也就是用[Mask]掩码代替原始单词,然后要求模型去正确预测被抠掉的单词。但是这里有个问题:训练过程大量看到[mask]标记,但是真正后面用的时候是不会有这个标记的,这会引导模型认为输出是针对[mask]这个标记的,但是实际使用又见不到这个标记,这自然会有问题。为了避免这个问题,Bert改造了一下,15%的被上天选中要执行[mask]替身这项光荣任务的单词中,只有80%真正被替换成[mask]标记,10%被狸猫换太子随机替换成另外一个单词,10%情况这个单词还待在原地不做改动。这就是Masked双向语音模型的具体做法。

例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。然后,执行以下过程:

数据生成器将执行以下操作,而不是始终用[MASK]替换所选单词:

80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]
10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple
10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。


Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。

使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。

Transformer–Attention Is All You Need

transformerr特点:

·是一个encoder-decoder模型

·非RNN模型

·完全基于全连接和注意力

·性能远超RNN(大数据集)

回忆seq-seq模型:

如何求c:

如何从RNN到transformer:自注意力层

在self-attention中,每个单词有3个不同的向量,它们分别是Query向量( Q ),Key向量( K )和Value向量( V ),长度均是64。它们是通过3个不同的权值矩阵由嵌入向量 X 乘以三个不同的权值矩阵 WQ , WK , WV 得到,其中三个矩阵的尺寸也是相同的。均是 512×64 。

总结为如下图所示的矩阵形式:

搭建transfomer:多头自注意力层

上面给出的是一个自注意力层,我们使用N个相同的层,并行,不同注意力层不共享参数。将多头的输出进行堆叠作为多头注意力层的输出。

Stacked Self-Attention Layers

一个encoder block:

最终 堆叠6个:作为transfomer encoder:

decoder部分:

encoder block:

整体网络:

神经网络结构搜索 (3/3): 可微方法 Differentiable Neural Architecture Search

目前大多数NAS方法都是基于Differentiable Neural Architecture Search


– Liu, Simonyan, & Yang. DARTS: Differentiable Architecture Search. In ICLR, 2019. DARTS 定义的目标函数是神经网络超参数的可微函数。可以直接进行训练。

– Wu et al. FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search. In CVPR, 2019.可以认为是darts的一个特例。

基本思想:

用户需要事先定义一些候选模块:每个候选模快不同

暴力枚举不显示,使用super-net:

super – net:

每一层都由九个候选模块并联而成。

输出加权平均:权重ai也是可训练的:

训练:

上面是以最好的测试效果作为目标,但有时也要考虑计算量(部署到移动设备):

如何在NAS中考虑计算量:

神经网络结构搜索 Neural Architecture Search(2)RNN+RL


论文: Zoph & Le. Neural architecture search with reinforcement learning. In ICLR, 2017.

使用RNN来生成神经网络结构,然后使用RL强化学习来训练RNN,目前该方法已经过时了

第一步预测某一层卷积核数量:

第二步:

将第一步p的变成one-hot向量:a1,然后通过一个嵌入层变成x1作为第二步的输入,输出filter的大小。

第三步:预测步长

至此,第一个卷积的超参数就获得了。

因为目标函数不可微,所以只能使用强化学习来训练rnn:

神经网络结构搜索 Neural Architecture Search(1)基本概念

神经网络结构搜索 (Neural Architecture Search) 的基础知识,包括超参数 (Hyper-parameters)、搜索空间 (Search Space)、随机搜索 (Random Search) 等概念。

神经网络中有很多参数:

• Parameters :比如权重
• Hyper-parameter:搭建神经网络需要自己手动设置的一些参数(优化算法、epoch、学习率,网络结构等等)

如何自动调整超参数是一个很重要的方向。

如何调整网络结构超参数:

什么是NAS?找到最优的网络结构使得结果最好。(也有一些附加条件:比如计算量最小、网络模型最小、运行速度等等)

我们不可能遍历所有的网络 超参数取值范围,因此需要一个搜索空间search space:搜索空间指的是所有可能的 网络结构。

NAS的输出:输出一个网络结构.

如何选取超参数?

1、随机搜索

从搜索空间随机选择一组超参数,然后使用这组超参数去训练一个CNN模型,一直到模型收敛,最后用测试集做预测。

重复上述过程:。。。。。

缺点:1、每次搜索的代价昂贵 2、搜索空间太大了

小样本学习之—Pretraining+Fine Tuning (3)

小样本学习里面有一个非常常见和实用的方法:使用大数据集预训练,小数据集中微调。

参考文献和代码:

1. Chen, Liu, Kira, Wang, & Huang. A Closer Look at Few-shot Classification. In ICLR, 2019. 代码: https://github.com/wyharveychen/Close…

2. Dhillon, Chaudhari, Ravichandran, & Soatto. A baseline for few-shot image classification. In ICLR, 2020.

3. Chen, Wang, Liu, Xu, & Darrell. A New Meta-Baseline for Few-Shot Learning. arXiv, 2020. 代码:https://github.com/cyvius96/few-shot-…

小样本学习旨在通过有限标记数据学习识别新类别,可以将小样本学习算法分为三大类:基于初始化的方法、基于度量学习的方法和基于数据增强的方法。

基于初始化的方法:学习微调,旨在学习一个好的模型初始化策略,使得能够通过少量标记数据和有限的梯度更新轮次即可完成对新类别的分类,或者学习一个优化器。

基于距离度量的方法:学习比较,如果一个模型能够计算两张图像的相似度,那么它可能基于标记数据对未知图像进行分类,一般基于余弦相似度、欧式距离、岭回归、图神经网络等计算距离。

基于数据增强的方法:学习增强,旨在通过学习一个数据生成器,通过数据生成器增强新类的样本量。由于基于数据增强的方法往往与零样本方法协同优化,所以本文作者不考虑基于数据增强的方法。

领域自适应:一种旨在缓解源领域和目标领域间领域漂移现象的技术。小样本分类与领域自适应类似,区别在于在领域自适应中,目标域往往拥有大量的可用样本,而小样本学习在新领域中仅有少量可用样本。

大部分的思路:通过一个大数据集进行训练一个神经网络,在做few-shot的时候,我们要用到这个与训练好的 神经网络,我们分别把query和support set送进神经网络,并获得特征向量,就可以比较 query和support set 在空间上的相似度(比如余弦相似度),然后就可以比较了。训练好的网络去掉全连接层。

2、不微调,直接使用预训练的网络进行预测:

3、对query分类:

4、微调:

微调调的是softmax,而不是CNN特征提取网络!也就是微调下面的W和B

1、微调的初始化:让W=M,b=0

如何微调:使用entropy损失来更新w和b参数

小样本学习之–基本概念(1)

来自wangshusen的课件: https://github.com/wangshusen/DeepLearning

小样本学习就是用极少的数据做分类or回归。

如上面的suppoort set 里面有两个类别,右边query图片你认为是set里面的哪个类别?对于人类来说非常简单,对于机器来说能不能像人一样去识别query属于哪一类?

对于小样本学习,不可能按照传统的方法去训练一个分类模型。小样本不能训练出一个神经网络。few-shot learing就是去解决小样本分类问题。

few-shot learing 的训练目标与传统的监督学习目标不同,传统的分类是学会识别训练集合里面的图片 ,并且泛化到测试机,神经网络识别出该图片属于哪个类。而few shot learing是让机器自己学会学习,学习的目的不是让机器学会那个是大象那个是老虎,而是让模型学会学习不同类别的不同之处,给定两张图片,模型知道两个图片是否是同一类别。哪怕模型训练集中没有出现过该类别。

虽然模型没有见过斗牛犬和穿山甲,但能够知道这两个是不是一个东西。

给神经网络一个query和六张图片(support set),现在神经网络依次将query和supportset做对比,判断query和那个更相似。

support set 和 train set 区别:

训练集很大每一类下面有很多图片,support set小,只能在预测的时候提供一些额外信息,用一个大的训练集训练一个神经网络,训练的目的不是让模型识别图片里面的大象老虎,而是学会理解不同类别的异同。

Meta learing:元学习,自己学会学习

传统监督学习 vs few shot learing

主要区别就是:是否训练集中存在测试的类别。query可以是模型没见过的类别。因此会更难。

为了让模型识别没见的东西:需要为模型提供一个参考:support set,计算相似度。

K-way N-shot support set: K-有K个类别,,每个类别有n个样本。

准确度随着 K个类别 数增加而降低。

准确度随着每个类的样本数而增加

小样本学习最基本的想法:

可以用大规模数据集做训练:

数据集:

1、手写数字:

2、图片数据

小样本学习之—-孪生网络(Siamese Networks) (2)

孪生网络(Siamese Networks) 属于二分类,基于相似性的先验知识。

参考论文:

1、Siamese Neural Networks for One-shot Image Recognition

2、FaceNet: A Unified Embedding for Face Recognition and Clustering

简单来说,Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。

训练连体网络的两种方法:

1、每次取一对样本,比较他们的相似度。

Siamese Neural Networks for One-shot Image Recognition

使用一个大的数据集,每一类里面有很多样本。用训练集构造正样本和负样本。正样本告诉神经网络什么是同一类,负样本告诉神经网络不同样本的区别。

1.1 数据集的获取 (正负样本的构造)

从同一类图片随机抽取两张图片,并设置标签1,表示同一类。

从不同类中随机抽取两张图片,设置标签为0,表示不同的类别。

1.2、网络架构

1.3 训练:衡量不同图片的相似度(为什么叫连体网络:共享权值,公用一个CNN框架)

1.4损失:

target 和 sim 的损失,来更新参数。

1.4、测试位置的数据

逐一将support set里面的图片分别和query求相似度,取其最高的那个。

2、每次取三个样本( anchor ,+,-),比较他们的相似度。

FaceNet: A Unified Embedding for Face Recognition and Clustering

2.1数据集处理:

从数据集中随机抽取一张图片,作为锚点anchor,再从该类别中随机去一张正样本 ,从除了该类以外的图片中抽取一个负样本作为sample

2.2训练:共享网络

2.3损失函数:

模板d+越小,d-越大

2.4 测试:选择模型输出距离最小的。

总结: