原创文章,转载、引用请注明出处!
Cross-Scale Internal Graph Neural Network for Image Super-Resolution
Nips 2020
立意
和CS-NL那篇相似,都是利用一张图片中的相似patch做超分。
解决了两个问题:
怎么准确地找到这些相似的patch?
怎么合理地融合这些patch?
Non-local
思想
Non-local在图像重建中用的很多。许多经典的方法如非局部均值和BM3D,将相似的patch聚集起来进行图像去噪。
相似patch聚集的过程可表述为:
其中,Xi
和Yi
是第i个位置(聚集中心)的输入和输出patch;Xj
是第i个位置的相邻特征patch集Si
中包含的第j个邻居;Q(·)
将输入X变换到另一个特征空间;C(·,·)
根据Xj和Xi的相关性得到的权重,越相关权重越大;δi(X)
给前面的和项做归一化。
将patch和权重看作图结构的顶点和边,那么上面的过程可以看作是一个GNN。
The above aggregation can be treated as a GNN if we treat the feature patches and weighted connections as vertices and edges respectively. The non-local neural networks actually model a fully-connected self-similarity graph. They estimate the aggregation weights between the query item Xi and all the spatially nearby patches Xj in a d × d window (or within the whole features). To reduce the memory and computational costs introduced by the above dense connection, some k-nearest neighbor based networks, e.g., GCDN and N3Net, only consider k (k ≪ d2) most similar feature patches for aggregation and treat them as the neighbors in Si for every query Xi. For all the above mentioned non-local methods, the aggregated neighboring patches are all in the same scale of the query and no HR information is incorporated, thus leading to a limited performance improvement for SISR.
一般化图像是否泛用?
论文中给出的图片是比较特殊的一类。实际拍摄图像中往往不会特别多重复的图像块(一栋大楼上都是一模一样的窗户,但拍大楼的图片只是极狭窄的题材)。
真实算法中考虑的图像块非常小,往往只是很小的重复纹理repetitive texture、边edge或角corner,所以Non-local patch复现的性质对于任何一般图片都是成立的。
Zontak and Irani, Internal statistics of a single natural image
CVPR 2011
模型
Graph Construction
这部分的过程如下:
对LR下采样(指向左边的黑色箭头):先使用双三次将输入的LR图像
IL
下采样,倍率为s
,表示为IL↓s
。s的取值所需的上采样的倍率。且文章指出对于上采样,s=2比s=4好。特征提取:用VGG19对
IL
和IL↓s
进行特征提取得到对应特征图。查找相似patch:对于
EL
中要搜索的一个patch,在下采样特征图EL↓s
中以MSE作为metric,搜索到k个相似patch,然后按位置对应回EL(图中红色虚线Vertex Mapping),这样对于一个搜索patch就得到了k个EL中的相似patch。
要搜索的patch和得到的k个相似patch是图的节点,搜索patch和相似patch的差是图的边,逐个patch进行搜索完成,图就构建完毕了。
根据对图片的统计验证,图像的相似patch很多。也就是说Graph Construction这部分如果按照最朴素的想法来做的话,计算量会很大。
设定k和s就是为了保证模型速度。
s:选定在IL下采样s倍的特征图上做搜索,而不是IL本身对应的特征图中去搜索;
k:只选k个相似的patch,减少后面聚合的计算量。
Patch Aggregation
这部分是对前面获得的相似patch信息的应用。本质和一开始列的那个non-local聚合公式是一样的,都是加权,只不过形式复杂一点:这里是对于要搜索patch的对应k个相似patch进行加权,权重就是前面说到的图结构的边,将边值送至网络的输出取对数作为权。
跳转连接
通过跨不同规模的跳转连接,聚合HR功能中的丰富HR信息↑s在网络中直接从中间位置传递到后面位置。这种机制允许HR信息帮助网络生成更详细的输出。
实验
实验设置
骨干网络:为了证明GraphAgg模块的有效性,选择了
EDSR
作为骨干网络,它包含32个ResBlock。所提出的GraphAgg模块在IGNN中只使用一次
,并且插入在第16个ResBlock之后
。图构造:使用VGG19的前三层和固定的预训练参数来嵌入图像IL和IL↓s到EL和EL↓s。
训练集:800 high-quality (2K resolution) images from DIV2K dataset
测试集:Set5, Set14, BSD100, Urban100 and Manga109 in three upscaling factors: ×2, ×3 and ×4.
定量实验
定性试验
window size d 和 neighbor k 的取值
windos size 实验中固定为60 × 60。
其他
感想
看这篇是因为跟CS-NL那篇的思想相似,想做一对儿文章来讲。但实际上看的顺序反了,应该先看这篇。
IGNN这篇对于我来说,最大的好处就是解释清楚了Non-local的前世今生。这一点CS-NL没太解释也没太重视。
思路方面的评价是一样的,Non-local这个思路的有效性之前就说过。这类通过对LR-HR exemplars的挖掘,可以在一定程度上缓解超分任务中ill-posed的问题。
以及还是比较在意效率问题,这点文章没提,估计也是效率方面差,扬长避短了。虽然在Graph Construction那边做了限制,但以图结构的复杂度,还是平方级别的计算量增长。这一点好像避不开,那么后面的优化就需要多做一做了。
结构方面,这一篇做的就不如CS-NL的解释性好了。