写在前面
最近去广图借了几本书,啃了一下pytorch相关的书,大概了解了这个框架内部一些常用的API,马上就开始推进摩尔纹的进度,挑了这篇领域内的经典论文来品读并且复现。
本次论文复现的github仓库:https://github.com/ZhengJun-AI/MoirePhotoRestoration-MCNN
摩尔纹
首先要谈一谈摩尔纹是怎么产生的,实际上这是一种图像叠加产生的模式。
条纹图案以不对齐的方式叠加,由于像素排列的错位,会有类似波的干涉现象,就会产生不同形态的摩尔纹,如下图。
最常见的一种摩尔纹发生的情景就是,用手机拍电脑屏幕。传感器接收到的像素排列和显示器上面的像素排列错位,就常常会显示出摩尔纹。当然,会出现摩尔纹的情况不止于此,简而言之,摩尔纹是一个需要被解决的问题,一类特别的图像噪声。
然后它和普通的denoising有啥区别呢?一般来说,图像的细节隐含在高频信息里面,所以噪声往往都是低频信息,然而摩尔纹并不是,它广泛地存在于高频与低频中。而且也不是简单的信号处理能够解决的,因为摩尔纹会导致色彩扭曲,混杂在中高频信息中,难以完整分离出来。
网络结构
知道了摩尔纹怎么回事以后,就可以选用CNN来进行端到端的处理(虽然感觉不太靠谱,先看看网络结构:
左边是进行了多次卷积处理,降低了图片的分辨率,逐层提取更深层次的语义信息(应该是这么说的,虽然我还不太了解,大意应该是说有些摩尔纹在低频,有些在高频,通过这种下采样就能够达到处理不同层级摩尔纹的效果。
然后就到右边,利用反卷积层逐次恢复到原来的图片尺寸。其中pytorch的反卷积函数我还不太懂,中途跑到了知乎去查函数怎么用,要算一下那个padding值的。(知乎:反卷积层函数)
具体的网络参数可以从论文中获得:
需要注意的是每个layer后面都要跟一个ReLU做激活。并且采用的loss function是MSE。这个网络比较大,在我的笔记本上面跑不了,必须要上服务器(还是当初太天真了…
数据集
原论文的作者团队制作了一个数据集,刚开始的时候没找到,就去网上找了AIM2019 LCDMoire2019 dataset,是一个小数据集,里面的训练集只有100张图,每张图都是1024 * 1024,这里给出链接,可以在调试模型的时候用:
带有摩尔纹的图片压缩包、对应的干净图片压缩包、