A patch centered at pixel x in frame t. The positions of n similar patches are (xi , ti). An n dimensional non-local feature vector :
输入:原图, n维non-local特征向量
输出:残差图
网络:4层Conv+ReLU,DnCNN
数据集:YouTube视频,共16950个片段,分辨率1280x720,包含64个类别,如汽车、工厂等
Loss函数:残差图像和噪声图像之间的MSE均方误差(L2 loss)
方法:non-local块搜索模块,计算出n维non-local特征向量。将原图和特征向量输入给CNN。4个1x1卷积层从特征向量计算出像素级特征,传给15个3x3卷积层,输出残差图,用原图减去残差图得到去噪图像。
创新:使用残差学习来降噪;结合残差学习和BN可以加快收敛速度;对特定噪声,效果上达到SOTA水平。
代码
pyTorch
OpenCL >= 1.2 CUDA (for training) —— non local块搜索部分用到
The patch search is implemented in OpenCL. To run the code, a valid OpenCL driver is required.
For example, on Ubuntu and NVidia GPU, you must install nvidia-opencl-dev
pip install pyopencl==2018.2.4
https://github.com/axeldavy/vnlnet
数据集
https://media.xiph.org/video/derf/
CUDA和OpenCL的关系都和DirectX与OpenGL的关系很相像。如同DirectX和OpenGL一样,CUDA和OpenCL中,前者是配备完整工具包、针对单一供应商(NVIDIA)的成熟的开发平台,后者是一个开放的标准。
虽然两者抱着相同的目标:通用并行计算。但是CUDA仅仅能够在NVIDIA的GPU硬件上运行,而OpenCL的目标是面向任何一种Massively Parallel Processor,期望能够对不同种类的硬件给出一个相同的编程模型。
什么是OpenCL?
是由苹果(Apple)公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。
什么是CUDA?
CUDA是一个基于Nvidia GPU的并行计算的架构。
https://www.zhihu.com/question/19780484